数据采集系统开发设计—毕业设计论文

上传人:痛*** 文档编号:78564279 上传时间:2022-04-22 格式:DOC 页数:47 大小:522.52KB
返回 下载 相关 举报
数据采集系统开发设计—毕业设计论文_第1页
第1页 / 共47页
数据采集系统开发设计—毕业设计论文_第2页
第2页 / 共47页
数据采集系统开发设计—毕业设计论文_第3页
第3页 / 共47页
点击查看更多>>
资源描述
数据采集系统开发信息与管理科学学院计算机科学与技术专业摘要:近年来,农业信息化技术迅速发展,为农业可持续发展带来了重大突破。目前,我国农业信息化技术研究主要集中在数据库与信息管理系统、专家系统、决策支持系统、地理信息系统等方面,这些农业信息系统都需要大量实时,有效数据的支持。如决策系统必需根据采集到的客户数据才能做出决策并不断的自学习。因此数据采集是各种农业信息系统的不可缺少的组成部分。本论文就是围绕着数据采集系统服务器端的开发展开论述的。首先介绍了数据采集系统在农业中的需求;其次针对此系统的开发工具及系统模式的选择做了深入的讨论;然后针对所选的工具结合系统编码深入讨论开发中所用的知识点;最后对此次开发做了详细的总结并致谢。关键词: 套接字;C/S;MFC;VC+6.0The Data Collection System DevelopmentAbstract: In recent years, the information technique application to agriculture is developed rapidly, has brought the great breakthrough to agricultural continuable development. At present, the research of IT application to agriculture of our country mainly concentrate in such aspects as database, information management system, expert system, DSS, geographical information system. These agricultural information systems all need a large number of real-timely, the support of the effective data. For example: Decision system could make decision and learning by oneself constant according to customer data got to gather. So the data are gathered it is indispensable components of different agricultural information systems.This thesis was launched describing around the development of the server end of the data collecting system. Have introduced the demand of the data collecting system in agriculture at first; Secondly has done the deep discussion to the developing instrument of this system and choice of the system mode; Direct against tool selected combine systematic code discuss the knowledge used is ordered develop, thoroughly; Made detailed summary to this development and express thankfulness finally.Keywords: Socket;C/S;MFC;VC+6.01 引言1.1 开发背景随着国家各项农业政策的颁布,科技兴农已经成为现代农业发展聚集的一个焦点;对于按照旧的方法去改良农业已经变得得不偿失,与此同时计算机技术在农业上的应用为农业可持续发展带来了重大突破。目前,我国农业信息化技术研究主要集中在数据库与信息管理系统,专家系统,决策支持系统,地理信息系统等技术,这些农业信息系统基本上都需要大量实时,有效数据的支持。如决策系统必需采集到客户的数据才能根据数据做出决策并不断的自学习。因此数据采集是各种农业信息系统的不可缺少的组成部分。 设计该系统的目的就是为了实现对客户数据的收集并根据上层推理机做出决策反馈给客户以解觉在农业生产中所遇到的各种问题。作为服务器端的此系统还包括对土壤的采集与分析(包括土壤含水量,土壤肥质等)。因此本系统就要完成以下三个基本任务:与客户端通讯、与土壤分析仪的连接以及与推理机的通讯。考虑到整体系统的易用与强大有效的功能,我们把系统做了如下的划分:数据采集系统服务器端、推理机、土壤分析仪、客户端手持设备。考虑到系统的服务器端、推理机需要承担比较大的工作量,所以我们决定把服务器端和推理机均分布到强大并且成熟的Windows2003上;考虑到系统的易用及方便性,我们把客户端制作成一个无线手持设备,它可以方便的供用户使用;考虑到土壤分析仪的户外工作方式,我们也把它作为一个分支从系统中分离开来,并可以和系统完成连接。我所实现的就是服务器端这一个模块,它像计算机主板一样在整个系统起到了插座式的作用。本系统解决了在现代农业信息技术研究中由于数据缺乏而造成农业信息化不能彻底落实的问题,此系统为农业决策、生产管理等提供有效支持,并有效的解觉农业生产中所遇到的各种问题。1.2 数据采集系统简介本论文的主题是数据采集系统的开发,那么什么是数据采集系统呢?针对各种数据采集系统我们怎么选择呢?下面将做简要的介绍:1.2.1 什么是数据采集系统?数据采集系统,是一种具有实验室或现场进行实时数据采集、自动存储记录、信号预处理、即时显示、即时状态分析、自动传输等功能的自动化设备;是一种用来采集信息成文件或分析一些现象的产品或过程。在最简单的形式中,技术人员将烤箱的温度记录在一张纸上就是数据采集。随着技术的发展,通过电子设备,这个过程已经得到简化和变得比较精确、多用途和可靠。设备从简单的存储器发展到复杂的电脑系统。数据采集产品像聚焦点一样为系统服务,和一系列产品一起,诸如传感器显示温度、水流、程度或者过程。1.2.2 数据采集的发展史数据采集技术在过去30到40年以来已经取得了很大的飞跃。举例来说,在 40 年以前,在一个著名的学院实验室中,为追踪用青铜做的坩埚中的温度上升情况的装置是由热电偶、继电器、查询台、一捆纸和一支铅笔。今天的数据采集很可能在PC机上自动处理和分析数据,有很多种可供你选择的方法去采集数据。至于选择哪一种方法取决于多种因素,包括任务的复杂度、你所需要的速度和精度、你想要的证据资料等等。无论是简单的还是复杂的,数据采集系统都能够运行并发挥它的作用。随着软件的飞速发展数据采集系统又有了进一步的发展,数据采集系统开始采用软件发展的模式,发展为划分系统模块,对数据采集系统的功能进行划分。把数据的采集功能模块和数据处理模块划分开来,数据采集系统开始有了非常快的发展。在近阶段数据采集系统又有了新的发展模式,把系统划分为三个主要的功能模块,利用系统的便宜性,把数据采集系统集成到嵌入式系统中,然后利用计算机的高效性处理数据采集所采集到的数据,并把处理的数据返回给客户端。1.2.3 数据采集系统的选择没有哪一种数据采集系统能够适应所有情况。回答下列各问题,可能帮助你决定选哪一种数据采集系统最适合你的实际情况:1系统跟我的应用匹配吗?我是选择一个纯单片机的系统还是选择一个单片机与计算机结合的? 2它的成本是多少?包括开发成本与硬件成本,比如:我是用SQL SERVER还是用Oracle?我是用Windows平台还是选择Unix平台?3它有多容易使用?一般的操作员可以使用它吗?对于它的使用还需要额外的培训吗?针对以上的情况与开发此系统的需求,我采用手持设备与计算机相结合的开发方法。采用易用的Windows平台。1.2.4 未来的展望随着无线通信及Web技术的发展,数据采集系统与无线通信及Web技术的结合实现了集控制、管理、信息、网络于一体的自动化系统,已成为各个行业不可或缺的一部分;随着人工智能的发展、专家系统的出现,数据采集系统会在各个行业起到更大的作用。2 开发工具及系统模式的选择2.1 B/S与C/S及智能客户端简介及比较2.1.1 C/S应用程序简介 服务器具有数据采集、控制和与客户机进行通信的功能,服务器程序负责有效地管理系统资源;客户端则包括与服务器通信和用户界面模块。这种模式我们称之为“瘦服务器/肥客户机”的模式1。主要优点: (1)客户机具有数据处理能力,可以减轻服务器的负担,能充分发挥客户端的硬件资源。 (2)交互性强、提供更安全的存取模式、降低网络通信量,通信的可靠性比较高。 (3)数据安全性高,只有通过客户端的合法访问才能有效的获得有效的数据。 (4)由于C/S在逻辑结构上比B/S少一层,对于相同的任务,C/S完成的速度总比B/S快,这就使得C/S模式更利于处理大量数据。 它有以下缺点: (1) 安装难。除了要安装服务器软件外,对每台客户机都要安装客户软件的一份拷贝。 (2) 维护难。由于共享的企业逻辑在每个客户端都有一个副本,使得管理、维修费用高、难度大、工作繁杂。 (3).升级难。由于应用系统的企业逻辑写在客户端的应用程序中,所以当系统需要改变时,所有客户端的应用程序都必须改变,使得数据库系统的开发维护成本提高。 (4).平台有关性。数据必须在客户端或服务器上才能访问,带来不便。2.1.2 B/S应用程序简介B/S模式是一种以Web技术为基础的新型的MIS系统平台模式1。是一个三层结构的客户服务器体系。第一层客户机是用户与整个系统的接口。客户的应用程序精简到一个通用的浏览器软件。第二层Web服务器将启动相应的进程来响应客户的请求,并动态生成一串HTML代码,其中嵌入处理的结果,返回给客户机的浏览器。第三层数据库服务器的任务类似于C/S模式,负责协调不同的Web服务器发出的SQL请求,管理数据库。总之,该结构由客户端浏览器、WEB服务器和数据库服务器三部分组成。其主要优点: (1) 具有较高的灵活性和易用性,主要的开发和维护集中在服务器。 (2) 客户端只需安装浏览器,操作简单,可发布动态和静态信息。 (3) 通过公共接口(ODBC或ADO)能很好地与数据库结合,提供大量的动态数据,并可通过代理服务器技术发布内外信息。 (4) 系统升级方便。 (5) 维护成本低。 但B/S也具有自己的局限性主要体现在如下几个方面: (1) 客户端数据处理能力差,服务器的负担重,不利于大量数据的处理。 (2) 稳定性不好。由于在客户端把控制权交给了IE,所以有许多错误不可预知。 (3) 有一些数据的传输是明码的,没有真正的完全编译。所以速度与效率上都有所欠缺。 (4) 网络数据交换频繁,数据流量大,通信的可靠性相对来说比较差。因此效率较低。 2.1.3 智能客户端应用程序简介经过设计,智能客户端应用程序将C/S结构应用程序的优点与B/S结构应用程序的部署和易管理性的优点结合起来,尽管这两种方法之间的平衡的准确性质取决于确切的情况。 智能客户端应用程序通常具有形形色色的要求,因此在设计和实现方面会有极大的差异。但是,所有智能客户端都具有下列部分或全部特征: *利用本地资 *利用网络资源 *支持偶尔连接的用户 *提供智能安装和更新 *提供客户端设备灵活性许多应用程序不需要具有上述所有特征。当您设计您的智能客户端时,将需要仔细考虑您的应用程序方案,并且决定您的智能客户端应用程序要求具备上述哪些特征。要将上述所有特征合并到您的应用程序中,将需要进行非常认真的计划和设计,并且在很多情况下您将需要大量的实现资源。 2.1.4 对系统结构的选择基于以上三者的比较,我对本数据采集系统的服务器端采取C/S结构与智能客户端的折中方式,我们的系统采取了C/S架构,并且提供了系统升级的功能。2.2 VC+6.0与.NET及Java简介及比较谈论起现在比较流行的开发工具大家肯定都不陌生,针对底层的开发TC环境还是作为首选工具,如果开发一个基于Windows平台的服务器端呢?必需要有友好的GUI界面是肯定的了,作为服务器端执行效率也一定要高,另外还要能和数据库SQL SERVER交互。针对这些要求,我首先介绍一下现代流行的几种工具:2.2.1 VC+6.0 我使用这个工具有接近两年的历史,它给我的印象就是小巧、易用、生成的可执行文件效率非常的高。作为系统开发工具的它,它设计的非常的细,能很好的和底层通信,特别在处理消息时更是独树一帜,除了Delphi外再也没有能和它相比美的了。2.2.2 .NET与Java谈起这两个工具,在设计风格上基本上是类似的,它们似乎是为了共同的目的而开发的工具,平台移植性、Intelligence2、集成非常多易用的类库等。它们的最大特点:易于RAD开发,易于平台移植。缺点:效率比较低2.2.3 开发工具的选择:基于以上的比较,VC6.0以它的高效性、对系统底层API函数的很好封装、从C+继承来的面向对象的优势3,4,无疑成为非常好的Windows平台上的开发语言,很显然VC6.0能更好的胜任此数据采集系统服务器端的开发。3 需求及可行性分析3.1需求分析正如在引言中所述,一个好的数据采集系统对现代农业发展起着至关重要的作用;传统形式的把数据采集和处理集成到一个单片机上的数据采集系统已经不能满足现代农业发展的需要。而我所开发的数据采集系统正是抛弃了旧的模式、运用新技术、集计算机、手持设备、土壤分析设备为一体的数据采集系统;它能很好的满足现代农业发展的需求。下面我简要的介绍一下本系统要实现的功能、及特点:1:高效的数据处理2:方便易用的用户界面3:缜密的数据推理帮助你解决所遇到的各种问题4:很好的系统兼容性,适用于Windows基于NT所有平台5:很好的系统交互性3.2可行性分析针对以上的功能需求5,我对本系统开发所需作一个简要的介绍;在技术方面:此系统主要用到如下几种技术:1:数据库2:Socket通讯编程6, 133:组件交互4:基于GUI的编程对于数据库的选择上,我选择了SQL SERVER 2000。它非常的易用,并且能很好的和微软件的编程工具集整合到一块7。对于网络编程上我采用了Winsock 2.0实现网络的通讯,可以很好的和各种基于TCP/IP8的通信软件通讯。对于实现GUI界面的编程,及组件的交互,我选择了使用VC+6.0,它的可视化开发环境及对组件完整的封装能很好的胜任此需求。4 系统规划4.1项目规划为了完成用户需求,便于用户使用,此软件必须具有良好的人机界面,使用户能很好的上手。本软件是专用于数据采集、通信、和推理机交互等功能于一体的软件。为了适合以后系统的可扩展性提供系统更新的要求,本软件必须从分析、设计到具体编程,全部采用面向对象的方法,融合了最新的计算机编程技术,在满足严格的可靠性实时性的基础上,完成系统可扩展性、可用性、可维护性。因此,本软件必需要出于设计成一个非常合格的数据采集系统的目的出发来规划。本软件具有以下几个主要模块:界面美化公共模块此模块是专业用于为各个对话框做系统的美化而设计的,所以要以动态链接文件的形式出现,程序初始化必须载入此模块。服务器通信模块此模块是对CSOCKET 类的更好的封装,以适合与无线设备完成通信的功能。模拟客户端通讯模块此模块用于设计一个测试的客户端的通信部分。数据库交互模块本模块完成与SQL SERVER的交互。主界面及配置模块完成简单的系统配置、主界面显示。以下对各个模块作详细规划:4.2 公共模块为了美化系统的界面,特意使用了美化对话框模块,本模块可以读取皮肤文件,并把所读到的皮肤应用到系统中,让软件看起来十分的美观。本模块是由公共的动态链接库SkinMagicTrial.dll实现的,此动态连接库使用起来非常的简单,留有几个主要的接口:InitSkinMagicLib接口用于初始化美化界面模块;LoadSkinFromResource接口是用于从资源中读取皮肤,以便用此皮肤美化界面;ExitSkinMagicLib接口是用于在系统退出时释放所占用的皮肤资源。4.3 服务器通讯模块此模块实现了基本的基于TCP通信的服务器端,并封装了CSOCKET类,使通信接口非常的方便使用,并能很好的兼容用各种语言、各种方式实现的基于TCP的通信;并且本模块加入了出错处理功能;并且提供的有IP地址与域名之间的DNS解析功能,使系统不论填入IP地址还是填入域名都能很好的运行;本模块采取了留出通信端口让用户实现,以防止系统的端口和其它软件的端口冲突;本模块负责着整个系统与客户端的交互工作。从根本上说,本模块是本系统的其中的一个核心模块; 4.4 模拟客户端通讯模块由于无线手持设备的开发和服务器端的开发同步进行的,为了预防系统开发中出现不可预料的错误,本系统自制了一个模拟客户端和服务器端通信。此客户端类似于服务器端,它实现了基于TCP的客户通信功能。4.5 数据库交互模块本模块提供了系统和SQL SERVER2000 交互的能力,它对Crecordset类进行了封装,实现类型安全的访问数据库。它利用CRECORDSET的游标机制,不但可以正向访问数据库,并且还提供逆向的访问数据库,能高效的实现数据库访问。并且还提供了直接的SQL访问数据库的接口,能够创建表、向表中写入数据,以满足系统记录从客户采集来的数据的需要。4.6主界面模块本模块主要利用了MFC中的类Cdialog,并利用MFC中友好的界面工具,提供了方便、宜用的主操作界面比如:我们对IP地址输入栏使用了IP地址输入控件,利用此控件每输入3位IP节点后会自动的跳到下一个节点;本模块整合了各个系统模块、提供了实现各个模块的交互以完成系统所需的功能;本模块调度了系统美化模块,使本系统的界面具有特别美观的各种效果鼠标悬停、文字渐变色等效果。总之,本模块是我的这个数据采集系统的总插槽,在系统设计中起着非常重要的作用。4.7 配置模块本模块提供了系统的配置,实现了系统端口的配置、系统图标的更换、系统是否开机启动、系统是否前端显示、系统密码、系统更新的方式等功能。本模块的配置是通过INI文件来记录的,它通过一个专门封装的类CiniFile来写入或读取INI文件的。当系统启动时本模块被系统加载,系统和本模块进行交互利用本模块读取配置文件47图1 系统工作流程5 系统设计与实现5.1主界面模块的设计与实现5.1.1系统工作流程设计与实现工作流程如图1所示:系统启动实例化系统资源-调用ini文件设置系统-启动服务-调用网络模块-等待客户连接-接受连接请求-调用数据库模块-和客户交互-退出系统启动过程关键点解释:1:每个运行于Windows上的系统都要在启动时实例资源,开启消息循环2:启动服务后的消息队列指的是网络服务的消息循环。3:客户端交互是一个多线程的过程,系统会一直监听并和连接客户交互5.1.2 主界面图及模块类图函数解释图2 主界面界面操作介绍:1: 服务器IP框允许你自己指定本机的IP地址,系统启动后会自动搜索本机的IP并把IP填写到这个IP框,你可以通过更改设置来改变。2: 端口则是供你指定通信所占用的端口号。3: “更改设置”按钮用于调度设置更改对话框。4:退出按钮供退出本程序方便的需要。5:消息显示框可供管理员查看本系统和客户端交互的过程。6: 开机启动指Windows运行后本系统是否自动运行7:前端显示指系统是否显示在所有Windows窗口的最上面8:系统钩子指是否启用进程保护9:退出密码指系统退出时是否需要密码10:壮态栏指示的系统的运行壮态发送消息、客户连接等。图3 类Cexample2_ChatRoomDlg的类图主界面类图9函数解释:1:OnStartSev函数负责与通信模块,和系统配置模块及数据库读取模块交互,它负责通过检查系统配置中的端口号及IP地址等,然后把这些信息传输给通信模块,并启动服务器端。2:OnOption函数负责和系统配置模块交互,它启动系统配置模块。然后从数据库中读取数据,以留作传给客户端用。3:ReadMyFile函数用于读取系统配置文件。4:OnSetPassWord函数用于设置系统密码。5.1.3主控模块关键代码的实现:/访问数据库模块,并对它做初始化g_crop.Open(_T(arg);g_domain.Open();/让它循环一遍,以得到总共有多少条记录,目的是设置/动态数组的大小,以记录发送数据的ID号while(!g_domain.IsEOF() g_domain.MoveNext();g_domain.MoveFirst();for(UINT i = 1; !g_domain.IsEOF(); i+)CString strID; /返回给用户信息在数据库中的编号CString strNum; /返回给用户信息的编号strNum.Format(%u, i);strID.Format(%d,g_domain.m_id);strID.Insert(0, g_strFlag);strID.Insert(strID.GetLength(), g_strFlag);g_strDisMessage+= ( + strNum + ) + + g_domain.m_leibie + rn;g_domain.MoveNext();g_strDisFirstTab = g_strDisMessage;g_strBackData.Insert(0, r1);g_strBackData.Insert(g_strBackData.GetLength(), n);m_strWelcomInfo = g_strBackData;if(!m_bInit)m_bClient=false;m_bInit=true;if(m_pListenSocket.Init(GetDlgItemInt(IDC_PORT),this)=FALSE)m_bInit=false;m_bar.SetText( 服务开启失败, 0, 0);return;m_bar.SetText( 正在监听, 0, 0);m_conPort.EnableWindow(false);/把窗口最小化到托盘状态ToTray();5.2服务器模块及模拟客户端模块的设计5.2.1通信模块缩略类图及函数解释图4 类CserverSocket的类图通信模块类图函数解释:Init函数用于初始化Socket并启动监视Oaccept用于接受客户端传来的连接GetIpAddress函数用于获取主机的IP地址GetLocalHostName函数用于获取主机的机器名SendMessageA用于发送消息OnReceive用于接收消息ErrorReason用于错误处理图5 类CClientSocket的类图5.2.2通信模块关键代码说明:启动Socket并监听函数的实现BOOL CServerSocket:Init(UINT port, CExample2_ChatRoomDlg* dlg)m_uPort=port;m_dlg=dlg;if(Create(m_uPort)=FALSE)AfxMessageBox(Server Socket Create Error);return FALSE;if(this-Listen()=FALSE)AfxMessageBox(Server Listen Error);return FALSE;m_dlg-SetDlgItemText(IDC_SHOWTEXT,开启服务成功!);return TRUE;接受客户连接代码的实现:void CServerSocket:OnAccept(int nErrorCode) m_dlg-ProcessPendingAccept();CSocket:OnAccept(nErrorCode);发送消息代码的实现:BOOL CClientSocket:SendMessage(CMessg * msg)if (m_aSessionOut != NULL)msg-Serialize(*m_aSessionOut);m_aSessionOut-Flush();return TRUE;else/对方关闭了连接m_bClose=true;CloseSocket();m_dlg-CloseSessionSocket();return FALSE;5.3 数据库交互模块的设计与实现数据库模块类图函数,如图6所示。此类是从CrecordSet派生出的,它的作用类似于ADO.NET中DataReader类,但它又不同于DataReader类,因为它支持游标的双向移动。同时它也比较类似于DataSet类,此类对数据库进行了强类型化操作,以便于类型安全的访问数据库中的数据。 图6 类CDomainSet的类图CdomainSet 此类的构造函数DoFieldExchange 支持数据交换操作的函数GetDefaultSQL 函数返回给父类Crecordset打开默认的表GetDefaultConnect函数用于获取默认的数据集图7 设置界面功能说明: 1:系统图标设置2:系统的前端显示设置3:系统升级设置4:开机启动系统设置5:系统密码设置6:网络端口设置7:进程保护及系统优先级设置图8 类CsetSystem的类图图9 类CselfRun的类图类图8及类图9的解释:CsetSystem类是用于设置系统的主要类。CselfRun类是用于设置系统开机自动运行。类CselfRun的SetAutoRun函数负责开机自动运行图10 类CnetSet的类图图11 类CsetPassword的类图系统模块主要函数解释:CNetSet类用于系统的更新:此类是为了以后系统的扩展,进行系统更新用的,它支持按周、按月、按日三种更新方式。CsetPassword类主要用于设备系统密码:此类根据从配置文件读取的内容和配置文件进行数据的交换。它负责建立起配置文件类与设置密码界面之间的桥梁。函数说明:OnAutoUpdate是用于自动更新设置的OnPeerWeek则是用于按周进行更新OnUpdateAtOnce用于立即进行系统更新图12 类CiniFile的类图5.4.2系统设置模块关键代码的实现:以下的两个类函数实现了系统配置的读取及写入CString CIniFile:GetFileString(CString Section, CString Item, CString Value)ReadIniFile();/打开文件if(bFileExist = FALSE | FileContainer.GetSize() 0)return Value;/文件打开出错或文件为空,返回默认值int i = 0;int iFileLines = FileContainer.GetSize();CString strline,str;while(iiFileLines)strline = FileContainer.GetAt(i+);strline.TrimLeft();if(strline.GetAt(0)=)/查找Section,第一个必须为str=strline.Left(strline.Find();/去掉右边str=str.Right(str.GetLength()-str.Find()-1); str.TrimLeft();str.TrimRight();if(Section = str)/找到Sectionwhile(iiFileLines)strline = FileContainer.GetAt(i+);strline.TrimLeft();if(strline.GetAt(0)= /如果到达下一个,即找不到,返回默认值return Value; str = strline.Left(strline.Find(=);/去掉=右边str.TrimLeft();str.TrimRight();if(Item = str)/找到Itemstr=strline.Right(strline.GetLength()-strline.Find(=)-1); str.TrimLeft();str.TrimRight();return str;return Value;/找不到,返回默认值return Value;/找不到,返回默认值void CIniFile:WriteFileString(CString Section, CString Item, CString Value)int i = 0;int iFileLines = FileContainer.GetSize();CString strline,str;while(iiFileLines)strline = FileContainer.GetAt(i+);strline.TrimLeft();if(strline.GetAt(0)=)/查找Section,第一个必须为str=strline.Left(strline.Find();/去掉右边str=str.Right(str.GetLength()-str.Find()-1);str.TrimLeft();str.TrimRight();if(Section = str)/找到Sectionwhile(iiFileLines)strline = FileContainer.GetAt(i+);strline.TrimLeft();if(strline.GetAt(0)=/找不到break;str = strline.Left(strline.Find(=);str.TrimLeft();str.TrimRight();if(Item = str)/找到Itemstrline = Item + = + Value;FileContaineri-1 = strline;return;/找不到Itemstrline = Item + = + Value;FileContainer.InsertAt(i-1, strline);return;/找不到Section/直接在最后加入Section,Item,ValueFileContainer.Add( + Section + );FileContainer.Add(Item + = + Value);return;6 系统测试6.1 单元测试首先测试公共模块,由于此模块是针对对话框实现美化功能,所以在测试过程中需要建一个对话框工程,然后对此工程加上状态栏、按钮、文本框、标签、IP地址控件、图像框等各种控件,然后在此工程中对美化模块进行功能调用。其次测试的是系统的核心模块网络通信的服务器端模块,要测试这个模块就要找一个支持通信的客户端,然后用此客户端发送消息,如若出现问题则直接利用VC+6.0的强大的调试器对系统进行修改。直至所有考虑到的地方均正常的运转。再次测试数据库交互模块,要对此模块进行测试,关键点有如下几点:如果数据表是空白表时系统会报告错误吗;如果所访问的数据表不存在时系统能否按预期的处理方式进行处理;在写入数据到新表中时是否正确的进行了写入。然后要测试的是系统配置模块,此模块看似简单但它却在系统中起着非常重要的作用,如果此模块初始化失败的化整个系统就像机器没有了油一样,无法正常运转。它对系统的执行方式起着指导的作用;对它的测试主要是进行读写两方面的测试,当有系统的配置改变时,看能否正确的把改变反馈到文件中去。在系统加载期间能否正确的加载数据。6.2 集成测试通过各个单无模块的测试及调试不存在问题后就要进行集成测试了。为此我们必需建一个模拟的客户端,利用此客户端模拟无线设备所能做的所有工作。当然了,测试的重点是在自定义的协议及系统集成后能否按预期效果运行两方面。7 关键技术7.1基于MFC的VC+6.0编程软件的特点首先,要了解VC+6.0则必须先了解C/C+语言9,10, 11。在计算机领域,C/C+语言相信一定无人不知、无人不晓。1970年,贝尔实验室的ken thompson开发了一种解释型的计算机语言被命名为B语言,但B语言没有流传开。1972年贝尔实验室的dennis ritchie在B语言的基础上进行改进,开发出了C语言。C语言最初主要用于unix系统,大多数unix系统的程序都是用C编写的。借助早期unix系统的流行和C本身的优秀品质,C语言从此名扬天下、威震四方。而后,伴随着面向对象概念的提出和应用,形成了C+语言,ATT公司于1985年正式推出了C+1.0版,它是c语言面向对象的扩充。C+1.0增加了类和实例、单继承、重载、虚函数、友员、内联等面向对象的程序设计机制。1989年推出的C+2.0版和1993年推出的C+3.0版分别增加了支持多继承、保护接口、模板和异常等。(有一点值得说明,直到现在C+并没有正式的标准,以上所说的版本是以ATT公司的版本为基准的。)C+被公认为“最好的面向对象的编程语言”,是学习面向对象编程技术人员较好的启蒙语言。当VB成功推出后,microsoft又将C+包装成为了面向windows的visual C+(以下简称VC)。从VC1.0到VC6.0,每一个版本的推出都激动人心。VC借助传统的C/C+的美名加上microsoft这个金字招牌,使广大的程序员和专业编程人员纷纷投靠在VC的大旗下。VC+是微软公司开发的C+语言开发环境,VC的特点是微软公司做了一个自己独有的类库MFC,里面封装了绝大多数的API函数,使得WINDOWS程序的开发变的很高效和易于理解,如果用API直接开发WINDOWS程序的话,将会是一件非常烦琐的工作,WINDOWS对资源的管理是非常严格的这与DOS可直接用中断处理程序和I/O指令操作硬件端口是截然相反的;所以这个MFC就是VC和其他公司出产的编译器的最大区别了,当然了别的公司也有自己封装API的类库比如DELPHI(这个不是C+的是pascol的)等等,不过由于微软公司掌握着WINDOWS内核的全部秘密,所以他们的编译器与其他公司的相比有其独到的优势。7.2 面向对象的程序设计思想第一, 快速高效:C语言从诞生起最大的优点就是速度快,用C编写的代码可以达到汇编语言编写的代码执行速度的7080。VC完全继承了这一特点,并且由于代码优化工作做的比较好,其代码的结构紧凑、效率极高9,10,11。第二,语言简练:VC还延续了传统C语言的简练风格,如pascal语言中的begin end在VC中可以用简单的表示。第三,贴近硬件:C语言被很多专业人士称为“介于高级语言和汇编语言之间的一种语言”由于C语言贴近硬件便于对硬件直接操作因此又有“系统程序设计语言”的美称。这一特点使得C语言特别擅长编写系统程序,如windows就是用C语言编写的。VC具有同样的优良品质9,10,11。第四,灵活多变:VC像C语言一样提供给编程者一个很自由的编程环境,丰富的表达方式可以表现程序的匠心独运,用VC编程可以让你体会到什么叫“天高任鸟飞”。 你可以彻底地控制整个开发环境。其它语言则更多地趋向于庇护程序员,当要做一些基本的东西时,它们会做得很好。第五,便于移植:C语言在unix系统上取得巨大成功的一个主要因素是C语言的移植度好,不依赖于特定的硬件环境,可以方便地跨平台移植。使用Visual C+主要的原因之一就在于它的灵活性。不幸的是,当你需要使用像C+这样的语言删除编程中的繁文缛节,并把任务完成时,这种保护作用就变成了开发工作的障碍。长期以来,Visual C+一直拥有能够创建短小高效程序的美誉。使用这种语言编写的程序几乎可以与用汇编语言编写的程序达到相同的运行速度,并且避免了汇编语言存在的各种问题。C+实际上是介于汇编语言中寄存器编程和类Pascal编程环境之间语言。 C+是编写诸如操作系统、设备驱动程序以及动态链接库(DLL)的强大语言,这三种领域代码的开发依然是Visual C+的主要优势。Visual C+生成的短小、快速的代码在操作系统类对时间要求很高的系统中获得了极高的赞誉。 同时Visual C+6.0中具有一些独特的特性,Microsoft添加到这个版本的Visual C+中的最新特性之一是更佳的原型能力,这一点通过增强的向导来实现。现在,这个特性还不能把Visual C+提升到像Visual Basic向导相同的水平上,但它确实减少了开发应用程序的入门时间。另外,增强的向导使得这个版本的Visual C+比以前版本更为友好。7.3 MFC类(主要几个)的衍生关系简述几乎所以的MFC (Microsoft Foundation Class微软基本类库)全部是从CObject这个根类衍生出来的,由CObject这个类衍生出以下一个重要的类:CCmdTarget他是MFC类库中消息映射体系的一个基类(消息映射是把命令或消息引导给用户为之编写的响应函数);再由CCmdTarget派生出应用程序线程类CWinThread和窗口类CWnd以及基本文档类CDocument(CWinThread类的对象代表在一个应用程序内运行的线程;CWnd类提供MFC中所有的窗口类的基本功能;CDocument类为用户定义的文档类提供基本的函数功能如:各类操作文档)。CWinThread类又派生出应用程序对象类CWinApp,可以通过他来继承Windows应用程序对象,同时提供MFC中所有的窗口类的基本功能;CWnd类派生出框架窗口类CFrameWnd、对话框类CDialog和视图类CView,CFrameWnd用以完成Windows文档界面重叠或弹出式框架窗口,以及管理窗口的成员,在其派生类中加入成员变量,实现窗口的消息处理与映射,CDialog类是在屏幕上显示的对话框基类(包含模式对话框和非模式对话框),CView类为用户提供视图类的基本功能。文档类派生自CDocument,应该包括任何属于应用程序文档的数据。对于真实的C+封装,不允许文档类对它的数据进行直接访问(甚至从视图类也不行),而应包含封装函数以访问它的数据。文档类还应包括装入和保存一个文档所必须的所有功能,这些文档包括从简单的二进制文件到ODBC数据库。如果应用程序不做任何其他事情而只访问一个ODBC数据库,则文档类可以只包含打开和关闭那个数据库所必须的逻辑,因为数据库是数据的主要仓储地,文档类对它自己来说是独立的。从一个存储设备中获得信息,并把它取出来交给视图,但是几乎不把信息存储到其他类中。一份文档可以有多个相关视图,文档作为窗口标准命令的一部分,接收标准用户界面组件的命令,当文档数据被修改时,各个视图都必须响应这些修改。应用程序类从CWinApp派生,并不对任何窗口进行控制。应用程序对象为用户提供了初始化应用程序(以及他的每一个实例)和运行应用程序所需的成员函数。除了控制应用程序的创建和卸载外,它自身应该有少数重要的附加功能,这些功能包括处理命令行标志和提供一种定制的打开文档的方法。应用程序类还提供一些应用程序范围的服务,诸如后台处理和超分类等。每个使用MFC的应用程序只包含一个从CWinApp继承的对象。主框架类从CFrameWnd类派生,控制应用程序的主窗口,负责所有应用程序范围的界面,包括工具栏、状态栏、菜单和对话条。然而,如果这些条中的任何一个有新增的功能的话,它应该被封装到它自己的类中。对用户优先选项的支持也通常可以在主框架类中发现。有三种方法可以构造一个框架窗口:用Creat直接构造、用LoadFrame直接构造和用文档模板间接构造;使用Creat成员函数传递框架构造参数作为立即参数,LoadFrame从资源中获取大多数缺省值,为了能使资源被LoadFrame访问,所有的资源必须有相同的ID(如,IDR_MAINFRAME)。当一个CFrameWnd对象包含视图和文档时,它们由框架类间接构造而不是由程序员直接构造,由此他们之间的联系通过了CDocTemplate对象,他将视图的构造、视图与文档相联接,他的构造函数的三个参数指定了三个类(文档、框架、视图)的CRuntimeClass。视图类从CView派生,他是框架窗口的子窗口,视图类通过消息映射处理消息。这个类应当包括查看和编辑文档类中数据所必须的所有逻辑。任何专门作用于文档的菜单或工具栏命令,诸如剪切或粘贴,应该在视图类中得到处理;所有影响视图的鼠标消息应当在此处处理;所有绘图、报表、编辑、选择和打印应在此处使用;所有的对话框和弹出式菜单应在此处产生。如果这个类或任何一个类变得规模很大时,应该分解出任何公共的功能以形成一个新的基类。创建一个新的CMyBaseView类,并把一些基本功能放到该类中;或者可以把一些功能封装到它自己的类中。视图中选择、剪切和粘贴函数是它自己的类的一个很好代表。其他类应尽可能多地封装属于它们自己的功能。对话框类应包括提示用户所必需的任何内容,对话条、工具栏和任务栏也应该这样。一个自画控件应当从它自己的类中绘制。每当从应用程序中分解出公共功能,并把它们放到一个基类中时,可以把新的基类放进一个MFC扩展类中。然后就可以把该新的MFC扩展类放进一个动态链接库中,应用程序便可以共享这一功能了。注意作为另一个经验作法,如果发现一个类经常访问另一个类的函数和数据,则有必要把那个功能放到另一个类中。7.4 Socket简述7.4.1 Winsock 的基本概念Socket在英文中的意思是插座的意思,它的设计者实际上是暗指电话插座,因为在Socket环境下编程很像是模拟打电话,Internet的IP地址就是电话号码,要打电话需要电话插座,在程序中就是向系统申请一个Socket,以后两台机器上的程序“交谈”都是通过这个Socket来进行的。对程序员来说,也可以把Socket看成一个文件指针,只要向指针所指的文件读写数据,就可以实现双向通信。利用Socket进行通信,有两种主要方式。第一种是面向连接的流方式。顾名思义,在这种方式下,两个通信的应用程序之间先要建立一种连接链路,其过程好像在打电话。一台计算机要想和另一台计算机进行数据传输,必须首先获得一条链路,只有确定了这条通路之后,数据才能被正确接收和发送。这种方式TCP协议。第二种叫做无连接的数据报文方式,这时两台计算机是把数据放在一个信封里,通过网络寄给对方,信在传送的数据报文方式,这时两台计算机像是把数据放在一个信封里,通过网络寄给对方,信在传送的过程中有可能会残缺不全,而且后发出的信也有可能会先收到,它对应的是UDP协议。流方式的特点是通信可靠,对数据有校验和重发的机制,通常用来做数据文件的传输如FTP、TELNET等:数据报文方式由于取消了重发校验机制,能够达到较高的通信速率,可以用于对数据可靠性要求不高的通信,如实时的语音、图像传送和广播消息等。在ISO的OSI网络七层协议中,Socket主要负责的是控制数据的输入和输出,也就是传输层和网络层。Winsock屏蔽了数据链路层和物理层,它的出现给Windows下的网络编程带来了巨大的变化。7.4.2 Winsock的编程特点在网络通信中,由于网络拥挤或一次发送的数据量过大等原因,经常会发生交换的数据在短时间内不能传送完,收发数据的函数据因此不能返回的现象,这种现象叫做阻塞。Winsock对有可能阻塞的函数提供了两种处理方式阻塞和非阻塞方式。在阻塞方式下,收发数据的函数在被调用后一直要到传送完毕或者出错才能返回;在阻塞期间,除了等待网络操作的完成不能进行任何操作。对于非阻塞方式,函数被调用后立即返回;当网络操作传送完成后,由Winsock给应用程序发送一个消息,通知操作完成,此时可以根据发送的消息传出的参数判断操作是否正常。在编程时,应尽量使用阻塞方式。因为在阻塞方式下,用户可能会因为长时间的等待而失去耐心而关闭应用程序的主窗口,这样当网络操作的函数从Winsock的动态链接库中返回时,主程序已经从内存中删除,可能会造成内存的异常。7.4.3 客户机/服务器模式在TCP/
展开阅读全文
相关资源
正为您匹配相似的精品文档
相关搜索

最新文档


当前位置:首页 > 图纸专区 > 成人自考


copyright@ 2023-2025  zhuangpeitu.com 装配图网版权所有   联系电话:18123376007

备案号:ICP2024067431-1 川公网安备51140202000466号


本站为文档C2C交易模式,即用户上传的文档直接被用户下载,本站只是中间服务平台,本站所有文档下载所得的收益归上传人(含作者)所有。装配图网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。若文档所含内容侵犯了您的版权或隐私,请立即通知装配图网,我们立即给予删除!