收藏 分销(赏)

基于高频的RFID学生考勤管理系统.doc

上传人:a199****6536 文档编号:3395813 上传时间:2024-07-04 格式:DOC 页数:48 大小:1.79MB
下载 相关 举报
基于高频的RFID学生考勤管理系统.doc_第1页
第1页 / 共48页
基于高频的RFID学生考勤管理系统.doc_第2页
第2页 / 共48页
基于高频的RFID学生考勤管理系统.doc_第3页
第3页 / 共48页
基于高频的RFID学生考勤管理系统.doc_第4页
第4页 / 共48页
基于高频的RFID学生考勤管理系统.doc_第5页
第5页 / 共48页
点击查看更多>>
资源描述

1、*实践教学实践教学*xx 理工大学理工大学 计算机与通信学院 2023 年秋季学期 RFID 应用技术应用技术课程设计课程设计 题 目:基于高频的基于高频的 RFID 学生考勤管理系统学生考勤管理系统 专业班级:计算机科学与技术(物联网工程方向)姓 名:xxx 学 号:xxxx 指导教师:xx 成 绩:目 录 中文摘要中文摘要.错误错误!未定义书签。未定义书签。正文正文.错误错误!未定义书签。未定义书签。一、前言一、前言.错误错误!未定义书签。未定义书签。二、案例描述二、案例描述.错误错误!未定义书签。未定义书签。2.1、系统核心功能、系统核心功能.错误错误!未定义书签。未定义书签。2.2、实

2、行环节、实行环节.错误错误!未定义书签。未定义书签。三、需求分析三、需求分析.错误错误!未定义书签。未定义书签。3.13.1、实验箱模块的选择、实验箱模块的选择.错误错误!未定义书签。未定义书签。3.23.2、HFHF 高频高频读写器原理读写器原理.错误错误!未定义书签。未定义书签。3.33.3、射频通信原理、射频通信原理.错误错误!未定义书签。未定义书签。四、整体描述和实现四、整体描述和实现.错误错误!未定义书签。未定义书签。4.14.1 实现实现 RFIDRFID 高频高频学生考勤管理系统的硬件设计学生考勤管理系统的硬件设计.错误错误!未定义书签。未定义书签。4.24.2 实现实现 RFI

3、DRFID 高频学生考勤管理系统的软件设计高频学生考勤管理系统的软件设计.错误错误!未定义书签。未定义书签。4.34.3 程序代码程序代码.错误错误!未定义书签。未定义书签。4.4 系统运营结果系统运营结果.错误错误!未定义书签。未定义书签。总总 结结.错误错误!未定义书签。未定义书签。致致 谢谢.错误错误!未定义书签。未定义书签。参考文献参考文献.错误错误!未定义书签。未定义书签。摘要摘要 无线射频辨认即RFID(Radio Frequency IDentification)技术,又称电子标签、无线射频辨认,是一种非接触的自动辨认技术,可通过无线电讯号辨认特定目的并读写相关数据,而无需辨认系

4、统与特定目的之间建立机械或光学接触。它基本由三部分组成:标签(Tag)、阅读器(Reader)和天线(Antenna)。RFID技术与条码、生物辨认等自动辨认技术,以及与互联网、通信、传感网络等信息技术融合,构筑一个无所不在的网络环境。现在很多学校也充足的运用信息网络技术和计算机互联网技术,发挥信息网络的各种技术手段和现有各种教育、科研、信息资源的优势,开发各种应用系统和管理系统,实现网络交互式管理,全面推动信息化管理。而基于RFID的学生考勤应用系统就是学校管理系统的一个组成部分,它将智能化的完毕考察学生出勤情况。它实时的自动采集数据信息、自动对所采集数据进行分析解决,然后以可视化界面回报给

5、学校管理人员。通过点名、磁卡和接触式IC卡等方式对学生的上课出勤情况进行考勤、记录管理,既耗时,并且又会互相干扰;而非接触式RFID员工考勤应用系统实现了运用无线射频辨认技术对员工考勤管理,既方便、快捷,又省资源。本文设计了一种基于RFID高频学生考勤管理系统,它是基于北京奥尔斯电子科技有限公司生产的物联网RFID综合实验系统V1.0。运用其中的HF模块,嵌入式网关,并连接PC的串口线到嵌入式网关的J28接口。即可以实现网关控制HF模块,也可以实现PC机对HF模块的控制。该系统采用13.56M射频辨认技术进行学生的门禁考勤管理,学生每人佩戴13.56M无源电子标签一张,作为考勤卡。用于上课、下

