-
1 需求分析
-
2 125K接口使用视频演示
-
3 数据库建立与连接
-
4 分步实现
-
5 电子课件
-
6 微课视频
系统简介
门禁系统是采用125K卡片作为人员的标识,实现一卡一人,并将每张卡片对应的持有人信息和卡片信息存入数据库,完成人员的电脑化管理。
建设目标
目前在一些小区、学校等地方人员流动大,人员管理不方便,一些不法份子随意进出,公共财产、人生安全等容易受到损害。
纯人工管理存在的弊端:
人员多,不定因素多,管理不方便;
需要24小时在岗,管理人员在夜晚恐难以应付;
有些地方使用人工管理会增加成本;
针对这种情况开发的门禁管理系统采用数字技术、显示技术、控制技术及国际先进的RFID技术,与计算机软件技术相结合,对进出小区、学校等实行可无人职守型管理。其详细建设目标如下:
系统提供发卡管理,实现一卡一人管理,并将每张RFID卡片对应的持卡人信息和卡片信息存入数据库。
系统提供销卡管理,能对不再使用的RFID卡片在数据库中保存的信息进行删除销毁。
系统提供权限管理,能的已注册的卡片提高或降低开关门的权限。
用户分析
门禁系统的用户是人员管理部门,系统能帮助员工完成对进出口人员的管理。
需求范围
门禁管理系统是为了提高人员管理部门的工作效率以及人员进出管理而开发的,它以门禁管理为核心,提供发卡管理功能、销卡管理、权限管理、门禁管理等功能。具体如下:
门禁管理系统在发卡管理界面,提供发卡管理功能。
门禁管理系统在销卡管理界面,提供销卡管理功能。
门禁管理系统在权限管理界面,提供权限管理功能。
门禁管理系统在门禁管理界面,提供门禁管理功能。
产品功能性需求
本章详细说明门禁管理系统所需要实现的所有功能。在需求的功能模型中分析方法上,选择传统的功能模块分析与用例分析结合的方式完成:整体架构通过use-case模型以及功能模块模型共同描述,具体的功能点将按照功能模块进行分类,单个功能点的描述通过用例标准描述模板完成。
整体功能需求架构
门禁管理系统是一个对人员进出进行管理的系统。它的核心是实时门禁提高人员进出的“门槛”;,将RFID卡片的卡号对应的持卡人信息存入数据库,并且,通过信息查询,能够随时查询RFID卡片的卡号是否与持卡信息匹配,禁止了无卡人士的进出。
门禁管理系统从功能上来看,主要分为四个部分:发卡管理、销卡管理、权限管理和门禁管理。其中发卡管理主要完成持卡人信息的登记工作,确保每张RFID卡片对应一个人;销卡管理是将无用的持卡人信息从数据库中删除;权限管理是提高或降低持卡人进出的权限;门禁管理是查看持卡人是否能够打开门。其具体的功能架构如下:

发卡管理模块功能需求
发卡管理模块有两个主要功能:一是自动寻RFID卡片,二是将持卡人信息存入数据库。
在本模块中,只有一个用例,其详细描述如下:
用例编号 | 001 |
用例名称 | 发卡管理 |
参与者 | 须持卡进出的人员 |
用例描述 | 人员管理的人员将RFID卡片的卡号、持卡人信息存入数据库中。 |
前置条件 | |
后置条件 | 持卡人获得合法身份,可以被系统录入 |
基本流程 | RFID读写器寻到RFID卡片 人员管理的人员将RFID卡片的卡号、持卡人信息存入数据库中。 |
扩展 | 如果数据库已有该持卡人信息,则提示此卡已注册。 |
异常 | |
非功能性说明 | |
补充说明 |
销卡管理模块功能需求
销卡管理模块有两个主要功能:一是自动寻RFID卡片,二是将RFID卡片的卡号对应的持卡人信息从数据库中删除出来。
在本模块中,只有一个用例,其详细描述如下:
用例编号 | 002 |
用例名称 | 销卡管理 |
参与者 | 不再使用该卡的持卡人 |
用例描述 | 系统将RFID卡片的卡号与数据库中的持卡人信息进行匹配,若匹配到信息,单击删除按钮即可删除。 |
前置条件 | 持卡人必须获得合法身份,且已被注册 |
后置条件 | |
基本流程 | RFID读写器寻到RFID卡片 车辆统计人员将RFID卡片的卡号、持卡人信息从数据库中删除。 |
扩展 | 如果寻到的RFID卡片的卡号在数据库中匹配不到信息,则显示该卡未注册。 |
异常 | |
非功能性说明 | |
补充说明 |
权限管理模块功能需求
权限管理模块有两个主要功能:一是提高持卡人的进出权限,二是降低持卡人的进出权限。
在本模块中,只有一个用例,其详细描述如下:
用例编号 | 003 |
用例名称 | 权限管理 |
参与者 | 需提高或降低权限的持卡人 |
用例描述 | 系统将已注册人员的信息和权限展示出来,选择相应的已注册成员进行权限的提高或操作。 |
前置条件 | 持卡人必须获得合法身份,且已被注册 |
后置条件 | |
基本流程 | 从数据库中查询已注册人员的信息及其权限,展示出来;选择相应的功能按钮进行提高或降低其进出权限 |
扩展 | |
异常 | |
非功能性说明 | |
补充说明 |
门禁管理模块功能需求
门禁管理模块有三个主要功能:一是显示持卡人信息,二是打开门,三是关闭门。
在本模块中,只有一个用例,其详细描述如下:
用例编号 | 004 |
用例名称 | 门禁管理 |
参与者 | 持卡人 |
用例描述 | 系统将持卡人信息与数据库中的信息进行匹配,如果持卡人已注册且有进入的权限则打开门,否则关闭门。 |
前置条件 | |
后置条件 | |
基本流程 | 从数据库中查询已注册人员的信息,展示出来;根据其权限判断其是否可以进入。 |
扩展 | 门打开后,十秒之后关闭。 |
异常 | |
非功能性说明 | |
补充说明 |
非功能性需求
非功能性需求在本文档中主要描述三方面内容:性能需求,实施环境需求以及用户界面需求。其中:
性能需求:它指的是门禁管理系统对响应时间上的要求,因为系统没有大数据量的传输和处理要求,所以吞吐量不在性能需求中规定。
实施环境需求:它指的是门禁管理系统对实施环境的要求,主要是软件环境方面。
用户界面需求:它指的是在用户交互界面上的一些特定要求。
性能需求
性能需主要是响应时间指标。
响应时间指的是用户在使用系统进行业务操作时,发出操作指令后的系统响应时间上限,本系统设定为3秒。
实施环境需求
系统的实施环境要求主要是在软件环境方面。
软件环境:系统需要的软件环境包括服务器操作系统、数据库两个个类别,其要求分别如下:
服务器操作系统:windows7
数据库:sql server 2008
用户界面需求
本系统主要针对的用户人群是人员管理部门,所以其用户界面上,要求简单、方便、直观,而并不要求有太炫丽的效果。
在界面风格上,尽可能采用清晰明了的布局,颜色搭配上采用灰色为主基调。
门禁管理系统功能设计文档
类的介绍:
在本程序中使用了自己写的两个类,分别是:SqlHelper类和SearchCardID类(可在本程序的目录底下找到)。使用SqlHelper类时须先引用其命名空间(因为和主程序不在同一命名空间下),然后实例化一个对象;使用SearchCardID类只要实例化一个对象就可以了(因为和主程序在同一命名空间下)。
下面是对这两个类的简单介绍:
类名 | 方法 | 参数 | 返回值 | 功能 |
SqlHelper | public bool OpenSqlConnection() | 无 | bool | 打开数据库连接;成功返回true,失败返回false |
public bool CloseSqlConnection() | 无 | 无 | 关闭数据库连接 | |
publi bool UpdateData(string str) | string类型(用于传递数据库更新语句) | bool | 用于数据库更新,更新成功返回true,否则返回false | |
public bool Inquire(string str) | string类型(用于传递数据库查询语句) | bool | 用于查询数据库中是否有该条记录,没有则返回true,有则返回false | |
public bool Inquire1(string str) | string类型(用于传递数据库查询语句) | bool | 用来查询数据库中包含指定数据的所有数据,这些数据将会分别赋值给CarID,Name,Sex,Phone等静态变量;成功返回true失败返回false | |
public bool Insert(string str) | string类型(用于传递数据库插入语句) | bool | 用于向数据库中插入一条信息,成功返回true,失败返回false | |
public bool Delete(string str) | string类型(用于传递数据库删除语句) | bool | 用于在数据库中删除指定信息,删除成功返回true,失败返回false | |
SearchCardID | public bool OpenPort(string port) | string类型(用于传递串口号) | bool | 用于打开串口,打开成功返回true,否则返回false |
public void ClosePort() | 用于关闭串口 | |||
public void ReceiveData() | 用于读取卡号 |
功能设计:
获得串口号
SerialPort类中的GetPortNames方法可获得当前计算机的可用串口号,返回值为数组类型。
打开和关闭串口
可使用SerialPort类中的Open方法打开串口,也可使用SearchCardID类中的OpenPort方法;关闭串口可使用SerialPort类中的Close方法,也可使用SearchCardID类中的ClosePort方法。
获取卡号
可使用SerialPort类中的Read方法读取缓冲区的字节,也可使用SerialPort类中的ReceiveData方法来获取卡号,卡号将会保存在SerialPort类中的CarID中。
模拟开关门
使用一个单独的线程循环读卡,使用一个timer控件根据读到的卡号循环查询数据库,如果与数据库中的信息匹配则开门(开门后可适当延时后关门),否则关门。
注册
可使用SqlHelper类中的Insert方法,将符合条件的卡片的信息保存进数据库。
销卡
可使用SqlHelper类中的Delete方法,将符合条件的卡片的信息从数据库中删除
管理卡片权限
通过更改数据库中permission字段的权限来实现,permission为True时则为获得权限,permission为False时则没有得到权限。
应当遵循的界面设计规范
软件用户界面是指软件用于和用户交流的外观、部件和程序等等。软件界面的设计,既要从外观上进行创意以到达吸引眼球的目的,还要结合图形和版面设计的相关原理,从而使得软件设计变成了一门独特的艺术。通常的讲,企业软件用户界面的设计应遵循以下几个基本原则:
用户向导
设计用户界面首先要明确到底谁是使用者,要站在用户的观点和立场上来考虑设计软件。要作到这一点,必须要和用户来沟通,了解他们的需求、目标、期望和偏好等。设计者要清楚,用户之间差别很大,他们的能力各有不同。
简单原则
简洁和易于操作是界面设计的最重要的原则。毕竟,软件建设出来是用于用户来查阅信息和使用服务。不需要在界面上设置过多的操作,堆集上很多复杂和花哨的图片。该原则一般的要求,是操作设计尽量简单,并且有明确的操作提示;软件所有的内容和服务都在显眼处向用户予以说明等。
和谐与一致性
通过对软件的各种元素(颜色、字体、图形、空白等)使用一定的规格,使得设计良好的网页看起来应该是和谐的。或者说,软件的众多单独网页应该看起来像一个整体。软件设计上要保持一致性,这又是很重要的一点。一致的结构设计,可以让浏览者对软件的形象有深刻的记忆;一致的导航设计,可以让浏览者迅速而又有效的进入在软件中自己所需要的部分;一致的操作设计,可以让浏览者快速学会在整个软件的各种功能操作。破坏这一原则,会误导浏览者,并且让整个软件显的杂乱无章,给人留下不良的印象。当然,软件设计的一致性并不意味着刻板和一成不变,有的软件在不同栏目使用不同的风格,或者随着时间的推移不断的改版软件,会给浏览者带来新鲜的感觉。
主界面
系统的主界面如下图示:

在上图中整个主界面分为4个部分,其中工具栏提供相应的功能操作,门禁模拟用来模拟现实中门的开关,状态栏用来显示一些操作的反馈信息,用户信息用来显示当前持卡人的主要信息。
发卡界面
发卡的界面如下图示:

在整个发卡界面主要是用来填写注册人员的一些基本信息,并将数据保存到数据库中。
销卡界面
销卡的界面如下图示:

在整个销卡界面主要是用来显示须消卡人员的基本信息,并将数据从数据库中删除。
权限管理界面
权限管理的界面如下图示:

在整个权限管理界面主要分为两个部分,左侧显示的是已经注册但还没有获得权限的用户,右侧显示的是已经注册且已获得权限的用户;根据相应的功能按钮可为选中的用户提高或降低权限。
门禁管理系统实验指导
准备工作
附加数据库
在门禁管理系统文件夹中提供了该系统的SQL Server2005数据库文件,将此数据库文件附加到数据库中,具体如何附加这里不演示。
修改数据库文件
数据库附加成功后,在源码程序的AccessControl/AccessControl/bin/Debug/SqlConfig.txt文件中修改数据库文件连接信息。
注:这里的路径只是针对该项目,如需自己开发该项目请按照自己的要求。
在该文件中,Server=localhost,表示本地(需连接其他电脑的数据库,就必须输入该电脑的IP地址,且该电脑的远程数据库服务必须开启);database = database_125K表示数据库的名称;uid=sa;pwd = 123;表示数据库的sa用户和sa用户密码;
搭建门禁环境
搭建门禁环境,如在《物联网虚拟仿真实验平台》中需拖入125K相关设备,如在《物联网实验台》中需连接125K读写器硬件设备(具体如何连接这里不阐述)。
功能实现
只针对该项目进行功能说明,只说明重要功能,并贴出部分重要代码,如不懂可结合源码和文档来进行学习。
获取数据库数据
获取数据库文件信息
在UserInfo.cs类中有个GetConnecttionString()静态方法,该方法作用是获取文件中的信息,并且进行返回。
连接数据库
在UserInfo类中有个OpenSqlConnection()方法,该方法功能是连接数据库,并返回连接状态,true为连接成功,false为连接失败。
在主窗体FrmMain.cs中的FrmMain_Load事件中调用此方法即可实现连接数据库功能。
在主窗体中实例化UserInfo类
调用连接数据库方法
串口操作
在UserInfo.cs类中有GetCOMConfigString()静态方法,该静态方法是用于获取文件中的串口信息。
在主窗体中打开调用125K接口中的打开串口功能,从而打开125K读写器中的串口。
注:串口文件里的串口号必须符合你搭建门禁环境时所用125K读写器的设备号要一致,否则即使打开也是无效的。
读取门禁卡
串口打开成功后,按照125K设备接口,当有125K读写器读取到125K卡片时,就会将该卡片的卡号显示出来。
VentHex事件是125K接口提供的一个事件,当触发该事件时会返回卡片,从而使主窗体中显示该卡片,并且根据该卡片来查询数据库中是否存在此卡号,然后从而进行相应的操作(详细后续介绍)。
查询数据库
在上图中可看到有LookingFor()方法,该方法的主要目的是根据卡片,查询该卡片是否存在数据库中,如存在则判断该卡是否有开门权限,有则开并显示该卡的相关信息,无则不开。
发卡管理
主窗体
注册功能
输入基本信息之后,将基本信息添加到数据库中。调用UserInfo.cs类的Insert()方法
Insert()方法是数据库的新增语句。
销卡管理
主窗体
注销功能
读取到该125K卡号后,会显示该卡片的基本信息。如果没有注册则不允许删除,注册则可进行删除。
根据卡片,获取数据库是否存在此用户,有则删除。
删除语句
权限管理
主窗体
权限修改功能
根据输入的身份证信息,然后获取到该用户的基本信息,并且修改该用户信息的出入权限。

