未来智讯 > 物联网论文 > 基于物联网核心技能的智能考勤系统

基于物联网核心技能的智能考勤系统

发布时间:2019-01-02 01:06:07 文章来源:未来智讯    
    基于物联网核心技能的智能考勤系统作者: 杨诺 胡必玲 黄志炜   摘 要:为解决高校日常教学管理中传统教师点名方式的低效问题,选取无线射频技能与互联网技能设计实现了基于普通IC卡的课堂智能考勤系统。该系统以Windows 7为开发平台,选取B/S和C/S架构,以MyEclipse及Keil uVision4为主要开发工具。该系统可实现学生的自主签到、数据的智能感知和存储、考勤数据的分权管理、考勤表格的下载和打印。经测试,该系统运行稳定,便捷智能。
  关键词:RFID;Web;智能考勤;串口通讯
  中图分类号:TP391 文献标识码:A 文章编号:2095-1302(2016)10-0-05
  0 引 言
  在高校教学管理事务中,学生日常考勤管理是其主要内容,是保证高校教育教学秩序正常运行的重要手段。高校学生考勤制度是高校教学管理和学生管理的重要组成局部,是教学质量保证体系中的重要环节,学生日常考勤统计数据是日后对学生进行奖惩的重要依据,涉及到学生的切身利益,关系到教学秩序的稳定与学生的学习状态、学习结果及人才培养的质量,同时也影响着校风、学风。
  我校在对学生日常上课考勤的管理方面依旧选取传统的老师点名或学生签到的方式,这种考勤方式既浪费老师和学生宝贵的课堂时间,也使考勤数据的处理效率低下,更不利于考勤数据的保存和校领导对记录文件的审核和查找。
  物联网技能的发展使得信息的获取、传递和分析变得更加智能化。物联网技能可以为智慧校园的建设提供开放、互动、协作的智能化综合信息服务平台,使得师生可以全面地感知教学资源,有效采集信息,获得智慧化的学习、教学、管理和生活服务。
  本文在对学生日常上课考勤的必要性充分认同的基础上,本着节约老师和学生宝贵的课堂时间,提升考勤数据的处理效率和存储有效性的目的,选取基于51单片机STC11F60XE――高度集成的非接触式[1]读写芯片联合数据库处理技能开发适用于校园管理人员、教师和学生的智慧校园学生考勤管理平台。
  1 系统方案设计
  管理员提前设定系统执行签到的时间,当系统运行到该时间时,起初发送至备指令(包含此次课程的名称)给单片机,单片机接收到信息后,显示出课程名称并起初筹备读卡,学生用指定的卡刷卡后,读卡器起初验证该卡的密码,验证通事后,卡片信息通过串口传输至服务器端,服务器端的串口抑制程序接收到信息后执行一系列的校验等操作,将适合签到的卡号存储至数据库,否则反馈相应的错误信息给单片机,同时本系统Web服务器通过外网映射器接入了互联网,领导或教师即使在异地也可打开Web浏览器查看学生的签到情况。系统事务流程图如图1所示。
  系统硬件使用基于51系列单片机STC11F60XE的Mifare RC522作为读写芯片,硬件原理图如图2所示。这是一种高度集成的非接触式(13.56 MHz)读写芯片,支持ISO1443A/MIFARE[1],能够读写各种TypeA标准的IC卡。IC卡划分为开卡模式、密码模式和签到模式。系统选取的卡是普通IC白卡,进行注册后硬件才会识别并执行接下来的程序。为了让系统平安性更高,设计了密码模式,通过此模式能够改变卡上的密码,若密码不准确,则在签到模式下刷卡后会发出警报。进入签到模式,单片机起初接受PC端发出的抑制信号,根据接收的抑制信号执行相应的签到程序。
  系统对学生信息的录入选取excel表格自动解析导入数据库的方式,在网页脚本上对上传的文件格式、大小以及异步查询是否已经导入过该班级学生信息等层层校验,并对表格进行初步解析,检查是否适合规定的格式,全部通事后才会导入数据库。教师信息的录入选取添加用户名和密码以及权限的方式。教师能够通过浏览器查询所教班级的签到情况,同时能够一键将签到情况以excel表格形式导出。
  2 通讯协议设计
  为了在RFID阅读器的显示模块中提示当前签到课程、当前刷卡学生的姓名以及错误反馈信息,若没有找到该学生的信息或未到签到时间等,需要PC机对卡号信息处理后进行反馈。设计通讯协议标准[2],PC机接收到信息后,反馈信息格式为(空格字母中文字样)如(y落花雨)代表姓名为落花雨的同学签到成功。第一个字符必须是空格,发送到阅读器端后,会将上次的内容进行清除;第二个字符是字母,具体含义如下所示:
  Y:代表签到成功;
  e:代表未找到该学生的信息;
  n:代表未到该学生的签到时间;
  i:代表初始化变量;
  c:代表反复签到;
  l:代表批改课目;
  a:代表录入信息异常错误。
  后面的中文则依据字母的不同进行不同的显示,若字母为y,则中文代表学生姓名,若是l,中文表示所签到的课程名。其余情况不用跟随中文,C51底层自己处理,根据检测到的字母做出相应的显示。
  3 单片机端软件设计
  3.1 串口通讯[3]
  单片机在发送数据至串口时直接调用send_byte(),并且每次在发送数据信息时会在前面加上*号,以使服务器端的单片机抑制程序接收数据时方便区分每次的数据信息。
  voidsend_byte(INT8USendData)
  {
  ES=0;
  TI=0;
  SBUF=SendData;
  while(TI==0);
  TI=0;
  ES=1;
  }
  而单片机选取停止的方式接收串口发送过来的数据,每次服务器抑制端发送数据至单片机串口时,串口都会以先前约定好的协议方式接收,如抑制端发送出让单片机筹备起初签到并显示课名的信息即(空格l数据库o),停止函数接受串口数据后起初处理,获取空格后将原先用来接收数据的receive数组清空,再把后面的字母赋值给uflag变量,然后将后来的中文文字放置到receive字符数组中,在放置过程中判断是否为字母o,若是则中断放置,同时将处理结束的标志变量overflag置0,为显示局部做筹备。   3.2 信息处理
  单片机开机后会循环调用ctrl_process(),即始终刷新屏幕。循环显示函数会根据uflag的字母来显示相应的信息,为避免在显示过程中出现停止函数还没有将数据添加到receive字符数组中,显示函数就起初取数据,导致出现丢失数据或者乱码的现象出现。在判断uflag之前先判断overflag的值是否为o,若是则继续向下执行,否则依旧显示主界面。若overflag的值为o,再判定Uflag的值。若为字母y,则通过循环调用ctrl_process()来显示签到成功的信息;若为字母q,则通过循环调用ctrl_process()来提示该学生的请假信息;若Uflag的值为字母n,则通过循环调用ctrl_process()来提示未到签到时间;若为字母a,则通过循环调用ctrl_process()来提示录入信息错误;若Uflag的值为字母c,则通过循环调用ctrl_process()来提示反复签到。待机状态图如图3所示,筹备签到图如图4所示,提示签到成功图如图5所示,提示请假图如图6所示,提示未到签到时间图如图7所示,提示录入信息错误图如图8所示,提示反复签到图如图9所示。
  4 系统Web端设计
  4.1 登录与HOME界面
  系统的登录界面、主界面使用了HTML5技能[4],不但能削减对密码与用户名的校验要求,还能够进行炫酷的展示内容和导航菜单。在使用JSP编写系统的界面过程中,为了避免纯粹的Java代码嵌入到页面中大大影响后期的扩展以及代码的可读性,因此将这些Java代码改用EL表达式与JSTL标签[5]穿插在网页中,规范了Web界面的编写。Web登录界面图如图10所示,Web主界面如图11所示。
  4.2 学生名单自动解析
  4.2.1 Apachepoi技能[6]解析excel表格
  为了提高录入学生信息的效率以及提升用户体验度,使用poi的jar包解析excel表格的数据。由于学生的基本信息相当重要,因此在解析时使用了严格的校验方式,不但能够在网页长进行严格的抑制,如网页脚本对上传的文件格式、大小以及Ajax异步查询是否已经导入过该班级学生信息等的层层校验,还能够对表格进行初步解析,分析是否适合约定标准,全部通事后才起初正式提取数据。
  4.2.2 JDBC缓冲池批处理数据[7]
  通过上一层的严格校验后,系统会将excel表格等相关数据全部提取到内存中,然后调用批处理模块将数据批量保存至数据库中,大大提高了导入的效率。导入学生信息界面如图12所示。
  4.3 查询签到结果
  4.3.1 jQuery的Ajax异步通讯技能
  传统获取服务器端数据都会选取重定向或者转发技能,但是这种做法的最大弊端在于浏览器在发送请求时,若服务器不能准时给与响应就会造成浏览器短暂性白屏(假死),显然这会让用户体验大打折扣。本系统使用jQuery的Ajax[8]异步通讯,在浏览器提交请求时,jQuery一线程会调取过渡动画,另一线程提交请求。避免了浏览器端假死的现象,同时用户能够进行其他操作。查询详细签到信息图如图13所示。
  4.3.2 Apachepoi技能导出签到信息
  教师或者管理员进入查询界面后不但能够直观地看到某个班级某次课的签到情况,同时还可以选择将该课程的签到情况导出。使用Apachepoi技能,参考其说明文档,成功实现数据的自由导出功能。导出签到信息图如图14所示。签到信息记录图如图15所示。
  5 平安性设计
  5.1 对IC卡进行加密
  由于读卡器会识别一切标准的IC卡,为避免单片机对同等规格的卡进行读取,削减对系统事务效率的影响,系统设计中实现了对白卡的加密操作。在初始化阶段向卡中写入一条秘钥,刷卡后验证密码,错误的直接出现警告,通事后才会传输至服务器端。这种方法在一定程度上提高了系统的平安性及执行效率。
  若定义密码为8,则检测到密码为8时,调用send_byte()函数将采集到的卡号经串口发送至服务器端,否则提示信息错误。程序如下:
  if(CardNUm==8)
  {
  send_byte('*');
  while(sendLen>无效的卡号   }
  else
  {
  chain.doFilter(request,response);
  }
  5.3 防SQL注入
  SQL注入[10]抨击是黑客对数据库进行抨击的常用手段之一。针对这种严重的平安问题不能再使用传统的SQL语句拼接法,应使用prepareStatement()方法严格抑制输入的字长,并且高频率使用这种方法时会进行批处理,增加执行效率。程序如下:
  publicvoidmulUpdate(Stringsql,ArrayList arrayStu)
  {
  if(this.getconnection())
  {
  try{
  pstm=connection.prepareStatement(sql);
  for(inti=0,len=arrayStu.size();i
转载请注明来源。原文地址:https://www.7428.cn/page/2019/0102/73796/
 与本篇相关的热门内容: