局域网门禁系统设计(附程序代码)_第1页
局域网门禁系统设计(附程序代码)_第2页
局域网门禁系统设计(附程序代码)_第3页
局域网门禁系统设计(附程序代码)_第4页
局域网门禁系统设计(附程序代码)_第5页
已阅读5页,还剩36页未读 继续免费阅读

下载本文档

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

文档简介

北京广播电视大学毕业设计说明书-PAGE38-北京广播电视大学毕业设计论文题目:局域网门禁系统姓名:学号:专业年级:分校:指导教师:目录摘要 3第1章系统环境 41.1Delphi简介 41.2研究背景 51.3特点及组成原理 51.3.1刷卡机管理子系统 61.3.2数据后备系统 71.3.3UPS系统 8第2章总体概要设计 92.1系统需求分析 92.2系统设计 102.2.1画出数据流图 102.2.2编写数据项 122.3数据库设计 13第3章分子模块的设计 153.1C/S基本概念 153.3.1刷卡模块 173.3.2实时监控模块 173.4系统功能实现 193.4.1刷卡模块的设计和实现 193.5UDP协议的基本知识 203.6界面设计 213.7代码设计 223.8ODBC数据源设计 22结束语 24致谢 25参考文献 26附录 27摘要随着高科技的蓬勃发展,智能化管理已经走进了人们的社会生活,一座座智能化大厦拔地而起,适应信息的时代需要,作为跨世纪使用的建筑,必须在功能上满足当前和未来发展的需求,成为文化和经济发展的基地。门禁系统开发作为一项先进的高科技技术防范和管理手段,在一些经济发达的国家已经广泛应用于科研、工业、博物馆、酒店、商场、医疗监护、银行、监狱等,特别是由于系统本身具有隐蔽性,及时性等特点,在许多领域的应用越来越广泛。门禁系统的技术不断向前发展,用户需求也在发生变化,因此门禁系统的设计与实施应考虑到将来可扩展的实际需要,亦即:可灵活增减或更新各个子系统,满足不同时期的需要,保持长时间领先地位,成为智能建筑的典范。系统设计时,对需要实现的功能进行了合理配置,并且这种配置是可以改变的,设置甚至在工程完成后,这种配置的改变也是可能的和方便的.系统软件根据开发商符合不同历史时期市场的需求进行相应的升级和完善,并免费为相应的应用客户进行免费的软件升级.同时,可以扩展为考勤系统、会议签到系统、巡逻管理系统,就餐管理系统等一卡通工程。第1章系统环境1.1Delphi简介本课题是在Delphi的基础上开发研制的,下面对Delphi进行简单的介绍。Delphi是Borland公司开发的可视化软件开发系统。Delphi系列软件的工作平台相当广泛,可以工作于Windows95、Windows98、WindowsNT、Windows2000以及WindowsXP下,编程所用的语言为结构化程度相当高的ObjectPascal语言。用过Delphi系列软件的程序员一定都会觉得ObjectPascal语言具有高度清晰的结构,高效率的优化系统,是一种简单易学,但又不乏其作为优秀编程语言的特点。同时,由于Delphi采用了内置高速的优化编译器,使得程序的编译、链接速度快的惊人。在与其相类似的可视化软件开发系统MicrosoftVisualC++的比较中,我们不可否认MicrosoftVisualC++的功能相当强大,但调试程序时的编译时间过长,使很多程序员感到棘手;而Delphi在编译时等待的时间很少。Delphi的编译器采用了事件编译和选择链接技术,使生成的可执行文件冗余更少,运行起来速度更快。另外,由于Delphi生成的可执行文件不需要动态链接库的支持,可以直接交付使用,这会使得使用Delphi的程序员充分享受Delphi为他们带来的方便快捷。Delphi系列另一个广受欢迎的原因是其强大的可扩展数据库功能。Delphi6.0不但在传统的开发能力方面持续进步,让程序员能够享有更具生产力的开发环境,对于最新的信息技术,也有非常良好的支持,让程序员能够快速地使用这些新的技术。在对Delphi有了一个初步的了解之后,我们将进入对Delphi集成开发环境和工程管理的介绍,使大家能够进一步深入了解Delphi,并在此基础上介绍编辑器和调试器的使用方法。IDE是提供设计、运行和测试应用程序所需的所有工具的集成环境。Delphi的集成开发环境(IDE)包括代码编辑器、调试器、工具栏、图像编辑器以及诸多用于应用程序开发的组件(如数据库开发组件等)。所有这些都以集成方式进行操作,极大地简化了用户编程的过程。1.2研究背景当前,大学内的微机机房正在朝着开放式,大型化方向发展。一个教学实验中心里的几个机房有着几百台微机,已是很普遍的现象。使用方式也由原来的以计划安排集体上机为主,变为以个人自由上机为主。因此、以往那种主要针对集体上机的以机房和时间段为单位来安排机器使用的管理方式已显得不适用。为适应新的应用和发展,结合中心自身的特点,四川大学工程设计中心和西南交通大学共同研制出了这套用于微机机房管理的集中式IC卡控制门禁系统。该系统着眼于对大型开放式机房进行集中管理。把原来的分机房分散管理变为单一出入口的集中管理。变原来的人工计时计费为计算机管理的IC卡计费。1.3特点及组成原理该系统有如下特点:(1)技术上充分利用机房内部局域网系统(LAN)环境。管辖范围内只设一个出入口。将所有投入使用的机器置于集中统一管理之下。(2)采用多模块结构化模式设计,使用多种软件混合编程。实现子系统内数据库管理和通讯及子系统与子系统之间的通讯。通过相互间的通讯,把几个子系统的结合在一起。形成一个完善的门禁管理系统。(3)用户界面友好、操作简便、并且具有较好的可维护性。(4)系统除强调其实用性外,还对其安全性和可靠性作了充分考虑。该系统主要由IC卡刷卡机管理子系统、登录管理服务器及用户端登录子系统组成。它们之间通过内部局域网交换信息以保证机房外刷卡和机房内登录能协调工作。除此之外,还有与之相配套的数据后备系统提供电源保障的UPS系统,在门禁系统管理下,刷卡机管理子系统向机器使用者提供上机刷卡服务。持卡用户首先在设于机房外出入口的刷卡机前刷卡,刷卡机管理管理服务器在对卡的有效性进行验证,待验证无误后使用者方可能进入机房。进入机房后还要进行登记才能使用机器。登录管理服务器及用户端登录子系统提供使用者刷卡后进入机房后的登录服务。上机要进行登录是为了避免无卡上机和一人使用多台机器情况的发生而设计的。使用者进入机房后,可以随意选定机位但必需进行登录后才能获得机器的使用权。为了避免未经刷卡就上机,在登录管理服务器的管理下,未刷卡的人将不能通过登录验证,一个人也不能同时登录两台机器。同样,一台已经被登录使用的机器如果未被使用者注销,它也不能再被其他人登录。当机器使用完毕后,使用者必须先执行登录管理服务器所提供的下机注销功能,释放该机器的使用权,然后再到刷卡机前刷卡,刷卡机管理子系统根据使用时间计算并从卡上扣除相应机时金额。如此,门禁管理系统就完成了一个上下机的管理过程。从上面上下机的过程可以看出,门禁管理系统的核心部分主要由设在机房外的IC卡刷卡机管理子系统、登录管理服务器和装在机房内每台机器上的用户端登录子系统组成,形成内外两道防线。使其即实现上机必须刷卡,且一人只能使用一台计算机,又能根据需要自由选定机位,调换机位。给管理和使用都带来了方便。下面分别介绍各子系统的功能及工作原理。1.3.1刷卡机管理子系统负责对出入机房进行计时,以及对卡的有效性进行验证。它还兼有对当前正在上机和当日上机总人数进行统计的功能。该子系统由IC卡刷卡机和刷卡机管理服务器组成。IC卡刷卡机由单片机加上一个通过IC卡机构成,使其具有了和刷卡机管理服务器之间进行通讯的能力和驱动数码管显示的能力。加上一个多用户串行通信卡与刷卡机进行通信,一台刷卡机管理服务器上的多用户卡最多可挂接8台IC卡刷卡机。IC卡使用者刷卡后,刷卡机将IC卡信息送至刷卡机管理服务器,经校验传送信息无误后,刷卡机管理服务器查找数据库对该卡记录进行处理,判别是上机还是下机,如果是上机,就必须对该卡的有效性进行验证。它要检查该卡是否已经超过使用期限、是否是挂失卡、卡上金额是否满足设定的要求等。如验证有误,管理服务器送相应错误代码至IC卡刷卡机,IC卡刷卡机将显示误代码,并发声提示。如果是下机,管理服务器首先要通过LAN从用户端登录服务器获取该卡登录信息,判断该卡是否按正常下机步骤已经注销。如已注销,根据用机时间和设定的机时价格送至刷卡机扣出金额并清除库中相应的上机信息。否则送“尚未注销”错误代码至IC卡刷卡机通知该卡用户返回机房注销机器以释放该机器的使用权。一次刷卡过程在500ms内完成。该系统还可按不同机房的不同机型设置收费标准。根据实际应用的需要,该子系统还设置了跨日下机,不注销刷卡下机等特殊处理功能。登录管理服务器及用户端录子系统该子系统由一个含有控制引导过程的扩展ROM卡和事先写在硬盘特殊位置的登录软件构成。放在ROM扩展卡上的程序用来获取对系统引导过程的控制权,确保该计算机的使用者必须经过上机登录并且有效才能取得对该机器的使用权。由于采用了硬件设计,一般用户无法绕过登录,因此,设置登录功能就有效地避免了未经刷卡就使用机器或一个使用多台机器现象的发生。用户端登录服务通讯程序BOLABDC++编写,它的作用是用它通过LAN与登录服务器进行通讯,以完成对该机的上机登录和下机注销以及更改密码的工作。使用者刷卡进入机房后,首先将申请该机使用权的用户的卡号,密码输入。登录服务通讯程序将输入的卡号,密码连同本机地址一道通过LAN发送至登录管理服务器,登录管理服务器收到登录申请请求后通过LAN查询刷卡机管理服务器。通过卡号查询检查该卡用户是否已经刷卡。如果找到该卡的刷卡信息并且核对密码无误,则返回登录成功信息到用户终端机。用户终端机收到返回的登录成功信息后将控制权交本机WIN98引导系统。进入正常使用状态。否则,如果在刷卡机管理服务器未查到该用户的刷卡信息或核对密码有误,则返回一登录失败以及相应的错误信息到用户终端机。用户终端机收到返回错误信息后将在计算机屏幕上显示“无此卡号”或“密码错误”的信息,让使用者确定是否刷卡,或是输入了错误的卡号或密码而作出相应处理,直至登录正确。同样,使用者在机器使用完后要使用户端登录服务提供的注销功能进行注销,才能释放该机的使用权,才能正常通过刷卡机管理子系统刷卡下机。在登录管理服务器端运行的登录软件,不仅负责对用户登录和注销的及时处理,还对登录后的使用情况进行管理和监控。它记录并保存用户上机的起始时间和使用者机位变更情况。以备需要时查询。它还负责对集体上机这类不需登录的情况进行处理。登录管理服务器端可以把某些机位设置为不检测卡号和登录。因此集体上机的用户在指定机位上无须登录即可使用计算机。1.3.2在整个门禁系统运行过程中,数据的可靠性和安全性是非常重要的,数据一但丢失或遭到破坏将会造成巨大损失。因此,从系统及数据的安全考虑。专门为各子系统软件设计了一个自动备份模块。该自动备份模块确保各子系统不仅要将自己的数据保存一段时间,在每天关机前退出相应的管理程序时,各子系统还会启动自己的自动备份模块,自动将当日的所有数据通过LAN传送到一个专门的数据后备服务器予以保存。这样,即使发生意外,最多只能影响到当日数据。从而把损失降到最少。1.3.3UPS系统为保证因意外事故导致突然停电后,所有的登录及刷卡信息不被丢失和使用者能刷卡下机。门禁系统专门配备了50KW/UPS不间断电源,在电网停电时能为各子系统提供不少于30分钟的供电。保证正在上机的使用者都能在这段时间内能利用刷卡机子系统提供的“不注销下机”功能正常刷卡下机。管理人员也能在所有使用者刷卡退出后按正常步骤关闭各子系统并在退出过程中自动备份当日的相关数据。第2章总体概要设计2.1系统需求分析在此实例中,我们要开发一个实现局域网门禁系统功能的客户/服务器(C/S)数据库应用系统,下面是用户对系统需求功能的陈述。系统应用在一个各台PC均安装WINDOWSNT/2000操作系统的局域网内,且此网由一台域控制器(服务器)和多台域成员PC组成。此局域网的用户为某学校的学生与教职员,分成Teacher、Master和Graduate三组。他们每人均有一张机读卡,对学生而言标识其学号,对教职员而言则标识其员工代号,在此我们系统称为ID。每个ID均由数字和英文字母组成,长度不大于16位。现在要对该网进行管理,实现刷卡上机,自动计费。因此,该系统应有刷卡和实时监控两个模块。在刷卡端能够使用刷卡器读取用户卡上的ID并发送给服务器,然后显示用户信息及刷卡成功或失败等反馈消息;在实时监控端,要求设立管理员,能够实时显示已刷卡用户、进行自动计费以及输出查询统计报表。管理员可以维护上机用户的数据,实现增加、删除用户及修改用户信息。下表2-1显示了系统模块划分情况。表2-1局域网门禁系统模块划分情况模块名所在机器功能刷卡模块专门用于刷卡的PC上刷卡及显示反馈信息实时监控模块域控制器上(服务器)实时显示、自动计费、用户管理和输出查询统计报表刷卡模块主要完成刷卡功能,同时显示从服务器上反馈回来的信息,包括:用户ID、用户姓名、用户班级、用户刷卡登记时间、用户刷卡注销时间、当前的上机余款、刷卡是否成功。为了防止用户使用键盘关闭刷卡模块,必须实现只能通过服务器端的实时监控模块制刷卡模块退出的功能。实时监控模块主要完成实时监控功能,随时监听从刷卡端发来的刷卡消息,叛断是刷卡登录还是刷卡注销,随后进行相应的数据处理,再向刷卡端返回反馈消息。用户管理主要分为用户帐号的增加、删除,用户信息的修改。每一个欲上机的用户必须首先在实时监控模块端进行注册,然后在刷卡端刷卡,方可使用局域网内的任一台机器。系统对用户进行了分类,分成老师、研究生、本科生三类,分别有不同的计费标准。统计查询功能要求有登录日志查询、用户信息查询、组信息查询和用户上机情况统计。登录日志查询要求显示某段日期内某个用户的登录记录;用户信息查询要求显示某用户的具体信息如金额等;组信息查询要求显示某组的计费标准和成员列表;用户上机情况统计要求统计用户的总上机小时数以便核查。所有查询统计结果均为只读信息,不可以进行任何修改。在用户管理和查询统计前,均要求使用者输入管理员帐号和密码。由于实时临近模块端可以对用户数据库进行操作,考虑到安全性,必须在启动的时候对使用者的身份进行认证,由使用者输入管理员帐号和密码,同数据库中的记录进行核对,核对正确后方可进入系统。这样确保了只有管理员才可以运行实时监控模块,也保证了用户资料不受恶意修改。管理员进入实时监控模块后,可以维护自己的密码,以满足自己的需要。2.2系统设计在以上的系统功能分析中,我们确定了系统的模块划分和所需要具有的功能。然而用户需求还不能直接指导我们进行开发,作为开发人员,我们必须根据用户需求进行详细的系统分析和设计,形成相应的数据模型,包括数据库的表结构、数据在各表及各模块之间的传递关系、网络通信所使用的自定义协议等。只有事先确定了这些,我们才能在开发时做到心中有数,游刃有余。2.2.数据流图(DataFlowDiagram,简称DFD图)是用一些规定的图标和符号来描述数据在系统中的流动和处理的情况。数据流图在表示系统时,采用自上而下逐步细化的结构化方法表示。顶层一级的功能在下一级中加以细化。根据系统分析,我们可以画出如图2-1所示的顶层数据流图。局域网门禁系统局域网门禁系统刷卡消息刷卡反馈消息系统退出命令刷卡模块实时监控模块图2-1顶层数据流图上面的顶层数据流图经过细化后,得到图2-2所示的监控模块第二层数据流图与图2-3所示的刷卡模块第二层数据流图。刷卡消息处理实时监控刷卡消息处理实时监控P1管理员查询统计用户维护登录日志D1组计费标准D2用户列表D3P4P2P3馈出卡消命消息令息刷卡消息量验证信息身份验证处理结果验身证份调用信息调用信息调用信息信验查询要求统计要求修改要求息证查询结果统计结果修改结果图2-2实时监控模块第二层数据流刷卡器刷卡信息处理刷卡器刷卡信息处理P5刷卡反馈消息刷卡ID系统退出命令图2-3刷卡模块第二层数据流2.2.根据数据项的含义,我们将数据项的定义分为以下几个方面:数据项名、类型、长度、附加说明。主要数据项定义如表2-2至表2-3所示。表2-2数据项定义(登录日志)数据项名类型长度说明用户ID(id)字符型16英文字符和数字的组合类型(type)字符型4固定为“刷卡”,为以后功能扩充使用登录时间(intime)日期型形式:2005-3-412:00注销时间(outtime)日期型形式同上IP字符型15以后功能扩充使用表2-3数据项定义(组计费标准)数据项名类型长度说明组类别(type)字符型16英文字符和数字的组合(主码),为Teacher|Master|Graduate计费标准(criteria)浮点型Single类型表2-4数据项定义(用户列表)数据项名类型长度说明用户ID(id)字符型16用户卡上的标识码(主码)类型(type)字符型16同组类别姓名(name)字符型20密码(pwd)字符型20英文字符和数字的组合金额(money)浮点型Single类型附加信息(info)字符型100其他信息2.3数据库设计数据库概念设计根据对数据流图和数据字典的分析,我们可以确定该应用中的实体、属性和实体之间的关系,并画出如图所示的用户E-R图。组组1属于属于1n对应ID对应金额用户11nm对应ID对应金额用户对应对应n计费标准计费标准图2-4数据流程图2.数据库逻辑结构设计转换后的关系模型如下所示,关系主码用下划线标出.登录日志Log(id,type,intime,outtime,ip)计费标准Rule(type,criteria)用户列表Users(id,type,class,name,pwd,money,info)下面我们将利用SQL语言的CREATE语句建立上述关系,并定义好完整性约束.CRAETETABLELog登录日志(idVARCHAR(16),typeVARCHAR(16),intimeDATETIME,outtimeDATETIME,ipVARCHAR(15));CREATETABLERule计费标准(typeVARCHAR(16)CONSTRAINTCONDNOPRIMARYKEY,criteriaFLOAT);CREATETABLEUsers(idVARCHAR(16)CONSTRAINTCONDNOPRIMARYKEY,typeVARCHAR(16),classVARCHAR(16),nameVARCHAR(20),pwdVARCHAR(20),moneyFLOAT,infoVARCHAR(100));具体到建立数据库,需要手工建立一个数据库LGSys.mdb.第3章分子模块的设计3.1C/S基本概念什么是C/S?如果你是一位DELPHI开发人员,那你一定要把这个概念弄清楚。因为实际上,DELPHI本身就是一个客户/服务器开发环境。典型的客户/服务器结构总是包括一个前端程序,也叫客户。其作用于是向远程服务器上的程序发送数据,并接收来自服务器的数据并进行一定的处理,再根据情况进行反馈。即远程服务器是服务的提供者,它可以从内部访问服务器上的数据库;而客户总是向服务器请求服务,并不能直接访问数据库内的数据。在这种情况下,服务器尽可能详尽地定义业务规则和实现尽可对强大的功能,因为它往往是更新比较缓慢的,而客户往往比较“瘦小”,因为它往往是频繁更新和分发的对象。一般情况下,客户/服务器方案可以解决以下几个问题:允许将不同客户进行分类,每类客户只允许处理它负责的数据。以一种更为有效的方式为决策者提供决策支持。在MIS中加强对数据的集中控制,而在数据分析和使用的集中控制上只需要花费比较少的精力。在服务器端可以对整个业务数据库进行数据完整性验证。更灵活的业务划分,客户端和服务器端业务功能分离,各司其职。服务器向客户端传递的数据是经过筛选的,可以减轻网络负担。客户/服务器模型客户/服务器模型通常分两层模型和三层模型两类。下面我们分别进行介绍。两层模型两层模型的应用十广泛,基本上,它是由桌面数据库应用系统演变而来的。在此模型中,数据库位于服务器端,客户应用程序位于客户机上,业务逻辑放在客户或服务器上。如图3-1所示。三层模型如图3-2所示,客户仅仅起显示数据的作用,业务规则(处理逻辑)放在服务器上,而实际的数据库则放在另外一台机器上。由于三者处于不同的机器,开发人员可以更灵活高效地划分系统功能,优化数据访问及维护数据的完整性。客户3数据业务规则客户2客户1客户3数据业务规则客户2客户1图3-1两层客户/服务器模型数据库数据库业务规则客户1客户2客户3图3-2三层客户/服务器模客户/服务器模型与桌面数据库应用系统的比较客户/服务器器模型与桌面模型应用系统的比较:面向集合与面向记录。对客户端而言,它面向的是记录。对桌面数据库而言,它直接面对数据集合;而在C/S模型中,客户面对的只是数据集合的一个子集。通过SQL语句,客户可以从服务器端获取到符合一定要求的一组记录,而不需要把整个数据表格全部下载到本地再进行处理。而一个桌面数据库要从网络数据库中获取数据时,它得到的是整个数据表格。如果数据表格很大,那网络传输所需要的时间是很长的。相比之下,通过SQL,只需要通过网络传输符合记录的部分记录集,这就大大减轻了网络传输的负担,也使系统的响应速度得到了很大的提高。3.3.刷卡模块主要有2个子模块组成,如图3-3所示。背景框架子模块背景框架子模块刷卡消息处理模块刷卡消息处理模块图3-3刷卡模块系统结构图下面是各模块的主要功能:背景框架子模块该子模块是刷卡模块的背景界面,通过覆盖整个桌面起到模拟的效果。同时,它起到禁止用户关闭系统的作用。通过在内部设定一个开关,使得用户无法通过键盘和鼠标关闭刷卡应用程序,而只能通过接收来自服务器的命令才能够自动关闭。刷卡消息处理子模块该子模块是刷卡模块的逻辑核心部分。在这个子模块中,能够实现自动读取用户刷卡信息、向服务器传送刷卡信息和接收并显示服务器反馈信息的功能。通过这个模块,用户可以刷卡,实时看到自己刷卡的处理结果以及自己的姓名、班级、刷卡登录时间、注销时间和当前余额信息。如果用户余额不足,该子模块将显示拒绝用户登录的提示。3.3.该模块主要由四个子模块组成,如图3-4所示实时监控实时监控子模块查询统计子模块用户管理子模块刷卡消息处理子模块查询统计子模块用户管理子模块刷卡消息处理子模块图3-4实时监控子模块系统结构图下面是各模块的主要功能:实时监控子模块该子模块是实时监控模块的主界面,也是系统的惟一进入和退出端。通过此子模块,用户可以调用查询统计子模块和用户管理子模块,同时,此子模块还自动调用刷卡消息处理子模块处理来自刷卡模块的消息。由于只有管理员才可以访问这四个子模块,因此,在进入此模块时必须进行身份验证,确保只有管理员才能运行实时监控应用程序。在此模块中,管理员还可以实时看到当前刷卡上机的用户列表及每个用户的详细信息。刷卡消息处理子模块该子模块是实时监控模块实现门禁功能和自动计费功能的核心部分。这个子模块由实时监控子模块自动调用,以刷卡消息为处理对象,自动维护已刷卡用户列表和域用户列表,并向数据库中写入登录住处和更新用户金额。由于采用了多线程模型和临界区域对象,可以处理同时到达的多个刷卡信息。用户管理子模块该子模块是管理员维护域用户列表和用户信息的界面。管理员可以浏览并修改三个用户组的成员列表,组计费标准和各用户的详细信息。可以为各个用户组添加新用户和删除无用的用户。由于用户信息同时存在于域用户(操作系统数据结构)和数据库(系统自带数据表单),如图3-5所示,因此管理员要修改用户清单必须使用此子模块,而不能单独使用操作系统自带的管理工具来维护用户列表。用户管理子模块用户管理子模块数据库各用户组计费标准Rule表单用户列表Users表单数据库各用户组计费标准Rule表单用户列表Users表单Windows2000/NT域全局组域用户列表一一对应同步更新图3-5用户管理子模块内部结构说明查询统计子模块该子模块允许管理员就登录、用户信息和组成员列表进行查询。允许对查询设定关键字进行模糊查询,对登录记录的查询还允许设定查询的时间段。统计功能分为用户上机清单和用户上机总时两部分,前者给出用户每一天的上机时间,后者给出用户总上机时间。统计前,可以设定统计的用户ID进行模糊查询,还可以设定统计的时间段。最后生成的数据集体传递给报表及输出子模块进行显示和输出。报表及输出子模块该子模块显示查询统计模块生成的数据集,并以MicrosoftWordXP的形式自动输出到固定的目录下,供用户浏览、修改和打印。3.4系统功能实现通过上面对本局域网门禁系统的功能的简单介绍,我们把此系统分割成两个单独的模块,刷卡模块和实时监控模块,两者之间通过网络进行通信。下面将介绍系统的详细设计和具体的实现细节。3.4.1本模块采用MDI结构,背景窗口为MDI框架窗口,刷卡窗口为MDI子窗口。系统启动后背景窗口将以全屏显示,重点突出刷卡窗口。MDI结构即多文档结构,是从Windows2.0下的MicrosoftExcel电子表格程序开始引入的,与它相对应的是SDI(单文档结构)。一个MDI应用程序包含如下窗口:框架窗口:框架窗口虽应用程序的主要窗口。此窗口一般含有标题栏、菜单条和系统菜单。右上角为最小化、最大化和关闭按钮。客户窗口:MDI程序的窗口管理器,是框架窗口吕间的空白区域。用来管理和显示MDI子窗口。MDI子窗口:显示在客户窗口内的窗口,不能移出客户区。由于Delphi6.0会自动管理MDI窗口元素。因此对我们来说,只需要记住对框架窗口而言,必须把FormStyle属性设置成fsMDIForm;对子窗口而言,必须把FormStyle属性设置成fsMDIChild。如果子窗口是自动建立的,那么在程序启动的时候会自动显示在客户窗口内。缺省地,每一个窗口都有是自动建立的,这可以在Project菜单的Options内的Forms卡内观察。Auto-createforms列表里的窗口Form1v和Form2都是在程序运行的时候自动建立的,如果不是MDI子窗口,则处于隐藏状态。如果把某个Form如Form3放进Availableforms列表下,那在调用这个窗口前必须手工建立它。3.5UDP协议的基本知识UDP协议(UserDatagramProtocol),即用户数据报协议,广泛使用在计算机间传输数据的网络应用上,如网络视频会议系统、语音传播等众多的客户/服务器模式。UDP协议从问世至今已经被使用了很多年,虽然其最初的光彩已经被一些类似协议所掩盖,但是即使在今天,UDP协议仍然在一项非常衫和有效的网络传输层协议。与我们所熟知的TCP协议一样,UDP协议位于IP(InternetProtocol)协议的顶层。根据OSI(OpenSystemInterconnect)参考模型,UDP和TCP同属于传输层协议。UDP协议的主要作用是将网络数据流量压缩成数据报的形式。一个典型的数据报是一个二进制数据的传输单位。每一个数据报的前8个字节用来包含报头号信息,剩余字节则用来包含具体的传输数据。UDP协议是一种无连接协议。它与TCP操作不同,计算机间进行通信时并不需要事先建立一个连接。而且,一个UDP的接受方可以同时作为一个发送方,相比TCP协议,它的应用方法也非常简单。因此,在我们的系统中,使用UDP协议作为我们进行网络通信的网络协议。3.6界面设计刷卡消息处理子模块的界面布局如图3-6所示。图3-6刷卡消息处理子模块界面布局从图中我们可以看到刷卡界面的基本布局。对此窗口,我们需要把FormStyle属性设置为fsMDIChild,命名为fmScanForm,Caption为“LGYSY-刷卡窗口”。窗口内最上面是刷卡用的Tedit控件,命名为editCardNo。下面是个人信息界面,分别显示了用户姓名、班级、登录时间、注销时间和当前上机余额,分别命名为editName,editClass,editInTime,editOutTime,editMoney。由于只起显示作用,因此这五个Tedit控件的ReadOnly属性需要设置为False。对于设置多个组件的同一属性,有一个简单的方法,即按住键盘Shift键分别点选各个Tedit组件,然后在ObjectInspector里选择ReadOnly项,设置为True即可。最下面是状态栏,左边的Panel用于显示刷卡成功/失败的信息,右边的Panel显示当前日期。最关键的TNMUDP控件我们命名为nuScanCard,LocalPort属性设置为2171,RemotePort属性设置为2173,ReportLevel属性为1。3.7代码设计首先,在窗口创建时需要将个人信息下的各个输入框设置为只读。其次,我们在此需要用到UDP的广播功能,这样只需要把RemoteIP设置为广播地址,发送的数据就可以被局域网内的所有机器所接收。这样,我们就没必要单独设置服务器的IP,否则,当服务器IP改变的时候,还必须重新设置nuScanCard.RemoteHost属性值。对于广播的详细信息,请参阅其他专业文献,在这里只需要指出,如果本机IP为165.111.13.13而子网掩码为255.255.0.0,则广播地址即为165.111.255.255。因此,在窗口创建时需要获取广播地址并赋给RemoteIP属性。如果获取IP失败,则应该退出系统。另外,由于下面的代码用到了WinSock.pas单元,而这个单元并没有缺省包含在引用列表中,所以必须手工在接口部分的引用列表中添加此单元。3.8ODBC数据源设计所有的模块及界面做好以后,最后就要进行数据库连接了。打开开始――设置――控制面板――管理工具――ODBC数据源,选择系统DNS,如下图所示:图3-7ODBC数据源(1)选择添加创建新数据源如下图所示:图3-8ODBC数据源(2)点击完成。填写数据源名称网吧管理系统,选择数据库,如下图所示:图3-9ODBC数据源(3)点击确定完成。结束语通过本次毕业设计,我们基本明确了一个局域网门禁系统从构思到设计再到实现的一般步骤以及需要注意的方面,这也是一个让我们自己学习知识和运用知识的大好机会。我们最大的遗憾就是由于能力和设备的限制没有能够把一整套网络管理系统做出来。还有部分功能还有待进一步加强。严格的来说,我们的系统还不是真正意义上的局域网门禁系统,而是一个单机测试版。原因就是缺乏很强专业技术水平以及没有很高的技术含量。由于在校内课程中没有涉及到很深Delphi程序,以及我个人学习能力的限制,系统也没有能够实现很强的功能。还有就是各组员间联系不够紧密,缺乏团队合作精神。由于与指导教师缺乏默契的合作和密切的联系,为后期的时间紧迫埋下了隐患。而作为组长,我负有不可推卸的责任。但是在各位领导和老师对我们的关心和指导之下,我们克服了困难,经过调试,系统已基本达到我们初步制定的目标,完成简单登录、查询、管理等功能,并能顺利通过单机环境测试。我相信,在不久的将来,局域网门禁系统将提供更为简单,同时也是更为精细和完善的实现手段。到那时,使用局域网门禁系统管理网络,将更加简单!致谢在这几个月的毕业设计过程中,学校领导和老师对我们表达了深切的关心和严格的督促;尤其是在课题设计的初始阶段,王秀山老师对我进行了悉心的教导并提出了许多宝贵的意见;在系统开发过程中,指导教师在百忙之中抽出时间为我们的设计提供参考书目和专业指导;在课题研究过程中,其他老师也为我们提供了许多的宝贵意见和帮助;班主任老师更是一遍一遍不厌其烦地督促我们完成设计工作。在此,我对这段时间帮助过我的所有老师致以最由衷的感谢,谢谢各位老师的帮助,没有你们,我的毕业设计不会如此顺利的完成。参考文献1、江毅等.DELPHI6.0数据库实例编程.北京:中国水利水电出版社,20022、苗雪兰,刘瑞新,王怀峰.数据库系统原理及应用教程.北京:机械工业出版社,20013、袁培根,杨东艳,肖仁琴,何明儒.开放式机房门禁系统研制与实践.北京:实验室研究与探索第20卷第5期,20014、贾成宇,李树秋,王世刚.智能门禁系统门控部分硬件设计.吉林:长春邮电学院学报第18卷第3期,20005、贾成宇,李树秋,王世刚.智能门禁系统门控部分软件设计.吉林:长春邮电学院学报第19卷第1期,2001附录unitmain;interfaceusesWindows,Messages,SysUtils,Variants,Classes,Graphics,Controls,Forms,Dialogs,Grids,DBGrids,StdCtrls,ExtCtrls,Menus,Mask,DBCtrls,Buttons;typeTForm1=class(TForm)Panel1:TPanel;Panel2:TPanel;Edit1:TEdit;Label1:TLabel;DBGrid1:TDBGrid;MainMenu1:TMainMenu;N1:TMenuItem;N2:TMenuItem;N4:TMenuItem;N6:TMenuItem;N5:TMenuItem;PC1:TMenuItem;DBEsdjg:TDBEdit;DBEshangji:TDBEdit;DBExiaji:TDBEdit;DBEsj:TDBEdit;DBExj:TDBEdit;Label2:TLabel;Timer1:TTimer;Splitter1:TSplitter;Label3:TLabel;Label4:TLabel;Panel3:TPanel;DBGrid2:TDBGrid;Panel4:TPanel;N7:TMenuItem;DBEmrjg:TDBEdit;DBEyhm:TDBEdit;N8:TMenuItem;N9:TMenuItem;DBEqx:TDBEdit;DBText1:TDBText;N3:TMenuItem;Label5:TLabel;functionsswu(yuanshi:string):real;functionjgjs(shangji:string;xiaji:string;MM:string):string;procedureEdit1KeyPress(Sender:TObject;varKey:Char);procedureN5Click(Sender:TObject);procedureTimer1Timer(Sender:TObject);procedurePC1Click(Sender:TObject);procedureN7Click(Sender:TObject);procedureN6Click(Sender:TObject);procedureN4Click(Sender:TObject);procedureFormActivate(Sender:TObject);procedureN3Click(Sender:TObject);private{Privatedeclarations}public{Publicdeclarations}end;varForm1:TForm1;implementationusesD_M,sd_gl,dd_gl,mr_jg,deng_lu,dl_gl,shan_chu;{$R*.dfm}functionTform1.sswu(yuanshi:string):real;vardd:string;beginifpos('.',yuanshi)<>0thenbegindd:=copy(yuanshi,pos('.',yuanshi)+1,3);if(strtofloat(dd)>=0)and(strtofloat(dd)<=25)thenresult:=strtofloat(copy(yuanshi,1,pos('.',yuanshi)-1))elseif(strtofloat(dd)>25)and(strtofloat(dd)<=75)thenresult:=strtofloat(copy(yuanshi,1,pos('.',yuanshi)-1))+0.5elseif(strtofloat(dd)>75)and(strtofloat(dd)<=99)thenresult:=strtofloat(copy(yuanshi,1,pos('.',yuanshi)-1))+1;endelseresult:=strtofloat(yuanshi);end;functionTform1.jgjs(shangji:string;xiaji:string;MM:string):string;vartt,xiaoshi,fenzhong,allmoney:string;begintt:='';xiaoshi:='';fenzhong:='';allmoney:='';//tt:=timetostr(now()-strtodatetime(DM.ADOTgltemp.Lookup('卡编号',edit1.Text,'上机时间')));tt:=timetostr(strtodatetime(xiaji)-strtodatetime(shangji));xiaoshi:=copy(tt,1,2);ifcopy(xiaoshi,2,2)=':'thenxiaoshi:=copy(xiaoshi,1,1);xiaoshi:=floattostr(strtofloat(xiaoshi)*strtofloat(MM));//小时位的计算ifcopy(tt,3,1)=':'thenfenzhong:=copy(tt,4,2)elsefenzhong:=copy(tt,3,2);fenzhong:=copy(floattostr(strtofloat(fenzhong)/60*strtofloat(MM)),1,4);//分钟位的计算result:=floattostr(strtofloat(xiaoshi)+strtofloat(fenzhong));//总金额的计算end;procedureTForm1.Edit1KeyPress(Sender:TObject;varKey:Char);varmoneyall:double;ok,ss,xx:string;beginss:='';xx:='';ifkey=#13thenif(DM.ADOTgltemp.Lookup('卡编号',edit1.Text,'卡编号')=Null)thenbeginDM.ADOTgl.Append;DM.ADOTgl.FieldByName('卡编号').AsString:=edit1.Text;DM.ADOTgl.FieldByName('上机时间').AsString:=datetimetostr(now());DM.ADOTgl.FieldByName('操作员').AsString:=DBEyhm.Text;DM.ADOTgl.Post;DM.ADOTgltemp.Append;DM.ADOTgltemp.FieldByName('卡编号').AsString:=edit1.Text;DM.ADOTgltemp.FieldByName('上机时间').AsString:=datetimetostr(now());DM.ADOTgltemp.Post;edit1.Text:='';DBText1.Caption:=inttostr(strtoint(DBtext1.Caption)-1);DM.ADOQuery1.Close;DM.ADOQuery1.Open;DM.ADOQuery2.Close;DM.ADOQuery2.Open;endelsebegindm.ADOTgl.Locate('卡编号;上机时间',vararrayof([DM.ADOTgltemp.Lookup('卡编号',edit1.Text,'卡编号'),DM.ADOTgltemp.Lookup('卡编号',edit1.Text,'上机时间')]),[]);dm.ADOTgl.Edit;DM.ADOTgl.FieldByName('下机时间').AsString:=datetimetostr(now());DM.ADOTgl.UpdateBatch;DM.ADOTgl.Edit;DM.ADOTjggl.First;ok:='';repeatbeginifstrtodatetime(DBEsj.Text)<=strtodatetime((datetostr(now())+''+DBEshangji.Text))thenbegin//情况2*(*)if(strtodatetime(DBExj.Text)>=strtodatetime((datetostr(now())+''+DBEshangji.Text)))and(strtodatetime(DBExj.Text)<strtodatetime((datetostr(now())+''+DBExiaji.Text)))thenbeginDM.ADOTgl.FieldByName('结算').AsFloat:=sswu(jgjs(DBEsj.Text,datetostr(now())+''+DBEshangji.Text,DBEmrjg.text))+sswu(jgjs(datetostr(now())+''+DBEshangji.Text,DBExj.Text,DBEsdjg.Text));ok:='ok';break;end;//情况5*()*if(strtodatetime(DBExj.Text)>=strtodatetime((datetostr(now())+''+DBExiaji.Text)))thenbeginmoneyall:=0;moneyall:=sswu(jgjs(DBEsj.Text,datetostr(now())+''+DBEshangji.Text,DBEmrjg.text));whileok<>'ok'dobeginDM.ADOTjggl.Next;ifDM.ADOTjggl.eofthenbeginDM.ADOTgl.FieldByName('结算').AsFloat:=moneyall+sswu(jgjs(datetostr(now())+''+DBEshangji.Text,datetostr(now())+''+DBExiaji.Text,DBEsdjg.Text))+sswu(jgjs(datetostr(now())+''+DBExiaji.Text,DBExj.Text,DBEmrjg.Text));ok:='ok';break;end;if(strtodatetime(DBExj.Text)<=strtodatetime((datetostr(now())+''+DBEshangji.Text)))thenbeginDM.ADOTjggl.Prior;DM.ADOTgl.FieldByName('结算').AsFloat:=moneyall+sswu(jgjs(datetostr(now())+''+DBEshangji.Text,datetostr(now())+''+DBExiaji.Text,DBEsdjg.Text))+sswu(jgjs(datetostr(now())+''+DBExiaji.Text,DBExj.Text,DBEmrjg.Text));ok:='ok';break;end;DM.ADOTjggl.Prior;ss:=datetostr(now())+''+DBExiaji.Text;DM.ADOTjggl.Next;xx:=datetostr(now())+''+DBEshangji.Text;DM.ADOTjggl.Prior;moneyall:=moneyall+sswu(jgjs(datetostr(now())+''+DBEshangji.Text,datetostr(now())+''+DBExiaji.Text,DBEsdjg.Text))+sswu(jgjs(ss,xx,DBEmrjg.Text));DM.ADOTjggl.Next;end;break;end;end;if(strtodatetime(DBEsj.Text)>=strtodatetime((datetostr(now())+''+DBEshangji.Text)))thenbegin//情况3(**)ifstrtodatetime(DBExj.Text)<=strtodatetime((datetostr(now())+''+DBExiaji.Text))thenbeginDM.ADOTgl.FieldByName('结算').AsFloat:=sswu(jgjs(DBEsj.Text,DBExj.Text,DBEsdjg.Text));ok:='ok';

温馨提示

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

评论

0/150

提交评论