900M门禁考勤软件设计与实现报告byZK.docx

上传人:b****6 文档编号:8880078 上传时间:2023-02-02 格式:DOCX 页数:40 大小:561KB
下载 相关 举报
900M门禁考勤软件设计与实现报告byZK.docx_第1页
第1页 / 共40页
900M门禁考勤软件设计与实现报告byZK.docx_第2页
第2页 / 共40页
900M门禁考勤软件设计与实现报告byZK.docx_第3页
第3页 / 共40页
900M门禁考勤软件设计与实现报告byZK.docx_第4页
第4页 / 共40页
900M门禁考勤软件设计与实现报告byZK.docx_第5页
第5页 / 共40页
点击查看更多>>
下载资源
资源描述

900M门禁考勤软件设计与实现报告byZK.docx

《900M门禁考勤软件设计与实现报告byZK.docx》由会员分享,可在线阅读,更多相关《900M门禁考勤软件设计与实现报告byZK.docx(40页珍藏版)》请在冰豆网上搜索。

900M门禁考勤软件设计与实现报告byZK.docx

900M门禁考勤软件设计与实现报告byZK

沈阳航空航天大学

 

课程设计报告

 

课程设计名称:

物联网综合课程设计

课程设计题目:

900MHz门禁考勤软件设计与实现

 

院(系):

计算机学院

专业:

计算机科学与技术(物联网技术)

班级:

24010107

学号:

XXXXXXXXXXXXX

姓名:

ByZ.堃

指导教师:

施国君

完成日期:

2016年1月15日

此处为课设任务书~~

【备注】:

*900MHz门禁管理软件项目文件(QT工程文件/BG)链接请转至报告最后~~~

 

第1章总体设计方案

1.1设计原理

RFID技术,简单的说它是一种非接触的自动识别技术。

该技术的原理主要是利用射频信号和空间耦合的传输属性,能够对贴有RFID标签的物体进行自动识别。

所以RFID技术可以使用在门禁考勤上,这是因为RFID系统可以将用户的信息全部存贮在一起,每一个RFID卡有一个特定的卡号,并且这些信息能够通过跟卡号关联而被系统快速识别。

所以基于RFID技术的门禁考勤系统,可以将用户信息与RFID卡相关联,通过相对应的读卡器和一定的软件程序实现门禁考勤的功能。

RFID系统主要由电子标签、RFID读写器和天线三部分构成。

每个用户的RFID卡都是唯一的电子标签,其内部用EEPROM进行存储用户的各项信息;而RFID读写器由RFID控制器和RFID天线构成,读写器主要用来读取和写入RFID标签信息;而天线的作用就是用来传递RFID读写器和RFID标签之间的信息信号,本次课设中所使用到的频率为900MHz。

本课设题目名称为900MHz门禁考勤软件设计与实现,当前一些企业的人员管理考勤制度正在逐步的朝着信息化方向改进,以前通过人力去统计的方式已经显得落后和浪费资源,也极为不便。

因此企业人力管理信息化、便捷化、智能化的需求,便可以通过RFID技术来得以解决。

正是在这一背景下,本课设设计了一套基于900MHzRFID技术的门禁考勤系统软件。

1.2设计思路

采用900MHz的读卡器和900MHz具有唯一ID的射频卡作为系统的基础组成,使用QTCreator编写门禁考勤软件;读卡器对射频卡具有读写数据的功能,射频卡中具有存储信息的部分,利用程序连接读卡器从射频卡中读取或写入特定的信息用来识别。

在本次课设中,需要实现考勤刷卡、用户管理(添加、修改、删除用户)以及考勤日志记录的功能;因此先要设计考勤数据库,数据库包含用户表和考勤日志表,之后:

(1)当开启读卡器检测到卡时,获取到卡的ID,在数据库中查找该ID是否存在,如果存在则向考勤日志表中添加一条考勤记录,否则提示不存在该用户。

