产品故障信息管理系统说明_第1页
产品故障信息管理系统说明_第2页
产品故障信息管理系统说明_第3页
产品故障信息管理系统说明_第4页
产品故障信息管理系统说明_第5页
已阅读5页,还剩56页未读 继续免费阅读

下载本文档

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

文档简介

1、产品故障信息治理系统内容摘要本文介绍了如何使用Visual C+ 6.0编程制作彩色电视机故障信息共享系统,实现信息治理共享的自动化。由此实现了信息的增加、删除、修改、查看等功能,同时进而实现信息的安全治理,使信息的治理更加人性化,规范化。从而提高故障排除效率,提高信息利用率,有助于进一步提高生产效率。关键词: 信息治理 信息共享 故障 数据库AbstractThe main work of this paper is introduce how to use Visual C+6.0programming a Color TV Malfunction-Information In-Commo

2、n System, achieve the auto-manage of the Malfunction-Information. According these, this system achieves the informations function of add,delete,edit and view, it also get the information managed safety, so the management of the information will be more humanity & normalize. Thereby, it can improve t

3、he efficiency of the malfunctions elimination, enhance the exploitation of the information, and also help improving the efficiency of the produce by a large step.Key words: Information management Information sharesADO目 录 TOC o 1-3 h z u 前 言Visual C+是Microsoft公司开发的基于Windows操作系统的编程工具,它采纳一种巧妙的方法将Window

4、s的编程复杂性封装起来,编程者能够比较轻松地进行Windows应用程序的设计。Visual C+ 6.0继承了往常版本的优点,为用户提供了更为友好的可视化开发环境,是当今程序员首选的开发工具。它在编程的深入性、运行的快速性等方面具有专门强的功能。随着社会的飞速进展,信息治理系统已广泛地运用于各行各业。信息在企业生产经营中扮演着越来越重要的角色。企业内部和外部之间的信息变得越来越频繁,方式越来越复杂,信息量日益增大,速度越来越快,丝毫不亚于企业的物质、能量交流,信息流在企业系统中所占份额逐渐上升。如此一来,企业信息治理才应运而生,成为企业治理的重要组成部分。企业信息治理的产生是企业治理进展到一定

5、时期的必定产物,是企业治理进展史上的划时代的进步。故障信息治理,一般是指设备或系统在使用中丧失或降低其规定的功能。故障治理,其目的是保证设备经常处于完好状态,严格操纵设备的故障发生,降低故障率,减少维修费用,延长设备的使用寿命。 而信息化建设对企业来讲无疑差不多成为企业在现代竞争社会中立足的重要因素。而从中国大陆企业现状来看,大部分企业的信息化建设差不多上依靠专业化软件公司。毋庸置疑,关于大规模的治理系统,例如CRM(Client Relation Manager),ERP(Enterprise Resource Plan)等,使用专业软件公司开发的产品,功能相对齐全,安全级不也相对较高。但关

6、于企业内部小范围内所需的一些小系统而言,如也依靠此种方式,势必会产生无谓的成本流失。鉴于这种形式,借助这次毕业设计的机会,在指导老师的关心下,通过一段时刻的努力,开发出了这套彩电共享系统。本系统要紧用于对已有故障信息进行更高效的治理,提高信息的利用率,改变了以往烦琐的查找,大大提高了故障的排除速度及正确率,对进一步提高生产效率具有十分重要的意义。 下面我们将按照软件工程学思想,对整个系统制作过程做个一般性阐述。1.系统设计1.1目标设计通过一个彩电故障信息共享系统,使生产工程部的故障处理工作系统化,规范化,自动化,从而达到提高故障排除效率,提高信息利用率的目的。1.2开发设计思想尽量采纳生产工

7、程部现有的软硬件环境及齐全的故障信息,从而达到充分利用现有资源,提高系统开发水平和应用效果的目的。系统应符合生产工程部资料治理规范,符合一般职员操作的规范,达到操作过程中的直观、方便、有用、安全等要求。系统采纳Visual C+环境,用ADO(ActiveX Data Objects)数据访问方式,采纳Microsoft Access 2000作为数据源,使整个系统易于使用及维护。系统采纳模块化程序设计方法,既便于系统功能的各种组合和修改,又便于未参与开发的技术维护人员补充、维护。系统应具备数据维护功能,及时依照数据变化进行添加、删除、修改、查询等操作,并加入拥护权限功能,使系统更加安全1.3