6、课时的考勤记录,只要标签处在读写器的有效辨认范围,则阅读器便可自动辨认到该标签信息,通过软件系统自动记录考勤信息,同时控制电子锁开门。关键词关键词:RFID,高频,学生考勤 一、前言一、前言 校园学生考勤是现今平常教学过程中必不可少的一个组成部分,以往,学生的考勤工作重要都由任课教师完全承担,在上课之前几分钟或者是上课后花费几分钟的时间进行全班的点名,然后在学期末用人工的方式观测、分析学生在教学活动中的出席情况。这样做不仅消耗了教学时间、也不具有灵活性。从记录考勤数据,到分析考勤记录都需要花费教师额外的时间与精力。基于RFID校园卡考勤管理系统正试图以一种更快捷方便的方式解决考勤过程中的各种问

7、题。RFID射频辨认是一种世界上较为领先的技术:第一,可以辨认单个的非常具体的物体,而不是像条形码那样只能辨认一类物体;第二,其采用无线电射频,可以透过外部材料读取数据,而条形码必须靠激光来读取信息;第三,可以同时对多个物体进行识读,而条形码只能一个一个地读。此外,储存的信息量也非常大。所以被广为使用。在很多的校园中基于RFID的学生考勤应用系统就是学校管理系统的一个组成部分,它将智能化的完毕考察学生出勤情况。它实时的自动采集数据信息、自动对所采集数据进行分析解决,然后以可视化界面回报给学校管理人员。为学校更好的管理学生提供了很大的方便。校园卡考勤查询管理系统基于RFID技术,这样可以方便集成

8、分布到校园中的每一个教室里。RFID应用已经全面普及,在校园中学生老师的考勤管理系统更是为学校的管理提供了很大的方便。校园卡基于RFID无线射频技术,通过射频技术便可获取校园卡中的各类信息,对于校园卡考勤的应用而言,仅仅需要得到校园卡的一个唯一标志号便可完毕考勤记录。它将支持与学生管理系统、考勤管理系统的信息传递,同时可以方便的与“一卡通”系统进行无缝连接。二、二、案例描述案例描述 该系统采用13.56M射频辨认技术进行学生的门禁考勤管理,学生每人佩戴13.56M无源电子标签一张,作为考勤卡。用于上课、下课时的考勤记录,只要标签处在读写器的有效辨认范围,则阅读器便可自动辨认到该标签信息,通过软

9、件系统自动记录考勤信息,同时控制电子锁开门。2.1、系统核心功能、系统核心功能 准确辨认门禁考勤卡,并对的记录考勤时间,同时应给出声音提醒和图像显示;1、可以由具有系统管理员权限的操作人员进行方便的录入学生信息,即:将学生姓名、学号、所属学院、专业、班级和考勤卡号,以及照片图像存入数据库;2、可以通过计算机方便的查询每一个人的考勤具体记录;3、可进行操作人员录入、权限限定、系统参数等功能设定;4、可进行节假日和日期的设定。5、可进行迟到、出差、请假录入等功能设定;6、可设立多种系统查询功能,并可以打印报表或导出EXCEL文献等文献格式。2.2、实行环节、实行环节 1、用户管理 用户分管理员和普

10、通用户两种,管理员可以执行增长删除修改等各种操作,普通用户只能查看。数据库中现有三种用户,管理员-用户名:admin,密码:admin,普通用户-用户名:a,密码:(空);用户名:user,密码:user。a.增长用户:点击“增长”按钮,在弹出的“增长用户”框中输入新用户的用户名,密码(可选),权限,备注(可选),然后点击拟定,即可在用户管理栏中看到新添加的用户信息。b.删除用户:在用户管理栏中选择待删除的用户,点击“删除”按钮。c.修改用户:在用户管理栏中,选择待修改的用户,点击“修改”按钮,即可修改相应的信息,修改完后点击“拟定”按钮。2、学院信息管理 与用户管理操作类似。1、专业信息管理

