资源描述
中南林业科技大学
《管理系统中计算机应用》
实践汇报
姓 名:XXX
专 业: 人力资源管理
院 (系): 中南林业科技大学成教学院
实习时间: 4月18日
实习地点: XXXXXXXXXX
指导老师评语: 成绩:
署名:
年 月 日
撰写及批改注意事项
一、填写信息
1、学生填写信息齐全、字迹清楚、日期真实;
2、老师批改后署名和日期应完整;
3、汇报中封面、图、程序要求打印(封面和此页要求正反双面打印,老师评语要求手写)。
二、实习汇报撰写
1、实习汇报撰写认真细致,数据计算正确、误差分析正确、试验结论
分析符合科学规律。
2、实习汇报有绘制图形、图表时,要求
(1)用电脑绘制;
(2)应在汇报中注明图号、表号。
三、批改试验汇报
1、一律采取百分制;
2、批改时应对错分明,错误之处应有文字说明或指犯错误标识;
3、指导老师评语内容:
(1)对此次认识实习完成情况评语;
(2)对此次认识实习汇报评语;
目 录
1. 软件编译理论及实践教程实习内容 4
2. 套接字编程 6
2.1 使用说明书 6
2.2 原理说明书 7
2.3 程序注释 7
3. 连接数据库 19
3.1 使用说明书 19
3.2 原理说明书 20
3.3 程序注释 20
4. 实习总结、体会和收获 26
(正 文 部 分)
1.软件编译理论及实践教程实习内容
一:我电脑磁盘分析:
管理节点1
F
F
C盘(48.8GB)
00061AB827
00061AB827
管理节点2
00061AB866
00061AB866
D盘(73.4GB)
000F48CDDA
000F48CDDA
分区间隙
000F48CE18
000F48CE18
管理节点3
000F48CE19
000F48CE19
E盘(73.4GB)
001876E38D
001876E38D
分区间隙
001876E3CB
001876E3CB
管理节点4
001876E3CC
001876E3CC
F盘(102.4GB)
0025422D6C1
剩下扇区
二. PING.EXE十六进制源码分析
在文件存放空间中,ping.exe十六进制源码分析以下:
2. 套接字编程
2.1.使用说明书:
第一步:先打开服务器端(server.exe).依据提醒输入端口号,需要输入大于5001小于65535值,不然就是用默认5001作为端口值
第二步:创建套接字并选择协议。
第三步:打开用户端(client.exe),依据提醒,将用户端(server.exe)所在服务器IP地址输入进去。
第四步:输入在服务器端(server.exe)中建立端口号值。
第五步:选择和服务器端(server.exe)中一样协议
第六步:收发数据
第七步:关闭连接。
2.2原理说明书
2.3程序注释
/******************************************************\
* client.c - 简单 TCP/UDP 套接字用户程序 windows环境 *
\******************************************************/
#include <winsock2.h>//相关套接字头文件
#include <stdlib.h>
#include <stdio.h>
#include <string.h>
#include <conio.h>
#pragma comment (lib,"ws2_32")//添加‘ws2_32’库
int main(void)
{
unsigned short port = 5001; //端口号
int socket_type = SOCK_STREAM; //缺省使用TCP连接
char Buffer[1280]; //收发缓冲区
unsigned int addr; //IP地址变量
int retval,i; //临时变量
struct sockaddr_in server, from; //套接字地址结构变量
struct hostent *hp; //主机信息结构变量指针
WSADATA wsaData; //windows套接字信息
SOCKET conn_socket; //套接字变量
//先输入用户程序所需要基础信息:服务器地址,端口号,套接字类型
printf("请输入服务器地址:");
scanf("%s", Buffer);
printf("请输入端口号( >5000 ):");
scanf("%d", &i);
if(i < 5000 || i > 65535)
printf("不正确端口号%d,用缺省端口号5001\n", i);
else
port = i;
printf("请输入套接字类型( 1,TCP; 2, UDP ):");
scanf("%d",&i);
if(i == 1)
socket_type = SOCK_STREAM;//设定为SOCK_STREAM
else if(i == 2)
socket_type = SOCK_DGRAM;//设定为SOCK_DGRAM
else
printf("不正确输入%d,使用TCP数据流\n", i);
//在windows环境下,需要先初始化协议栈
if ((retval = WSAStartup(0x202, &wsaData)) != 0) //WSAStartup函数调用,用来初始//socket
{
printf("WSAStartup 失败,错误号:%d\n",retval);
WSACleanup();//当调用了WSAStartup以后,就需要调用WSACleanup函数释放内存
return -1;
}
//取得主机IP地址
if (isalpha(Buffer[0])) //是域名或命名地址,用首字母是否在A-Z,或a-z来判定是域名还是IP地址
hp = gethostbyname(Buffer);//从一个主机数据库中提取出主机信息
else
{
addr = inet_addr(Buffer);//是点分地址
hp = gethostbyaddr((char *)&addr,4,AF_INET);//依据网络地址,取得主机信息,实施成功,就返回一个指向主机信息结构
}
if (hp == NULL )
{
printf("不能解析地址[%s]: 错误号%d\n", Buffer, WSAGetLastError());//用于获取错误信息
WSACleanup();
exit(1);
}
// 拷贝 解析信息到sockaddr_in结构中
memset(&server,0,sizeof(server));//分配内存空间,由server返回
memcpy(&(server.sin_addr),hp->h_addr,hp->h_length);//信息copy
server.sin_family = hp->h_addrtype;//组协议初始化
server.sin_port = htons(port);//端口号初始化
//建立套接字
conn_socket = socket(AF_INET,socket_type,0);
if (conn_socket <0 )
{
printf("socket()失败,错误号:%d\n", WSAGetLastError());
WSACleanup();
return -1;
}
//对于流式套接字,需要先建立连接
//其实也能够使用connect(),send(),recv()等函数在windows里面一样实现数据报套接字功效
if(socket_type != SOCK_DGRAM)
{
printf("正在连接到: %s\n",hp->h_name);
if (connect(conn_socket,(struct sockaddr*)&server,sizeof(server)) == SOCKET_ERROR)
{
printf("connect()失败,错误号:%d\n",WSAGetLastError());
closesocket(conn_socket);//假如创建失败,就关闭连接套接字
WSACleanup();
return -1;
}
}
while(1)
{
//得到要发送信息字符串
puts("\n输入送到服务器信息:");
gets(Buffer);
if(!strlen(Buffer)) //假如没有输入信息,继续循环
continue;
//发送网络信息
if(socket_type != SOCK_DGRAM)
retval = send(conn_socket, Buffer, strlen(Buffer)+1, 0); //面向tcp,类似BSD write()
else
retval = sendto(conn_socket, Buffer, strlen(Buffer)+1, 0, //发送字符串时候,须将字符串结束符\0发送
(struct sockaddr*)&server, sizeof(server)); //面向UDP
if (retval == SOCKET_ERROR)
{
printf("发送失败,错误号: %d\n", WSAGetLastError());
break;
}
else
printf("发送信息:%s\n", Buffer);
//接收网络信息
i = sizeof(from);
if(socket_type != SOCK_DGRAM)
retval = recv(conn_socket, Buffer, sizeof(Buffer), 0 );//面向tcp,类似BSD read()
else
retval = recvfrom(conn_socket, Buffer, sizeof(Buffer), 0,
(struct sockaddr*)&from, &i); //面向UDP
if (retval == SOCKET_ERROR)
{
printf("接收信息失败,错误号:%d\n",WSAGetLastError());
break;
}
else if (retval == 0) // 对于面向连接套接字,需要判定对方是否关闭连接
{
printf("服务器关闭连接\n");
break;
}
else //正确接收到网络信息
printf("收到 %d 字节信息:%s \n", retval, Buffer);
//程序一个退出条件
if(!stricmp(Buffer, "quit"))
break;
}
//关闭套接字
closesocket(conn_socket);
WSACleanup();
return 0;
}
/*******************************************************\
* server.c - 简单 TCP/UDP 套接字服务器程序 windows环境 *
\*******************************************************/
#include <winsock2.h>//套接字头文件
#include <stdlib.h>
#include <stdio.h>
#include <string.h>
#include <iostream.h>
#pragma comment(lib,"ws2_32")//添加库
int main(void)
{
unsigned short port= 5001; //端口号
int socket_type = SOCK_DGRAM; //缺省使用TCP连接
char Buffer[1024]; //收发缓冲区
int retval, fromlen, i, isconnected = 0; //临时变量
struct sockaddr_in local, from; //套接字地址结构变量
SOCKET listen_socket, msgsock; //套接字变量
WSADATA wsaData; //windows套接字信息
//先输入服务器程序所需要基础信息:端口号,套接字类型
printf("请输入端口号( >5000 ):");
scanf("%d", &i);
if(i < 5000 || i > 65535)
printf("不正确端口号%d,用缺省端口号5001\n",i);
else
port = i;
printf("请输入套接字类型( 1,TCP; 2, UDP ):");
scanf("%d", &i);
if(i == 1)
socket_type = SOCK_STREAM;
else if(i == 2)
socket_type = SOCK_DGRAM;
else
printf("不正确输入%d,使用TCP数据流\n",i);
//在windows环境下,需要先初始化协议栈
if ((retval = WSAStartup(0x202, &wsaData)) != 0) //初始化套接字版本等信息
{
printf("WSAStartup 失败,错误号:%d\n", retval);
WSACleanup();//在创建失败,或程序结束,全部要调用
return -1;
}
//建立套接字
listen_socket = socket(AF_INET, socket_type, 0);
if (listen_socket == INVALID_SOCKET)
{
printf("socket()失败,错误号:%d\n", WSAGetLastError());
WSACleanup();
return -1;
}
// 拷贝 解析信息到sockaddr_in结构中
local.sin_family = AF_INET;
local.sin_addr.s_addr = INADDR_ANY;
local.sin_port = htons(port);
//邦定网络地址到套接字
if (bind(listen_socket,(struct sockaddr*)&local, sizeof(local) ) == SOCKET_ERROR) //绑定网络地址
{
printf("bind()失败,错误号:%d\n", WSAGetLastError());
WSACleanup();
return -1;
}
//对于流式套接字,让套接字处于监听状态,等候连接到来
if (socket_type != SOCK_DGRAM)
{
if (listen(listen_socket,5) == SOCKET_ERROR) //监听网络
{
printf("listen()失败,错误号:%d\n", WSAGetLastError());
WSACleanup();
return -1;
}
}
printf("监听端口:%d, 使用协议:%s\n", port,
(socket_type == SOCK_STREAM)? "TCP": "UDP");
while(1)
{
fromlen =sizeof(from);
if (socket_type == SOCK_DGRAM )
msgsock = listen_socket;
else if( isconnected == 0)
{//对于TCP连接,假如没有连接,等候一个连接到来
msgsock = accept(listen_socket,(struct sockaddr*)&from, &fromlen);
if (msgsock == INVALID_SOCKET)
{
printf("accept()失败,错误号:%d\n",WSAGetLastError());
WSACleanup();
return -1;
}
isconnected = 1;
printf("从%s收到连接, 端口是:%d\n", inet_ntoa(from.sin_addr), htons(from.sin_port));
}
//等候接收网络信息
if (socket_type != SOCK_DGRAM)
retval = recv(msgsock, Buffer, sizeof (Buffer), 0 ); //面向tcp,类似BSD read()
else
{
retval = recvfrom(msgsock, Buffer, sizeof (Buffer), 0,
(struct sockaddr *)&from, &fromlen); //面向UDP
printf("从%s收到数据报,端口是:%d\n", inet_ntoa(from.sin_addr), htons(from.sin_port));
}
//结果判定
if (retval == SOCKET_ERROR)
{
printf("recv()失败,错误号:%d\n", WSAGetLastError());
closesocket(msgsock);
continue;
}
else if (retval == 0)
{
printf("用户端关闭连接\n");
closesocket(msgsock);
continue;
}
else //正常接收
{
printf("收到 %d 字节数据:%s \n", retval, Buffer);
if (socket_type != SOCK_DGRAM)
{//对于TCP连接,我们收到"exit"有一个关闭连接操作
if(!stricmp(Buffer, "exit"))
{
printf("关闭TCP 连接,等候下一次连接...\n");
closesocket(msgsock);
isconnected = 0;
continue;
}
}
}
//信息回送
printf("将一样信息回送给用户端...\n\n");
printf("please input the message:\n");
scanf("%s",Buffer);
if (socket_type != SOCK_DGRAM)
retval = send(msgsock, Buffer, strlen(Buffer)+1, 0); //面向tcp,类似BSD write()
else
retval = sendto(msgsock, Buffer, strlen(Buffer)+1, 0,
(struct sockaddr *)&from, fromlen); //面向UDP
if (retval == SOCKET_ERROR)
{
printf("send()失败,错误号:%d\n", WSAGetLastError());
}
//程序一个退出条件
if(!stricmp(Buffer, "quit"))
break;
}
WSACleanup();
return 0;
}
3.连接数据库
3.1使用说明书
第一步:在开始菜单中找到SQL SERVER并打开
第二步:建立一个新数据库。在SQL SERVER中建立一个名为student数据库
第三步:在student库下创建一个Stu_Info表,并在表中包含以下字段名:snum,sname,ssex,sage,smajor。输入部分数据,进行测试。
第四步:在安全性中设置密码为123.
第三步:编译生成可实施文件,点击运行。依据提醒框中信息,输入我们需要插入数据。关闭程序。
第四步:在次点击运行,查看我们插入数据是否成功插入。
3.2原理说明
经过ADO访问数据库技术进行数据库编程。我们需要在计算机上配置数据源。配置数据源过程,就是和让数据库驱动程序来对数据库进行操作,方便使我们再程序中,能够调用驱动程序来完成我们需要完成工作。处理ADO访问技术之外,还有ODBC(开放式数据库互联)等。
3.3程序注释
/*******************************************************************
利用ADO访问MS SQL
要求: 【1】输出Stu_Info表内每一条统计
【2】添加一条新统计
【3】删除名字为"李立"统计
*****************************************************************/
#import "c:\Program Files\Common Files\System\ADO\msado15.dll" \//导入动态链接库,使我们能够使用ADO编程
no_namespace rename("EOF", "EndOfFile") //为了预防命名冲突,不使用命名空间
#include <iostream> //标准输入输出流
#include <iomanip> //for setw()
using namespace std;
class STU //定义学生类
{
public:
char snum[10]; //学号
char sname[10]; //姓名
char ssex[2]; //姓别
long sage; //年纪
char smajor[20]; //专业
public:
STU(){}
~STU(){}
};
int main()
{
STU student; //定义学生对象
::CoInitialize(NULL); // 初始化OLE/COM库环境 ,为访问ADO接口做准备
_RecordsetPtr m_pRecordset("ADODB.Recordset"); //建立统计集
_ConnectionPtr m_pConnection("ADODB.Connection"); //建立连接
_bstr_t bstrSQL("select * from stu_info"); //查询语句
char * query_cmd = "DELETE FROM stu_info WHERE sname = '李立'";
try //异常处理
{
// 创建Connection对象
m_pConnection.CreateInstance("ADODB.Connection");
// 设置连接字符串,必需是BSTR型或_bstr_t类型
_bstr_t strConnect= "Provider=SQLOLEDB;Server=(local);Database=student; uid=sa; pwd=123;";
//若数据库在网络上则Server为形如(192.168.1.5,3340)
//用户sa和密码123只是针对我库
m_pConnection->Open(strConnect,"","",adModeUnknown);
if(m_pConnection==NULL)
cerr<<"Lind data ERROR!\n";
// 创建统计集对象
m_pRecordset.CreateInstance(__uuidof(Recordset));
// 取得表中统计
m_pRecordset->Open(bstrSQL,m_pConnection.GetInterfacePtr(),
adOpenDynamic,adLockOptimistic,adCmdText);
_variant_t vsnum,vsname,vsage,vssex,vsmajor; //对应库中snum,sname,sage,ssex,smajor
cout << "学号 姓名 年纪 姓别 专业";
cout << "\n----------------------------------------------------------------\n";
while (!m_pRecordset->EndOfFile) //假如统计集没有到统计尾端
{
vsnum = m_pRecordset->GetCollect(_variant_t((long)0));//这儿给字段编号和字段名全部能够
vsname = m_pRecordset->GetCollect("sname");
vsage = m_pRecordset->GetCollect("sage");
vssex = m_pRecordset->GetCollect("ssex");
vsmajor = m_pRecordset->GetCollect("smajor");
if (vsnum.vt != VT_NULL&&vsname.vt != VT_NULL&&vsage.vt != VT_NULL
&&vssex.vt != VT_NULL&&vsmajor.vt != VT_NULL)//假如不为空
{
cout.setf(ios::left); //设置左对齐
cout << setw(14) << (char*)(_bstr_t)vsnum; //输出学号
cout << setw(14) << (char*)(_bstr_t)vsname; //输出姓名
cout << setw(8) << vsage.lVal; //输出年纪
cout << setw(8) << (char*)(_bstr_t)vssex; //输出性别
cout <<setw(20) << (char*)(_bstr_t)vsmajor; //输出专业
cout.unsetf(ios::left); //取消左对齐
cout << endl;
}
m_pRecordset->MoveNext(); ///移到下一条统计
}
cout << "\n----------------------------------------------------------------\n"; //输入将要插入信息
cout << "\n请输入你要添加学生信息\n";
cout << "学号:";
cin >> student.snum;
cout << "\n姓名:";
cin >> student.sname;
cout << "\n年纪:";
cin >> student.sage;
cout << "\n姓别:";
cin >> student.ssex;
cout << "\n专业:";
cin >> student.smajor;
m_pRecordset->MoveFirst(); //移动到第一条统计
m_pRecordset->AddNew(); ///添加新统计
m_pRecordset->PutCollect("snum",_variant_t(student.snum)); //将数据添加进去输入库
m_pRecordset->PutCollect("sname",_variant_t(student.sname));
m_pRecordset->PutCollect("sage",_variant_t(student.sage));
m_pRecordset->PutCollect("ssex",_variant_t(student.ssex));
m_pRecordset->PutCollect("smajor",_variant_t(student.smajor));
m_pRecordset->Update();//更新操作,假如不更新,对数据库操作将没有得到对应操作
m_pConnection->Execute(query_cmd,NULL,1); //用Execute实施sql语句来删除
m_pRecordset->Close(); // 关闭统计集
}
// 捕捉异常
catch(_com_error e)
{
// 显示错误信息
cerr << "\nERROR:" << (char*)e.Description();//抛出异常
}
if(m_pConnection->State)
m_pConnection->Close();
::CoUninitialize();
return 0;
}
4.实习总结、体会和收获
经过这些天老师给我们讲授实习课,我知道我们专业实用性,和在软件工程上我们应该怎么学,学些什么,光靠课堂上我们学习东西十分有限,要充足利用课余时间,利用图书馆和互联网。学习这个专业,要求我们要深入进去,不能只学会些皮毛,要不停跟进时代步伐,不停学习新知识,开拓视野,才能在这个专业上有愈加好作为,使我们走得更远,这门课程学习使我受益匪浅,为以后学习打下了基础,激发了我学习爱好,使我明确了自己专业方向。
展开阅读全文