(2)在添加用户时,先刷一张新卡通过读卡器向其中写入用户信息并保存到用户数据表;修改用户时从用户列表中选择一条记录进行信息修改并保存;删除用户时,直接在用户列表中选一条用户信息的记录进行删除即可;

(3)查看考勤日志记录时,点击日志刷新按键,从数据库中读取考勤信息到日志列表;

1.3设计环境

1、软件环境:

QTCreator:

QtCreator是跨平台的QtIDE,QtCreator是Qt被Nokia收购后推出的一款新的轻量级集成开发环境(IDE)。

此IDE能够跨平台运行,支持的系统包括Linux(32位及64位)、MacOSX以及Windows。

QtCreator的设计目标是使开发人员能够利用Qt这个应用程序框架更加快速及轻易的完成开发任务。

2、硬件平台:

物联网多网技术综合教学开发平台B版(以下简称实验箱),重在研究不同网络在物联网中的各种应用,包含RFID技术、Zigbee、BlueTooth、Wifi、GPRS等各种数据通信方式,可应用于物联网专业教学、项目开发等方向。

功能特点:

实验箱提供了全面的开发工具和配套资料,最大程度的激发学生兴趣,巩固学习效果,方便了学习和应用。

该平台的特色是:

实验箱将模拟电子、数字电子、电路设计、信号处理、传感器原理与检测、单片机技术、RFID技术、BlueTooth技术、Wifi技术、Zigbee通信、GPRS通信、嵌入式技术等相关知识融会贯通,涵盖了当前物联网行业最热门最尖端的技术,实现了多网融合,让学生可以灵活应用各科知识,发挥创新能力。

实验箱为高校老师和学生们提供当前最受欢迎的嵌入式技术。

学生通过实践能够熟悉嵌入式开发的流程,掌握相关软件和调试工具的使用方法。

采用源码开放的Linux操作系统采用源代码开放的Linux操作系统。

老师和学生不仅可以阅读Linux系统的源码,而且可以自己配置和修改部分代码,定制个性操作系统。

由于Linux相关的网络资料、书本资料很丰富,因此在学习或开发过程中如果遇到问题,就可以在相关论坛得到帮助,缩短技术攻关的时间,提高学习或工作效率。

实验箱具有一键还原功能,通过该功能在做完实验后,可将实验箱恢复到初始状态,方便管理节约检查配置时间。

 

第2章详细设计方案

2.1顶层方案图的设计与实现

顶层方案图实现门禁考勤软件的逻辑功能,设计方案采用自上而下的设计方法。

根据900MHz门禁考勤软件的设计原理和设计思路,可以将本门禁考勤软件按功能分为以下3个主要部分:

考勤刷卡、用户管理、考勤日志。

(1)考勤刷卡:

采用900MHz读卡器读取卡的信息,对用户甄别进行考勤记录;

(2)用户管理:

可以添加新卡用户、删除用户信息、编辑用户信息;

(3)考勤日志:

可以对用户考勤日志信息进行查看;

门禁考勤软件系统功能结构框图如图2.1所示:

 

图2.1门禁考勤软件系统功能结构框图

利用QTCreator编写程序,绘制功能界面,并实现各部分功能程序。

程序调试结束后,编译下载到物联网综合实验平台进行运行检测。

2.2功能模块的设计与实现

本900MHz门禁考勤软件由考勤刷卡、用户管理和考勤日志三个模块组成。

考勤刷卡模块可以将卡的ID读取之后,在数据库中的用户信息进行比对,如果用户存在,则显示用户信息并对用户进行考勤记录,向考勤日志中添加一条记录;

用户管理模块可以实现读卡添加新卡用户、编辑用户的信息以及删除用户信息;

考勤日志模块可以对所记录的所有用户考勤日志信息进行查看。

下面是各功能模块的实现:

2.2.1考勤刷卡功能的实现

考勤刷卡功能:

采用900MHz的通信模块,读卡器读取其读卡范围内的卡的ID,程序在用户数据库中查询所获得的ID是否存在,如果存在显示该卡所对应的用户,并向数据库考勤表中添加一条该用户的考勤记录;否则,ID不存在,显示不存在该用户;