11、 与用户管理操作类似。2、学生信息管理 与用户管理操作类似。3、考勤查询 a.设立好待查询的起始、终止时间和上、下课时间。b.(可选)设立过滤条件:班级或姓名。c.点击“查询”按钮。d.若有需要,点击“导出为Excel”,可对当前查询结果在当前目录保存了Excel文献。4、读卡操作 a.设立好串标语和连接模式,点击“连接”按钮。b.点击开始读卡按钮,即开始读卡,当有卡在读写器射频范围内时,则会在下方的列表中显示相应的学生的姓名。c.点击“停止读卡”,即可停止读卡。图1 系统结构示意图 三三、需求分析需求分析 该系统基于OURSRFIDRP实验平台系统,重要目的是结合RFID技术和学生考勤管理理

12、论,将RFID技术应用于考勤管理系统中。运用其中的HF高频读写器模块,OMAP3530嵌入式网关。实现嵌入式网关对RFID模块的控制。并在Microsoft Office Access中记录学生的一些基本信息,运用Microsoft Visual Studio 2023创建MFC界面并与Microsoft Office Access 2023连接记录学生的一些情况,通过13.56M的考勤卡来实现学生的考勤管理。3 3.1.1、实验箱模块的选择实验箱模块的选择 RFID系统由电子标签、读写器(阅读器)、天线三部分组成。读写器用于读取或写入非接触Ic卡信息;天线则起至d在非接触IC卡和读写器间传递

13、射频信号作用。RFID系统还可通过读写器的RS232或RS485接口与外部计算机(上位机系统)连接,进行数据互换。其系统组成图如下:图2 RFID系统基本模型 5、电子标签 电子标签是指由IC芯片和无线通信天线组成的超微型的小标签,其内置的射频天线用于和读写器进行通信。系统工作时,读写器发出查询(能量)信号,电在标签(无源)收到查询(能量)信号后将其一部分整流为直流电源供电子标签内的电路工作,另一部分能量信号被电子标签内保存的数据信息调制后反射回读写器嘲电子标签是射频辨认系统真正的数据载体。6、读写器 读写器在RFID系统中扮演着重要的角色,读写器重要负责与电子标签的双向通信,同时接受来自于主

14、机系统的控制指令。读写器的频率决定了RFID系统工作的频段,其功率决定了射频辨认的有效距离。读写器根据使用的结构和技术不同可以是读或读写装置,是RFID系统信息控制和解决中心。读写器通常由射频接口、逻辑控制单元和天线三部分组成。3、RFID系统的基本工作原理 由读写器通过发射天线发送特定频率的射频信号,当电子标签进入发射天线有效工作区域时产生感应电流,从而获得能量被激活,使电子标签将自身编码信息通过内置射频天线发送出去;读写器的接受天线接受到从标签(射频卡)发送来的调制信号,经天线调节器传送到读写器信号解决模块,经解调和解码后将有效信息送至后台主机系统进行相关解决:主机系统根据逻辑运算判断该卡

15、的合法性,辨认该标签的身份,针对不同的设定做出相应的解决和控制,最终发出指令信号控制读写器完毕不同的读写操作。高频RFID系统重要采用的是电磁反向散射耦合即雷达原理模型,发射出去的电磁波,碰到目的后反射,同时携带回目的信息,依据的是电磁波的空间传播规律。其原理图如下:图3 电磁反向散射耦合原理 3 3.2.2、H HF F高频读读写器原理高频读读写器原理 图4 HF高频读写器模块 上电后,430先通过并口访问7970芯片,在没有读到卡时,程序运营在串口读写模式,并每隔0.5s向串口发送一个“D”,直到有写操作为止。当有卡读写时,针对相应的卡,程序进入不同的协议中,并且点亮相应的LED灯。并且上

16、电后,配置完内部寄存器,程序进入串口读写程序,可以进行人机交互。当读到不同协议的卡时,程序退出串口读写程序,进入相应的协议子程序中(目前支持14443A协议和15693协议)。读完卡后,退出相应的协议子程序,进入串口读写程序。3 3.3.3、射频通信原理、射频通信原理 非接触式射频卡系统是一个典型的射频辨认系统,它采用的是射频通信技术,射频通信细节有:数据的调制和解调、能量的传输和通信协议。3.3.1、数据的调制和解调 读写器和射频卡之间采用半双工通信方式,以一定频率的电磁波为媒介进行通信。由于基带数字信号不可以直接进行传输,那么在读写器和射频卡之间进行通信时,必须对该基带信号进行调制和解调解

