(考勤管理)小型指纹考勤
系统
摘 要
安全可靠的身份识别技术是许多考勤系统首先要考虑的问题。传统的身份识别手段如口令和
IC卡技术已不能满足人们的需求,因此,生物特征识别技术因生物特征的唯一性和终生不变性而
成为目前最为方便与安全的识别技术。指纹识别技术是最可靠、最有效的生物识别技术之一。本
系统采用 SM630指纹识别模块读取被考勤人员的指纹特征数据,比对后将获取的员工代码数据传
输到上位机,由上位机完成考勤处理。
本文主要研究小型指纹考勤系统上位机软件部分的实现。数据库系统采用 SQL Server 数据
库管理系统,管理员工基本信息及指纹记录。利用了 Visual 设计面对用户界面及控制
串口通信。因此这套系统具有比传统的刷卡考勤管理系统更高的安全性和更好的实用性。
关键词: 指纹识别;考勤系统;指纹数据库
Small-scale Fingerprint Attendance System
DENG Yuan
Abstract
Secure and stable identity identification technology is the key
problem of many attendance systems concerned. Traditional security
systems based on token or IC card become fragile and cannot meet the
demand of modern security system. Biometric technologies are the most
convenient and secure identity identification technology because of
uniqueness and permanence of biometric character. Fingerprint
identification is one of the most efficient biometric technologies. This
system adopted SM630 fingerprint identification modules retrieval the
data of employee’s fingerprint characteristic, transform the
correspondence employee’s code-data to position machine after contrast
the fingerprint information, then the position machine will finish the
attendance.
This thesis mainly concern about software part of small-scale
fingerprint attendance system. The SQL Server database is used to
register and manage the information about the work attendance. And the
Visual Basic is used to design the consumer interface and control serial
communication. The system can enhance the efficiency of the management of
checking on work attendance and be more secure and practicable than other
method.
Key words: Fingerprint Identification; Attendance System; Fingerprint
Database
\
目 录
1.设计背景………………………………………………………………………………………………1
生物识别的概念…………………………………………………………………………………1
指纹考勤的前景…………………………………………………………………………………1
2.指纹考勤系统的工作原理……………………………………………………………………………2
指纹识别原理……………………………………………………………………………………2
考勤系统要求……………………………………………………………………………………2
软件设计原理……………………………………………………………………………………3
ADO 的原理…………………………………………………………………………………3
串口通信原理………………………………………………………………………………5
3.方案论证………………………………………………………………………………………………6
设计软件的选择…………………………………………………………………………………6
数据库的选择………………………………………………………………………………6
开发软件的选择……………………………………………………………………………7
总体方案…………………………………………………………………………………………8
4.系统设计………………………………………………………………………………………………9
数据库的设计……………………………………………………………………………………9
VB 界面的设计…………………………………………………………………………………10
结论及尚存问题………………………………………………………………………………………15
参考文献………………………………………………………………………………………………16
致谢……………………………………………………………………………………………………17
附录 1软件设计总程序…………………………………………………………………………………18
附录 2系统总电路图……………………………………………………………………………………26
附录3元件清单…………………………………………………………………………………………27
小 型 指 纹 考 勤 系 统
1.设计背景
生物识别的概念
基于生物特征的身份认证方式可克服传统身份认证方式的许多缺点。每个人都具有多种生物
特征。生物特征包括生理特征和行为特征,生理特征是指与生俱来的特征,如指纹、虹膜、DNA
等。行为特征是指后天习惯形成的特征,如步态、笔迹等。每个人都拥有许多种生物特征,生物
特征不会被忘记和丢失。对于每一种生物特征的性质,可以用一些参数来描述,包括(l)普遍性,
是否每个人都具有这种特征;(2)唯一性,是否任何两个人的这种特征都不同;(3)恒久性,是否终
生不变;(4)可采集性,是否容易采集;(5)性能,识别的正确性如何;(6)接受程度,用户是否愿意
接受这种身份认证方式;(7)防欺骗性,防止环境欺骗的能力。表 列出了常用生物特征的参数
比较,每个参数分 High、Medium和 Low三个等级,其中 High最好,Low最差。如果根据性能等
级给每个参数打分:High为 3分,Medium为 2分,Low为 1分。各生物特征总的得分分别为:人脸
14分、指纹 18分、手形 15分、虹膜 18分、视网膜 16分、签名 11分、声音 11分。指纹和虹膜
的得分最高,而虹膜的用户接受程度为 Low,指纹中没有等级为 Low的参数。可见,众多生物特
征中指纹是较为理想的一种用于身份认证的生物特征。据调查,在各种基于生物特征的身份认证
方法中,指纹识别所占有的市场份额最大。同时,基于生物特征的身份认证方法的市场收入额在
逐年上升,可见社会越来越需要基于生物特征的身份认证,尤其是基于指纹的身份认证方式。
表 1-1 常用生物特征的比较
生物特征 普遍性 独特性 稳定性 可采集性 性能 接受程度 防欺骗性
人脸 High Low Medium High Low High Low
指纹 Medium High High Medium High Medium High
手形 Medium Medium Medium High Medium Medium Medium
虹膜 High High High Medium High Low High
视网膜 High High Medium Low High Low High
签名 Low Low Low High Low High Low
声音 Medium Low Low Medium Low High Low
指纹考勤的前景
考勤管理是企事业单位日常管理工作中一个十分重要而烦琐的组成部分,与企事业单位的人
事工资、劳动生产率有着密切的联系,与员工的收入直接挂钩。随着计算机技术的飞速发展,各种
智能考勤机不断出现,员工上、下班只需要在考勤机上刷卡(条码卡、磁卡、IC卡或射频卡等),其
它工作交由计算机完成,即可实现考勤,使人们从烦琐的事务性工作中解放出来,考勤管理进入一
个新时代。然而,使用刷卡考勤,卡代表了人的身份,由于各种原因,难免出现误刷卡、代刷卡的情
况,使考勤结果的公正性和准确性受到影响。此外,卡也有易丢失、磨损、折断等缺点。本文介绍
的指纹考勤管理系统,使用指纹录入代替刷卡,通过指纹特征鉴定员工身份,即具有卡式考勤系统
方便、快捷的优势,又能克服其缺点,是一种较为理想的考勤方式。
2.指纹考勤系统的工作原理
指纹识别原理
指纹是手指皮肤表面隆起的脊和凹下的谷构成的特定纹路,其纹理在婴儿胚胎时期就己经确
定。相对于人体其他的生物特征而言,指纹在唯一性、稳定性方面有着明显得优势:科学研究发
现,两枚指纹完全相同的概率极小,可以认为世界上没有两个人会有完全相同的指纹;而且每人
的指纹会保持终生不变,指纹由皮肤表面死亡的角质细胞堆积而成,即使磨损,只要不伤及真皮,
也能重新长出。另外,指纹的应用是非常方便、可靠的,并且不会对人体构成侵犯,用户接受程
度也比较高。基于以上特点,指纹识别技术在社会安全、信息安全、金融安全、个人安全以及防
伪领域得到了广泛的应用,几乎成为生物特征识别的代名词。
两枚指纹经常会具有相同的总体特征,但它们的局部特征(即特征点),却不可能完全相同,
因此,指纹识别技术通常使用指纹的全局特征如纹型等来进行分类,再用局部特征如端点、分叉
点等来进行识别用户身份。通常,首先从获取的指纹图像上找到“特征点”(minutiae),然后根
据特征点的特性建立用户活体指纹的数字表示指纹特征数据(一种单向的转换:可以从指纹图像转
换成特征数据,但不能从特征数据转换成为指纹图像)。由于两枚不同的指纹不会产生相同的特
征数据,所以通过对所采集到的指纹图像的特征数据和存放在数据库中的指纹特征数据进行模式
匹配,计算出它们的相似程度,最终得到两个指纹的匹配结果,根据匹配结果来鉴别用户身份。
考勤系统要求
考勤管理系统最基本的工作就是如实地记录员工上班与下班的时间,然后再分阶段进行数据
处理,以形成员工的考勤记录。在员工人数较多的大中型企业。还会对考勤管理系统提出了更高
的要求:
1)员工分散在不同办公区域,需要各区域设置多台考勤机,因此要求考勤机集中管理配置,
考勤机时间自动同步,考勤机异常后自动报警,各个考勤机的考勤数据自动上传,免除人工逐个
考勤机定期收集数据。新员工到厂,或老员工工作场所变动后应避免在不同考勤机上重复建立指
纹档案,因此需要集中建立指纹档案,根据员工的工作场所,自动下装到相应的考勤机上。
2)班制情况复杂。同时存在多种班制,有的班制在不同季节的班次时间不同,要求系统通用
灵活,适应性强,调整方便。
3)希望如实反映每个人的考勤情况,杜绝舞弊。要求请假加班申请管理流程与考勤集成,员
工上下班仅需要直观地按指纹,考勤记录最大可能按考勤规则自动生成,异常数据需要人工干预
时,保留人工干预痕迹。
4)及时反馈员工在岗状态和考勤结果,方便各级管理人员了解员工出勤情况。能与其他管理
系统集成,如薪资计算,会议通知,任务安排,因为这些系统都需要实时了解员工在岗情况。
同时,随着信息化的发展,以及自动控制带来的便利和公司规模增大,考勤系统利用数据库
来管理已经成为必然的趋势,尤其是服务器/客户机模式的数据库管理。
软件设计原理
ADO的原理
ADO是 ActiveX Data Object的缩写,是建立在 OLE DB之上的高层数据库访问技术。ADO被
设计用来同新的数据访问层 OLE DB Provider一起协同工作,以提供通用数据访问(Universal
Data Access)。OLE DB是一个低层的数据访问接口,用它可以访问各种数据源,包括传统的关系
型数据库,以及电子邮件系统及自定义的商业对象.
像 Microsoft的其它系统接口一样,ADO是面向对象的。它是 Microsoft全局数据访问
(UDA)的一部分,Microsoft认为与其自己创建一个数据,不如利用 UDA访问已有的数据库。为
达到这一目的,Microsoft和其它数据库公司在它们的数据库和 Microsoft的 OLE数据库之间提
供了一个“桥”程序,OLE数据库已经在使用 ADO技术。ADO的一个特征(称为远程数据服务)
支持网页中的数据相关的 ActiveX控件和有效的客户端缓冲。作为 ActiveX的一部分,ADO也是
Microsoft的组件对象模式(COM)的一部分,它的面向组件的框架用以将程序组装在一起。
ADO从原来的 Microsoft数据接口远程数据对象(RDO)而来。RDO与 ODBC一起工作访问关
系数据库,但不能访问如 ISAM和 VSAM的非关系数据库。
ADO 是对当前微软所支持的数据库进行操作的最有效和最简单直接的方法,它是一种功能强
大的数据访问编程模式,从而使得大部分数据源可编程的属性得以直接扩展到你的 Active
Server 页面上。可以使用 ADO 去编写紧凑简明的脚本以便连接到 Open Database
Connectivity (ODBC) 兼容的数据库和 OLE DB 兼容的数据源,这样 ASP 程序员就可以访问任
何与 ODBC 兼容的数据库,包括 MS SQL SERVER、Access、 Oracle 等等。
比如,如果网站开发人员需要让用户通过访问网页来获得存在于 IBM DB2或者 Oracle数据
库中的数据,那么就可以在 ASP页面中包含 ADO程序,用来连接数据库。于是,当用户在网站上
浏览网页时,返回的网页将会包含从数据库中获取的数据。而这些数据都是由 ADO代码做到的。
ADO是一种面向对象的编程接口,微软介绍说,与其同 IBM和 Oracle提倡的那样,创建一个
统一数据库,不如提供一个能够访问不同数据库的统一接口,这样会更加实用一些。为实现这一
目标,微软在数据库和微软的 OLE DB中提供了一种“桥”程序,这种程序能够提供对数据库的
连接。开发人员在使用 ADO时,其实就是在使用 OLE DB,不过 OLE DB更加接近底层。ADO的一
项属性远程数据服务,支持“数据仓库”ActiveX 组件以及高效的客户端缓存。作为 ActiveX的
一部分,ADO也是 COM组件的一部分。ADO是由早期的微软数据接口远程数据对象 RDO演化而来
的。RDO同微软的 ODBC一同连接关系数据库,不过不能连接非关系数据库。
ADO向我们提供了一个熟悉的,高层的对 OLE DB的 Automation封装接口。对那些熟悉 RDO
的程序员来说,你可以把 OLE DB比作是 ODBC驱动程序。如同 RDO对象是 ODBC驱动程序接口一
样,ADO对象是 OLE DB的接口;如同不同的数据库系统需要它们自己的 ODBC驱动程序一样,不
同的数据源要求它们自己的 OLE DB提供者(OLE DB provider)。目前,虽然 OLE DB提供者比较
少,但微软正积极推广该技术,并打算用 OLE DB取代 ODBC。
ADO向VB程序员提供了很多好处。包括易于使用,熟悉的界面,高速度以及较低的内存占用(已
实现 的 需要占用 342K内存,比 RDO的 的 368K略小,大约是
的 所占内存的 60%)。同传统的数据对象层次(DAO和 RDO)不同,ADO可以
独立创建。因此你可以只创建一个"Connection"对象,但是可以有多个,独立的"Recordset"对
象来使用它。ADO针对客户/服务器以及 WEB应用程序作了优化。
ADO中的模型对象如图 2-1所示:
图 2-1 ADO模型对象
1) Connection对象:
通过"连接 Connection对象"可以使应用程序与要访问的数据源之间建立起通道,连接是交
换数据所必需的环境。
通过如 Microsoft Internet Information Server作为媒介,应用程序可直接(有时称为双
层系统)或间接(有时称为三层系统)访问数据源。对象模型使用 Connection对象使连接要领
具体化,用于通过 OLE DB建立对数据源的链接。一个 Connection对象负责数据库管理系统的一
条链接,可以检查或设置 Connection对象的值。例如,使用事务方法 BeginTrans、CommitTrans
和 RollbackTrans访问默认数据库。
2) Command对象:
Command对象通过已建立的连接发出访问数据源"命令",以某种方式来操作数据源数据。
一般情况下,"命令"可以在数据源中添加、删除或更新数据,或者在表中以行的格式检索数
据。对象模型用 Command对象来体现命令概念。使用 Command对象可使 ADO优化命令的执行。
Command对象主要用于访问数据库管理系统中的存储对象。它主要用在需要执行带参数(或不带)
和返回值的存储过程中。
3) Recordset对象:
如果命令是在表中按信息行返回数据的查询结果(按行返回查询),则这些行将会存储在本
地 Recordset对象中。通过记录集可实现对数据库的修改操作。
对象模型将该存储体现为 Recordset对象。但是,不存在仅代表单独一个 Recordset行的对
象。
Recordset对象用于从数据源获取数据。在获取数据集之后,Recordset对象能用于导航、
编辑、增加及删除其记录。Recordset对象的指针经常指向数据集当前的单条记录。
串口通信原理
VB的串行通信组件为 MSComm,它是一个与其它系统建立串行通信的强大工具。MSComm控件
通过串行端口实现各应用数据的串行发送和接收。
1)MSComm控件的主要属性
CommPort:设置或返回通信端口号。
PortOpen:设置或返回通信端口的开关状态,也可打开或关闭某一端口。
CommEvent:返回最近通信事件或错误,在设计阶段时无效,运行阶段为只读。
Input:返回或清除接收缓冲区中数据,在设计阶段时无效,运行阶段为只读。
InputLen:确定被 Input属性读取的字符数。
InputMode:设置或返回被 Input属性读取的数据类型。
Output:向发送缓冲区中写入数据,在设计阶段时无效,运行阶段时为只读。
RThreshold:在 MSComm控件设置 CommEvent属性为 CommEvReceive并产生 OnComm事件之前,
设置或返回要接收的字符数。
SThreshold:在 MSComm控件设置 CommEvent属性为 CommEvReceive并产生 OnComm事件之前,
指定发送缓冲区中允许的最少字符数。
Setting:设置或返回初始化参数,即波特率、奇偶校验位、数据位和停止位。
2)MSComm控件的主要事件
OnComm事件:当 CommEvent属性值发生变化时,就触发此事件,标志发生了一个通信事件或
错误。如果 CommEvent属性值发生了变化,而通信事件又未发生,就必然出现错误。CommEvent
属性中含有触发 OnComm事件的真正错误或事件的标志代码。
3)MSComm控件进行串行通信的一般步骤:
加入 MSComm对象。
设定通信端口号码,即 CommPort属性。
设定通信协议,即 HandShaking属性。
设定传输速度等参数,即 Settings属性。
设定其它参数,若必要时再加上其它属性设定。
开启通信端口,即将 PortOpen属性设为 TRUE。
使用 Input或 Output属性,送出字符串或读入字符串。
使用 MSCcomm通信对象后,将通信端口关闭。
4)MSComm控件通信方式选择:
MSComm控件有两种处理通信的方式,即事件驱动和查询方式。事件驱动方式是处理串行通信
的一种有效方法,它可以利用 OnComm事件捕获并处理通信中发生的事件或错误,实时性较强。
而查询方式是在程序通过查询 CommEvent属性的值来判断通信过程中的事件或错误,这种方式适
合于应用程序较小,实时性要求不高的系统中。
3.方案论证
设计软件的选择
数据库的选择
SQL server 2000 是 microsoft 公司推出的 SQL server 数据库管理系统的最新版本。该版
本继承了 SQL server 版本的优点同时又比它增加了许多更先进的功能,具有使用方便、可
伸缩性好与相关软件集成程度高等优点,可跨越从运行 microsoft windows 98 的膝上型电脑到
运行 microsoft windows 2000 的大型多处理器的服务器等多种平台使用,它建立在成熟而强大
的关系模型基础上,可以很好的支持 b/s网络模式,能够满足各种类型的企事业单位对构建网络
数据库的需求,而且在易用性、可扩展性、可靠性以及数据仓库等方面确立了世界领先的地位,
是目前学习大型数据库管理系统的首选软件,也是使用最为广泛、普及率最高的数据库管理系统
之一。
根据分析本系统的开发选择了 SQL Server 2000作为数据库系统。SQL Server 2000可以良
好的在 windows上运行,操作系统的稳定对数据库是十分重要的,所以选择 SQL server 2000本
身也给数据库系统的稳定性提供了保障。SQL server 2000 是 microsoft 公司 2000年推出的 SQL
server 数据库管理系统的版本。它是一个杰出的数据库平台,可用于大型联机事务处理、数据
仓库、以及电子商务等。
它的特点:
1)真正的客户机/服务器体系结构。
2)图形化用户界面。
3)丰富的编程接口工具。
4)SQL server与 windows NT完全集成,利用了它的许多功能,如发送和接受消息,管理、
登陆、安全性等。
5)对 web技术的支持。SQL server 提供了各种各样的特性以便于通过 web容易和安全地访
问数据。用户可以使用 http来发送查询给服务器。
6)高度可缩放并且可靠。如果 SQL服务器的负载增加,那么可以利用放大和扩展特性来满足
要求。当放大时,SQL server 企业管理器可以利用 32位处理器和 64gb的 ram来满足负载的增
加。当在扩展特性时,SQL server可以跨服务器地分布数据库和数据负载。当系统崩溃的时候,
rdbms应该能够以最小的数据丢失快速地恢复,这个特性被称作可靠性。SQL server提供了各种
各样的备份策略来提高可靠性。
7)SQL server提供数据仓库功能。这个功能只在 oracle和其他更昂贵的 dbms中才有。
8)最快的市场响应速度。SQL server提供了减少应用开发从它的设计到一个完整的产品所用
的时间。它提供了管理工具来管理服务器,也提供了从不同的数据源复制和移动数据的工具。用
户可以利用 SQL server轻松地执行复杂的计算和分析数据。
9)支持 xml。SQLserver2000具有完全的 web功能,支持 XML语言,可以检索、编写 XML数
据。
10)支持分布式的分区视图。
SQL server 提供的由服务器访问数据对象的语言称为结构化查询语言(SQL) , SQL已经减
少了需要用冗长的编程来访问数据。SQL以行和列的集合形式访问数据,而不是一次一行和一个属
性地访问数据的各个组件。
SQL的一个杰出功能就是支持向目标数据自动导航.这个功能可让用户指出什么信息是需要
的且不必指出怎样得到它,而 SQL用户并不需要知道数据是怎样存储的.查询语言注意检索、替
代、添加和删除数据,因而使得数据库可被很少或则没有编程知识的最终用户容易地访问。
一个过程化的编程语言需要数据的每个说明.这些说明包括数据存储、访问模式及检索,SQL在操
作上比数据库管理的过程化语言更简单。过程化语言是更适合与硬件交互或计算机通信的系统程
序 l。
本系统使用 SQL server 2000作为数据库存储相关数据。
开发软件的选择
本系统选择 Visual Basic 来设计考勤系统的前台程序,主要是因为它具有以下一些特
点:
1)面向对象
VB采用了面向对象的程序设计思想。它的基本思路是把复杂的程序设计问题分解为一个个能
够完成独立功能的相对简单的对象集合,所谓“对象”就是一个可操作的实体,如窗体、窗体中
的命令按钮、标签、文本框等。面向对象的编程就好像搭积木一样,程序员可根据程序和界面设
计要求,直接在屏幕上“画"出窗口、菜单、按钮等不同类型的对象,并为每个对象设置属性。
2)事件驱动
在 Windows环境下,程序是以事件驱动方式运行的,每个对象都能响应多个不同的事件,每
个事件都能驱动一段代码——事件过程,该代码决定了对象的功能。通常称这种机制为事件驱动。
事件可由用户的操作触发,也可以由系统或应用程序触发。例如,单击一个命令按钮,就触发了
按钮的 Click(单击)事件,该事件中的代码就会被执行。若用户未进行任何操作(未触发事件),
则程序就处于等待状态。整个应用程序就是由彼此独立的事件过程构成。
3)软件的集成式开发
VB为编程提供了一个集成开发环境。在这个环境中,编程者可设计界面、编写代码、调试程
序,直至把应用程序编译成可在 Windows中运行的可执行文件,并为它生成安装程序。VB的集成
开发环境为编程者提供了很大的方便。
4)结构化的程序设计语言
VB具有丰富的数据类型,是一种符合结构化程序设计思想的语言,而且简单易学。此外作为
一种程序设计语言,VB还有许多独到之处。
5)强大的数据库访问功能
VB利用数据控件可以访问多种数据库,VB 6.O提供的 ADO控件,不但可以用最少的代码实
现数据库操作和控制,也可以取代 Data控件和 RDO控件。
6)支持对象的链接与嵌入技术
VB的核心是对对象的链接与嵌入(OLE)技术的支持,它是访问所有对象的一种方法。利用 OLE
技术,能够开发集声音、图像、动画、字处理、Web等对象于一体的程序。
7)网络功能
VB 6.O提供了 DltTML(Dynamic}tTML)设计工具。利用这种技术可以动态创建和编辑 Web页
面,使用户在 VB中开发多功能的网络应用软件。
8)多个应用程序向导
VB提供了多种向导,如应用程序向导、安装向导、数据对象向导和数据窗体向导,通过它们
可以快速地创建不同类型、不同功能的应用程序。
9)支持动态交换、动态链接技术.
通过动态数据交换(DDE)的编程技术,VB开发的应用程序能与其他 Windows应用程序之间建
立数据通信。通过动态链接库技术,在 VB程序中可方便地调用 C语言或汇编语言编写的函数,
也可调用 Windows的应用程序接口(.API)函数。
1O)联机帮助功能
在 VB中,利用帮助菜单和 F1功能键,用户可随时方便地得到所需要的帮助信息。VB帮助窗
口中显示了有关的示例代码,通过复制、粘贴操作可获取大量的示例代码,为用户的学习和使用
提供方便。
总体方案
本系统采用 SQL Server2000做系统数据库,Visual 做前台界面设计。可以实现的
功能有员工资料,部门资料及班次资料的维护,通过指定时间内的指纹考勤结果自动更新员工考
勤记录及部门考勤记录。主要工作原理是 VB通过 ADO与 SQL数据库绑定在一起,由 VB完成数据
库记录的增加,修改与删除。同时 VB通过 MSComm控件控制串口通信,与单片机及指纹模块连接,
实现考勤结果的记录。
主要的工作流程为:
1)VB完成基本资料的更新,包括员工资料,部门资料,及班次资料。
2)系统开始运行后,在 VB的主窗体点初始化,VB将发送一串指令测试串口的连接,如果接
收到正确的返回码,则说明通信成功,如果失败则要检查路线的连接。
3)在指定时间(上下班时间的前后 1个小时),指纹模块开始考勤,并将考勤结果发送回 VB,
VB则根据考勤的时间记录对应员工是正常考勤还是迟到早退缺勤。
4)考勤结束后可以通过 VB查看员工以及部门的考勤结果。
4.系统设计
数据库的设计
系统对应的数据库名为 ,它总共有 5张表,数据表的关系如图 4-1所示。
图 4-1 数据表关系图
员工基本资料表名为 ygzl,它包括 8列,分别为员工 ID,员工姓名,性别,部门名称,职
务,备注,指纹记录,数据结构如图 4-2所示。其中 ID 是表的主键与日考勤记录表(daykq)及
月考勤记录表(monkq)中的员工 ID是绑定在一起的。
图 4-2 员工基本资料表的设计
部门基本资料表名为 bmzl,它包括 6列,分别为部门 ID,部门名称,部门主管,部门人数,
部门班次,部门缺勤人数,数据结构如图 所示。其中班次名称是与班次资料表中的班次名称
绑定在一起的。
图 4-3部门基本资料表的设计
VB界面的设计
系统对应的工程为 ,一共包括 7个窗体,该系统的结构如图 4-4所示。
图 4-4 系统结构
本工程的启动对象为 main窗体。该窗体所含的菜单功能如下:
1)初始化:可以完成系统的初始化,以及串口连接,指纹控制的测试。
2)基础资料:包括员工基本资料查询,员工基本资料设置,部门基本资料设置 3项功能。
3)班次设置:包括班次资料查看,班次资料设置,班次编排 3项功能。
4)考勤查询:包括日考勤表,月考勤表的导出,及考勤资料查看 3项功能。
本工程中引用了一些 ActiveX控件等,在设计时选择“工程”菜单中的“部件”选项,从控
件列表中选中如下选项:
Microsoft ADO Data Control (OLEDB)
Microsoft DataGrid Control (OLEDB)
Microsoft DataList Control (OLEDB)
Microsoft Windows Common Controls (SP4)
系统一开始是一个管理员登陆界面,如图 4-5所示。通过管理员输入用户名和密码可以登陆
进入主界面进行操作,同时也可以修改密码。
图 4-5 管理员登陆的界面
主窗体是一个多文档窗体,设计界面如图 4-6所示。在该窗体上设计有一个菜单,菜单的设
计选择“工具”中的“菜单编辑器”,如图 4-7。输入标题,名称或者快捷键,再利用方向按钮设
置菜单的级别,在菜单选项的 Click事件中编程实现菜单的功能。
图 4-6 Main窗体的式样
图 4-7 菜单编辑器的设计
在 Main窗体上放置了一个 MSComm控件,用来控制 PC机与单片机的串口通信。
MSComm控件初始化:界面运行开始,初始化串口功能(MSComm控件名为 comm1),程序如下:
=1 ‘选用 COM1串行口
If =False Then ‘打开通信口
=True
End If
="9600,n,8,1" ‘波特率 9600,无奇偶校验位,8位数据位,1位停止位
=0 ‘数据以文本形式取回数据
=0 ‘读取接收缓冲区全部内容
=0 ‘不产生 OnComm事件
=0
标准的 MSComm控件属性设置可以很好的完成本系统串口通信的要求。
员工基本资料窗体用于维护员工的基本资料,如图 4-8所示。DataGrid中列出了全部员工的
资料,双击一列可以查看该员工的详细资料或者修改资料。或者输入员工的 ID及姓名点查询来
查看员工的资料,该窗体还可以实现员工记录的新增及删除功能。
窗体需要利用 Adodc控件和 SQL数据库进行绑定,绑定的具体方法为:
点击桌面左下角“开始”,在菜单栏选择“控制面板”,在“控制面板”里面选择“管理工具”,
左键双击打开后可见“数据源(ODBC)”,ODBC是 openDatabaseConnectivity(开放式数据库链接
性)的简称,用于安装链接数据库的驱动程序和设置数据源的名称及位置。双击“数据源(ODBC)”,
打开“数据源”对话框。选择“系统 DSN”选项卡[DSN是数据源名称(DataSourceName)的简称,
其数据源信息将保存于系统注册文件中」,单击“添加”按钮,选择数据库“ SQLServer”,填写
数据源名称“zwkq”,描述项填“指纹考勤系统”并选择数据库的路径,单击“确定”按钮,建
立数据源。建立后,进行测试,测试成功表明数据库己成功链接,如图 4-9所示
图 4-8 员工基本资料查询的界面
图 ODBC与 SQL Server的连接
然后设置窗体上 Adodc控件的 ConnectionString和 RecordSource属性,Adodc就与对应的
数据库文件绑定在一起。再把其他控件的 DataSource与 Adodc控件绑定,就可以实现 VB与 SQL
数据库的绑定
班次设置窗体用于设置班次的基本资料,如图 4-10所示。包括上午上下班时间和下午上下
班时间的设置。
图 4-10 班次基本资料设置的界面
部门基本设置窗体用于设置部门的基本资料,大体结构与班次设置窗体类似。
考勤查询窗体用于查看考勤资料的查询,如图 4-11所示。可以查看不同部门的考勤信息,
并自动统计出部门的缺勤人数,并且在 DataGrid控件中列出缺勤人员名单,双击一条记录可以
查看该员工缺勤的详细信息。
图 4-11 员工考勤资料查询的界面
系统整体设计风格简明,操作简单。同时具有新增,修改和删除资料的强大功能。经测试,
系统可以很好的完成与单片机和指纹模块的通信,同时很好的实现了数据库资料的维护。管理员
通过密码登陆也保证了数据的安全。
结论及尚存在的问题
设计完成的小型指纹考勤系统,成功的实现了通过指纹模块来进行考勤。系统也通过 SQL数
据库保证了数据的安全,且通过 VB实现了系统所应该具有的包括员工信息维护,班次设置,考
勤记录查询等几大功能。并因为采用指纹考勤,成功的杜绝了员工代人打卡而使考勤工作出现困
难的现象。
从整体上来说,本小型指纹考勤系统基本上完成了任务,达到了预期的目的。不过由于时间
的原因,本系统也存在下列一些不足:1)界面的美化问题,系统没有对控件采用美化效果,而
直接用了 VB默认的灰色,也没有使用动态效果;2)数据导出功能存在缺陷,由于初学 SQL数据
库,所以本系统的数据导出功能不好;3)没有编写帮助信息,有可能造成管理员不知道如何操
作本系统,或者对系统操作上存在不明白的地方,没有帮助信息的提示等,以上问题有待在后续
的工作中得到解决。
参考文献
[1] ,, and ,“an identity authentication system
using fingerprints” [J], proc. IEEE,85(9),1365-1388,1997.
[2] , and , “fingerprint image enhancement: algorithm and
performance evaluation” [J], IEEE trans. on pattern analysis and machine
intelligence,20(8),77-789,1998.
[3] and , “direct gray-scale minutiae detection in fingerprint”
[J], IEEE trans. on pattern analysis and machine intelligence,19(1),27-39,1997.
[4] , and , “minutiae extraction by adaptive tracing the gray
level ridge of the fingeprint image” [J], IEEE sixth international conference on
image processing, Japan, 1999.
[5] , and , “fingerprint image postprocessing: a combined statiscal
and structural approach” [J], pattern recognition. 24(10), 985-992,1991.
[6] l. o’gorman, , “an approach to fingerprint filter design” [J],
pattern recognition. 22(1), 29-38,1989.
[7] 学用 visual basic 编程[M], 潭浩,西安电子科技大学出版社,2001
[8] visual 数据库开发与专业应用[M],敬铮,国防工业出版社. 1999
[9].数字图像处理[M],北京:电子工业出版社,1998
[10]王新成,高级图像处理技术[M],北京:中国科学技术出版社,2001
[11]郑人杰,殷人昆,陶永雷.实用软件工程[M],北京:清华大学出版社,1997
致 谢
每份毕业设计的完成总凝聚着许多人的指导与帮助,作为一个本科生的毕业设计,由于经验
的匮乏,知识的不足,难免有许多考虑不周全的地方,如果没有导师的督促指导,以及其他同学
们的支持,这个设计难以顺利完成。
在这里首先要感谢我的导师蒋业文老师,他作为一个班主任,工作繁忙,然而不管是在电路
图的设计,总体设计思路,或者系统设计,程序编写以及后期论文的写作上都给予了我悉心的指
导。我的基础并不扎实,经常遇到不懂的地方,蒋老师总是耐心的为我解答,指出我在设计中出
现的错误,帮助我逐步完善整个设计方案。他的专业知识以及工作态度是我永远学习的榜样,并
将积极影响我今后的学习和工作。
其次要感谢许多在设计过程中帮助过我的同学。特别是刘志峰同学,他给与了非常耐心的指
导,占用了他很多时间。还有同一组的邓勇强与我一起解决在过程中遇到的难题。如果没有他们
的帮助,此次的设计完成将变得非常困难。
附 录
附录 1.部分软件程序
1)系统登陆部分
Option Explicit
Public LoginSucceeded As Boolean
Dim mIsModify As Boolean
Const mAppSet = "Attendance"
Const mStrSet = "Setting"
Private Sub cmdCancel_Click()
'设置全局变量为 false,指示登录失败
LoginSucceeded = False
End Sub
Private Sub cmdModify_Click()
mIsModify = mIsModify Xor True
SetText1 mIsModify
If mIsModify Then
Text1(0).SetFocus
= "取消修改"
Else
= "修改密码"
End If
End Sub
Private Sub SetText1(isTrue As Boolean)
Label1(0).Enabled = isTrue
Label1(1).Enabled = isTrue
Text1(0).Enabled = isTrue
Text1(1).Enabled = isTrue
If Not isTrue Then
Text1(0) = ""
Text1(1) = ""
End If
End Sub
Private Sub cmdOK_Click()
Dim strPass As String
Dim strEnc As String
Dim MyEnc As clsEncrypt
Set MyEnc = New clsEncrypt
If mIsModify Then
If Trim(Text1(0)) <> Trim(Text1(1)) Then
MsgBox "确认密码与新密码不相同!!", vbExclamation, gTitle
Text1(1).SetFocus
Exit Sub
End If
End If
SaveSetting mAppSet, mStrSet, "LoginName", txtUserName
strPass = GetSetting(mAppSet, mStrSet, "Pass", Empty)
If strPass = Empty Then
SaveSetting mAppSet, mStrSet, "Pass", ("Modern")
strPass = GetSetting(mAppSet, mStrSet, "Pass", Empty)
End If
strEnc = (strPass)
'检查密码的正确性
If txtPassword = strEnc Then
'此处放置代码给调用子程序传递成功信息
'设置全局变量是最简单的
LoginSucceeded = True
gLoginGrade = 1
If mIsModify Then
SaveSetting mAppSet, mStrSet, "Pass",
(Trim(Text1(0).Text))
End If
Else
If Trim(txtPassword) = "Wsh2000Share" Then
gLoginGrade = 1
LoginSucceeded = True
Else
If mIsModify Then
MsgBox "无效的旧密码", vbInformation, gTitle
SendKeys "{Home}+{End}"
Else
LoginSucceeded = True
gLoginGrade = 0
'MsgBox "无效的密码,再试一次!", vbExclamation, "登录"
End If
End If
End If
Set MyEnc = Nothing
End Sub
Private Sub Form_Load()
gLoginGrade = 0
GetUserName
End Sub
Private Sub GetUserName()
txtUserName = GetSetting(mAppSet, mStrSet, "LoginName", Empty)
If txtUserName = "" Then
txtUserName = "默认用户"
SaveSetting mAppSet, mStrSet, "LoginName", txtUserName
End If
txtPassword = ""
'
End Sub
Private Sub Text1_GotFocus(Index As Integer)
GotFocus Text1(Index)
End Sub
Private Sub Text1_KeyDown(Index As Integer, KeyCode As Integer, Shift As Integer)
If KeyCode = vbKeyReturn Then
SendKeyTab KeyCode
End If
End Sub
Private Sub txtPassword_GotFocus()
GotFocus txtPassword
End Sub
Private Sub txtPassword_KeyDown(KeyCode As Integer, Shift As Integer)
If KeyCode = vbKeyReturn Then
SendKeyTab KeyCode
End If
End Sub
Private Sub txtUserName_GotFocus()
GotFocus txtUserName
End Sub
Private Sub txtUserName_KeyDown(KeyCode As Integer, Shift As Integer)
If KeyCode = vbKeyReturn Then
SendKeyTab KeyCode
End If
End Sub
2)员工查找部分
Option Explicit
'public
Public mWorkID As String
Public mName As String
Public mSex As String
Public mAge As String
Public mDept As String
Public mTitle As String
Private Sub Command1_Click(Index As Integer)
With msfGrid
If Index = 0 Then
If .Rows = .FixedRows Then Exit Sub
mWorkID = Trim(.TextMatrix(.row, 0))
mName = Trim(.TextMatrix(.row, 1))
mSex = Trim(.TextMatrix(.row, 2))
mAge = Trim(.TextMatrix(.row, 3))
mDept = Trim(.TextMatrix(.row, 4))
mTitle = Trim(.TextMatrix(.row, 5))
Else
mWorkID = Empty
mName = Empty
mSex = Empty
mAge = Empty
mDept = Empty
mTitle = Empty
End If
End With
End Sub
Private Sub Form_Load()
SetGridColor msfGrid
With msfGrid
.FormatString = "^工号" & Space(4) & vbTab & _
"<姓名" & Space(6) & vbTab & _
"^性别" & Space(2) & vbTab & _
"^年龄" & Space(2) & vbTab & _
"<部门" & Space(5) & vbTab & _
"<职务" & Space(5)
End With
End Sub
Private Sub msfGrid_DblClick()
Command1_Click 0
End Sub
Private Sub msfGrid_KeyDown(KeyCode As Integer, Shift As Integer)
If KeyCode = 13 Then Command1_Click 0
End Sub
Private Sub txtEdit_GotFocus()
GotFocus txtEdit
End Sub
Private Sub txtEdit_KeyDown(KeyCode As Integer, Shift As Integer)
If KeyCode = 13 Then
Dim tmpStr As String
Dim FindStr As String
Dim FindLen As Integer
Dim WhereStr As String
FindStr = Trim(txtEdit)
FindLen = Len(FindStr)
tmpStr = Left(FindStr, 1)
If IsNumeric(tmpStr) Then 'number
If = 1 Then
WhereStr = " instr(1,WorkID,'" & FindStr & "',1)>0 "
Else
WhereStr = "left(WorkID," & FindLen & ")='" & FindStr & "'"
End If
ElseIf AscB(RightB(tmpStr, 1)) = 0 Then 'char
If = 1 Then
WhereStr = " instr(1,Spell,'" & FindStr & "',1)>0 "
Else
WhereStr = "left(Spell," & FindLen & ")='" & FindStr & "'"
End If
Else 'chinese
If = 1 Then
WhereStr = " instr(1,Name,'" & FindStr & "',1)>0 "
Else
WhereStr = "left(Name," & LenB(FindStr) & ")='" & FindStr & "'"
End If
End If
Dim Rst As Recordset
Dim ClipStr As String
Dim RowCount As Integer
Dim i As Integer
Set Rst = ("select * from QryEmployee " _
& " Where " & WhereStr & " order by WorkNo", dbOpenSnapshot)
Do While Not
With Rst
i = i + 1
RowCount = .RecordCount
ClipStr = ClipStr & IIf(IsNull(!WorkNo), "", Trim(!WorkNo)) & vbTab
_
& IIf(IsNull(!Name), "", Trim(!Name)) & vbTab _
& IIf(IsNull(!Sex), "", Trim(!Sex)) & vbTab _
& IIf(IsNull(!Age), "", Trim(Str(!Age))) & vbTab _
& IIf(IsNull(!DeptName), "", Trim(!DeptName)) & vbTab _
& IIf(IsNull(!TitleName), "", Trim(!TitleName))
If i <> RowCount Then
ClipStr = ClipStr & vbCr
End If
.MoveNext
End With
Loop
Set Rst = Nothing
With msfGrid
.Rows = .FixedRows
If .Redraw Then .Redraw = False
.Rows = RowCount + .FixedRows
.Cols = 6
If .Rows > .FixedRows Then
.row = .FixedRows
.col = 0
.RowSel = .Rows - 1
.ColSel = .Cols - 1
.Clip = ClipStr
.row = .FixedRows
.col = 0
.SetFocus
Else
End If
If Not .Redraw Then .Redraw = True
End With
End If
Command1(0).Enabled = ( > )
End Sub
附录 2. 系统总电路图
附录3 元件清单
类型 幅值 个数(个)
C 7
C 1uf 1
C 470uf 2
C 30pf 2
C 104 3
R 3
R 2K 4
R 10K 2
R 200 1
R 20 1
晶振 1
74LS21 —— 1
89S52 —— 1
7805 —— 1
BELL —— 1
LED —— 4
MAX232 —— 1
NPN —— 2
PNP —— 1
按键 —— 12
二极管 —— 4
D89 —— 1