8、功能分析本系统功能分析是在系统开发总体任务的基础上完成的,本系统需要完成的功能如下:故障信息的输入、查询、修改、删除故障信息的打印系统用户治理,权限治理1.4功能模块设计在系统功能分析的基础上,考虑Visual C+程序编制的特点,得到图1所示的系统功能模块图。信息查询权限验证信息变动信息数据删除信息修改信息增加新信息治理员信息查询权限验证信息变动信息数据删除信息修改信息增加新信息治理员信息治理打印治理系统治理权限用户删除增加修改查询彩电故障信息共享系统信息治理打印治理系统治理权限用户删除增加修改查询彩电故障信息共享系统 图1系统功能模块图图2数据流程图2.数字库设计数据结构的好坏将直接阻碍到

9、系统的效率以及实现的效果。好的数据库结构会减少数据库的存储量、冗余度,数据的完整性和一致性比较高,系统具有较快的响应速度,简化基于数据库的应用程序的实现方法等。2.1数据库需求分析在认真研究资料治理过程的基础上,归纳出系统的数据流程图如上图2所示,所有数据均由治理员输入治理。依照图2的数据流程图,可得到所须设计的数据项和数据结构如下:故障信息,包括的数据项有显象管、机芯、机壳、器件、技术员、时刻、其他、信息名、具体内容等。权限验证,包括的数据项有用户名、密码等。由上分析,为此需要有2个数据表分不用来存放故障信息的用户信息。这两个数据表均用Access 2000实现。Access中的设计视图如图

10、3、图4所示,其中数据类型依照具体的数据字段来设置。图3 info1视图图4 login视图2.2数据库概念结构设计在分析需求的基础上,我们得到整个系统的E-R图如图5所示。3.创建应用程序本彩电故障信息共享系统采纳Visual C+ 6.0的ADO方法开发。工程创建具体步骤如下:打开Visual C+后,选择菜单“File/New”中的“Project”选项卡中的“MFC AppWizard exe”,设置工程名字为“CaidianGuzhang”,选择存储位置,单击“OK”。创建一个单文档应用程序,在Step1中,选择“Single Document”,然后单击“Next”按扭,进入“St

11、ep 2 of 6”一直单击“Next”按扭,直到进入“Step 6 of 6”。因为为了能使数据更直观,我们采纳列表形式,因此需要在本步骤中,选择CCaidianGuzhangView类的Base Class(基类)为ClistView。然后单击“Finish”,最后将出现确认窗口,如图6所示,检查无误后,单击“确定”图6 确认为了使程序能支持ADO数据库对象,应该在头文件stdafx.h(预编译头文件)中加入#import c:Program FilesCommon FilesSystemadomsado15.dll rename_namespace(AdoNS) rename(EOF,a

12、doEOF)using namespace AdoNS; 导入ADO库并在主程序入口:BOOL CCaidianGuzhangApp:InitInstance()中加入AfxOleInit();初始化COM环境。ADO (ActiveX Data Objects)是Microsoft开发数据库应用程序的面向对象的新接口,描述了软件中存取多种数据源的统一接口,并提供了实现ADO模型的COM组件,使得不同程序设计语言均可使用ADO。在NET Framework的System.Data命名空间中定义这些类-这些类表示到数据库的连接、数据库中的表,和表中所包含的数据类型。更广义地讲,ADO.NET确实

13、是Microsoft最新的数据访问策略。其要紧的优点是灵活,易于使用、速度快、内存支出少和磁盘遗迹小,简化了操作。ADO类的定义是作为一种资源存储在ADO DLL(msado15.dll)中,在其内部称为类型库。类型库描述了自治接口,以及C使用的COM vtable接口。当使用import指令时,在运行时Visual C需要从ADO DLL中读取那个类型库,并以此创建一组C头文件。ADO库包含三个智能指针:_ConnectionPtr、_CommandPtr和_RecordsetPtr。_ConnectionPtr通常被用来创建一个数据连接或执行一条不返回任何结果的SQL语句,如一个存储过程。