(1)使用QT定义构建考勤刷卡界面,刷卡界面由日期显示、卡号及用户名三部分组成,如下图2.2所示:

图2.2考勤刷卡界面图

(2)实现过程:

当开启读卡程序,通过读卡器通讯程序获得卡ID,调用数据库查询用户函数:

findName(constQString&cardid),获得的ID作为参数查询用户名;数据库会返回一个QString类型的结果,判断返回的结果,如果不是空字符串则表示数据库中有该用户,将用户姓名显示在Name文本框中,并调用数据库日志添加函数:

addLog(constQString&cardid)向数据库考勤日志表中添加一条考勤记录;否则在Name文本框中显示“NoSuchPerson!

”。

2.2.2用户管理功能的实现

用户管理功能:

有三个子功能分别是:

添加、删除、修改用户;

主要操作:

添加用户时,点击Add按钮弹出添加界面,刷一次新卡获得ID,输入用户名后点击确定进行保存;删除用户时,从用户列表选择一条用户信息记录再点击Delete按钮删除;修改用户信息时,选择一条记录点击Modify就可以修改用户的姓名,点击确认进行修改。

(1)使用QT构建用户管理的界面,如下图2.3所示

图2.3用户管理界面

(2)实现过程

添加用户:

点击Add按钮,调用UserAdd界面;刷一下卡获取到卡的ID,利用虚拟键盘输入用户名后,点击OK确定。

程序会调用用户添加函数:

addCard(constQString&cardid,constQString&name),ID和用户姓名作为参数,将新用户记录插入数据库的用户表中;

删除用户:

在用户管理界面的用户列表中点击选择一条用户信息,点击Delete按钮,程序判断是否选择了一条记录,如果选择了则调用用户删除函数:

delCard(constQString&cardid),ID作为参数,将对应卡的用户信息从用户表中删除;

修改用户信息:

在用户列表中选择一条记录后点击Modify按钮,程序调用UserModify界面将选择的用户信息显示出来,可以对用户的姓名进行修改,修改完成之后点击确认,调用用户修改函数:

updateName(constQString&cardid,constQString&newname),ID和新的用户姓名作为参数,更新数据库中的用户信息。

通过调用数据库操作函数和数据通信函数实现用户的添加、删除、修改等管理操作。

2.2.3考勤日志功能的实现

考勤日志功能:

用户在考勤刷卡界面刷卡之后,会在数据库中存入一条考勤的记录,在考勤日志界面点击刷新按钮可以查看数据库中的考勤记录;

(1)使用QT构建考勤日志界面,如下图2.4所示。

图2.4考勤日志界面

(2)实现过程

管理者点击Refresh按钮进行刷新时,程序调用日志刷新函数:

updateLogTable(),从数据库考勤日志表中提取考勤记录,按先后顺序显示在考勤日志界面的列表中;当有新的考勤刷卡时,只需点击Refresh就可以对考勤日志进行刷新显示。

 

第3章编程下载与硬件测试

3.1编程下载

在Linux系统下的Qt软件中将本软件代码编译,再将编译好的文件从Linux中复制到Windows系统下。

使用Windows系统自带的“超级终端”工具,在超级终端中设定好开发板的IP地址,在文件资源管理器中打开对应的路径,将编译好的程序下载到该IP地址对应的文件夹中,即完成了程序下载过程。

3.2硬件测试及结果分析

1、在超级终端中执行添加权限的命令,为DrugSaleManageSystem文件增加可执行权限并运行,如图3.1所示:

图3.1添加权限并运行DrugSaleManageSystem程序

2、运行程序后,首先可以在LCD上看到门禁考勤软件的主界面,如图3.2所示:

图3.2门禁考勤软件主界面

上图中若右上角显示为“已关闭”时,表示系统未工作,此时界面内的所有功能均不可操作,右上角显示“已打开”时可以进行操作。