17、决。由于射频卡系统是一个数字通信系统,因此一般采用数字调制的方法进行调制。数字调制是用载波信号参量的离散状态来表征所传输的数字信息,在解调时只需对载波信号的受调参量进行检测和判决数字调制信号因此称为键控信号由于载波信号是正弦波信号,其三个参量幅度、频率和相位都能携带信息,相应有调幅、调频和调相三种基本形式。在射频卡中常采用调幅形式。3.3.2、能量的传输 射频卡在工作时,自身没有电源,因此需要从读写器发送的电磁波中提取能量,在射频卡接受数据期间,它一方面从接受到的信号中解调出数据信息,另一方面从接受到的信号中提取能量。当射频卡返回数据时,射频卡的数据是通过负载调制的方式,使射频卡的天线上的信号

18、幅度发生变化,这样藕合到读写器的天线上的信号幅度也就发生相应的变化,从而使读写器得到射频卡返回的信息,同时射频卡将读写器上的电磁波信号藕合过来,提供射频卡工作所需的能量。3.3.3、通信协议 RFID系统至少由一个读写器和一个射频卡组成 为了使系统具有高性能价格比,通常在整个系统中加入相关通信协议,使一个读写器可以同时和多个射频卡通信。(1)传输协议 能量传送的方式一般是以固定频率的连续波或脉冲波(如跳频方式)为载体。依据系统应用目的的不同,其能量传送的方式不同。目前使用最多的是跳频方式的脉冲波如公路车辆辨认系统,而在铁路车辆辨认系统中常采用连续波工作频率是RFID系统的基本参数,频率的选取要

19、遵循某些规范的限制。选取较高的工作频率具有一定的优势。为了系统的可兼容性,信息的编码方式应符合某些规范。我国铁路车辆辨认系统采用了IS010374集装箱辨认的编码方式。信息的结构经常涉及帧头、固定信息、用户信息、校验信息等。信息的长度决定于编码方式和具体辨认的信息内容,传送速度则取决于信息的长度和码元速率。(2)信道编码技术 在读写器与射频卡进行射频通信的过程中,存在许多干扰数据通信的因素,其中最重要的两个因素是信道噪声和多卡操作(即有多张卡在读写器的天线感应范围内)引起的数据干扰因此,需要采用信道编码和访问控制技术,以保证读写器和射频卡之间数据传输的完整、可靠和快速。为了提高系统的抗嗓声能力

20、,就需要采用信道编码技术,对也许或已经出现的差错进行控制,信道编码是使不带规律性或规律性不强的原始数字信号变换为带上规律性或加强了规律性的数字信号,信道译码器则运用这些规律性来鉴别是否发生错误,进而纠正错误。根据码的用途可将其分为检错码和纠错码。常用的检错码涉及奇偶校验码和循环冗余校验码响 四、整体描述和实现四、整体描述和实现 本系统的设计重要分为两大部分,一部分是考勤器的软、硬件设计,一部分是上位机软件的设计。考勤器体积适中,便于携带到教室等场合,由它完毕对学生的考勤。重要功能是读取学生一卡通的信息,以及做相应显示、存储等解决。上位机软件重要功能是向考勤器下传学生姓名、学号以及接受并保存考勤

21、器上传的卡号和考勤记录。4.14.1实现实现RFIDRFID高频学生考勤管理系统的硬件设计高频学生考勤管理系统的硬件设计 学生考勤几乎是每个学校必须并且是经常做的学生工作之一,如何简朴高效的地考勤工作一直以来是很多学校都在努力解决,所以考虑如何实现简朴高效的考勤具有巨大的实际意义和价值,鉴于此,本文提出了一种可行的方案,方案的总体思绪:目前很多学校都在使用一卡通,本系统以学生的一卡通为基础,设计一种读卡式考勤器,考勤器存储有学生的身份信息,学生刷卡,通过学生刷卡,通过学生卡号来辨认学生的身份,并记录刷卡时间来实现对学生的考勤,方法简朴有效。考勤器体积适中,便于携带,使用方便。4.1.1 考勤器

