计算机毕业设计-论文_基于VB_再就业培训管理系统论文.doc
再就业培训管理系统摘 要:随着现代经济及计算机多媒体技术的飞速发展,计算机智能软件日益受到人们的亲睐,成为人们生活中重要的组成部分。本系统用VB和ACESS数据库开发,主要用于收集所有参加政府就业及再就业免费培训工程的省直属及中央驻赣企业下岗失业人员、全省国有企业下岗失业人员、农民工及未就业大学生的基本信息、培训情况、考核状况、就业及就业去向等资料,并进行统一管理,以实现以上四项政府就业和再就业免费培训工程的年度工作相关统计。关键字:再就业培训;管理系统;VBAbstract: With the modern economy and the computer the rapid development of multimedia technology, computer software has increasingly come under the smart people of the pro-Lai, become important in the life of the component. The system used VB and ACESS database development, mainly for the collection of all participants in government employment and re-employment training free of charge and works directly under the central province of Jiangxi in the enterprise laid-off workers, the province's state-owned enterprises laid-off workers, migrant workers and the unemployed college students Basic information, training, assessment status, employment and employment information on the whereabouts and conduct unified management to achieve more than four government employment and reemployment training project free of the annual work-related statistics. Keyword: Re-employment training; Management system; VB目 录第一章绪论31.1本课题目的和意义31.2 课题实现的工具31.2.1数据库管理系统简介31.2.2 SQL语言简介41.2.3 Access2003简介51.2.4 VisualBasic6.0简介5第二章 系统设计与选型72.1了解用户需求72.2软件工具的选型82.3服务器模块的功能分析924客户端模块的功能分析9第三章 数据环境的设计103.1服务器端Users.mdb的结构1032客户端Data.Mdb的结构113.3客户端Users.ini的结构12第四章 网络协议的设计134.1网络协议概述134.2网络协议的设计13第五章 服务器模块的创建155.1服务器端的主窗体frmServer155.2服务器的初始化165.3接受客户端的连接175.4服务器与客户端的数据交互175.5客户端断开连接195.6服务器断开同客户端的连接19第六章 客户端功能模块的创建206.1创建主模块MainModule206.2“登陆”窗体frmStep1206.3“注册向导1”窗体frmStep22164“注册向导2”窗体frmInformation226.5“客户端”主体窗frmClient246.6内存索引模块MemoryTree326.7信息发送窗体frmChat336.8新信息处理窗体frm New Message366.9“历史信息”窗体frmHistory37总 结39参 考 文 献40致 谢41附 录42附录一:外文资料翻译译文42附录二:系统主要代码54第一章 绪论1.1本课题目的和意义本软件系统主要用于收集所有参加政府就业及再就业免费培训工程的省直属及中央驻赣企业下岗失业人员、全省国有企业下岗失业人员、农民工及未就业大学生的基本信息、培训情况、考核状况、就业及就业去向等资料,并进行统一管理,以实现以上四项政府就业和再就业免费培训工程的年度工作相关统计。掌握数据库管理系统的基本概念、原理;独立完成数据库的设计;熟练掌握ACESS应用技术。对Windows程序设计的整体框架、原理和方法有清晰的理解。了解.Net架构的基本概念;熟练掌握VB语言编程技术;能够熟练应用VB语言进行开发工作;通过本系统的实践,能够对程序设计的整体过程有清晰的概念。软件将会使计算和通信工作变得容易到前所未有的程度。它将产生出新一代因特网服务,使成千上万的软件开发商有机会创造出革命性的在线服务和新业务。它将把隐私权、数字身份和相关数据的控制权重新交回你的手中,并且更加可靠。软件使一切成为可能。1.2 课题实现的工具1.2.1数据库管理系统简介数据库是数据管理的最新技术,是计算机科学的重要分支。数据库是指长期储存在计算机内的、有组织的、可共享的数据集合。数据库中的数据按一定的数据模型组织、描述和储存,具有较小的冗余度、较高的数据独立性和易扩展性,并可为各种用户共享。数据库管理系统是位于用户与操作系统之间的一层数据管理软件3。主要有数据定义功能、数据操纵功能、数据库的运行管理和数据库的建立和维护功能。它是数据库系统的一个重要组成部分4。十余年来,数据库管理系统已从专用的应用程序包发展成为通用的系统软件。由于数据库具有数据结构化、最低冗余度、较高的程序与数据独立性、易于扩充、易于编制应用程序等优点,较大的信息系统都是建立在数据库设计之上的5。因此,不仅大型计算机及中小型计算机,甚至微型机都配有数据库管理系统。目前,对数据库各种模型的研究以及理论上的探讨都还在蓬勃开展,其应用也从一般管理扩大到计算机辅助设计、人工智能以及科技计算等领域。今天,信息资源已成为各个部门的重要财富和资源。建立一个满足各级部门信息处理要求的行之有效的信息系统也成为一个企业或组织生存和发展的重要条件6。因此,作为信息系统核心和基础的数据库技术得到越来越广泛的应用,从小型单项事务处理系统到大型信息系统,从联机事务处理到联机分析处理,从一般企业管理到计算机辅助设计与制造(CAD/CAM)、计算机集成制造系统(CIMS)、办公信息系统(OIS)、地理信息系统(GIS)等,越来越多新的应用领域采用数据库存储和处理他们的信息资源7。对于一个国家来说,数据库的建设规模、数据库信息量的大小和使用频度已成为衡量这个国家信息化程度的重要标志。1.2.2 SQL语言简介SQL(Structured Query Language)语言是1974年由Boyce和Chamberlin提出的。1975年-1979年IBM公司San Jose Research Laboratory研制了著名的关系数据库管理系统原形System R并实现了这种语言。由于它功能丰富,语言简捷倍受用户及计算机工业界欢迎,被众多计算机公司和软件公司所采用。经各公司的不断修改、扩充和完善,SQL语言最终发展成为关系数据库的标准语言8。1986年10月美国国家标准局(American National Standard Institute,简称ANSI)的数据库委员会X3H2批准了SQL作为关系数据库语言的美国标准。同年公布了SQL标准文本(简称SQL-86)。1987年国际标准化组织(International Organization for Standardization,简称ISO)也通过了这一标准。此后,ANSI不断修改和完善SQL标准,并于1989年公布了SQL-89标准,1992年又公布了SQL-92标准。自SQL成为国际标准语言以后,各个数据库厂家纷纷推出各自的SQL软件或与SQL的接口软件。这就使大多数数据库均用SQL作为共同的数据存取语言和标准接口,使不同数据库系统之间的互操作有了共同的基础10。这个意义十分重大。因此,有人把确立SQL为关系数据库语言标准及其后的发展称为是一场革命。SQL成为国际标准,对数据库以外的领域也产生了很大影响,有不少软件产品将SQL语言的数据查询功能与图形功能、软件工程工具、软件开发工具、人工智能程序结合起来11。SQL是一种介于关系代数与关系演算之间的结构化查询语言,其功能并不仅仅是查询。SQL是一个通用的、功能极强的关系数据库语言。SQL语言集数据查询、数据操纵、数据定义和数据控制功能于一体,主要特点包括:综合统一、高度非过程化、面向集合的操作方式、以同一种语法结构提供两种使用方式、语言简捷,易学易用。SQL已成为数据库领域中一个主流语言。1.2.3 Access2003简介Macrosoft 公司出品的关联式资料库套装软体。它提供视觉化的设计介面,不必撰写程式,即可快速,简单地开发出美观实用的资料库管理系统12。Access的结构:资料(data)栏位(field)记录(record)档案(file)资料库(data base);资料(data)资料项(item)资料录(record)资料表(table)资料库(data base)Access2003有以下组成:资料表:为access储存资料的地方,亦为资料的根本来源,一个资料库至少要存在一个资料表。查询:可依使用者需求,以一些限制条件(筛选,过滤)来选取资料表中。表单:建立一个让使用者输入,查询,修改资料的操作画面。报表:将资料库里的资料运用报表做成有利用价值的画面资料。资料页:为access2003的新增物件,资料发布至网路的媒介。此物件完成建立后,将会在资料库档案外,再产生一个HTML档。巨集:建立简单的资料操作指令与将一连串的执行动作自动化。应用于一些重复性高的动作或者用于使用者自订工作环境上。模组:开发应用系统的工具。是让使用者能更随心所欲的去控制系统13。1.2.4 VisualBasic6.0简介20世纪60年代初,美国Dartmouth学院的两位学者G.Keneny和Thomos E.Kurty发明了一种称为“BASIC”的语言,它的诞生称得上是计算机语言发展史上的一件大事,对计算机的推广应用起到了重要的作用。自从Basic语言问世以来,“Basic”已经成为了编程入门者学习语言的代名词。Basic语言以其易学易用的特点风靡全球。然而自从微软公司推出了划时代的 Visual Basic,Basic又从一门“玩具语言”一跃而成为功能强大的应用软件开发语言。它功能强大,语法简单,执行代码效率高。据统计,开发同样的应用软件,采用 VB开发要比用 VC+的效率提高 70。因此,VB已经成为每一个编程工作者学习时的首选语言。1991年,微软推出了Visual Basic1.0版。这在当时引起了很大的轰动。接着于1992年微软推出Visual BasicB2.0,1993年推出Visual Basic3.0,1995年推出Visual Basic4.0,1997年推出Visual Basic5.0,1998年推出Visual Basic6.0。并且从Visual Basic3.0开始,微软将ACCESS的数据库驱动集成到了Visual Basic中,这使得Visual Basic的数据库编程能力大大提高。从Visual Basic4.0开始,Visual Basic也引入了面向对象的程序设计思想。而且,Visual Basic还引入了“控件”的概念,使得大量已经编好的Visual Basic程序可以被我们直接拿来使用,如今,Visual Basic已经有了6.0版。Visual Basic已逐渐成为简单易学、功能强大的编程工具15。它不但在一般程序设计方面比传统的程序设计语言具有明显的优势,而且可作为多媒体创作工具,支持程序跳转,具有脱机播放动画的能力,并采用了动画过渡技术等。它的软件费用支出低,易学习的突出特点,使其易于被许多非专业人员掌握使用。通过几年的发展,它已成为一种真正专业化的开发语言和环境。用户可用Visual Basic快速创建Windows程序,在现在还可以编写企业水平的客户服务器程序及强大的数据库应用程序。Visual Basic 6.0作为Visual Studio 6.0的一员发布,证明微软正在改变Visual Basic的产品定位,他想让Visual Basic成为企业级快速开发的利器。Visual Basic 6.0在数据访问方面有了很大的改进,新的ADO组件让对大量数据快速访问成为可能。数据环境和新的报表功能也让数据开发有了全新的体验。Visual Basic 借助COM/COM+强大的功能,可以开发具有N层结构的分布式应用程序。同时,Visual Basic还可以在IIS上开发性能超群的Web应用程序。Visual Basic 6.0在语言方面和IDE方面的改进都不大,但是许多新增的组件成为Visual Basic开发人员手中的利器,如File System Object等。新的字符串函数Split和Replace等也给Visual Basic的程序员带来很大方便。总之Visual Basic 6.0已经是非常成熟稳定的开发系统,能让企业快速建立多层的系统以及Web应用程序,成为当前Windows上最流行的Visual Basic版本。第二章 系统设计与选型2.1了解用户需求开发软件,也许源于公司的需要,也许是受人委托,无论哪种情况,充分了解用户的需求才能开发出好用的软件。在着手工作以前,先充分了解用户的需求才能最终满足该软件用户的需求,这样才可能避免在软件开发过程中进行一而再、再而三的改动,耗时耗力,增加了成倍的工作量。现在很多软件公司不仅自行开发商业软件,还有一个重要的业务就是“接项目”应客户的需求开发软件。项目开发到最后阶段,软件已经成形,内部测试后就演示给客户,往往这时候麻烦来了,麻烦产生的原因一般都是在于用户的需求发生变动。用户一开始对软件的功能往往只有初步的认定(甚至只是初步的意向),只有具体的东西真正放在面前时,他才可能会关注这些,然后指出流程不是这样的,应当还具备什么样的功能等等,或者报表的形式如何如何。用户永远是这方面的专家。所以,在进行系统设计前一定要充分与用户交谈,了解用户的行业、行业术语、日常业务、使用习惯、查看以往的书面报表等等。尤其要注意的是如果用户以前也使用计算机管理,一定要研究以前使用的管理软件,为什么要更换,不好的地方在哪方面,需要保留的好的方面是什么,这样才能在系统设计时尽可能提供详细的设计说明书。由于用户需求很可能产生变动,所以增量迭代(incremental and iterative)的方法确实值得推广,但是这又涉及到一个组织成熟度的问题,因为由此会提高对Architect的能力要求,而且需求管理和测试更加要求严格。而商业性质的软件,更是要充分调查潜在消费者的需求,然后确定软件的功能和风格等等,错误的市场定位必然导致软件产品的失败。由此可见,了解用户需求是多么重要。具体到局域网即时通讯系统,用户的基本需求如下。(1) 用户登录功能:只有注册过的用户才能使用该软件发送和接受信息。(2) 新用户注册功能:注册新用户。(3) 能够添加培训人员,并显示在培训人员名单中,(4) 能够在培训人员名单中选择一个培训人员,给培训人员即时发送信息; (5) 发送的信息中可以带有表情符号。(6) 当培训人员不在线时信息存储在服务器,也就是可以给其留言。(7) 当收到信息时要求有提示,避免错过及时查看信息。(8) 能够存储历史信息,一边查看以前的信息。(9) 能够将某些人添加到名单,能自动屏蔽名单中的人发送来的信息,避免被骚扰16。因为功能集中,所以看起来很简单。即使如此,由于绝大多数项目没有足够的时间或资源实现每个功能,所以需要决定哪些特性是必要的,哪些是重要的,这些是需求开发的主要部分。只能由客户负责设定需求优先级,因为开发者不可能按照客户的观点决定需求优先级。尽管没有人愿意看到自己所希望的需求在项目中未被实现,但毕竟是要面对现实,业务决策有时不得不依据优先级来缩小项目范围,或在质量上寻求折中17。从局域网即时通讯系统来看,最重要的需求一般是第1、2、4项。2.2软件工具的选型首先,考虑可能的解决方案。例如,使用何种开发工具,信息存储使用传统的文件系统还是数据库,使用何种方式进行网络通信。通常至少应该考虑下述几类可能的方案。(1) 低成本的解决方案:系统只能完成最必要的工作,不能多做一点额外的工作。(2) 中等成本的解决方案:这样的系统不仅能够很好地完成预定的任务,使用起来很方便,而且可能还具有用户没有具体指定的某些功能和特点。虽然用户没有提出这些具体要求,但是系统分析员根据自己的知识和经验断定,这些附加的能力在实践中将证明是很有价值的。(3) 高成本的“十全十美”的系统:这样的系统具有用户可能希望有的所有功能和特点。在充分权衡各种方案的利弊的基础上,选择一个较好的系统(最佳方案)。本即时通讯软件的主体开发环境选择的是Visual Basic 6.0(SP6),搭配的是ADO技术调用Access数据库,选择的理由如下。(1) 本软件的技术难度不是很大,但是需要实现的细节功能比较多,所以选择一个相对比较容易使用的开发工具有利于将注意力集中在软件的功能本身,而不是开发工具的使用,所以选择Visual Basic 6.0(SP6)中文版作为开发环境。(2) 在服务器端需要利用数据库记录用户的留言信息,在客户端需要利用数据库记录用户接受到的新信息和历史信息。这些数据不会构成很大的数据量,所以不需要采用MS SQL Server等大中型数据库,而采用ADO控件可以非常方便调用的Access数据库。另外,到微软的网站上给Visual Basic安装补丁SP6后,使得本软件的开发工作节省了不少力气,否则ImageCombo控件都不能使用。2.3服务器模块的功能分析局域网即时通讯系统的功能分为两大类客户端功能和服务器端功能。服务器端功能1:监测用户状态。在服务器端,不但可以看到所有用户的注册信息,还可以实时地看到用户的在线状态。服务器端功能2:显示用户留言。如果某个用户给另外一个不在线的用户发信息,那么就会在服务器端作为留言记录下该条信息。(1)主界面中显示所用户的注册信息(2)主界面中显示所有用户的在线状态(3)显示所有的留言信息(4)随时修改用户的注册信息(5)随时修改留言信息24客户端模块的功能分析(1)在状态栏的状态栏区上显示图标。(2)在主界面中通过菜单调用新信息处理界面。(3)在主界面中通过菜单调用历史信息处理界面。(4)通过状态栏图标可以调用菜单,并且以动画形式醒目地提示用户收到了新信息。(5)用ADO控件读写包含rtf文档的数据库。(6)给在线用户发送即时信息。(7)给不在线用户发送留言信息。(8)信息中可以包括图标和文本。(9)可以设置信息文本的颜色和字体。(10)为联系人分组。(11)屏蔽名单的信息。第三章 数据环境的设计首先分析本系统所需要存储的数据。在服务器端,需要存储用户的信息,以进行用户登录,注册新用户,为用户之间的交流提供平台。由于服务器端需要接受客户端发送来的信息,并根据自定义的网络协议解析信息的含义,做出相应的处理,例如,将接受到的信息发送给指定用户,所以还需要存储服务器工作记录。本系统需要设计Access的数据库,存储在服务器端应用程序路径下面,服务器端的文件名为Users.mdb。在客户端,需要存储接收到的新信息和看过后保存起来的信息。在客户端应用程序路径下面存储一个文件,文件名为Data.mdb。另外还需要为客户端设计一个ini文件,文件保存在客户端应用程序路径下面,用来记录培训人员名单和名单,文件名为Users.ini。3.1服务器端Users.mdb的结构首先用Access创建数据库Users.mdb,并且为该数据库添加一个表Users Informationg,在UsersInformationg表中有六个字段,见表3-1其中UserID字段用于存储用户ID,Password字段用于存储用户密码,Nick Name字段用于存储用户的昵称,Mail字段用于存储用户的邮箱地址,Status用户存储用户的在线状态(0为离线,1为在线),UserFace用于存储用户选择的头像索引。表3-1 UsersInformationg表的字段字段名数据类型UserID数字PassWord文本NickName文本Mail文本Status数字UserFace数字然后再为该数据库添加一个表Messages,在Messages表中有4个字段,见表3-2表3-2 Messages表的字段字段名数据类型ReceivedID数字SentID数字Content备注time日期/时间其中ReceivedID字段用于存储发送信息的用户ID,sentID字段用于存储接受信息的用户ID,Content字段用于存储信息内容,time字段用于存储服务器接受到信息的时间。经验总结:Content字段设置为备注类型,就可以存储图文混排的信息内容了。32客户端Data.Mdb的结构Data.mdb仅仅用于在客户端。首先用Access创建数据库Data.mdb,并且为该数据库添加两个表NewMessages和HistoryMessages,在NewMessages和HistoryMessages表中都有4个字段,并且它们的字段设置相同,见表3-1。表3-1NewMessages表和HistoryMessages表的字段字段名数据类型ReceivedID数字SentID数字Content备注Time日期/时间其中ReceivedID字段用于存储发送信息的用户ID,SentID字段用于存储接收信息的用户ID,Content字段用于存储信息内容,Time字段用于存储服务器接收到信息的日期/时间。3.3客户端Users.ini的结构Users.ini文件仅仅用于客户端记录联系人的信息,它是一个文本文件,典型的文件内容如下:1001_BadboysCount=11001_Badboys_Item0UserID=1001UserNickName=1001UserMail=1UserFace=61001_FriendsCount=21001_Friends_Item0UserID=1000UserNickName=1000UserMail=0UserFace=41001_Friends_Item1UserID=1002UserNickName=hahaUserMail=hUserFace=5举例来说:1001_Friends下面代表用户ID为1001的总体培训人员信息,Count记录了培训人员的数目。1001_Friends_Item0下面存储了用户ID为1001的第1个培训人员的信息,如培训人员ID、培训人员昵称、培训人员邮箱以及培训人员的头像索引。1001_Badboys下面代表用户ID为1001的总体名单信息,Count记录了名单的数目。1001_Badboys_Item0下面存储了用户ID为1001的第1个名单的信息,如名单ID、名单昵称、名单邮箱以及名单的头像索引。第四章 网络协议的设计4.1网络协议概述即时通讯软件系统组织起了分布在互联网各个角落的用户虚拟社区,具有典型的分布式客户端/服务器结构服务器端提供即时信息服务,客户端是用户代理,它们之间通过一定的协议来交互。协议是服务的正式描述,它详细规定了参与合作的各方进行交互的语法、语义和时序细节18。4.2网络协议的设计本系统中服务器软件、客户端软件之间的协作完全依赖网络通信,通信信息采用ASCII码明文传送,这样对不同类型的数据采用了统一的方式。每帧信息总体格式定义如图4.1,命令号固定占有3个字符的空间,命令内容的具体格式与命令有关。命令号(Integer)命令内容(String)图4-1 每帧信息总体格式定义以下列举几组具体命令格式。SC001(申请一个新用户)“用户昵称;用户密码;用户的电子邮箱”003(系统拒绝)“失败原因”002(接受)“用户ID”图4-2申请新用户的命令SC101(读取指定用户的信息)“用户ID”103(拒绝发送)“读取用户信息出错信息”102(发送)“用户ID=用户昵称;用户的电子邮箱;用户表情”图4-3信息处理的命令SC121(申请添加一名好友)“用户ID:好友ID”123(拒绝)“理由”122(接受)“好友ID=好友昵称;电子邮箱;表情”图4-4设置培训人员的命令SC151(登陆服务器)“用户昵称;用户密码”153(系统拒绝)“失败原因”152(允许)“用户ID=用户昵称;用户的电子邮箱;用户表情”图4-5与登陆相关的命令SC161(申请添加一名黑名单)“用户ID:黑名单ID”163(系统拒绝)“拒绝接受理由”162(接受)“黑名单ID=黑名单昵称;电子邮箱;表情”图4-6设置名单的命令SC200(从服务器获取留言)“”204(服务器发送消息给用户)“发送消息的用户ID发送消息的时间消息内容发送消息的用户ID”图4-7获取信息的命令SC1201(发送到客户端2的消息给服务器)“”203(不能成功地)“失败原因”204(服务器转发消息给客户端2)“发送消息的用户ID发送消息的时间消息内容发送消息的用户ID”C2图4-8发送信息的命令第五章 服务器模块的创建5.1服务器端的主窗体frmServer新建一个工程,将工程的名称设置为"服务器",工程的文件名为prjNetChatServer.vbp,为该工程添加一个窗体frmServer向服务器端主窗体frmServer上添加两个Frame控件(Name属性分别为fraUsers,fraMessages),两个DataGrid控件(Name属性分别为dgdUsers,sgsMessages),两个Adodc控件(Name属性分别为adoUsers,adoMessages),一个RichTextBox控件(Name属性为trfMessage),一个Winsock控件(Name属性为wskServer)和一个Timer控件(Name属性为tmrOnline)设计完成的服务器端的主窗体如图5-1所示。图5-1设计完成的主界各控件的主要属性设置如下(1)dgdUsers控件的DataSource属性设置为adoUsers(2)dgdMessages控件的DataSource属性设置为adoMessage(3)rtfMessage控件的DataSource属性设置为adoMessage,DataField属性设置为Content 各控件的作用如下(1) fraUsers控件提供了一个框架容器,它包含dgdUsers和adoUsers控件.(2)adoUsers控件用来读取UsersInformation表内容.(3)dgdUsers的DataSource属性设置为adoUsers,它用来显示adoUsers控件读取到的内容,也就是UsersInformation表的内容.(4)fraMessages控件提供了一个框架容器,它包含adoMessages,dgdMessages控件和rtfMessage控件.(5)adoMessages控件用来读取Users.mdb数据库中Messages表的内容.(6)dgdMessages的DataSource属性设置为adoMessages,用它来列表显示adoMessages控件读取到的内容,也就是Messages表的内容.(7)rtfMessage控件:显示在dgdMessages控件中选中行(留言)的具体内容.5.2服务器的初始化在服务器工作过程中,首先执行From_Load过程,设置adoMessages, adoUsers 控件的属性,使得它们分别读取Users.mdb数据库中Messages, UsersInformation表的记录.读取Users.mdb数据库中Messages表的记录:Me.adoMessages.ConnectionString = & _"Provider=Microsoft.Jet.OLEDB.4.0;" & _"Persist Security Info=False;" & _"Data Source=" & APP_PATH & "Users.mdb"Me.adoMessages.CommandType = adCmdTableMe.adoMessages.RecordSource = "Messages"Me.adoMessages.Refresh同样方法读取Users.mdb数据库中UsersInformation表的记录:adoMessages、adoUsers都为Adodc控件,其ConnectionString属性设置要连接的数据源(数据库),需要提供数据源的类型、存储路径和名称等。对于Access 2000数据库,Provider应为Microsoft.Jet.OLEDB.4.0。Data Source设置为" & APP_PATH & "Users.mdb"则数据库的存储路径为当前应用程序目录,数据库文件名称为User.mdb。adoMessages控件的RecordSource属性设置为Messages,则说明adoMessages控件的记录源为User.mdb数据库中的Messages表。服务器初始化的时候,还需要对窗体上的wskServer控件进行初始化。该控件的Index属性设置为0,这也就是说wskServer实际上是一个控件数组,通过以下语句设置wskServer数组中第1个控件元素的属性,并且处于Listen状态,等待客户端的连接。同时设置LinkCount全局变量的数目为0,它表示已经成功连接到服务器的客户端的数目:LinkCount = 0由于在服务器开始运行阶段,不可能有客户端进行连接操作,所以设置所有用户为离线状态。5.3接受客户端的连接如果有客户端连接到服务器,那么就会激活wskServer的wskServer_ConnectionRequest事件过程。程序首先将连接到服务器的客户端的数目加1,然后通过Load方法为wskServer控件数组添加一个新的Winsock控件元素,并且通过wskServer(LinkCount).Accept requestID语句设置这个新控件元素专门对应这个客户端的连接。5.4服务器与客户端的数据交互服务器与客户端的数据交互是frmServer窗体编程的重点,也是本软件的重点之一,服务器端接收到客户端数据后,处理的流程如下。(1)接收客户端发送的数据并存储在strReceived变量中。(2)从strReceived变量中分析出客户端发送的命令号和命令内容,分别存储在变量intCommandID和strCommandContent中。(3)根据intCommandID变量的值,按照不同的规则分析命令内容,并且做出响应。下面介绍实现服务器与客户端数据交互的主要代码。如果服务器接收到数据,就会激活wskServer_DataArrival过程,首先通过以下语句接收客户端发送的数据并存储在strReceived变量中:wskServer(Index).GetData strReceivedstrReceived变量分析出客户端发送的命令号和命令内容,分别存储在变量intCommandID和strCommandContent中。由于命令号占3个字节,所以使用Left(strReceived, 3)获得strReceived变量的前3个字符即可取得命令号,再使用Val将取得的命令号由字符转换为数字。然后根据不同的命令号,按照不同的规则分析命令内容,并且做出响应。 对于服务器与客户端进行交互的处理过程已经很清楚了,现在就以对注册新用户的命令为例,介绍处理数据的流程。申请一个新用户的命令号为001,命令内容为“用户昵称;用户密码;用户的电子邮箱地址”,所以,当命令号为001时,首先获取用户昵称并存储。首先定义变量strNickName用来存储用户昵称,然后获取命令内容中“;”符号第1次出现的位置,根据“;”符号第1次出现的位置就可以确定用户昵称在命令内容中的位置,从而获得用户昵称并保存在strNickName变量中。获取用户密码的代码如下: 从命令内容中去掉用户昵称部分仍然存储在strCommandContent变量中 strCommandContent = Mid(strCommandContent, intPos + 1)获取用户密码Dim strPassword As String intPos = InStr(1, strCommandContent, "", vbBinaryCompare) strPassword = Left(strCommandContent, intPos - 1)在代码中,首先从命令内容中去掉用户昵称部分存储在strCommandContent变量中,此时strCommandContent变量中存储的命令内容为“用户密码;用户的电子邮箱地址”,然后使用与获得用户昵称同样的方法,就可以获得用户密码并存储在strPassword变量中。取得新用户的详细信息后,为新用户的UserID字段准备值: Dim intUserID As Integer intUserID = 1000 + Me.adoUsers.Recordset.RecordC