3、添加新用户,点击Manage进入用户管理界面,点击添加弹出信息录入窗体,刷卡获得卡ID后,进行用户名输入,测试如图3.3所示:

图3.3添加新用户

点击OK保存新的用户信息。

4、编辑用户信息,选择一条用户记录点击Modify,弹出编辑窗体;测试如图3.4所示:

图3.4修改用户信息

5、删除用户,在用户列表中选择一条记录,点击Delete按钮删除一名用户,测试结果如图3.5所示:

图3.5删除用户信息

6、考勤刷卡,刷一张卡有两种可能的结果,一种是注册过的卡,一种是没有注册过的卡,测试两种类别的卡结果如图3.6所示

图3.6考勤刷卡结果

7、考勤日志显示,在日志显示界面点击刷新按钮,测试结果如图3.7所示:

图3.7考勤日志显示

参考文献

[1]单承赣.射频识别(RFID)原理与应用[M].北京:

电子工业出版社,2012

[2]物联网多网技术综合开发平台实验指导书[M].北京:

凌阳科技有限公司,2013

[3]多网综合开发平台B版使用说明书[M].北京:

凌阳科技有限公司,2013

[4]周华.射频识别RFID技术原理与应用实例[M].北京:

人民邮政出版社,2008(12)[5]董卫.图书馆RFID应用标准化方案分析[J]现代计算机技术,2013(06)

[6]康鹏.射频识别RFID技术与典型应用[M]北京:

人民邮政出版社,2010(06)

[7]韩广峰.智能化图书馆RFID技术的研究[J].图书馆工作与研究,2007

(1):

66-68

[8]孙一钢.图书馆RFID技术标准化问题分析[J].中国图书馆报,2007(4):

106-108

附录(关键部分程序清单)

一、考勤软件主界面代码:

#include"DrugSaleManageSystemMainWidget.h"

#include"ui_DrugSaleManageSystemMainWidget.h"

#include"DBControl.h"

#include"ioportManager.h"

#include

DrugSaleManageSystemMainWidget:

:

DrugSaleManageSystemMainWidget(QWidget*parent):

QWidget(parent),

ui(newUi:

:

DrugSaleManageSystemMainWidget),

commPort(NULL),

isNormalPackage(true)