14、_CommandPtr返回一个记录集。它提供了一种简单的方法来执行返回记录集的存储过程和SQL语句。在使用_CommandPtr接口时,能够利用全局_ConnectionPtr接口,也能够在_CommandPtr接口里直接使用连接串。 _RecordsetPtr是一个记录集对象。与以上两种对象相比,它对记录集提供了更多的操纵功能,如记录锁定、游标操纵等。4.数据库操作预备由于本系统使用的是ADO方式访问数据库,因此能够使用从视表到记录集的映射。为了编程便捷,能够为数据库中的每个表映射一个记录集类(从CDaoRecordSet类继承)。映射关系如下表1所示。表1 记录集映射关系表格(视图)对应记

15、录集Info1CDataSetloginCLoginSetCDaoRecordSet封装了ADO记录集对象,用于治理一个来自表定义(基础表)或查询定义的记录集合。CDaoRecordSet对象有三种使用的原型,分不为table-type(基于单个数据表)、dynaset-type(基于组合查询)、snapshot-type(基于组合查询的静态拷贝)。对记录集的映射有两种方法:第一种是直接从CDaoRecordSet类创建记录集,同时动态绑定记录字段;第二种是使用ClassWizard创建CDaoRecordSet类的派生类,并利用DFX机制记录数据与记录集字段数据成员之间的映射。在本系统中,我

16、首先使用第二种方法,方法是在ClassWizard中单击“New Class”,进入下一窗口,设置类名为“CDataSet”,选择Base Class(基类)为CDaoRecordSet,然后单击“OK”,进入“Database Option”窗口,选中“ADO”,按扫瞄按钮后,选择需要映射的文件(此处为info1.mdb),具体过程如图7所示。最后在弹 图7 选择ADO数据库文件出的Select Database Table(数据表选择对话框)中选中要映射的表名(在此为info1)。单击“OK”即可。同样的方法,建立类“CloginSet”,映射的表名为login。然而此种方法把数据库访问路

17、径给固定了,我们能够从以下Visual C+自行建立的函数看出。CString CDataSet:GetDefaultDBName()return _T(D:visualMSDev98MyProjectsxiahuainfo1.mdb);为了能使系统在各个环境下都可正常运行,需要修改此函数,使数据库实现动态链接,修改后的函数程序如下:CString CDataSet:GetDefaultDBName()char path50;CString m_strDatabaseName;:GetCurrentDirectory(50,path); /得到当前应用程序所在的路径strcat(path,);

18、m_strDatabaseName=_T(path);m_strDatabaseName+=info1.mdb; /将所对应文件改成所要的数据库名return m_strDatabaseName; /返回数据库所在的完整路径同样的,我们也必须修改CLoginSet:GetDefaultDBName()函数。因为其内部程序与CDataSet:GetDefaultDBName()相同,因此我们就不再此列出。5.功能模块的创建 在链接了数据库后,接下来我们就能够开始进行各功能模块的创建。5.1系统主体窗体的创建在我们按照VC+的AppWizard创建完工程后,为了使主窗口框架更适合整个系统的操作,我

19、们有必要进行修改,重新创建。5.1.1主菜单的创建在WorkSpase中选择ResourseView,然后双击Menu文件夹,再双击IDR_MAINFRAME选项,单击右边窗口中“关心”旁边的虚线框,在双击或按回车键,就会出现“Menu Item Properties”对话框,在那个对话框中输入菜单项的内容,如图8所示。图8设置一级菜单二级菜单的设置差不多上都和图8相同,只是必须设置ID。按照这种方法,最终创建出如表2所示的菜单结构。表2 菜单结构菜单名称ID文件.打印ID_FILE_PRINT.打印预览ID_FILE_PRINT_PREVIEW.打印设置ID_FILE_PRINT_SETUP

20、.最近文件ID_FILE_MRU_FILE1.退出ID_APP_EXIT查看.工具栏ID_VIEW_TOOLBAR.状态栏ID_VIEW_STATUS_BAR信息治理.查询记录ID_RECORD_SEARCH.添加记录ID_RECORD_ADD.查看记录ID_RECORD_VIEW.删除记录ID_RECORD_DEL.更改记录ID_RECORD_EDIT权限治理.添加用户ID_USER_ADD.更改密码ID_PASSWARD_EDIT.删除用户ID_USER_DEL关心.关于xiahua 1.0ID_APP_ABOUT5.1.2右键菜单的创建为了实现操作的方便、快捷,我们在程序中加入了右键菜单