22、设计 考勤器硬件设计重要构成:单片机、读卡模块、实时钟模块等 4.1.2 HF 模块 系统框图:图5 HF模块系统框图 (1)系统运营简要说明:上电后,430 先通过并口访问 7970 芯片,在没有读到卡时,程序运营在串口读写模式,并每隔 0.5s 向串口发送一个“D”,直到有写操作为止。:当有卡读写时,针对相应的卡,程序进入不同的协议中,并且点亮相应的 LED 灯。(2)API 调用说明 :上电后,配置完内部寄存器,程序进入串口读写程序,可以进行人机交互。:当读到不同协议的卡时,程序退出串口读写程序,进入相应的协议子程序中(目前支持 14443A 协议和 15693 协议)。读完卡后,退出相

23、应的协议子程序,进入串口读写程序。(3)ISO 15693 第三部分 通过读卡器获取指令流,读卡器采用 TI trf7970 读卡器芯片。4.24.2实现实现RFIDRFID高频学生考勤管理系统的软件设计高频学生考勤管理系统的软件设计 本次课程设计重要是设计基于高频的学生考勤系统,其软件部分运用上位机的Microsoft visual stdio 2023、Microsoft Ofice Access 2023等软件来编写学生考勤系统需要的代码及创建数据库。4.2.1 在 Microsoft Vsual Stdio 2023 的 MFC 应用程序模块设计 在PC机上通过Microsoft Vs

24、ual Stdio 2023的MFC应用程序模块设计登陆界面、读卡界面学生信息界面该软件将自动生成相关程序代码段相关界面如图所示 图 6 登陆界面 图 7 用户界面 图 8 学生界面 图 9 添加专业界面 图 10 专业界面 图 11 信息界面 图 12 班级界面 图 13 读卡界面 图 14 考勤界面 4.34.3 程序代码程序代码/Attendance.cpp:实现文献/#include stdafx.h#include HFExample.h#include Attendance.h#include BasicExcel.hpp using namespace YExcel;#defin

25、e ATTENDANCE_LIST_DATETIME_IDX 0#define ATTENDANCE_LIST_WEEK_IDX 1#define ATTENDANCE_LIST_NAME_IDX 2#define ATTENDANCE_LIST_DEPARTMENT_IDX 3#define ATTENDANCE_LIST_SWORDTIME_IDX 4#define ATTENDANCE_LIST_EWORKTIME_IDX 5 static TCHAR WeekDay6=TEXT(周日),TEXT(周一),TEXT(周二),TEXT(周三),TEXT(周四),TEXT(周五),TEXT(

26、周六);/CAttendance 对话框 IMPLEMENT_DYNAMIC(CAttendance,CPropertyPage)CAttendance:CAttendance():CPropertyPage(CAttendance:IDD)CAttendance:CAttendance()void CAttendance:DoDataExchange(CDataExchange*pDX)CPropertyPage:DoDataExchange(pDX);DDX_Control(pDX,IDC_LIST_ATTENDANCD,_lists);void CAttendance:GetReques

27、tList(CString date1,CString time1,CString date2,CString time2)CString dt1,dt2;dt1=date1+time1;dt2=date2+time2;theApp.getDB().GetAttendanceList(m_attendanceinfoarray,dt1,dt2);void CAttendance:GetRequestListByName(CString date1,CString time1,CString date2,CString time2,CString name)CString dt1,dt2;dt1

28、=date1+time1;dt2=date2+time2;theApp.getDB().GetAttendanceListByName(m_attendanceinfoarray,dt1,dt2,name);void CAttendance:GetRequestListByDepartment(CString date1,CString time1,CString date2,CString time2,CString department)CString dt1,dt2;dt1=date1+time1;dt2=date2+time2;theApp.getDB().GetAttendanceL

