《管理系统中计算机应用》实践报告Word格式文档下载.docx
《《管理系统中计算机应用》实践报告Word格式文档下载.docx》由会员分享,可在线阅读,更多相关《《管理系统中计算机应用》实践报告Word格式文档下载.docx(20页珍藏版)》请在冰豆网上搜索。
![《管理系统中计算机应用》实践报告Word格式文档下载.docx](https://file1.bdocx.com/fileroot1/2023-1/12/25c9401b-1f86-4a49-8da3-303722078abb/25c9401b-1f86-4a49-8da3-303722078abb1.gif)
打开客户端(client.exe),根据提示,将客户端(server.exe)所在的服务器的IP地址输入进去。
第四步:
输入在服务器端(server.exe)中建立的端口号值。
第五步:
选择和服务器端(server.exe)中一样的协议第六步:
收发数据第七步:
关闭连接。
2.2原理说明书2.3程序注释/*client.c-简单的TCP/UDP套接字客户程序windows环境*/#include/关于套接字的头文件#include#include#include#include#pragmacomment(Iib,ws2_32)添加ws2_32库intmain(void)unsignedshortport=5001;
/端口号intsocket_type=SOCK_STREAM;
/缺省使用TCP连接charBuffer1280;
/收发缓冲区套接字地址结构变量structsockaddr_inserver,from;
/指针/先输入客户程序所需要的基本信息:
服务器地址,端口号,套接字类型printf(请输入服务器地址:
);
scanf(%s,Buffer);
printf(请输入端口号(5000):
scanf(%d,&
i);
if(i65535)printf(不正确的端口号d,用缺省端口号5001n,i);
elseport=i;
printf(请输入套接字类型(1,TCP;
2,UDP):
if(i=1)socket_type=SOCK_STREAM;
设定为SOCK_STREAMelseif(i=2)socket_type=SOCK_DGRAM;
设定为SOCK_DGRAMelseprintf(”不正确的输入d使用TCP数据流n,i);
/在windows环境下,需要先初始化协议栈if(retval=WSAStartup(0x202,&
wsaData)!
=0)/WSAStartup函数调用,用来初始/socketprintf(WSAStartup失败,错误号:
%dn,retvaI);
WSACIeanup();
/当调用了WSAStartup之后,就需要调用WSACIeanu函数释放内存return-1;
/取得主机IP地址是域名或命名地址,用首字母的if(isaIpha(Buffer0)/从一个主机数据库中提是否在A-Z,或者a-z来判断是域名还是IP地址hp=gethostbyname(Buffer);
/取出主机信息elseaddr=inet_addr(Buffer);
/是点分地址hp=gethostbyaddr(char*)&
addr,4,AF_INET);
/根据网络地址,获得主机信息,执行成功,就返回一个指向主机信息的结构if(hp=NULL)printf(不能解析地址%s:
错误号%dn,Buffer,WSAGetLastError();
/用于获取错误信息WSACleanup();
exit
(1);
/拷贝解析的信息到sockaddr_in结构中memset(&
server,0,sizeof(server);
/分配内存空间,由server返回memcpy(&
(server.sin_addr),hp-h_addr,hp-h_length);
/信息的copyserver.sin_family=hp-h_addrtype;
/组协议初始化server.sin_port=htons(port);
/端口号初始化/建立套接字conn_socket=socket(AF_INET,socket_type,0);
if(conn_socketh_name);
(connect(conn_socket,(structsockaddr*)&
server,sizeof(server)=SOCKET_ERROR)printf(connect()失败,错号:
%dn,WSAGetLastError();
closesocket(conn_socket);
/如果创建失败,就关闭连接套接字WSACleanup();
return-1;
while
(1)/得到要发送的信息字符串puts(n输入送到服务器的信息:
gets(Buffer);
if(!
strlen(Buffer)/如果没有输入信息,继续循环continue;
/发送网络信息strlen(Buffer)+1,0);
/面向tcp,类似BSDwrite()elseretval=sendto(conn_socket,Buffer,strlen(Buffer)+1,0,/发送字符串的时候,须将字符串的结束符0发送(structsockaddr*)&
server,sizeof(server);
/面向UDPif(retval=SOCKET_ERROR)printf(发送失败,错误号:
break;
elseprintf(发送信息:
%sn,Buffer);
/接收网络信息i=sizeof(from);
sizeof(Buffer),0);
/面向tcp,类似BSDread()elseretval=recvfrom(conn_socket,Buffer,sizeof(Buffer),0,(structsockaddr*)&
from,&
/面向UDPif(retval=SOCKET_ERROR)printf(接收信息失败,错误号:
elseif(retval=0)/对于面向连接的套接字,需要判断对方是否关闭连接printf(服务器关闭连接n);
%sn,retval,windows环境else/正确接收到网络信息printf(收到%d字节信息:
Buffer);
/程序的一个退出条件if(!
stricmp(Buffer,quit)break;
/关闭套接字closesocket(conn_socket);
WSACleanup();
return0;
/*server.c-简单TCP/UDP套接字服务器程序*/#include/套接字头文件#include#include#include#include#pragmacomment(lib,ws2_32)/添加库intmain(void)unsignedshortport=5001;
intsocket_type=SOCK_DGRAM;
charBuffer1024;
intretval,fromlen,i,isconnected=0;
变量structsockaddr_inlocal,from;
量SOCKETlisten_socket,msgsock;
/WSADATAwsaData;
息/端口号/缺省使用TCP连接/收发缓冲区/临时/套接字地址结构变套接字变量/windows套接字信/先输入服务器程序所需要的基本信息:
端口号,套接字类型printf(请输入端口号(5000):
if(i65535)printf(不正确的端口号d用缺省端口号5001n,i);
2,UDP):
elseif(i=2)socket_type=SOCK_DGRAM;
elseprintf(”不正确的输入d使用TCP数据流n,i);
=0)/初始化套接字版本等信息printf(WSAStartup失败,错误号:
%dn,retval);
/在创建失败,或者程序结束,都要调用return-1;
/建立套接字listen_socket=socket(AF_INET,socket_type,0);
if(listen_socket=INVALID_SOCKET)printf(socket()失败,错误号:
/拷贝解析的信息到sockaddr_in结构中local.sin_family=AF_INET;
local.sin_addr.s_addr=INADDR_ANY;
local.sin_port=htons(port);
/邦定网络地址到套接字if(bind(listen_socket,(structsockaddr*)&
local,sizeof(local)=SOCKET_ERROR)/绑定网络地址printf(bind()失败,错误号:
/对于流式套接字,让套接字处于监听状态,等待连接到来if(socket_type!
=SOCK_DGRAM)if(listen(listen_socket,5)=SOCKET_ERROR/)监听网络printf(listen()失败,错误号:
printf(监听端口:
%d,使用协议:
%sn,port,(socket_type=SOCK_STREAM)TCP:
UDP);
while
(1)fromlen=sizeof(from);
if(socket_type=SOCK_DGRAM)msgsock=listen_socket;
elseif(isconnected=0)/对于TCP连接,如果没有连接,等待一个连接的到来msgsock=accept(listen_socket,(structsockaddr*)&
fromlen);
if(msgsock=INVALID_SOCKET)printf(accept()失败,错误号:
isconnected=1;
printf(从%s收到连接,端口是:
%dn,inet_ntoa(from.sin_addr),htons(from.sin_port);
/等待接收网络信息if(socket_type!
=SOCK_DGRAM)retval=recv(msgsock,Buffer,sizeof(Buffer),0);
/面向tcp,类似BSDread()elseretval=recvfrom(msgsock,Buffer,sizeof(Buffer),0,(structsockaddr*)&
/面向UDPprintf(从%s收到数据报,端口是:
/结果判断if(retval=SOCKET_ERROR)printf(recv()失败,错误号:
closesocket(msgsock);
continue;
elseif(retval=0)printf(客户端关闭连接n);
else/正常接收printf(收到%d字节的数据:
%sn,retval,Buffer);
if(socket_type!
=SOCK_DGRAM)/对于TCP连接,我们收到exit有一个关闭连接的操作if(!
stricmp(Buffer,exit)printf(关闭TCP连接,等待下一次连接.n);
isconnected=0;
/信息回送printf(将同样的信息回送给客户端.nn);
printf(pleaseinputthemessage:
n);
=SOCK_DGRAM)retval=send(msgsock,Buffer,strlen(Buffer)+1,0);
/面向tcp,类似BSDwrite()elseretval=sendto(msgsock,Buffer,strlen(Buffer)+1,0,(structsockaddr*)&
from,fromlen);
/面向UDPif(retval=SOCKET_ERROR)printf(send()失败,错误号:
3.连接数据库连接数据库3.1使用说明书第一步:
在开始菜单中找到SQLSERVE并打开第二步:
建立一个新的数据库。
在SQLSERVER建立一个名为student的数据库第三步:
在student库下创建一个Stu_Info表,并在表中包含以下字段名:
snum,sname,ssex,sage,smajor。
输入一些数据,进行测试。
在安全性中设置密码为123.第三步:
编译生成可执行的文件,点击运行。
根据提示框中的信息,输入我们需要插入的数据。
关闭程序第四步:
在次点击运行,查看我们插入的数据是否成功的插入。
3.2原理说明通过ADO访问数据库的技术进行数据库编程。
我们需要在计算机上配置数据源。
配置数据源的过程,就是和让数据库的驱动程序来对数据库进行操作,以便使我们再程序中,可以调用驱动程序来完成我们需要完成的工作。
处理ADO访问技术之外,还有ODB(开放式数据库互联)等。
3.3程序注释/*利用ADC访问MSSQL2000要求:
【1】输出Stu_Info表内的每一条记录【2】添加一条新记录【3】删除名字为李立的记录*/#importc:
ProgramFilesCommonFilesSystemADOmsado15.dll/导入动态链接库,使我们可以为了防止命名冲突,使用ADC编程no_namespacerename(EOF,EndOfFile)/不使用命名空间#include/标准输入输出流#include/forsetw()usingnamespacestd;
classSTU/定义学生类public:
charsnum10;
/学号charsname10;
/姓名charssex2;
/姓别longsage;
/年龄charsmajor20;
/专业public:
STU()STU();
intmain()STUstudent;
/定义学生对象:
Colnitialize(NULL);
/初始化OLE/COM库环境,为访问ADO接口做准备_RecordsetPtrm_pRecordset(ADODB.Recordset);
/建立记录集_ConnectionPtrm_pConnection(ADODB.Connection);
/建立连接_bstr_tbstrSQL(select*fromstu_info);
/查询语句char*query_cmd=DELETEFROMstu_infoWHEREsname=李立;
try/异常处理/创建Connection对象m_pConnection.Createlnstance(ADODB.Connection);
/设置连接字符串,必须是BSTR型或者_bstr_t类型_bstr_tstrConnect=Provider=SQLOLEDB;
Server=(local);
Database=student;
uid=sa;
pwd=123;
/若数据库在网络上则Server为形如/用户sa和密码123只是针对我的库m_pConnection-Open(strConnect,adModeUnknown);
if(m_pConnection=NULL)cerrOpen(bstrSQL,m_pConnection.GetInterfacePtr(),adOpenDynamic,adLockOptimistic,adCmdText);
_variant_tvsnum,vsname,vsage,vssex,vsmajor;
/对应库中的snum,sname,sage,ssex,smajorcout学号姓名年龄姓别专业;
coutEndOfFile)/如果记录集没有到记录的尾端vsnumm_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!
vsage.vt!
vssex.vt!
vsmajor.vt!
=VT_NULL)/如果不为空cout.setf(ios:
left);
/设置左对齐coutsetw(14)(char*)(_bstr_t)vsnum;
/输出学号coutsetw(14)(char*)(_bstr_t)vsname;
/输出姓名coutsetw(8)vsage.lVal;
/输出年龄性别coutsetw(20)(char*)(_bstr_t)vsmajor;
/出专业cout.unsetf(ios:
/取消左对齐coutMoveNext();
/移到下一条记录coutnn;
/输入将要插入的信息coutn请输入你要添加的学生信息n;
coutstudent.snum;
coutstudent.sname;
coutstudent.sage;
coutstudent.ssex;
coutstudent.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_errore)/显示错误信息cerrnERROR:
State)m_pConnection-Close();
:
CoUninitialize();
4.实习总结、体会与收获实习总结、体会与收获通过这些天老师给我们讲授实习课,我知道的我们专业的实用性,以及在软件工程上我们应该怎么学,学些什么,光靠课堂上我们学习的东西十分有限,要充分利用课余时间,利用图书馆和互联网。
学习这个专业,要求我们要深入进去,不能只学会些皮毛,要不断跟进时代的步伐,不断学习新的知识,开拓视野,才能在这个专业上有更好的作为,使我们走得更远,这门课程的学习使我受益匪浅,为以后的学习打下了基础,激发了我的学习兴趣,使我明确了自己的专业方向。