21、。在VC的主菜单中,按“Project”“New Project”“Components and Controls Gallery”即可进入“Components and Controls Gallery”对话框,然后再打开Visual C+ Components文件,再选择“Pop-up Menu”,单击“insert”,随后在跳出的对话框中选择“CxiahuaView”,最后单击“OK”。完成后,需要对其进行编辑。单击WorkSpase中的ResourseView,在Menu文件夹中选择CG_IDR_POPUP_MAIN_FRAME,之后边可在右边窗口对其进行编辑。编辑方法与主菜单相同,其

22、中各项的ID分不对应相应的菜单项,对应关系如表3所示。表3 右键菜单对应的菜单项ID菜单名称ID查看记录ID_RECORD_VIEW添加记录ID_RECORD_ADD删除记录ID_RECORD_DEL更改记录ID_RECORD_EDIT5.1.3工具栏的创建在WorkSpase中选择ResourseView,然后双击Toolbar文件夹,再双击IDR_MAINFRAM选项,就能够利用工具条编辑器(Toolbar Editor)编辑右边的工具条。本系统创建的工具条如图9所示。其中各按钮的ID分不对应相应的菜单项,按从做到右的顺序对应的菜单项ID如表4所示。表4工具条对应的菜单项ID次序ID1ID

23、_FILE_PRINT2ID_RECORD_ADD3ID_RECORD_DEL4ID_RECORD_SEARCH5ID_RECORD_ALL6ID_APP_ABOUT(注:其中第5个是显示全部数据,实现刷新功能,在菜单中没有)5.1.4数据显示与表格控件的创建因为CxiahuaView是从ClistView继承的,因此创建完工程后,就差不多有表格控件存在。而我们目的确实是使控件上的显示更符合系统的使用,因此我们有必要对初试界面也确实是对CXiahuaView:OnInitialUpdate()函数进行修改,修改后的函数如下:void CXiahuaView:OnInitialUpdate()C

24、ListView:OnInitialUpdate();/ TODO: You may populate your ListView with items by directly accessingCListCtrl &ctl=GetListCtrl();ctl.ModifyStyle(0,LVS_REPORT|LVS_SINGLESEL);ctl.SetExtendedStyle(LVS_EX_FLATSB|LVS_EX_FULLROWSELECT|LVS_EX_GRIDLINES);/设置窗体类型/初始化m_pSet指针,m_pSet原型为CDataSet* m_pSetm_pSet=&Ge

