毕业论文 网络经济下电子商务的成本分析.doc_第1页
毕业论文 网络经济下电子商务的成本分析.doc_第2页
毕业论文 网络经济下电子商务的成本分析.doc_第3页
毕业论文 网络经济下电子商务的成本分析.doc_第4页
毕业论文 网络经济下电子商务的成本分析.doc_第5页
已阅读5页,还剩33页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

题目: visual c+高级编程课程设计报告 班级:计算机科学与技术 s111 姓名:邓会杰 学号:113469 指导教师:李玉海 完成日期: 2012 年 6 月 6 日 目录 第一章 系统功能及使用说明 4 1.1 客户端系统的功能及使用说明 .4 1.2 服务器端系统的使用及说明 .7 1.3 数据库管理系统的使用及说明 .11 第二章 系统流程图 12 2.1 服务器端和客户端通信设计流程图 .12 2.1.1 通信前准备工作 .12 2.1.2 收发数据 .13 2.1.3 处理通知消息 .13 2.2 数据库设计流程 .13 2.2.1 dbms 简介 13 2.2.2 odbc 简介 14 2.2.3 mfc 中 odbc 主要的类 .15 2.2.4 mfc 与 odbc 应用程序的数据交换机制 .16 2.2.5 数据库设计的主要步骤 16 第三章 程序调试与参数测试 .17 3.1.1 文件传输问题 .17 第四章 程序 .22 4.1 客户端程序 .22 4.1.1 网络连接窗口程序 .22 4.1.2 文件传输窗口程序 .26 4.1.3 附加功能 .30 4.2 服务器端程序 .31 4.2.1 网络侦听窗口程序 .31 4.2.2 文件传输窗口程序 .35 4.2.3 数据管理窗口程序 .35 4.3 数据库管理程序 .36 第五章 系统总结 41 6.1 总结 .41 6.2 系统不足 .42 参考文献 42 前言 本系统主要实现的功能是客户端与服务器端通信,服务器监听客户端发来的连接请求,通过 socket 套 接字,来完成客户端与服务器端之间的通信。开发本系统主要目的是熟练运用本学期学到的知识点。该系 统使用的 mfc 编写,用到的知识点有:windows 的标准控件的使用、对文件的操作、注册表使用、动态链 接库的使用、多线程的应用、odbc 数据库编程、网络编程等知识点。通过独立完成该系统,熟练的掌握所 涉及的类及类方法的使用,把知识点融合到一起能深刻的理解了 mfc 各类的意义和 mfc 的机制。为以后进 一步学习 c+打下了基础。 第一章 系统功能及使用说明 1.1 客户端系统的功能及使用说明 如图上图,为客户端的登录界面,输入用户名和密码后,点击“登录”转到客户端的 主界面。点击“退出”会退出系统。三次错误输入密码,系统自动退出,有效的提高了系 统的安全性。 如图上图,客户端的主界面,点击“建立连接” ,如果服务端系统在监听,那么客户端 就连接到了服务器端,连接成功后, “状态连接”会显示连接成功, “连接时长”会显示已 连接了多长时间。点击“断开连接”客户端和服务器端就会断开连接, “连接状态”显示连 接已断开, “连接时长”显示空。如果服务器端系统没有在监听,会提示连接失败。 与服务器建立连接之后,点击“文件传输”标签,显示如图 1-3 的窗口,可以与服务器 进行文件传输和聊天。 在下方的文本框中输入要发送的文字,点击“发送” ,消息会发送到服务器端,同时显 示在上方的文本框中。点击“聊天记录”按钮,可以查看与服务器端的聊天记录,聊天记 录显示在上方的文本框中。点击“删除记录”按钮,会删掉与服务器端的聊天记录。 文件传输功能,点击“选择文件” ,选择要发送的文件,再点击“发送文件” ,文件会 发送给服务器,同时提示发送成功。 点击“附加功能”标签,主要实现了一个简易计算器。 1.2 服务器端系统的使用及说明 上图,为服务器端的登录界面,输入用户名和密码后,点击“登录”转到服务器端的 主界面。点击“退出”会退出系统。三次错误输入密码,系统自动退出,有效的提高了系 统的安全性。 点击创建服务器,服务器就开始侦听客户端的请求,如果有客户端连接请求,连接列 表上会显示客户端的信息,点击“刷新列表”,会显示连接的客户端列表。在连接列表中 选择一个客户端,点击“断开连接”,服务器会把该客户端断开。选择一个客户端,点击 “发送文件”,转到发送文件窗口。选择一个客户端,点击“数据管理”,会转到数据管 理窗口。 选择指定的客户端,点击“文件传输”标签,显示如图 1-3 的窗口,可以与客户端进 行文件传输和聊天。 在下方的文本框中输入要发送的文字,点击“发送” ,消息会发送到客户端,同时显示 在上方的文本框中。点击“聊天记录”按钮,可以查看与客户端的聊天记录,聊天记录显 示在上方的文本框中。点击“删除记录”按钮,会删掉与客户端的聊天记录。 文件传输功能,点击“选择文件” ,选择要发送的文件,再点击“发送文件” ,文件会 发送给客户端,同时提示发送成功。 点击“数据管理”标签,转到“数据管理”窗口。在个人信息管理栏中,输入用户名密码, 点击“确定修改” ,个人登录密码修改成功。在“管理数据库”栏中,点击“管理数据库信 息”转到 1.3 数据库管理系统的使用及说明 如图所示,数据库操作模块所实现的功能是,可以对数据库中的数据表进行增删改查, 点击“添加”按钮,可以向数据表中添加一条记录。点击“查询”按钮,可以查询指定的 数据,并且显示在右侧的列表框中。点击“修改按钮”可以修改指定的数据。点击“删除” 按钮,可以删除指定的记录。点击下面四个按钮,可以显示上一条、下一条、第一条、最 后一条记录。 第二章 系统流程图 2.1 服务器端和客户端通信设计流程图 2.1.1 通信前准备工作 1.数据库客户端调用 connect 函数以连接到服务器 2.服务器端调用 listen 函数监听客户的进入 3.服务器端调用 accept 函数与客户建立连接 2.1.2 收发数据 流套接字 发送数据 接收数据 方法/ casyncsocket 类 send receive 2.1.3 处理通知消息 用于处理通知消息的虚函数 onaccept: 当一个连接请求到来时 onconnet: 当一个连接尝试完成时 onclose: 当另一端套接字关闭时 onreceive:当准备好接收数据时 onsend: 当准备好发送数据时 2.2 数据库设计流程 2.2.1 dbms 简介 dbms(数据库管理系统)是一套程序,用来定义、管理和处理数据库与应用程序之间的联 系,例如 foxpro、access、sybase 等都是 dbms。图 10.1 说明了用户、dbms 和数据库三者 的关系。 图 10.1 用户、dbms、数据库三者的关系 2.2.2 odbc 简介 odbc(open database connectivity,开放数据库互连)是微软公司开放服务结构 (wosa,windows open services architecture)中有关数据库的一个组成部分,它建立了 一组规范,并提供了一组对数据库访问的标准 api(应用程序编程接口)。这些 api 利用 sql 来完成其大部分任务。odbc 本身也提供了对 sql 语言的支持,用户可以直接将 sql 语 句送给 odbc。 一个基于 odbc 的应用程序对数据库的操作不依赖任何 dbms,不直接与 dbms 打交道, 所有的数据库操作由对应的 dbms 的 odbc 驱动程序完成。也就是说,不论是 foxpro、access 还是 oracle 数据库,均可用 odbc api 进行访问。由此可见,odbc 的最大 优点是能以统一的方式处理所有的数据库。 一个完整的 odbc 由下列几个部件组成: 应用程序(application)。 odbc 管理器(administrator)。该程序位于 windows 95 控制面板(control panel)的 32 位 odbc 内,其主要任务是管理安装的 odbc 驱动程序和管理数据源。 驱动程序管理器(driver manager)。驱动程序管理器包含在 odbc32.dll 中,对用户是透明 的。其任务是管理 odbc 驱动程序,是 odbc 中最重要的部件。 odbc api。 odbc 驱动程序。是一些 dll,提供了 odbc 和数据库之间的接口。 数据源。数据源包含了数据库位置和数据库类型等信息,实际上是一种数据连接的抽象。 各部件之间的关系如图 10.2 所示 2.2.3 mfc 中 odbc 主要的类 mfc 的 odbc 类主要包括: cdatabase 类:主要功能是建立与数据源的连接。 crecordset 类:该类代表从数据源选择的一组记录(记录集),程序可以选择数据源中的 某个表作为一个记录集,也可以通过对表的查询得到记录集,还可以合并同一数据源中多 个表的列到一个记录集中通过该类可对记录集中的记录进行滚动、修改、增加和删除等 操作。 crecordview 类:提供了一个表单视图与某个记录集直接相连,利用对话框数据交换机制 (ddx)在记录集与表单视图的控件之间传输数据。该类支持对记录的浏览和更新,在撤销时 会自动关闭与之相联系的记录集。 cfieldexchange 类:支持记录字段数据交换(dfx),即记录集字段数据成员与相应的数据 库的表的字段之间的数据交换。该类的功能与 cdataexchange 类的对话框数据交换功能类 似。 cdbexception 类:代表 odbc 类产生的异常。 概括地讲,cdatabase 针对某个数据库,它负责连接数据源;crecordset 针对数据源中的 记录集,它负责对记录的操作;crecordview 负责界面,而 cfieldexchange 负责 crecordset 与数据源的数据交换。 2.2.4 mfc 与 odbc 应用程序的数据交换机制 如图所示,显示了 mfc 的 odbc 应用程序中的 ddx 和 rfx 数据交换 2.2.5 数据库设计的主要步骤 数据库设计主要是进行数据库的逻辑设计,即将数据按一定的分类、分组系统和逻辑层次 组织起来,是面向用户的。数据库设计时需要综合企业各个部门的存档数据和数据需求, 分析各个数据之间的关系,按照 dbms 提供的功能和描述工具,设计出规模适当、正确反映 数据关系、数据冗余少、存取效率高、能满足多种查询要求的数据模型。 数据库设计的步骤是; 1 数据库结构定义:目前的数据库管理系统(dbms)有的是支持联机事务处理 cltp(负责对事务数据进行采集、处理、存储)的操作型 dbms,有的可支持数 据仓库、有的联机分析处理 clap(指为支持决策的制度对数据的一种加工操作) 功能的大型 dbms,有的数据库是关系型的,有的可支持面向对象数据库。针对 选择的 dbms,进行数据库结构定义。 2 数据表定义:数据表定义指定义数据库中数据表的结构,数据表的逻辑结构包括:属性名 称、类型、表示形式、缺省值、效验规则、是否关键字、可否为空等。关系型数据库要尽 量按关系规范化要求进行数据库设计,但为使效率高,规范化程序应根据应用环境和条件 来决定。数据表设计不仅要满足数据存储的要求,还要增加一些如反映有关信息、操作责 任、中间数据的字段或临时数据表。 3 存储设备和存储空间组织:确定数据的存放地点、存储路径、存储设备等,备份方案,对 多版本如何保证一致性和数据的完整性。 4 数据使用权限设置:针对用户的不同使用要求,确定数据的用户使用权限,确保数据安全。 5 数据字典设计:用数据字典描述数据库的设计,便于维护和修改。 第三章 程序调试与参数测试 3.1 故障排除方法 白盒测试:运行出现错误后,查看代码,检查错误的原因,如果查不出来,就用 afxmessagebox() 语句,如果消息框弹出之后,说明是:afxmessagebox()代码后面有错误,就这样一条一 条的执行,检查出错误 黑盒测试:如果运行没有错误,测试功能是否完全实现,功 能 不 正 确 或 遗 漏 ; 界 面 错 误 ; 输 入 和 输 出 错 误 ; 数 据 库 访 问 错 误 ; 性 能 错 误 ; 初 始 化 终 止 错 误 ; 3.1 文件传输问题 问题:文件传输功能的实现时,需要判断接收到的是文件还是普通消息,如果是文件则写 到磁盘中,如果是普通消息则显示在聊天文本框中。 解决方法:如果服务器向客户端传文件,先传送一个定义好的字符串“ cserverdlg * pdlg=(cserverdlg *)papp-m_pmainwnd; cdialog1 * pdlg1= cdialog2 * pdlg2= char *pbuf=new char4096; int ibufsize=4096; int ircvd; cstring strrecvd; ircvd=receive(pbuf,ibufsize); if(ircvd=socket_error) pdlg2-messagebox(“socket_error“); else pbufircvd=0; cstring str=pbuf; /判断客户端发来的信息,是不是同意接收 if(str.compare(“ cstring pathname=pdlg2-pathname; int sendresult; cfile file; file.open(pathname,cfile:modereadwrite); char *c; int len=file.getlength(); c=new charlen+3; clen+0= clen+1= clen+2= file.read(c,len); sendresult=pdlg1-m_serversocket.m_socket-send(c,len+3); if(sendresult=socket_error) :afxmessagebox(“连接失败,请重试!“); else pdlg2-pathname=“; pdlg2-setdlgitemtext(idc_edit_filepath,“); pdlg2-filesendsuccessflag=1;/同意接收 else if(str.compare(“ pdlg-fromclient=“ pdlg2-pathname=“; pdlg2-setdlgitemtext(idc_edit_filepath,“); pdlg2-filesendsuccessflag=2;/拒绝接收 /判断收到的信息是不是客户端发来的发送文件请求。 else if(str.compare(“ if(result=idyes) pdlg-toclient(“ else if(result=idno) pdlg-toclient(“ /判断客户端端发来的信息是不是同意接收文件,如果是,则发送文件 else if(str.compare(“ int sendresult; cfile file; file.open(pathname,cfile:modereadwrite); char *c; int len=file.getlength(); c=new charlen+3; clen+0= clen+1= clen+2= file.read(c,len); sendresult=pdlg1-m_serversocket.m_socket-send(c,len+3); if(sendresult=socket_error) pdlg2-messagebox(“连接失败,请重试!“); else pdlg2-pathname=“; pdlg2-setdlgitemtext(idc_edit_filepath,“); pdlg2-filesendsuccessflag=1;/同意接收 /判断收到的信息是不是文件,如果是文件则保存到磁盘中。 else if(str.right(2)=“ pbufircvd-1=null; pbufircvd-2=null; pbufircvd-3=null; cstring str=pbuf; str=str.left(ircvd-3); cfile file; file.open(“c:abc“,cfile:modecreate|cfile:modenotruncate|cfile:moderead write); file.write(pbuf,ircvd-3); pdlg2-messagebox(“文件接收完毕,请查收!“); else pdlg-fromclient=“; pdlg2-m_rcvmsg+=“客户机:“; pdlg2-m_rcvmsg+=pbuf; pdlg2-m_rcvmsg+=“rn“; pdlg2-refreshscreen(); strrecvd=pbuf; cfile file; file.open(“c:serverchatlog“,cfile:modecreate|cfile:modenotruncate|cfile: modereadwrite); file.seektoend(); file.write(“客户机:“,strlen(“客户机:“); file.write(pbuf,strrecvd.getlength(); file.write(“rn“,strlen(“rn“); delete pbuf; casyncsocket:onreceive(nerrorcode); 第四章 程序 4.1 客户端程序 4.1.1 网络连接窗口程序 主要功能实现代码: 客户端与服务器端建立连接 点击“建立连接”触发 onconnect()方法,m_socket.connect()语句触发 void cmysocket:onconnect(int nerrorcode),请求服务器建立连接。方法实现如下: void cdialog1:onconnetct() if(!afxsocketinit() afxmessagebox(“加载套接字库失败“); return; cclientapp * papp=(cclientapp *)afxgetapp(); cclientdlg * pdlg=(cclientdlg *)papp-m_pmainwnd; cdialog1 * pdlg1= cdialog2 * pdlg2= pdlg1-getdlgitemtext(idc_ipaddress1,m_ipstr); pdlg2-m_socket.m_hsocket=invalid_socket; updatedata(true); bool flag=pdlg2-m_socket.create(); if(!flag) afxmessagebox(“socket error“); return; pdlg2-m_socket.connect(pdlg1-m_ipstr,pdlg1-m_port); void cmysocket:onconnect(int nerrorcode) cclientapp * papp=(cclientapp *):afxgetapp(); cclientdlg * pdlg=(cclientdlg *)papp-m_pmainwnd; cdialog2 * pdlg2= cdialog1 * pdlg1= int iresult=nerrorcode; cstring buffer; int namelen; if(iresult!=0) buffer.format(“连接服务器失败。rn“); pdlg1-setdlgitemtext(idc_connect_state,“连接服务器失败。“); pdlg2-m_rcvmsg+=buffer; pdlg2-refreshscreen(); :afxmessagebox(“aaaaaa“); else namelen=sizeof(sockaddr_in); buffer.format(“成功连接到服务器%s:%d.rn“,pdlg1-m_ipstr,pdlg1-m_port); pdlg2-m_rcvmsg+=buffer; pdlg-refreshscreen(); info.i=9; info.pctrlprogress= pdlg1-m_progress.showwindow(true); cwinthread *pthread1=afxbeginthread(funconnect, casyncsocket:onconnect(nerrorcode); 断开连接 点击“断开连接”按钮,触发 void cdialog1:disconnect()事件,具体实现方法如下: void cdialog1:disconnect() cclientapp * papp=(cclientapp *)afxgetapp(); cclientdlg * pdlg=(cclientdlg *)papp-m_pmainwnd; cdialog2 * pdlg2= pdlg2-m_socket.close(); pdlg2-m_socket.isconnect(false); 进度条与连接状态的实现 点击“建立连接”启动一个进程 funconnect()funtime() cwinthread *pthread1=afxbeginthread(funconnect, cwinthread *pthread2=afxbeginthread(funtime,pdlg1); thread1 功能显示进度条,thread2 功能显示连接状态和连接时间,thread1 结束前调用 thread2 进程的代码实现如下: struct threadinfo int i; cprogressctrl * pctrlprogress; info; cstring strtime; cstring strstate; uint funconnect(pvoid p) cclientapp * papp=(cclientapp *)afxgetapp(); cclientdlg * pdlg=(cclientdlg *)papp-m_pmainwnd; cdialog1 * pdlg1= threadinfo * pinfo=(threadinfo *)p; int ntemp; for(int i=0;ii; pinfo-pctrlprogress-setpos(i); sleep(ntemp); pdlg1-messagebox(“已建立连接“); pdlg1-m_progress.showwindow(false); cwinthread *pthread2=afxbeginthread(funtime,pdlg1); pdlg1-getdlgitem(idc_connetct)-enablewindow(false); return 0; uint funtime(pvoid p) cdialog1 * pdlg1=(cdialog1 *)p; ctime starttime; starttime= ctime:getcurrenttime(); ctime curtime; ctimespan curspan; cstring contime; cstring constate; bconnect=true; while(1) if(bconnect=true) /:afxmessagebox(“true“); constate=“建立连接!“; curtime= ctime:getcurrenttime(); curspan=curtime-starttime; contime=curspan.format(“%h:%m:%s“); pdlg1-setdlgitemtext(idc_connect_state,constate); pdlg1-setdlgitemtext(idc_connect_time,contime); sleep(1000); else if(bconnect=false) constate=“服务器已断开连接!“; pdlg1-setdlgitemtext(idc_connect_state,constate); pdlg1-setdlgitemtext(idc_connect_time,“); pdlg1-getdlgitem(idc_connetct)-enablewindow(true); return 0; return 0; 4.1.2 文件传输窗口程序 发送和接受消息的同时会把消息写入到聊天记录文件中。 发送功能的实现 void cdialog2:onsendmsg() int ilen; int isent; updatedata(true); if(m_msg!=“) ilen=m_msg.getlength(); isent=m_socket.send(lpctstr(m_msg),ilen); if(isent=socket_error) afxmessagebox(“连接失败,请重试!“); else cfile file; file.open(“c:clientchatlog“,cfile:modereadwrite|cfile:modecreate|cfile:m odenotruncate); m_rcvmsg+=“客户机:“+m_msg; m_rcvmsg+=“rn“; file.seektoend(); file.write(“客户机:“,strlen(“客户机:“); file.write(m_msg,m_msg.getlength(); file.write(“rn“,strlen(“rn“); m_msg=“; updatedata(false); 查看聊天记录功能的实现 void cdialog2:onchatlog() / todo: add your control notification handler code here cfile file; file.open(“c:clientchatlog“,cfile:moderead|cfile:modecreate|cfile:mode notruncate); file.seektobegin(); char *c; c=new charfile.getlength()+1; cfile.getlength()=0; file.read(c,file.getlength(); cstring str=c; m_rcvmsg=str; updatedata(false); file.close(); delete c; 删除聊天记录功能的实现 void cdialog2:ondeletelog() cfile file; file.open(“c:clientchatlog“,cfile:modecreate); m_rcvmsg=“; file.close(); updatedata(false); 选择文件功能的实现 void cdialog2:onbutselectfile() cclientapp * papp=(cclientapp *)afxgetapp(); cclientdlg * pdlg=(cclientdlg *)papp-m_pmainwnd; cdialog2 * pdlg2= cfiledialog dlg(true,“*“,“,ofn_allowmultiselect,null); if(dlg.domodal()=idok) pathname=dlg.getpathname(); pdlg2-setdlgitemtext(idc_edit_pathname,pathname); else pathname=“; pdlg2-setdlgitemtext(idc_edit_pathname,pathname); 发送文件功能的实现 void cdialog2:onbutsendfile() cclientapp * papp=(cclientapp *)afxgetapp(); cclientdlg * pdlg=(cclientdlg *)papp-m_pmainwnd; if(pathname=“) :afxmessagebox(“请选择文件!“); else cstring ctrlstr=“ pdlg-toserver(ctrlstr); info2.i=2; info2.pctrlprogress= cwinthread *thread1=afxbeginthread(funconnect2, 进度条功能的实现 点击“发送文件”按钮启动一个线程,具体实现如下: struct threadinfo int i; cprogressctrl * pctrlprogress; info; /发送文件 进度条线程 uint funconnect(pvoid p) cserverapp * papp=(cserverapp *)afxgetapp(); cserverdlg * pdlg=(cserverdlg *)papp-m_pmainwnd; cdialog2 * pdlg2= if(pdlg2-filesendfailflag=true) pdlg2-messagebox(“文件发送失败“); pdlg2-filesendfailflag=false; return 0; pdlg2-getdlgitem(idc_but_sendfile)-enablewindow(false); pdlg2-setdlgitemtext(idc_but_sendfile,“文件发送中.“); threadinfo * pinfo=(threadinfo *)p; while(pdlg2-filesendsuccessflag=0) pdlg2-m_progress.showwindow(true); int ntemp; for(int i=0;ii; pinfo-pctrlprogress-setpos(i); sleep(ntemp); if(pdlg2-filesendsuccessflag=1) pdlg2-messagebox(“文件发送成功!“); pdlg2-filesendsuccessflag=0; else if(pdlg2-filesendsuccessflag=2) pdlg2-messagebox(“客户端拒绝接收文件!“); pdlg2-filesendsuccessflag=0; pdlg2-m_progress.showwindow(false); pdlg2-getdlgitem(idc_but_sendfile)-enablewindow(true); pdlg2-setdlgitemtext(idc_but_sendfile,“发送文件“); pdlg2-filesendsuccessflag=0; return 0; 4.1.3 附加功能 附加功能是通过用动态连接库实现,简易计算器通过调用外部 dll 文件中的方法实现加减 乘除。 void cdialog3:onbutadd() updatedata(true); m_num3=add(m_num1,m_num2); m_num1=0; m_num2=0; void cdialog3:onbutsub() updatedata(true); m_num3=sub(m_num1,m_num2); m_num1=0; m_num2=0; void cdialog3:onbutmul() updatedata(true); m_num3=mul(m_num1,m_num2); m_num1=0; m_num2=0; void cdialog3:onbutdiv() updatedata(true); m_num3=(int)(m_num1/m_num2); m_num1=0; m_num2=0; void cdialog3:onbutequ() updatedata(false); 4.2 服务器端程序 4.2.1 网络侦听窗口程序 监听功能的实现 点击“创建服务器”触发 void cdialog1:onlisten() 方法, void cdialog1:onlisten() pthread-resumethread(); :closehandle(pthread); cserverapp * papp=(cserverapp *)afxgetapp(); cserverdlg * pdlg=(cserverdlg *)papp-m_pmainwnd; cdialog1 * pdlg1= updatedata(true); if(!afxsocketinit() afxmessagebox(“加载套接字库失败“); return ; bool flag=pdlg1-m_serversocket.create(pdlg1-m_port); if(!flag) afxmessagebox(“socket error1“); return ; flag=pdlg1-m_serversocket.listen(3); if(!flag) afxmessagebox(“socket error2“); return ; pdlg1-setdlgitemtext(idc_listen,“正在监听“); pdlg1-getdlgitem(idc_listen)-enablewindow(false); void cmyserversocket:onaccept(int nerrorcode) / todo: add your specialized code here and/or call the base class cserverapp * papp=(cserverapp *)afxgetapp(); cserverdlg * pdlg=(cserverdlg *)papp-m_pmainwnd; cdialog1 * pdlg1= pdlg1-m_reminder=“有新的连接,已连接上!“; pdlg1-refreshscreen(); /创建一个新的套接字对象,用来接收连接请求的套接字。 cmysocket * psocket=new cmysocket(); if(accept( * psocket) psocket-asyncselect(fd_read); m_socket=psocket; cstring rpeeraddress; char * strport=new char10; uint rpeerport; m_socket-getpeername(rpeeraddress,rpeerport); itoa(rpeerport,strport,10); rpeeraddress+=“:“; rpeeraddress+=strport; rpeeraddress+=“主机已经建立连接!“; pdlg1-m_list.addstring(rpeeraddress); pdlg1-refreshscreen(); pdlg1-getdlgitem(idc_refresh)-enablewindow(true); pdlg1-getdlgitem(idc_noncon)-enablewindow(true); pdlg1-getdlgitem(idc_send)-enablewindow(true); pdlg1-getdlgitem(idc_screenctrl)-enablewindow(true); casyncsocket:onaccept(nerrorcode); 断开连接功能的实现 void cdialog1:onnoncon() cserverapp * papp=(cserverapp *)afxgetapp(); cserverdlg * pdlg=(cserverdlg *)papp-m_pmainwnd; cdialog1 * pdlg1= int index=pdlg1-m_list.getcursel(); if(indexm_serversocket.m_socket-close(); pdlg1-m_serversocket.m_socket-isconnect(false); afxmessagebox(“断开连接“); pdlg1-m_list.deletestring(index);/需要改变,根据选择的给你变量 pdlg1-refreshscreen(); 发送文件功能的实现 void cdialog1:onsend() / todo: add your control notification handler code here cserverapp * papp=(cserverapp *)afxgetapp(); cserverdlg * pdlg=(cserverdlg *)papp-m_pmainwnd; cdialog1 * pdlg1= cdialog2 * pdlg2= cdialog3 * pdlg3= int index; index=pdlg1-m_list.getcursel(); if(indexshowwindow(true); pdlg1-showwindow(false); pdlg3-showwindow(false); pdlg-m_tab.setcursel(1); 数据管理功能的实现 void cdialog1:onscreenctrl() / todo: add your control notification handler code here cserverapp * papp=(cserverapp *)afxgetapp(); cserverdlg * pdlg=(cserverdlg *)papp-m_pmainwnd; cdialog1 * pdlg1= cdialog2 * pdlg2= cdialog3 * pdlg3= int index; index=pdlg1-m_list.getcursel(); if(indexshowwindow(false); pdlg2-showwindow(false); pdlg3-showwindow(true); pdlg-m_tab.setcursel(2); 4.2.2 文件传输窗口程序 实现功能和客户端文件传输功能一样,参看客户端文件传输功能。 4.2.3 数据管理窗口程序 1.确定修改功能 点击“确定修改”按钮,修改密码,把密码和用户名写入到文件中,每次登录时读取该文 件,查看输入的和文件中的内容是否一致,如果一致转向主界面。 void cdialog3:onbutupdata() cfile file; file.open(“mima“,cfile:modereadwrite|cfile:modecreate|cfile:modenotrunca te); updatedata(true); cstring str=m_password; str+=m_username; file.write(str,str.getlength(); :afxmessagebox(“密码修改成功!“); m_password=“; m_username=“; updatedata(false); 2.管理数据库信息按钮功能 启动另一个应用程序“test6.exe”,改程序实现对数据库的管理。 void cdialog3:onbutusercon() winexec(“test6.exe“, 5); 4.3 数据库管理程序 添加 void ctest6view:onadd() updatedata(true); cstring str; try crecordsetadd m_pdatabase; if(m_pdatabase.isopen() m_pdatabase.close(); m_pdatabase.open(crecordset:snapshot,null,crecordset:none); m_pdatabase.addnew(); m_pdatabase.m_name=m_comstr1; m_pdatabase.m_username=m_comstr2; m_pdatabase.m_userpassword=m_comstr3; if(m_pdatabase.canupdate() m_pdatabase.update(); m_pset-requery(); m_pdatabase.close(); if(!m_pset-iseof() m_pset-movenext(); catch(cdbexception * e) e-reporterror(); return; str.format(“添加记录%s成功“,m_comstr1); m_comstr1=“; m_comstr2=“; m_comstr3=“; updatedata(false); messagebox(str,null,mb_ok|mb_iconinformation); 查询 void ctest6view:onbutlook() crecordsetadd m_pdatabase; updatedata(true); if(m_comstr1!=“) cstring col1=“name“; cstring col2=“username“; cstring col3=“userpassword“; m_pset-close(); m_pset-m_strfilter=col1+“=“+m_comstr1+“; m_pset-open(); m_comstr1=m_pset-m_name; m_comstr2=m_pset-m_username; m_comstr3=m_pset-m

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论