• 1019.90 KB
  • 2022-05-17 12:57:31 发布

基于rfid高频职工考勤管理系统课程设计

  • 31页
  • 当前文档由用户上传发布,收益归属用户
  1. 1、本文档共5页,可阅读全部内容。
  2. 2、本文档内容版权归属内容提供方,所产生的收益全部归内容提供方所有。如果您对本文有版权争议,可选择认领,认领后既往收益都归您。
  3. 3、本文档由用户上传,本站不保证质量和数量令人满意,可能有诸多瑕疵,付费之前,请仔细先通过免费阅读内容等途径辨别内容交易风险。如存在严重挂羊头卖狗肉之情形,可联系本站下载客服投诉处理。
  4. 文档侵权举报电话:19940600175。
目录摘要................................................................................................................................3正文..................................................................................................错误!未定义书签。一、前言........................................................................................................................4二、案例描述................................................................................................................52.1、系统核心功能.........................................................................................52.2、实施步骤.................................................................................................5三、需求分析................................................................................................................73.1、实验箱模块的选择................................................................................73.2、HF高频读写器原理...............................................................................83.3、射频通信原理........................................................................................9四、整体描述和实现..................................................................................................104.1实现RFID高频职工考勤管理系统的硬件设计..................................104.2实现RFID高频职工考勤管理系统的软件设计...................................114.3程序代码.................................................................................................144.4系统运行结果..........................................................................................27总结............................................................................................................................29致谢............................................................................................................................30参考文献......................................................................................................................312 摘要无线射频识别即RFID(RadioFrequencyIDentification)技术,又称电子标签、无线射频识别,是一种非接触的自动识别技术,可通过无线电讯号识别特定目标并读写相关数据,而无需识别系统与特定目标之间建立机械或光学接触。它基本由三部分组成:标签(Tag)、阅读器(Reader)和天线(Antenna)。RFID技术与条码、生物识别等自动识别技术,以及与互联网、通信、传感网络等信息技术融合,构筑一个无所不在的网络环境。现在很多学校也充分的利用信息网络技术和计算机互联网技术,发挥信息网络的各种技术手段和现有各种教育、科研、信息资源的优势,开发各种应用系统和管理系统,实现网络交互式管理,全面推进信息化管理。而基于RFID的职工考勤应用系统就是学校管理系统的一个组成部分,它将智能化的完成考察职工出勤情况。它实时的自动采集数据信息、自动对所采集数据进行分析处理,然后以可视化界面回报给学校管理人员。通过点名、磁卡和接触式IC卡等方式对职工的上课出勤情况进行考勤、记录管理,既耗时,而且又会相互干扰;而非接触式RFID员工考勤应用系统实现了利用无线射频识别技术对员工考勤管理,既方便、快捷,又省资源。本文设计了一种基于RFID高频职工考勤管理系统,它是基于北京奥尔斯电子科技有限公司生产的物联网RFID综合实验系统V1.0。利用其中的HF模块,嵌入式网关,并连接PC的串口线到嵌入式网关的J28接口。即可以实现网关控制HF模块,也可以实现PC机对HF模块的控制。该系统采用13.56M射频识别技术进行职工的门禁考勤管理,职工每人佩戴13.56M无源电子标签一张,作为考勤卡。用于上课、下课时的考勤记录,只要标签处于读写器的有效识别范围,则阅读器便可自动识别到该标签信息,通过软件系统自动记录考勤信息,同时控制电子锁开门。关键词:RFID;高频;职工考勤3 一、前言RFID射频识别是一种世界上较为领先的技术:第一,可以识别单个的非常具体的物体,而不是像条形码那样只能识别一类物体;第二,其采用无线电射频,可以透过外部材料读取数据,而条形码必须靠激光来读取信息;第三,可以同时对多个物体进行识读,而条形码只能一个一个地读。此外,储存的信息量也非常大。所以被广为使用。在很多的公司中基于RFID的职工考勤应用系统就是公司管理系统的一个组成部分,它将智能化的完成考察职工出勤情况。它实时的自动采集数据信息、自动对所采集数据进行分析处理,然后以可视化界面回报给学校管理人员。为学校更好的管理职工提供了很大的方便。职工卡考勤查询管理系统基于RFID技术,这样可以方便集成分布到公司中的每一个部门里。RFID应用已经全面普及,在校园中职工老师的考勤管理系统更是为学校的管理提供了很大的方便。职工卡基于RFID无线射频技术,通过射频技术便可获取校园卡中的各类信息,对于职工卡考勤的应用而言,仅仅需要得到职工卡的一个唯一标志号便可完成考勤记录。它将支持与职工管理系统、考勤管理系统的信息传递,同时可以方便的与“一卡通”系统进行无缝连接。4 二、案例描述该系统采用13.56M射频识别技术进行职工的门禁考勤管理,职工每人佩戴13.56M无源电子标签一张,作为考勤卡。用于上课、下课时的考勤记录,只要标签处于读写器的有效识别范围,则阅读器便可自动识别到该标签信息,通过软件系统自动记录考勤信息,同时控制电子锁开门。2.1、系统核心功能准确识别门禁考勤卡,并正确记录考勤时间,同时应给出声音提示和图像显示;1、可以由具有系统管理员权限的操作人员进行方便的录入职工信息,即:将职工姓名、学号、所属学院、专业、班级和考勤卡号,以及照片图像存入数据库;2、可以通过计算机方便的查询每一个人的考勤详细记录;3、可进行操作人员录入、权限限定、系统参数等功能设定;4、可进行节假日和日期的设定。5、可进行迟到、出差、请假录入等功能设定;6、可设置多种系统查询功能,并可以打印报表或导出EXCEL文件等文件格式。2.2、实施步骤1、用户管理用户分管理员和普通用户两种,管理员可以执行增加删除修改等各种操作,普通用户只能查看。数据库中现有三种用户,管理员-用户名:牛文晋,密码:12280104,普通用户-用户名:a,密码:(空);用户名:user,密码:user。a.增加用户:点击“增加”按钮,在弹出的“增加用户”框中输入新用户的用户名,密码(可选),权限,备注(可选),然后点击确定,即可在用户管理栏中看到新添加的用户信息。b.删除用户:在用户管理栏中选择待删除的用户,点击“删除”按钮。c.修改用户:在用户管理栏中,选择待修改的用户,点击“修改”按钮,即可修改相应的信息,修改完后点击“确定”按钮。2、学院信息管理与用户管理操作类似。5 3、专业信息管理与用户管理操作类似。4、职工信息管理与用户管理操作类似。5、考勤查询a.设置好待查询的起始、终止时间和上、下课时间。b.(可选)设置过滤条件:班级或姓名。c.点击“查询”按钮。d.若有需要,点击“导出为Excel”,可对当前查询结果在当前目录保存了Excel文件。6、读卡操作e.设置好串口号和连接模式,点击“连接”按钮。f.点击开始读卡按钮,即开始读卡,当有卡在读写器射频范围内时,则会在下方的列表中显示对应的职工的姓名。g.点击“停止读卡”,即可停止读卡。图1系统结构示意图6 三、需求分析该系统基于OURS—RFID—RP实验平台系统,主要目的是结合RFID技术和职工考勤管理理论,将RFID技术应用于考勤管理系统中。利用其中的HF高频读写器模块,OMAP3530嵌入式网关。实现嵌入式网关对RFID模块的控制。并在MicrosoftOfficeAccess中记录职工的一些基本信息,利用MicrosoftVisualStudio2005创建MFC界面并与MicrosoftOfficeAccess2003连接记录职工的一些情况,通过13.56M的考勤卡来实现职工的考勤管理。3.1、实验箱模块的选择RFID系统由电子标签、读写器(阅读器)、天线三部分组成。读写器用于读取或写入非接触Ic卡信息;天线则起至d在非接触IC卡和读写器间传递射频信号作用。RFID系统还可通过读写器的RS232或RS485接口与外部计算机(上位机系统)连接,进行数据交换。其系统组成图如下:图2RFID系统基本模型2、电子标签电子标签是指由IC芯片和无线通信天线组成的超微型的小标签,其内置的射频天线用于和读写器进行通信。系统工作时,读写器发出查询(能量)信号,电在标签(无源)收到查询(能量)信号后将其一部分整流为直流电源供电子标签内的电路工作,另一部分能量信号被电子标签内保存的数据信息调制后反射回读写器嘲.电子标签是射频识别系统真正的数据载体。3、读写器读写器在RFID系统中扮演着重要的角色,读写器主要负责与电子标签的双向通信,同时接受来自于主机系统的控制指令。读写器的频率决定了RFID系统工作的频段,其功率决定了射频识别的有效距离。读写器根据使用的结构和技术不同7 可以是读或读/写装置,是RFID系统信息控制和处理中心。读写器通常由射频接口、逻辑控制单元和天线三部分组成。3、RFID系统的基本工作原理由读写器通过发射天线发送特定频率的射频信号,当电子标签进入发射天线有效工作区域时产生感应电流,从而获得能量被激活,使电子标签将自身编码信息通过内置射频天线发送出去;读写器的接收天线接收到从标签(射频卡)发送来的调制信号,经天线调节器传送到读写器信号处理模块,经解调和解码后将有效信息送至后台主机系统进行相关处理:主机系统根据逻辑运算判断该卡的合法性,识别该标签的身份,手持终端针对不同的设定做出相应的处理和控制,最终发出指令信号控制读写器完成不同的读写操作。高频RFID系统主要采用的是电磁反向散射耦合即雷达原理模型,发射出去的电磁波,碰到目标后反射,同时携带回目标信息,依据的是电磁波的空间传播规律。其原理图如下:图3电磁反向散射耦合原理3.2、HF高频读读写器原理图4HF高频读写器模块8 上电后,430先通过并口访问7970芯片,在没有读到卡时,程序运行在串口读写模式,并每隔0.5s向串口发送一个“D”,直到有写操作为止。当有卡读写时,针对相应的卡,程序进入不同的协议中,并且点亮相应的LED灯。并且上电后,配置完内部寄存器,程序进入串口读写程序,可以进行人机交互。当读到不同协议的卡时,程序退出串口读写程序,进入相应的协议子程序中(目前支持14443A协议和15693协议)。读完卡后,退出相应的协议子程序,进入串口读写程序。3.3、射频通信原理非接触式射频卡系统是一个典型的射频识别系统,它采用的是射频通信技术,射频通信细节有:数据的调制和解调、能量的传输和通信协议。3.3.1、数据的调制和解调读写器和射频卡之间采用半双工通信方式,以一定频率的电磁波为媒介进行通信。由于基带数字信号不可以直接进行传输,那么在读写器和射频卡之间进行通信时,必须对该基带信号进行调制和解调处理。由于射频卡系统是一个数字通信系统,因此一般采用数字调制的方法进行调制。数字调制是用载波信号参量的离散状态来表征所传输的数字信息,在解调时只需对载波信号的受调参量进行检测和判决.数字调制信号因此称为键控信号.由于载波信号是正弦波信号,其三个参量幅度、频率和相位都能携带信息,相应有调幅、调频和调相三种基本形式。在射频卡中常采用调幅形式。3.3.2、能量的传输射频卡在工作时,本身没有电源,因此需要从读写器发送的电磁波中提取能量,在射频卡接受数据期间,它一方面从接受到的信号中解调出数据信息,另一方面从接受到的信号中提取能量。当射频卡返回数据时,射频卡的数据是通过负载调制的方式,使射频卡的天线上的信号幅度发生变化,这样藕合到读写器的天线上的信号幅度也就发生相应的变化,从而使读写器得到射频卡返回的信息,同时射频卡将读写器上的电磁波信号藕合过来,提供射频卡工作所需的能量。3.3.3、通信协议RFID系统至少由一个读写器和一个射频卡组成.为了使系统具有高性能价格比,通常在整个系统中加入相关通信协议,使一个读写器可以同时和多个射频卡通信。(1)传输协议能量传送的方式一般是以固定频率的连续波或脉冲波(如跳频方式)为载体。依据系统应用目的的不同,其能量传送的方式不同。目前使用最多的是跳频方式的脉冲波如公路车辆识别系统,而在铁路车辆识别系统中常采用连续波.工作频率是RFID系统的基本参数,频率的选取要遵循某些规范的限制。选取较高的工作9 频率具有一定的优势。为了系统的可兼容性,信息的编码方式应符合某些规范。我国铁路车辆识别系统采用了IS010374集装箱识别的编码方式。信息的结构常常包括帧头、固定信息、用户信息、校验信息等。信息的长度决定于编码方式和具体识别的信息内容,传送速度则取决于信息的长度和码元速率。.(2)信道编码技术在读写器与射频卡进行射频通信的过程中,存在许多干扰数据通信的因素,其中最主要的两个因素是信道噪声和多卡操作(即有多张卡在读写器的天线感应范围内)引起的数据干扰.手持数据采集器s因此,需要采用信道编码和访问控制技术,以保证读写器和射频卡之间数据传输的完整、可靠和快速。为了提高系统的抗嗓声能力,就需要采用信道编码技术,对可能或已经出现的差错进行控制,信道编码是使不带规律性或规律性不强的原始数字信号变换为带上规律性或加强了规律性的数字信号,信道译码器则利用这些规律性来鉴别是否发生错误,进而纠正错误。根据码的用途可将其分为检错码和纠错码。常用的检错码包括奇偶校验码和循环冗余校验码响.四、整体描述和实现本系统的设计主要分为两大部分,一部分是考勤器的软、硬件设计,一部分是上位机软件的设计。考勤器体积适中,便于携带到教室等场所,由它完成对职工的考勤。主要功能是读取职工一卡通的信息,以及做相应显示、存储等处理。上位机软件主要功能是向考勤器下传职工姓名、学号以及接收并保存考勤器上传的卡号和考勤记录。4.1实现RFID高频职工考勤管理系统的硬件设计职工考勤几乎是每个学校必须而且是经常做的职工工作之一,如何简单高效的地考勤工作一直以来是很多学校都在努力解决,所以考虑如何实现简单高效的考勤具有巨大的实际意义和价值,鉴于此,本文提出了一种可行的方案,方案的总体思路:目前很多学校都在使用一卡通,本系统以职工的一卡通为基础,设计一种读卡式考勤器,考勤器存储有职工的身份信息,职工刷卡,通过职工刷卡,通过职工卡号来识别职工的身份,并记录刷卡时间来实现对职工的考勤,方法简单有效。考勤器体积适中,便于携带,使用方便。4.1.1考勤器设计考勤器硬件设计主要构成:单片机、读卡模块、实时钟模块等4.1.2HF模块系统框图:10 图5HF模块系统框图(1)系统运行简要说明:①:上电后,430先通过并口访问7970芯片,在没有读到卡时,程序运行在串口读写模式,并每隔0.5s向串口发送一个“D”,直到有写操作为止。②:当有卡读写时,针对相应的卡,程序进入不同的协议中,并且点亮相应的LED灯。(2)API调用说明①:上电后,配置完内部寄存器,程序进入串口读写程序,可以进行人机交互。②:当读到不同协议的卡时,程序退出串口读写程序,进入相应的协议子程序中(目前支持14443A协议和15693协议)。读完卡后,退出相应的协议子程序,进入串口读写程序。(3)ISO15693第三部分通过读卡器获取指令流,读卡器采用TItrf7970读卡器芯片。4.2实现RFID高频职工考勤管理系统的软件设计本次课程设计主要是设计基于高频的职工考勤系统,其软件部分利用上位机的Microsoftvisualstdio2005、MicrosoftOficeAccess2003等软件来编写职工考勤系统需要的代码及创建数据库。4.2.1在MicrosoftVsualStdio2005的MFC应用程序模块设计在PC机上通过MicrosoftVsualStdio2005的MFC应用程序模块设计登陆界11 面、读卡界面职工信息界面该软件将自动生成相关程序代码段相关界面如图所示图6登陆界面图7用户界面图8职工界面图9添加专业界面图10专业界面12 图11信息界面图12班级界面图13读卡界面图14考勤界面13 4.3程序代码//Attendance.cpp:实现文件//#include"stdafx.h"#include"HFExample.h"#include"Attendance.h"#include"BasicExcel.hpp"usingnamespaceYExcel;#defineATTENDANCE_LIST_DATETIME_IDX0#defineATTENDANCE_LIST_WEEK_IDX1#defineATTENDANCE_LIST_NAME_IDX2#defineATTENDANCE_LIST_DEPARTMENT_IDX3#defineATTENDANCE_LIST_SWORDTIME_IDX4#defineATTENDANCE_LIST_EWORKTIME_IDX5staticTCHARWeekDay[][6]={TEXT("周日"),TEXT("周一"),TEXT("周二"),TEXT("周三"),TEXT("周四"),TEXT("周五"),TEXT("周六")};//CAttendance对话框IMPLEMENT_DYNAMIC(CAttendance,CPropertyPage)CAttendance::CAttendance():CPropertyPage(CAttendance::IDD){}CAttendance::~CAttendance(){}voidCAttendance::DoDataExchange(CDataExchange*pDX){CPropertyPage::DoDataExchange(pDX);DDX_Control(pDX,IDC_LIST_ATTENDANCD,_lists);}voidCAttendance::GetRequestList(CStringdate1,CStringtime1,CStringdate2,CStringtime2){CStringdt1,dt2;dt1=date1+""+time1;dt2=date2+""+time2;theApp.getDB().GetAttendanceList(m_attendanceinfoarray,dt1,dt2);}voidCAttendance::GetRequestListByName(CStringdate1,CStringtime1,CStringdate2,CStringtime2,CStringname){CStringdt1,dt2;dt1=date1+""+time1;dt2=date2+""+time2;theApp.getDB().GetAttendanceListByName(m_attendanceinfoarray,dt1,dt2,name);14 }voidCAttendance::GetRequestListByDepartment(CStringdate1,CStringtime1,CStringdate2,CStringtime2,CStringdepartment){CStringdt1,dt2;dt1=date1+""+time1;dt2=date2+""+time2;theApp.getDB().GetAttendanceListByDepartment(m_attendanceinfoarray,dt1,dt2,department);}voidCAttendance::GetRequestListByNameAndDepartment(CStringdate1,CStringtime1,CStringdate2,CStringtime2,CStringname,CStringdepartment){CStringdt1,dt2;dt1=date1+""+time1;dt2=date2+""+time2;theApp.getDB().GetAttendanceListByNameAndDepartment(m_attendanceinfoarray,dt1,dt2,name,department);}BEGIN_MESSAGE_MAP(CAttendance,CPropertyPage)ON_BN_CLICKED(IDC_BTN_QUERY,&CAttendance::OnBnClickedBtnQuery)ON_BN_CLICKED(IDC_CHECK_DEPARTMENT,&CAttendance::OnBnClickedCheckDepartment)ON_BN_CLICKED(IDC_CHECK_NAME,&CAttendance::OnBnClickedCheckName)ON_BN_CLICKED(IDC_BTN_EXPORTEXCEL,&CAttendance::OnBnClickedBtnExportexcel)ON_NOTIFY(LVN_ITEMCHANGED,IDC_LIST_ATTENDANCD,&CAttendance::OnLvnItemchangedListAttendancd)ON_NOTIFY(DTN_DATETIMECHANGE,IDC_DATETIMEPICKER_DATEEND,&CAttendance::OnDtnDatetimechangeDatetimepickerDateend)END_MESSAGE_MAP()//CAttendance消息处理程序BOOLCAttendance::OnInitDialog(){CPropertyPage::OnInitDialog();//TODO:在此添加额外的初始化COleDateTimedt1(2011,1,1,8,30,0),dt3(2011,1,1,17,30,0);((CDateTimeCtrl*)GetDlgItem(IDC_DATETIMEPICKER_STARTWORK))->SetTime(dt1);((CDateTimeCtrl*)GetDlgItem(IDC_DATETIMEPICKER_ENDWORK))->SetTime(dt3);_lists.SetExtendedStyle(LVS_EX_GRIDLINES|LVS_EX_FULLROWSELECT);_lists.InsertColumn(ATTENDANCE_LIST_DATETIME_IDX,TEXT("日期"));_lists.InsertColumn(ATTENDANCE_LIST_WEEK_IDX,TEXT("星期"));_lists.InsertColumn(ATTENDANCE_LIST_NAME_IDX,TEXT("姓名"));_lists.InsertColumn(ATTENDANCE_LIST_DEPARTMENT_IDX,TEXT("专业"));15 _lists.InsertColumn(ATTENDANCE_LIST_SWORDTIME_IDX,TEXT("上课"));_lists.InsertColumn(ATTENDANCE_LIST_EWORKTIME_IDX,TEXT("下课"));CRectrect4;_lists.GetClientRect(rect4);//获得当前客户区信息_lists.SetColumnWidth(ATTENDANCE_LIST_DATETIME_IDX,1.5*rect4.Width()/10);//设置列的宽度。_lists.SetColumnWidth(ATTENDANCE_LIST_WEEK_IDX,1*rect4.Width()/10);_lists.SetColumnWidth(ATTENDANCE_LIST_NAME_IDX,1*rect4.Width()/10);_lists.SetColumnWidth(ATTENDANCE_LIST_DEPARTMENT_IDX,2*rect4.Width()/10);_lists.SetColumnWidth(ATTENDANCE_LIST_SWORDTIME_IDX,2*rect4.Width()/10);_lists.SetColumnWidth(ATTENDANCE_LIST_EWORKTIME_IDX,2*rect4.Width()/10);//获取专业信息theApp.getDB().GetAllDepartment(_departmentinfoarray);inti;for(i=0;i<_departmentinfoarray.GetCount();i++){CDepartmentInfo&aDepartmentInfo=_departmentinfoarray.GetAt(i);((CComboBox*)(GetDlgItem(IDC_COMBO_DEPARTMENT)))->AddString(aDepartmentInfo.GetName());}//获取职工信息theApp.getDB().GetAllEmployee(_employinfoarray);for(i=0;i<_employinfoarray.GetCount();i++){CEmployeeInfo&aEmployInfo=_employinfoarray.GetAt(i);((CComboBox*)(GetDlgItem(IDC_COMBO_NAME)))->AddString(aEmployInfo.GetName());}returnTRUE;//returnTRUEunlessyousetthefocustoacontrol//异常:OCX属性页应返回FALSE}voidCAttendance::ShowInListCtrl(){inti;CStringt;COleDateTimedt0,dt1,dt2,dtt;//dt0:查询起始时间dt1:数据库中时间dt2:查询结束时间dtt:临时变量((CDateTimeCtrl*)GetDlgItem(IDC_DATETIMEPICKER_DATESTART))->GetTime(dt0);dt0.SetDateTime(dt0.GetYear(),dt0.GetMonth(),dt0.GetDay(),0,0,0);//只提供查询日期,相应起始时间为点((CDateTimeCtrl*)GetDlgItem(IDC_DATETIMEPICKER_DATEEND))->GetTime(dt2);dt2.SetDateTime(dt2.GetYear(),dt2.GetMonth(),dt2.GetDay(),23,59,59);//查询终止时间16 为点COleDateTimeSpandtsd(1,0,0,0),dtslast(0,3,0,0),dtsampm(0,12,0,0);_lists.DeleteAllItems();constintiMax=m_attendanceinfoarray.GetUpperBound();for(i=0;i<=iMax;i++)//获取的记录是按时间排序的{dt1=m_attendanceinfoarray.GetAt(i).GetDateTime2();while(dt1>=dt0)//&&dt1<=dt0+dtsd){while(dt1>dt0+dtsd)dt0+=dtsd;dt1=m_attendanceinfoarray.GetAt(i).GetDateTime2();_lists.InsertItem(i,m_attendanceinfoarray.GetAt(i).GetDate());_lists.SetItemText(i,ATTENDANCE_LIST_NAME_IDX,m_attendanceinfoarray.GetAt(i).GetName());if(dt1dtt)t="正常";elset=m_attendanceinfoarray.GetAt(i).GetTime();_lists.SetItemText(i,ATTENDANCE_LIST_EWORKTIME_IDX,t);}i++;if(i>iMax)break;}if(dt1>dt2||i>iMax)break;}17 }voidCAttendance::ShowInListCtrl2(){inti,j=0;CStringt;COleDateTimedtdayb,dt1,dt2,dtdaye,dtt;//dt0:查询起始时间dt1:数据库中时间dt2:查询结束时间dtt:临时变量((CDateTimeCtrl*)GetDlgItem(IDC_DATETIMEPICKER_DATESTART))->GetTime(dtdayb);dtdayb.SetDateTime(dtdayb.GetYear(),dtdayb.GetMonth(),dtdayb.GetDay(),0,0,0);//只提供查询日期,相应起始时间为点((CDateTimeCtrl*)GetDlgItem(IDC_DATETIMEPICKER_DATEEND))->GetTime(dt2);dt2.SetDateTime(dt2.GetYear(),dt2.GetMonth(),dt2.GetDay(),23,59,59);//查询终止时间为点COleDateTimeSpandtsd(1,0,0,0),dtslast(0,3,0,0),dtsampm(0,12,0,0),dtspan=dt2-dtdayb;intdays=dtspan.GetTotalDays()+1;//查询的总天数j=0;for(i=0;idtdayb&&dt1_queryresultarray.GetAt(i).GetETime())//查询记录是按时间排序,所以这个条件一定满足//{//CStringoldetime;//oldetime=_queryresultarray.GetAt(i).GetETime();_queryresultarray.GetAt(i).SetETime(dt1.Format("%H:%M:%S"));//}//}}else//同上,正常下课不计多次刷卡_queryresultarray.GetAt(i).SetETime("正常");break;}}}voidCAttendance::GetQueryResult(){CStringd1,d2;22 GetDlgItem(IDC_DATETIMEPICKER_DATESTART)->GetWindowText(d1);GetDlgItem(IDC_DATETIMEPICKER_DATEEND)->GetWindowText(d2);intbyname,bydepartment;CStringname,department;byname=((CButton*)GetDlgItem(IDC_CHECK_NAME))->GetCheck();bydepartment=((CButton*)GetDlgItem(IDC_CHECK_DEPARTMENT))->GetCheck();GetDlgItem(IDC_COMBO_NAME)->GetWindowText(name);GetDlgItem(IDC_COMBO_DEPARTMENT)->GetWindowText(department);if(BST_CHECKED==byname){if(BST_CHECKED==bydepartment){GetRequestListByNameAndDepartment(d1,"00:00:00",d2,"23:59:59",name,department);theApp.getDB().GetNamesByNameAndDepartment(_queryresultarray,name,department);}else{GetRequestListByName(d1,"00:00:00",d2,"23:59:59",name);theApp.getDB().GetNamesByName(_queryresultarray,name);}}elseif(BST_CHECKED==bydepartment){GetRequestListByDepartment(d1,"00:00:00",d2,"23:59:59",department);theApp.getDB().GetNamesByDepartment(_queryresultarray,department);}else{GetRequestList(d1,"00:00:00",d2,"23:59:59");theApp.getDB().GetNames(_queryresultarray);}//各个职工考勤信息统计//要保证同一职工在_queryresultarray和_employstatinfoarray中序号是相同的inti,j,k;i=_queryresultarray.GetSize();_employstatinfoarray.RemoveAll();_employstatinfoarray.SetSize(i);for(j=0;jGetTime(_t1);((CDateTimeCtrl*)GetDlgItem(IDC_DATETIMEPICKER_ENDWORK))->GetTime(_t2);m_startworktime=COleDateTimeSpan(0,_t1.GetHour(),_t1.GetMinute(),_t1.GetSecond());m_endworktime=COleDateTimeSpan(0,_t2.GetHour(),_t2.GetMinute(),_t2.GetSecond());GetQueryResult();ShowInListCtrl2();//TRACE(TEXT("%d,%d,%dn"),_latearray.GetSize(),_leaveearlyarray.GetSize(),_absentarray.GetSize());}voidCAttendance::OnBnClickedCheckDepartment(){//TODO:在此添加控件通知处理程序代码if(BST_CHECKED==((CButton*)GetDlgItem(IDC_CHECK_DEPARTMENT))->GetCheck())GetDlgItem(IDC_COMBO_DEPARTMENT)->EnableWindow(TRUE);elseGetDlgItem(IDC_COMBO_DEPARTMENT)->EnableWindow(FALSE);}voidCAttendance::OnBnClickedCheckName(){//TODO:在此添加控件通知处理程序代码if(BST_CHECKED==((CButton*)GetDlgItem(IDC_CHECK_NAME))->GetCheck())GetDlgItem(IDC_COMBO_NAME)->EnableWindow(TRUE);elseGetDlgItem(IDC_COMBO_NAME)->EnableWindow(FALSE);}voidCAttendance::OnBnClickedBtnExportexcel(){//TODO:在此添加控件通知处理程序代码CWaitCursorwc;BasicExcele;24 e.New(1);e.RenameWorksheet((size_t)0,L"职工考勤");BasicExcelWorksheet*sheet=e.GetWorksheet(L"职工考勤");sheet->Cell(0,0)->SetWString("日期");sheet->Cell(0,1)->SetWString("星期");sheet->Cell(0,2)->SetWString("姓名");sheet->Cell(0,3)->SetWString("部门");sheet->Cell(0,4)->SetWString("上班");sheet->Cell(0,5)->SetWString("下班");CListCtrl*hlist=&_lists;introws=hlist->GetItemCount();intlows=hlist->GetHeaderCtrl()->GetItemCount();inti,j;COleDateTimeodt;for(i=1;i<=rows;i++){for(j=0;jCell(i,j)->SetWString(hlist->GetItemText(i-1,j));}}i=i+2;intm,n;m=_latearray.GetSize();sheet->Cell(i,0)->SetWString("迟到");i++;for(n=0,j=0;nCell(i,j++)->SetWString(_latearray.GetAt(n).GetDate());sheet->Cell(i,j++)->SetWString(_latearray.GetAt(n).GetWeek());sheet->Cell(i,j++)->SetWString(_latearray.GetAt(n).GetName());sheet->Cell(i,j++)->SetWString(_latearray.GetAt(n).GetDepartment());}i=i+2;m=_leaveearlyarray.GetSize();sheet->Cell(i,0)->SetWString("早退");i++;for(n=0,j=0;nCell(i,j++)->SetWString(_leaveearlyarray.GetAt(n).GetDate());sheet->Cell(i,j++)->SetWString(_leaveearlyarray.GetAt(n).GetWeek());sheet->Cell(i,j++)->SetWString(_leaveearlyarray.GetAt(n).GetName());sheet->Cell(i,j++)->SetWString(_leaveearlyarray.GetAt(n).GetDepartment());}25 i=i+2;m=_absentarray.GetSize();sheet->Cell(i,0)->SetWString("缺勤");i++;for(n=0,j=0;nCell(i,j++)->SetWString(_absentarray.GetAt(n).GetDate());sheet->Cell(i,j++)->SetWString(_absentarray.GetAt(n).GetWeek());sheet->Cell(i,j++)->SetWString(_absentarray.GetAt(n).GetName());sheet->Cell(i,j++)->SetWString(_absentarray.GetAt(n).GetDepartment());}i=i+2;m=_employstatinfoarray.GetSize();sheet->Cell(i,0)->SetWString("单个职工统计");i++;j=0;sheet->Cell(i,j++)->SetWString("姓名");sheet->Cell(i,j++)->SetWString("专业");sheet->Cell(i,j++)->SetWString("早退次数");sheet->Cell(i,j++)->SetWString("迟到次数");sheet->Cell(i,j++)->SetWString("缺勤次数");sheet->Cell(i,j++)->SetWString("未刷卡次数");i++;for(n=0,j=0;nCell(i,j++)->SetWString(_employstatinfoarray.GetAt(n).m_name);sheet->Cell(i,j++)->SetWString(_employstatinfoarray.GetAt(n).m_department);sheet->Cell(i,j++)->Set(_employstatinfoarray.GetAt(n).m_leave.GetCount());sheet->Cell(i,j++)->Set(_employstatinfoarray.GetAt(n).m_late.GetCount());sheet->Cell(i,j++)->Set(_employstatinfoarray.GetAt(n).m_absent.GetCount());sheet->Cell(i,j++)->Set(_employstatinfoarray.GetAt(n).m_norecord.GetCount());}if(e.SaveAs("example.xls"))AfxMessageBox(TEXT("成功导出为Excel-example.xls"),MB_ICONINFORMATION,0);elseAfxMessageBox(TEXT("导出失败"),MB_ICONSTOP,0);}#undefATTENDANCE_LIST_DATETIME_IDX#undefATTENDANCE_LIST_WEEK_IDX#undefATTENDANCE_LIST_NAME_IDX#undefATTENDANCE_LIST_DEPARTMENT_IDX#undefATTENDANCE_LIST_SWORDTIME_IDX#undefATTENDANCE_LIST_EWORKTIME_IDX26 voidCAttendance::OnLvnItemchangedListAttendancd(NMHDR*pNMHDR,LRESULT*pResult){LPNMLISTVIEWpNMLV=reinterpret_cast(pNMHDR);//TODO:在此添加控件通知处理程序代码*pResult=0;}voidCAttendance::OnDtnDatetimechangeDatetimepickerDateend(NMHDR*pNMHDR,LRESULT*pResult){LPNMDATETIMECHANGEpDTChange=reinterpret_cast(pNMHDR);//TODO:在此添加控件通知处理程序代码*pResult=0;}4.4系统运行结果以下为该职工考勤系统运行的结果:图15用户运行界面图16学院运行界面27 图17专业运行界面图18职工运行界面图19考勤运行界面图20读卡运行界面图21导出的Excel表28 总结通过这次的RFID课程设计,让我了解了RFID在职工考勤管理系统中的应用,同时也认识到学习RFID技术能为我们以后的学习过程打下一定的基础。通过课程设计对RFID的工作原理、基本组成等知识进行了复习和巩固。从总体上了解了职工考勤管理系统的总体设计。同时也在一定的程度上对MicrosoftVisualStudio2005创建MFC界面和在MicrosoftOfficeAccess2003中存取数据有了进一步的了解。熟悉了RFID工作的基本原理、掌握了有关RFID应用系统开发的基本步骤。也熟悉和掌握RFID实验箱的基本操作和功能,并结合RFID实验箱进行了应用系统设计。通过设计使我了解了目前RFID在商业自动化领域上的应用情形,同时也实际接触到高频、低频并进行相关设备的应用系统开发。从而提高了我们利用RFID技术来进行应用方案的分析、设计、论证、实现及应用系统文档规范书写的能力和使用RFID技术解决实际问题的能力。在课设过程中,让我了解到做任何事想法很重要,遇到任何的问题首先要独立思考,自己主动动手查资料,在平时要不断地总结、积累知识点。还要虚心地向老师同学请教,这样可以提高知识点掌握的速率。团队合作精神在程序设计过程中同样的重要,有时候由于自身思维模式的限制难以找到自己在课设中的不足和错误,与同学们交流的过程中可以找到课设中的错误和缺陷,也可以得到新的启发。因此,无论是学习还是生活中,团队精神都是十分必要的。这次课设让我学到很多,受益匪浅。29 致谢感谢薛建彬老师的授课与耐心指导,感谢所有帮助我完成RFID课程设计论文的老师和同学们。在这次课程设计中老师给了我很大的帮助,帮我解答疑难问题,给我提供资料,给我提供查阅资料的信息,引导我该如何去思考问题,教会我解决问题的方法。同时又鼓励我自己学习,老师给我的不仅是知识,是帮助,更是学习的信心和智慧,在这里衷心感谢老师的耐心细心和一丝不苟的帮助。同时也感谢和我一起课设的同学,这是我们共同努力的结果,衷心的感谢大家对我的帮助和支持。通过这次的课程设计让我学会了遇到问题要学会思考,想法很重要,而更多的是要自己主动去学,所以这次的课设让我学到了很多,让我受益匪浅。30 参考文献[1]曹乃森,孙亚伟.无线射频卡的原理与应用[J].电子技术,2009(01):31-33.[2]蒋立新,康继纲.电子标签的应用与发展[J].国防技术基础,2004(3):35-37.[3]耿雪霏.RFID技术在物流管理中的应用[J].包装工程,2005,(2):118-119.[4]陈新河.无线射频识别(RFID)技术发展综述.信息技术化与标准化,2005,7.[5]陈大才.射频识别(RFID)技术[M].北京:电子工业出版社,2001.[7]杨文忠.射频卡读写器的工作原理与设计[J].电脑知识与技术,2006,2.[8]宁焕生,张彦.RFID与物联网.北京:电子工业出版社,2008.[9]郎为民.射频识别(RFID)技术原理与应用[M].北京:机械工业出版社,2006.[10]CantatoreE,GeunsTCT,GelinckGH,etal.A13.56-MHzRFIDsystembasedonorganictransponders[J].Solid-StateCircuits,IEEEJournalof,[11]ChowHKH,ChoyKL,LeeWB,etal.DesignofaRFIDcase-basedresourcemanagementsystemforwarehouseoperations[J].ExpertSystemswithApplications,2006,30(4):561-576.31