25、tDocument()-m_dataSet;/初始化m_pLset指针,m_pLset原型为CLoginSet* m_pLsetm_pLset=&GetDocument()-m_dataLset; if(m_pSet-IsOpen()m_pSet-Close();m_pSet-Open(); /打开数据库 GetDocument()-SetTitle(彩电故障信息共享系统); /设置标题CString str;/以下是设置控件按钮显示字符str.LoadString(IDS_SERIAL);ctl.InsertColumn(0,str);ctl.InsertColumn(1,显象管); ctl

26、.InsertColumn(2,机芯);ctl.InsertColumn(3,机壳);ctl.InsertColumn(4,器件);ctl.InsertColumn(5,技术员);ctl.InsertColumn(6,时刻);ctl.InsertColumn(7,其他);ctl.InsertColumn(8,信息名);ctl.InsertColumn(9,具体内容);m_bIsAsc=TRUE;m_bIsShowAll=TRUE;ShowTableData(); /调用显示数据函数,显示数据接下来确实是要编写ShowTableData()函数。程序如下:void CXiahuaView:Sho

27、wTableData() CListCtrl &ctl=GetListCtrl();ctl.DeleteAllItems(); /删除所有已显示内容m_pSet-MoveFirst(); /将m_pSet指针指向首条记录int i=0;int ColWidth10=0;while(!m_pSet-IsEOF() /假如没有到达数据末尾,则显示数据 /设置各数据项的显示宽度for(int j=0;jMoveFirst(); /将m_pSet指针再指向首条记录,便于下次操作到此,我们完成了主体框架的制作,主窗口如图9所示。图9 主窗口5.2系统用户权限治理模块的创建为了数据库使用的安全,必须对数据

28、库的各种操作实行权限治理。只有治理员同意的人员才有权力使用。同意的用户和密码都预先存在数据库中,本系统中为login表。权限治理模块要紧实现如下功能:添加用户更改密码删除用户用户登录(权限验证)5.2.1添加用户对话框的创建 在ResourseView中,右击Dialog,选择Insert Dialog,便可在右边窗口中编辑对话框。完成的对话框如图10所示。对话框中各种非静态文本控件的属性见表5。 图10 添加用户对话框 图11密码修改对话框表5添加用户对话框中各控件的属性设置控件ID用户名Edit BoxIDC_USER密码Edit BoxIDC_PSWD确认密码Edit BoxIDC_CO

29、MPSWD对话框编辑完成后,双击该对话框,进入New Class对话框,取此登记对话框的类名为CAddUser。然后在MFC ClassWizard中选择Class name为CXiahuaView,Object IDs为“ID_USER_ADD”,Messages为“COMMAND”,单击Add Function按钮,取系统默认的函数名,再单击Edit Code按钮,即可进入代码编辑器对函数CXiahuaView:OnUserAdd()进行编辑。此函数代码如下:void CXiahuaView:OnUserAdd() / TODO: Add your command handler code

30、 hereCLoginSet *m_daorecordset=new CLoginSet(&pDatabase);/初始化连接数据库指针 CString strSQL;if(adiministrator()=0) /治理员权限验证,失败返回return; else /成功进入增加用户窗口 CAddUser adduser;/进入增加用户窗口 if(adduser.DoModal()=IDCANCEL) return; else m_daorecordset-Close();strSQL.Format(select * from login where user=%s,adduser.m_str

31、User); m_daorecordset-Open(AFX_DAO_USE_DEFAULT_TYPE,strSQL); if(m_daorecordset-GetRecordCount()!=0)AfxMessageBox(_T( 对不起!n+adduser.m_strUser+差不多存在,请尝试用其他名字!),MB_ICONEXCLAMATION);elseif(adduser.m_strPswd.Compare(adduser.m_strCompswd)!=0) AfxMessageBox(_T(两遍新密码输入不一致!n请重输!),MB_ICONEXCLAMATION); else 5.

32、2.2更改密码对话框的创建更改密码对话框的创建与添加用户对话框的创建差不多相同,完成后的对话框如图11所示。对话框中各种非静态文本控件的属性见表6。表6 修改密码对话框中各控件的属性设置控件ID用户名Edit BoxIDC_USER原密码Edit BoxIDC_FORMERPS新密码Edit BoxIDC_NEWPS确认Edit BoxIDC_CONFIRPS同样方法,取此密码对话框的类名为CModPswd。执行此对话框的函数为CXiahuaView:OnPasswardEdit(),实现密码修改功能的程序代码如下:void CXiahuaView:OnPasswardEdit() / TOD

33、O: Add your command handler code hereUpdateData(TRUE);COleVariant var;CModPswd modpswd;if(modpswd.DoModal()=IDCANCEL)return;else CLoginSet *m_daorecordset=new CLoginSet(&pDatabase);CString strSQL;CString str1;strSQL.Format(select * from login where user=%s,modpswd.m_strUser);m_daorecordset-Open(AFX_

34、DAO_USE_DEFAULT_TYPE,strSQL);if(m_daorecordset-GetRecordCount()=0) AfxMessageBox(_T(无此用户!n请向治理员咨询),MB_ICONEXCLAMATION);m_daorecordset-Close();OnPasswardEdit(); else m_daorecordset-Close();/先关闭,以便以后再次打开记录集体对象 strSQL.Format(select * from login where user=%s and passward=%s, modpswd. m_strUser,modpswd.

35、m_strFormerps); m_daorecordset-Open(AFX_DAO_USE_DEFAULT_TYPE,strSQL); if(m_daorecordset-GetRecordCount()=0) AfxMessageBox(_T(密码错误!n请注意大小写),MB_ICONEXCLAMATION); else if(modpswd.m_strNewps.Compare(modpswd.m_strConfirps)!=0) AfxMessageBox(_T(两遍新密码输入不一致!n 请重输!), MB_ICONEX CLAMATION); modpswd.m_strNewps.

36、Empty(); modpswd.m_strConfirps.Empty(); UpdateData(FALSE); else m_daorecordset-Edit();/使记录集可编辑 m_daorecordset-m_passward=modpswd.m_strNewps; m_daorecordset-Update();/修改后刷新 AfxMessageBox(_T(密码修改成功!n请记住新密码!),MB_ICONEXCLAMATION); 5.2.3删除用户对话框的创建创建方法同上,完成后的对话框如图12所示。对话框中各种非静态文本控件的属性见表7。取此删除用户对话框的类名为CDel

37、User。执行此对话框功能的函数为CXiahuaView:OnUserDel(),代码如下:表7 删除用户对话框中各控件的属性设置控件IDEdit BoxIDC_USER 图12删除用户对话框 图13用户登录对话框void CXiahuaView:OnUserDel() / TODO: Add your command handler code hereCLoginSet *m_daorecordset=new CLoginSet(&pDatabase); CString strSQL;CString user;user.Format(administrator);if(adiministra

38、tor()=0)/治理员权限验证,失败返回return;elseCDelUser deluser;/成功。调入删除用户窗口if(deluser.DoModal()=IDCANCEL) return; else if(deluser.m_strUser.Compare(user)=0) AfxMessageBox(_T( 对不起!n不同意删除治理员),MB_ICONEXCLAMATION);else CString str1;str1.Format(%s,deluser.m_strUser); if(AfxMessageBox(确定要删除+str1+吗?,MB_YESNO|MB_ICONEXCL

39、AMATION)=IDYES) strSQL.Format(delete from login where user=%s,deluser.m_strUser); pDatabase.Execute(strSQL);5.2.4用户登录对话框的创建创建方法同上,完成后的对话框如图13所示。对话框中各种非静态文本控件的属性见表8。取此删除用户对话框的类名为CloginDlg。表8 修改密码对话框中各控件的属性设置控件ID用户名Edit BoxIDC_USER密码Edit BoxIDC_PASS5.3信息治理模块的创建故障信息在治理中需要进行各种不同的操作,信息治理模块要紧实现如下功能:查看记录查询

40、记录添加记录删除记录修改记录5.3.1添加记录对话框的创建 在ResourseView中,右击Dialog,选择Insert Dialog,便可在右边窗口中编辑对话框。完成的对话框如图14所示。对话框中各种非静态文本控件的属性见表9。表9信息登记对话框中各控件的属性设置控件ID显象管Edit BoxIDC_CRT机芯Edit BoxIDC_CLIPS机壳Edit BoxIDC_CASE器件Edit BoxIDC_DEVICE技术员Edit BoxIDC_WORKOR时刻Date Time PickerIDC_DATE其他Edit BoxIDC_OTHER信息名Edit BoxIDC_INFO具

41、体内容Edit BoxIDC_CONTENT 图14 信息登记对话框对话框编辑完成后,双击该对话框,进入New Class对话框,取此登记对话框的类名为CInfoDlg。然后在MFC ClassWizard中选择Class name为CXiahuaView,Object IDs为“ID_RECORD_ADD”,Messages为“COMMAND”,单击Add Function按钮,再单击Edit Code按钮,即可编辑执行添加信息功能的函数,程序如下:void CXiahuaView:OnRecordAdd() / TODO: Add your command handler code her

42、eif(memberright()=0) /系统用户验证,失败返回return;else CInfoDlg addDlg; /成功进入增加窗口 if(addDlg.DoModal()=IDOK) CString crt; crt=addDlg.m_strCrt; if(addDlg.m_strInfo.IsEmpty() AfxMessageBox(_T(为保证数据的有效性,n请确定您已输入有效信息),MB_ICONEXCLAMATION); OnRecordAdd(); addDlg.m_strCrt=crt; else addDlg.m_strCrt.TrimLeft( ); /去除各选项

43、左右无效空格字符 addDlg.m_strCrt.TrimRight( ); addDlg.m_strCase.TrimLeft( ); m_pSet-AddNew(); /增加数据 m_pSet-m_crt=addDlg.m_strCrt; m_pSet-m_info=addDlg.m_strInfo; m_pSet-m_case=addDlg.m_strCase; m_pSet-m_date=addDlg.m_strDate; m_pSet-m_device=addDlg.m_strDevice; m_pSet-m_clips=addDlg.m_strClips; m_pSet-m_con

44、tent=addDlg.m_strContent; m_pSet-m_other=addDlg.m_strOther; m_pSet-m_workor=addDlg.m_strWorkor; m_pSet-Update(); Sort(m_bIsAsc); ShowTableData();5.3.2查询记录对话框的创建查询记录对话框与添加记录对话框的创建方法相似,只是起省略了具体内容这一项。各控件的属性也与添加记录对话框相同。该对话框的类名为CrecordSearch,其所对应的实现查询记录功能函数为CXiahuaView:OnRecordSearch(),该函数实现代码如下:void CXi

45、ahuaView:OnRecordSearch() / TODO: Add your command handler code hereCRecordSearch search;CString str;if(search.DoModal()=IDCANCEL)return;elseASSERT(m_pSet-CanRestart();search.m_strCrt.MakeLower();m_bIsShowAll=FALSE;CDaoFieldInfo fieldInfo;if(!search.m_strCrt.IsEmpty() fieldInfo.m_strName=显象管; m_pSet

46、-m_strFilter=fieldInfo.m_strName+ = +search.m_strCrt+; m_pSet-Requery();else if(!search.m_strClips.IsEmpty() fieldInfo.m_strName=机芯; m_pSet-m_strFilter=fieldInfo.m_strName+ = +search.m_strClips+; m_pSet-Requery();else if(!search.m_strCase.IsEmpty()elseAfxMessageBox(_T(请输入显象管型号),MB_ICONEXCLAMATION);O

47、nRecordSearch();ShowTableData();5.3.3修改记录对话框的创建修改记录对话框的创建与增加记录对话框的创建相似,其界面和各控件的属性与添加记录对话框相同,只是其对应的类名为CrecordEdit。实现修改记录功能函数为CXiahuaView:OnRecordEdit(),以下是其完整代码。void CXiahuaView:OnRecordEdit() / TODO: Add your command handler code hereif(memberright()=0)return;else CListCtrl &ctl=GetListCtrl(); POSIT

48、ION pos=ctl.GetFirstSelectedItemPosition(); if(pos=NULL) AfxMessageBox(_T(没有选中记录),MB_ICONEXCLAMATION); else 5.3.4查看记录对话框的创建此对话框的创建与上大同小异,那个地点略去。5.4打印预览模块的创建在以上实现了各模块后,差不多上一完成了对数据的完整操作,为了能更好的实现数据信息在现实中的多方位使用,有必要对系统实现按照生产工程部的资料治理规范的打印功能。实现该打印功能,要紧是编辑OnPrint函数。具体代码如下:void CXiahuaView:OnPrint(CDC* pDC,

49、CPrintInfo* pInfo) / TODO: Add your specialized code here and/or call the base classpDC-SetMapMode(MM_LOENGLISH);CXiahuaDoc* pDoc=GetDocument();ASSERT_VALID(pDoc);clrRef=0X00000000;oPen.CreatePen(PS_SOLID,2,clrRef);pDC-SelectObject(&oPen);clrRef=0X00C000CoBrush.CreateSolidBrush(clrRef);pDC-SelectObj

50、ect(&oBrush);oHeadFont.CreatePointFont(160,Areal,pDC);pDC-SelectObject(&oHeadFont);pDC-SetBkMode(TRANSPARENT);CListCtrl &ctl=GetListCtrl();POSITION pos=ctl.GetFirstSelectedItemPosition();if(pos=NULL)AfxMessageBox(_T(没有选中记录),MB_ICONEXCLAMATION);return;else 6. Windows Sockets规范简介Windows Sockets规范以U.C.

51、 Berkeley大学BSD UNIX中流行的Socket接口为范例定义了一套Micosoft Windows下网络编程接口。它不仅包含了人们所熟悉的Berkeley Socket风格的库函数;也包含了一组针对Windows的扩展库函数,以使程序员能充分地利用Windows消息驱动机制进行编程。 Windows Sockets规范本意在于提供给应用程序开发者一套简单的API,并让各家网络软件供应商共同遵守。此外,在一个特定版本Windows的基础上,Windows Sockets也定义了一个二进制接口(ABI),以此来保证应用Windows Sockets API的应用程序能够在任何网络软件供

52、应商的符合Windows Sockets协议的实现上工作。因此这份规范定义了应用程序开发者能够使用,同时网络软件供应商能够实现的一套库函数调用和相关语义。 遵守这套Windows Sockets规范的网络软件,我们称之为Windows Sockets兼容的,而Windows Sockets兼容实现的提供者,我们称之为Windows Sockets提供者。一个网络软件供应商必须百分之百地实现Windows Sockets规范才能做到现Windows Sockets兼容。 任何能够与Windows Sockets兼容实现协同工作的应用程序就被认为是具有Windows Sockets接口。我们称这种

53、应用程序为Windows Sockets应用程序。 Windows Sockets规范定义并记录了如何使用API与Internet协议族(IPS,通常我们指的是TCP/IP)连接,尤其要指出的是所有的Windows Sockets实现都支持流套接口和数据报套接口。 应用程序调用Windows Sockets的API实现相互之间的通讯。Windows Sockets又利用下层的网络通讯协议功能和操作系统调用实现实际的通讯工作。它们之间的关系如图15。尽管我们并不反对使用这一套API来实现另一通讯协议栈(而且我们期望在今后规范的修改中能够讨论那个问题),但这种用法差不多超出了我们这一份规范所规定的

54、范围,我们在此将不作讨论。6.1 Bekeley套接口Windows Sockets规范是建立在Bekeley套接口模型上的。那个模型现在已是TCP/IP网络的标准。它提供了适应于UNIX套接口编程的程序员极为熟悉的环境,同时简化了移植现有的基于套接口的应用程序源代码的工作。Windows Sockets API也是和4.3BSD的要求一致的。6.2 Microsoft Windows和针对Windows的扩展这一套Windows Sockets API能够在所有3.0以上版本的Windows和所有Windows Scokets实现上使用,因此它不仅为Windwos Sockets实现和Win

55、dows Sockets应用程序提供了16位操作环境,而且也提供了32位操作环境。 Windows Sockets也支持多线程的Windows进程。一个进程包含了一个或多个同时执行的线程。在Windows 3.1非多线程版本中,一个任务对应了一个仅具有单个线程的进程。而我们在本书中所提到的线程均是指在多线程Windows环境中的真正意义的线程。在非多线程环境中(例如Windows 3.0)那个术语是指Windows Sockets进程。 Windows Sockets规范中的针对Windows的扩展部分为应用程序开发者提供了开发具有Windows应用软件的功能。它有利于使程序员写出更加稳定同时

56、更加高效的程序,也有助于在非占先Windows版本中使多个应用程序在多任务情况下更好地运作。除了WSAStartup()和WSACleanup()两个函数除外,其他的Windows扩展函数的使用不是强制性的。7.接口网络编程原理套接口有三种类型:流式套接口、数据报套接口和原始套接口。 流式套接口定义了一种可靠的面向连接的服务,实现了无差错无重复的顺序数据传输。数据报套接口定义了一种无连接的服务,数据通过相互独立的报文进行传输,是无序的,同时不保证可靠,无差错。原始套接口同意对低层协议如IP或ICMP直接访问,要紧用于新的网络协议实现的测试等。 无连接服务器一般差不多上面向事务处理的,一个请求一

57、个应答就完成了客户程序与服务程序之间的相互作用。若使用无连接的套接口编程,程序的流程能够用图16表示。 面向连接服务器处理的请求往往比较复杂,不是一来一去的请求应答所能解决的,而且往往是并发服务器。使用面向连接的套接口编程,能够通过图16来表示:其时序。 套接口工作过程如下:服务器首先启动,通过调用socket()建立一个套接口,然后调用bind()将该套接口和本地网络地址联系在一起,再调用listen()使套接口做好侦听的预备,并规定它的请求队列的长度,之后就调用accept()来接收连接。客户在建立套接口后就可调用connect()和服务器建立连接。连接一旦建立,客户机和服务器之间就能够通过调用read()和write()来发送和接收数据。最后,待数据传送结束后,双方调用close()关闭套接口。8. Windows Sockets编程原理由于Windows的基于消息的特点,WINSOCK和BSD套接口相比,有如下一些新的扩充:

温馨提示

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

评论

0/150

提交评论