29、istByDepartment(m_attendanceinfoarray,dt1,dt2,department);void CAttendance:GetRequestListByNameAndDepartment(CString date1,CString time1,CString date2,CString time2,CString name,CString department)CString dt1,dt2;dt1=date1+time1;dt2=date2+time2;theApp.getDB().GetAttendanceListByNameAndDepartment(m_a

30、ttendanceinfoarray,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

31、(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 消息解决程序 BOO

32、L CAttendance:OnInitDialog()CPropertyPage:OnInitDialog();/TODO:在此添加额外的初始化 COleDateTime dt1(2023,1,1,8,30,0),dt3(2023,1,1,17,30,0);(CDateTimeCtrl*)GetDlgItem(IDC_DATETIMEPICKER_STARTWORK)-SetTime(dt1);(CDateTimeCtrl*)GetDlgItem(IDC_DATETIMEPICKER_ENDWORK)-SetTime(dt3);_lists.SetExtendedStyle(LVS_EX_G

33、RIDLINES|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(专业);_lists.InsertColumn(ATTENDANCE_LIST_SWORDTI

34、ME_IDX,TEXT(上课);_lists.InsertColumn(ATTENDANCE_LIST_EWORKTIME_IDX,TEXT(下课);CRect rect4;_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(ATTE

35、NDANCE_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(_d

36、epartmentinfoarray);int i;for(i=0;iAddString(aDepartmentInfo.GetName();/获取学生信息 theApp.getDB().GetAllEmployee(_employinfoarray);for(i=0;iAddString(aEmployInfo.GetName();return TRUE;/return TRUE unless you set the focus to a control /异常:OCX 属性页应返回 FALSE void CAttendance:ShowInListCtrl()int i;CString t

37、;COleDateTime dt0,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.SetDa

38、teTime(dt2.GetYear(),dt2.GetMonth(),dt2.GetDay(),23,59,59);/查询终止时间为点 COleDateTimeSpan dtsd(1,0,0,0),dtslast(0,3,0,0),dtsampm(0,12,0,0);_lists.DeleteAllItems();const int iMax=m_attendanceinfoarray.GetUpperBound();for(i=0;i=dt0)/&dt1dt0+dtsd)dt0+=dtsd;dt1=m_attendanceinfoarray.GetAt(i).GetDateTime2();

39、_lists.InsertItem(i,m_attendanceinfoarray.GetAt(i).GetDate();_lists.SetItemText(i,ATTENDANCE_LIST_NAME_IDX,m_attendanceinfoarray.GetAt(i).GetName();if(dt1dt0+dtsampm)/am dtt.SetDateTime(dt1.GetYear(),dt1.GetMonth(),dt1.GetDay(),8,30,0);/记 录时间在:30 前,显示“正常”,否则显示记录时间 if(dt1dtt)t=正常;else t=m_attendancei

40、nfoarray.GetAt(i).GetTime();_lists.SetItemText(i,ATTENDANCE_LIST_EWORKTIME_IDX,t);i+;if(iiMax)break;if(dt1dt2|iiMax)break;void CAttendance:ShowInListCtrl2()int i,j=0;CString t;COleDateTime dtdayb,dt1,dt2,dtdaye,dtt;/dt0:查询起始时间dt1:数据库中时间dt2:查询结束时间 dtt:临时变量 (CDateTimeCtrl*)GetDlgItem(IDC_DATETIMEPICKE

41、R_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);/查询终止时间为点 COleDateTimeSpan dtsd(1,0,0,0)

42、,dtslast(0,3,0,0),dtsampm(0,12,0,0),dtspan=dt2-dtdayb;int days=dtspan.GetTotalDays()+1;/查询的总天数 j=0;for(i=0;idays&jm_attendanceinfoarray.GetSize();i+)ReSetQueryResultTime();SetQueryResultDate(dtdayb);dtdaye=dtdayb+dtsd;dt1=m_attendanceinfoarray.GetAt(j).GetDateTime2();while(jdtdayb&dt1dtdaye)Addrecor

43、d(j);j+;if(jm_attendanceinfoarray.GetSize()dt1=m_attendanceinfoarray.GetAt(j).GetDateTime2();dtdayb+=dtsd;ShowQueryResult2();ReSetQueryResultTime();for(;idays;i+)SetQueryResultDate(dtdayb);dtdayb+=dtsd;ShowQueryResult2();void CAttendance:ShowQueryResult2()int i,j;CString s1,s2,s3;CDateAndTime dat;j=

44、_lists.GetItemCount();for(i=0;i_queryresultarray.GetSize();i+)dat.m_date=_queryresultarray.GetAt(i).GetDate();s1=_queryresultarray.GetAt(i).GetSTime();s2=_queryresultarray.GetAt(i).GetETime();s3=_queryresultarray.GetAt(i).GetWeek();_lists.InsertItem(j,_queryresultarray.GetAt(i).GetDate();_lists.SetI

45、temText(j,ATTENDANCE_LIST_WEEK_IDX,s3);_lists.SetItemText(j,ATTENDANCE_LIST_NAME_IDX,_queryresultarray.GetAt(i).GetName();_lists.SetItemText(j,ATTENDANCE_LIST_DEPARTMENT_IDX,_queryresultarray.GetAt(i).GetDepartment();_lists.SetItemText(j,ATTENDANCE_LIST_SWORDTIME_IDX,s1);_lists.SetItemText(j,ATTENDA

46、NCE_LIST_EWORKTIME_IDX,s2);j+;/补课名单 if(s3=周六|s3=周日)_workextraarray.Add(_queryresultarray.GetAt(i);/正常上课时间 /没有时间记录即为缺勤 else if(s1=&s2=)_absentarray.Add(_queryresultarray.GetAt(i);/缺勤总表 _employstatinfoarray.GetAt(i).m_absent.Add(dat);/单个学生缺勤登记表 dat.m_time=上课;_employstatinfoarray.GetAt(i).m_norecord.Ad

47、d(dat);/未刷卡登记表 dat.m_time=下课;_employstatinfoarray.GetAt(i).m_norecord.Add(dat);/未刷卡登记表 else if(s1=)dat.m_time=上课;_employstatinfoarray.GetAt(i).m_norecord.Add(dat);/未刷卡登记表 if(s2!=正常)if(s2=)dat.m_time=下课;_employstatinfoarray.GetAt(i).m_norecord.Add(dat);/未刷卡登记表 else _leaveearlyarray.Add(_queryresultar

48、ray.GetAt(i);_employstatinfoarray.GetAt(i).m_leave.Add(dat);void CAttendance:SetQueryResultDate(COleDateTime _d)int i;for(i=0;i_queryresultarray.GetSize();i+)_queryresultarray.GetAt(i).SetDate(_d.Format(%Y-%m-%d);_queryresultarray.GetAt(i).SetWeek(WeekDay_d.GetDayOfWeek()-1);void CAttendance:ReSetQu

49、eryResultTime()int i;for(i=0;i_queryresultarray.GetSize();i+)_queryresultarray.GetAt(i).SetSTime();_queryresultarray.GetAt(i).SetETime();void CAttendance:Addrecord(const int _i)int i,j,k;CString t1,t2,t3;COleDateTime dt1,dt2;CDateAndTime dat;COleDateTimeSpan dts2(0,12,0,0),dts0;t1=m_attendanceinfoar

50、ray.GetAt(_i).GetName();t2=m_attendanceinfoarray.GetAt(_i).GetDepartment();dt1=m_attendanceinfoarray.GetAt(_i).GetDateTime2();dt2.SetDateTime(dt1.GetYear(),dt1.GetMonth(),dt1.GetDay(),0,0,0);dts0=dt1-dt2;for(i=0;i_queryresultarray.GetSize();i+)if(_queryresultarray.GetAt(i).GetName()=t1)&(_queryresul

展开阅读全文
部分上传会员的收益排行 01、路***(¥15400+),02、曲****(¥15300+),
03、wei****016(¥13200+),04、大***流(¥12600+),
05、Fis****915(¥4200+),06、h****i(¥4100+),
07、Q**(¥3400+),08、自******点(¥2400+),
09、h*****x(¥1400+),10、c****e(¥1100+),
11、be*****ha(¥800+),12、13********8(¥800+)。
相似文档                                   自信AI助手自信AI助手
搜索标签

当前位置:首页 > 学术论文 > 其他

移动网页_全站_页脚广告1

关于我们      便捷服务       自信AI       AI导航        获赠5币

©2010-2024 宁波自信网络信息技术有限公司  版权所有

客服电话:4008-655-100  投诉/维权电话:4009-655-100

gongan.png浙公网安备33021202000488号   

icp.png浙ICP备2021020529号-1  |  浙B2-20240490  

关注我们 :gzh.png    weibo.png    LOFTER.png 

客服