{

trans=newQTranslator(this);

trans->load(":

/zh_CN.qm");

qApp->installTranslator(trans);

DBControl:

:

Create();

ui->setupUi(this);

IOPortManager:

:

setMode(Mode900M);

connect(this,SIGNAL(recvPackage(UHF900MPackage*)),this,SLOT(onRecvedPackage(UHF900MPackage*)));

connect(this,SIGNAL(cardDetected(int,QString)),this,SLOT(onCardDetected(int,QString)));

on_openCloseBtn_clicked(false);

}

DrugSaleManageSystemMainWidget:

:

~DrugSaleManageSystemMainWidget()

{

DBControl:

:

Destroy();

deleteui;

}

boolDrugSaleManageSystemMainWidget:

:

start(constQString&port)

{

if(commPort!

=NULL)

returnfalse;

commPort=newQextSerialPort(port,QextSerialPort:

:

EventDriven);

commPort->setBaudRate(BAUD9600);

commPort->setFlowControl(FLOW_OFF);

commPort->setParity(PAR_NONE);

commPort->setDataBits(DATA_8);

commPort->setStopBits(STOP_1);

if(commPort->open(QIODevice:

:

ReadWrite)==true){

connect(commPort,SIGNAL(readyRead()),this,SLOT(onPortDataReady()));

onApplySettingBtnClicked();

returntrue;

}

else{

qDebug()<<"devicefailedtoopen:

"<errorString();

deletecommPort;

commPort=NULL;

returnfalse;

}

}

boolDrugSaleManageSystemMainWidget:

:

stop()

{

if(commPort!

=NULL)

{

commPort->close();

deletecommPort;

}

commPort=NULL;

returntrue;

}

voidDrugSaleManageSystemMainWidget:

:

onPortDataReady()

{

QByteArraybytes;

inta=commPort->bytesAvailable();

bytes.resize(a);

quint8*p=(quint8*)bytes.data();

intlen=bytes.size();

commPort->read((char*)p,len);

while(len--)

{

boolfullPackage=false;

lastRecvedPackage.append(*p);

switch(lastRecvedPackage.size())

{

case1:

if(*p==0x00)

isNormalPackage=false;

else

isNormalPackage=true;

break;

case2:

break;

default:

if(isNormalPackage)

{

if(lastRecvedPackage.size()==(lastRecvedPackage.at

(1)+2))

{

fullPackage=true;

}

}

else

{

if(lastRecvedPackage.size()==17)

{

fullPackage=true;

}

}

break;

}

if(fullPackage)

{

UHF900MPackage*pkg=newUHF900MPackage(lastRecvedPackage);

if(pkg->isValid())

emitthis->recvPackage(pkg);

lastRecvedPackage.clear();

}

p++;

}

}

//

voidDrugSaleManageSystemMainWidget:

:

onRecvedPackage(UHF900MPackage*pkg)

{

//TODO:

switchpackagetype

if(pkg->isValid())

{

if(pkg->isNormalPackage())

{

switch(pkg->command())

{

caseUHF900MPackage:

:

IdentifyEPC:

if(pkg->data().size()==13)

{

emitcardDetected(int(pkg->data().at(0)),pkg->data().mid

(1).toHex());

//ui->uhf900mCardScanTab->appendScanDataText(

//QString(tr("Radio%1:

%2"))

//.arg((int)(pkg->data().at(0)))

//.arg(QString(pkg->data().mid

(1).toHex()))

//);

}

//else

//ui->uhf900mCardScanTab->appendScanDataText(tr("Cardnotfound"));

break;

caseUHF900MPackage:

:

WriteSetting:

switch(settingStatus)

{

caseGetScanMode:

{

settingStatus=GetMode;

QByteArrayregData;

regData.append((char)0x00);

regData.append((char)0x70);

regData.append((char)2);//1forC/S,2fortimer,3fortrigger

//regData.append((char)ui->uhf900mSettingTab->mode());

UHF900MPackagepkg(UHF900MPackage:

:

CommandPkg,UHF900MPackage:

:

WriteSetting,0,regData);

sendData(pkg);

}

break;

caseGetMode:

{

settingStatus=GetTimeDelay;

QByteArrayregData;

regData.append((char)0x00);

regData.append((char)0x71);

regData.append((char)15);

//regData.append((char)ui->uhf900mSettingTab->delay());

UHF900MPackagepkg(UHF900MPackage:

:

CommandPkg,UHF900MPackage:

:

WriteSetting,0,regData);

sendData(pkg);

}

break;

caseGetTimeDelay:

{

settingStatus=GetCommIf;

QByteArrayregData;

regData.append((char)0x00);

regData.append((char)0x72);

regData.append((char)1);//1forRS485,2forWiegand,3forRS232

//regData.append((char)ui->uhf900mSettingTab->commIf());

UHF900MPackagepkg(UHF900MPackage:

:

CommandPkg,UHF900MPackage:

:

WriteSetting,0,regData);

sendData(pkg);

}

break;

caseGetCommIf:

{

settingStatus=Idle;

sendData(UHF900MPackage(UHF900MPackage:

:

CommandPkg,UHF900MPackage:

:

ResetDevice,0));

}

break;

caseIdle:

break;

}

break;

}

}

else

{

emitcardDetected(int(pkg->data().right

(1).at(0)),pkg->data().left(12).toHex());

//ui->uhf900mCardScanTab->appendScanDataText(

//QString

展开阅读全文
相关资源
猜你喜欢
相关搜索

当前位置:首页 > 高等教育 > 农学

copyright@ 2008-2022 冰豆网网站版权所有

经营许可证编号:鄂ICP备2022015515号-1