基于PHP课堂签到系统设计与实现
2021-06-28陈伟康李广用
陈伟康 李广用
摘 要:在现代课堂教学中,学生的考勤是一个烦琐和重要的教学环节,采用传统的点名方式需要占用宝贵课堂时间,利用PHP5课堂签到系统,使用开源的平台搭建系统运行环境,很好地完成点名签到功能,无须大量的资金、第三方资源和手机等等辅助工具,方便了任课教师的考勤工作,实现了学生签到数据的信息化管理,为课堂教学提供了很好的帮助。
关键词:二维码;签到;幸运数字;数据库
中图分类号:TP311.5 文献标识码:A 文章编号:2096-4706(2021)01-0013-05
Design and Implementation of Class Attendance System Based on PHP
CHEN Weikang,LI Guangyong
(Shanwei Institute of Technology,Shanwei 516600,China)
Abstract:In the modern classroom teaching,the students attendance is a tedious and important teaching link,uses the traditional roll call way to need to occupy the precious class time,using PHP5 classroom check-in system,the open source platform is used to build the system running environment,and the roll call check-in function is well completed,and does not need a lot of funds and third-party resources and mobile phones and other auxiliary tools,which is convenient for teachers to check their attendance,the information management of student check-in data is realized,which provides a good help for classroom teaching.
Keywords:QR code;sign in;lucky number;database
0 引 言
由于现代科技的飞速发展,在“互联网+”时代,当前很多高等院校及职业类院校的教学管理中实现信息化应用,越来越多的课程在多媒体教室完成教学任务,尤其是高等学校的工科类课程,大多数课程是在多媒体教室完成。本人多年从事高职高专的计算机相关课程教学工作,考勤是一个很重要的一项教学考核环节,也是一个很重要部分和难点,考勤在课程成绩评定时的占有一定的比例,科任教师的课程和学生数量都比较多,传统的考勤是由科任教师自己完成,需要浪费的宝贵课堂时间,代替点名或是遗漏点名现象普遍存在,还有可能出现一些人为的错误,造成考勤的失误,会影响到任课教师的情绪,从而影响到整个课堂的教学效果。如果让学生的考勤班长完成考勤,也存在因为同学之间的关系,碍于同学情面,包庇同学的情况,出现漏记或没记的现象。如果任课教师为了方便,随意对学生出勤情况做出评价,对认真上课的学生来说不公平,导致学校无法正确掌握学生的出勤,课程考勤也是课程成绩的重要组成部分,直接影响本门课程的考核结果。
很多学校使用手机为主的考勤系统,需要教师和学生都要携带手机,这样会让学生在上课时不能专心听讲,学生会不自觉的查看和玩弄手机,现在很多学校都提倡上课时,学生不能携带手机。还有一个很重要的问题是,由于学校的人数众多,造成手机的信号不好,可能在签到时出现延时和缓冲错误,浪费流量,还有可能使用别人的手机进行签到,出现代替签到现象。使用二维码的考勤系统,可以实现考勤功能,但是二维码会出现学生帮助同学扫描的现象,使用二维码还涉及版权问题,二维码的发明人是来自日本Denso Wave公司的腾弘原,需要支付一定的版权费用给日本的公司。
市面上有使用腾讯公司开发的微信小程序考勤签到系统、二维码考勤系统和智能刷卡等等,这需要借助其他公司的软硬件来实现,会花费大量的金钱,需要稳定的网络,还有设备的后期维护问题。还有的考勤系统应用性好,适用面广,系统内容庞大,不方便购买试用。
针对上面的问题,为了减少费用,方便使用的原则,设计一个基于PHP的课堂签到系统,方便课堂考勤,设计并实现一个方便经济实用的快捷课堂签到和管理功能。
1 系統设计
1.1 设计思路
使用PHP5+MYSQL+DREAMWEAVER+APACHE编写的B/S模式的签到系统,客户端学生使用Windows系统自带的浏览器登录教师机中的服务器网站,输入学生的学号与姓名进入,让学生自己登录教师机中的服务器数据库,完成签到,存储学生签到的学号,班级,上课的学期,上课的周数,星期数,节数,时间,任课教师,幸运数字和学生机的IP地址等信息。主要是使用幸运数字来控制学生是否有来上课,幸运数字是科任教师自己随机产生,在讲完课程时告诉学生,这样防止学生签到完成就逃课。学生进入签到系统中只有8秒钟时间完成输入幸运数字,超时系统自动退出,幸运数字的输入时间为8秒钟,是根据上课经验来给出的,不一定是8秒,可以根据任课教师的具体情况来设定,这个时间不要太长,太长会给学生替签的时间,建议输入幸运数字时间为5秒至10秒之间最好,一般的学生不可能在5秒至10秒之间完成替签。为了很好地防止学生替同学签到,还要每一节课堂,最好只能签到一次,只有在1分钟左右的误差,签到数据是正常现象,如果超出这个时间范围是有问题的签到数据,这个时间可以通过后台管理的电子表格处理中进行操作完成对比。筛选出问题学生,对其进行询问,如果是存在作弊行为,进行特殊标记,再进一步处理考勤数据。做到公平公正的进行考勤,能够很好地控制学生上课考勤,完成重要的课堂教学中的考勤环节,为课程考核提供一个重要的依据。
1.2 系统后台设计
使用MySQL5.5创建一个签到的数据库文件(dianming.sql),在签到的数据库文件下创建五个表,分别为用户管理表(admin),如表1所示,用于管理员登录查询,使用权限等级限制,任课教师信息表(teacher),如表2所示,存放任课教师的基本信息,签到学生信息表(student),如表3所示,存放要签到学生的信息内容,签到表(dm),如表4所示,用于存放学生签到结果的信息内容。使用记录表(jilu),存储使用信息,如表5所示。
1.3 程序的功能结构
使用PHP加MYSQL数据库完成签到功能,实现数据管理,为教学辅助提供帮助。签到系统主要设计分为两大部分,前台是实现签到功能,后台实现的是签到数据管理。
(1)系统的功能结构图如图1所示。
(2)后台管理模块是管理员或教师实现签到数据的管理,导入需要签到人员信息,设置签到的幸运数,签到数据的修改和编辑,导出签到数据为常见的电子表格。后台管理结构图如图2所示。
(3)学生完成签到,需要进入一个复杂的登录,才能进入签到界面,为了防止学生出现替签现象,让学生没有多余的时间给其他同学签名,如果出现了签到时间差异比较大的情况,就可以判断为替签,可以由科任老师自己进行比对。签到系统的流程图如图3所示。
2 程序的实现
签到系统的主页面,使用DREAMWEAVER+CSS完成前台设计,主要功能是让学生可以选择第几周,几星期几,第几节的上课信息,设计主要是静态网页格式,不采用复杂的界面设计,做到大方美观简洁,进入了之后输入学生自己的学号和姓名,进行查询服务器中的学生信息表是否存在的上课学生名单,如果查询错误,弹出一个错误提示的对话框,如果查询正确,可以跳转到要签到系统的主要页面,就是输入任课教师给出的本节课的幸运数字,输入完成点击完成按钮提交,就可以完成本节课签到任务。签到系统的运行效果图,如图4所示。
整个签到过程不超过1分钟,比传统的人工点名过程要快很多,也方便很多,实现了本节课的签到数据的存储,可以完成更多信息的存储,例如签到时间,学生的签到周数,节数和星期数等等。方便任课教师的学期末考勤成绩的处理。幸运数字的输入时间是8秒以内,如果学生没有在8秒以内输入幸运数字,系统也会自动提交,保存的幸运数字内容显示为超时,如果学生由于意外没能在8秒内完成签到,可以在课间跟任课教师说明,任课教师在到系统管理的后台修改,学生输入幸运数字的界面运行效果图,如图5所示。
保存的学生签到信息有学号、姓名、幸运数字和使用的IP地址等等,这些信息是存储在MySQL数据库中的,由于MySQL数据库中的数据容易被打开,为了数据的安全性,所以程序对学生的签到信息进行了加密处理,假如MySQL数据库的数据被打开,也不会显示出学生的签到信息,只会显示出一些加密后的字符,保障了学生签到信息的安全,一般的人员不能够查看到签到信息。
为了防止学生的恶意网络攻击,让学生不能超时登录,一般建议在学生签完时关掉服务器,就是关闭教师机中的服务器,让学生不能在短时间内获得破解服务器机会,修改后台的考勤数据,也是保护签到数据的安全。系统还能登记客户端的登录IP地址,来查看学生机的登录情况。防止学生在同一台的计算机登录考试,很好地做到防止重复签到现象。
签到系统的后台设计,是要输入后台进入的地址,输入管理员的账号和密码,进入到后台管理界面,可以查看已经签到的学生的基本信息,还可以设置本次签到的幸运数字,這个幸运数字是来防止学生伪造教师给的幸运数字,控制学生不能够自己任意伪造输入不正确的幸运数字,只能输入任课教师本节课给出的幸运数字进行签到,保障签到的数据的公平公正性。为了方便任课教师处理签到数据,使用到了PHP的对软件Excel 2010文件操作,还可导出所有的签到信息为电子表格文件,导出电子表格文件关键代码为:
include_once('/PHPExcel/Writer/IWriter.php') ;//插入需要操作电子表格的类文件一次
include_once('/PHPExcel/Writer/Excel5.php') ; //插入需要操作电子表格的类文件一次
include_once('/PHPExcel.php') ; //插入需要操作电子表格的类文件一次
include_once('/PHPExcel/IOFactory.php') ; //插入需要操作电子表格的类文件一次
$obj_phpexcel1 = new PHPExcel();//创建一个新的类
$obj_phpexcel1->getActiveSheet()->setCellValue('a1','编号'); //在电子表格中的sheet表中的单元格a1中输入编号
$obj_phpexcel1->getActiveSheet()->setCellValue('b1','学号'); //在电子表格中的sheet表中的单元格表b1中输入学号
$obj_phpexcel1->getActiveSheet()->setCellValue('c1','姓名'); //在电子表格中的sheet表中的单元格c1中输入姓名
$obj_phpexcel1->getActiveSheet()->setCellValue('d1','班级'); //在电子表格中的sheet表中的单元格d1中输入班级
$obj_phpexcel1->getActiveSheet()->setCellValue('e1','周数'); //在电子表格中的sheet表中的单元格e1中输入班级
$obj_phpexcel1->getActiveSheet()->setCellValue('f1','星期'); //在电子表格中的sheet表中的单元格f1中输入班级
$obj_phpexcel1->getActiveSheet()->setCellValue('g1','节数'); //在电子表格中的sheet表中的单元格g1中输入节数
$obj_phpexcel1->getActiveSheet()->setCellValue('h1','IP'); //在电子表格中的sheet表中的单元格h1中输入IP
$obj_phpexcel1->getActiveSheet()->setCellValue('i1','幸运数'); //在电子表格中的sheet表中的单元格i1中输入幸运数
$obj_phpexcel1->getActiveSheet()->setCellValue('j1','时间'); //在电子表格中的sheet表中的单元格j1中输入时间
$obj_phpexcel1->getActiveSheet()->setCellValue('k1','课程'); //在电子表格中的sheet表中的单元格k1中输入课程
$obj_phpexcel1->getActiveSheet()->setCellValue('l1','老师'); //在电子表格中的sheet表中的单元格l1中输入老师
$obj_phpexcel1->getActiveSheet()->setCellValue('m1','老师的数'); //在电子表格中的sheet表中的单元格m1中输入老师的数
$obj_phpexcel1->getActiveSheet()->setCellValue('n1','学期'); //在电子表格中的sheet表中的单元格n1中输入学期
include_once("conn/conn.php");/插入数据库连接文件一次
$sql1="select*from dm";//使用sql语句的查询dm表所有记录
$result1=mysql_query($sql1,$connID);//进行查询
$i=1;//设置初始i变量为1
while($myrow=mysql_fetch_array($result1)){//使用while循环读取dm表中记录
$i++; //使用i变量自我相加
$obj_phpexcel1->getActiveSheet()->setCellValue('a'.$i,$myrow['id']); //读取dm表中id字段内容放入a列中,从第二行开始放入。
$obj_phpexcel1->getActiveSheet()->setCellValue('b'.$i,iconv('gbk','utf-8',base64_decode($myrow['xh']))); //读取dm表中学号字段内容放入b列中,从第二行开始放入,还要进行解密读取的字符,再进行编码转换。
$obj_phpexcel1->getActiveSheet()->setCellValue('c'.$i,iconv('gbk','utf-8',base64_decode($myrow['xm']))); //读取dm表中姓名字段内容放入c列中,从第二行开始放入,还要进行解密读取的字符,再进行编码转换。
$obj_phpexcel1->getActiveSheet()->setCellValue('d'.$i,iconv('gbk','utf-8',base64_decode($myrow['bj']))); //读取dm表中班级字段内容放入d列中,从第二行开始放入,还要进行解密读取的字符,再进行编码转换。
$obj_phpexcel1->getActiveSheet()->setCellValue('e'.$i,iconv('gbk','utf-8',base64_decode($myrow['zhoushu']))); //读取dm表中周数字段内容放入e列中,从第二行开始放入,还要进行解密读取的字符,再进行编码转换。
$obj_phpexcel1->getActiveSheet()->setCellValue('f'.$i,iconv('gbk','utf-8',base64_decode($myrow['xingqi']))); //读取dm表中学期字段内容放入f列中,从第二行开始放入,还要进行解密读取的字符,再进行编码转换。
$obj_phpexcel1->getActiveSheet()->setCellValue('g'.$i,iconv('gbk','utf-8',base64_decode($myrow['jieshu']))); //读取dm表中节数字段内容放入g列中,从第二行开始放入,还要进行解密读取的字符,再进行编码转换。
$obj_phpexcel1->getActiveSheet()->setCellValue('h'.$i,iconv('gbk','utf-8',base64_decode($myrow['ip']))); //讀取dm表中IP字段内容放入h列中,从第二行开始放入,还要进行解密读取的字符,再进行编码转换。
$obj_phpexcel1->getActiveSheet()->setCellValue('i'.$i,iconv('gbk','utf-8',base64_decode($myrow['xingyunshu']))); //读取dm表中幸运数字字段内容放入i列中,从第二行开始放入,还要进行解密读取的字符,再进行编码转换。
$obj_phpexcel1->getActiveSheet()->setCellValue('j'.$i,iconv('gbk','utf-8',base64_decode($myrow['shijian']))); //读取dm表中时间字段内容放入j列中,从第二行开始放入,还要进行解密读取的字符,再进行编码转换。
$obj_phpexcel1->getActiveSheet()->setCellValue('k'.$i,iconv('gbk','utf-8',$myrow['kechengming'])); //读取dm表中课程名称字段内容放入k列中,从第二行开始放入,还要进行解密读取的字符,再进行编码转换。
$obj_phpexcel1->getActiveSheet()->setCellValue('l'.$i,iconv('gbk','utf-8',$myrow['dianmingteacher'])); //读取dm表中点名老师字段内容放入l列中,从第二行开始放入,还要进行解密读取的字符,再进行编码转换。
$obj_phpexcel1->getActiveSheet()->setCellValue('m'.$i,iconv('gbk','utf-8',base64_decode($myrow['teacherxys']))); //读取dm表中老师给的幸运数字段内容放入m列中,从第二行开始放入,还要进行解密读取的字符,再进行编码转换。
$obj_phpexcel1->getActiveSheet()->setCellValue('n'.$i,iconv('gbk','utf-8',base64_decode($myrow['xueqi']))); //读取dm表中学期字段内容放入n列中,从第二行开始放入,还要进行解密读取的字符,再进行编码转换。
}
$obj_Writer=PHPExcel_IOFactory::createWriter($obj_phpexcel1,'Excel5');//使用电子表格的excel15
$data=date("Ymd");//取得当前的时间
$filename = $data."qd.xls";//设置以当前日期为名称的文件名保存
ob_end_clean();
header("Content-Type: application/force-download");
header("Content-Type: application/octet-stream");
header("Content-Type: application/download");
header('Content-Disposition:inline;filename="'.$filename.'"');
header("Content-Transfer-Encoding: binary");
header("Last-Modified: " . gmdate("D, d M Y H:i:s") . " GMT");
header("Cache-Control: must-revalidate, post-check=0, pre-check=0");
header("Pragma: no-cache");
$obj_Writer->save('php://output'); //保存从数据库中读取的数据
echo "";//数据库保存完成弹出一个提示框。
只要掌握一点计算机基本应用基础的教师,就可以在电子表格Excel文件中进行处理,筛选出需要的学生签到信息,匹配签到信息,查看签到信息是否正常,是否在同一台机器进行签到的情况等等。可以修改学生的签到信息内容,可以初始化签到数据,在初始化签到数据时需要谨慎,在没有备份的情况下,删除的数据就会没有了,不要随意删除,后台管理的运行界面。
签到系统的数据,在几百个人以内规模测试中完全可以正常实现,对于更大规模的人数测试还没完成,在今后的设计中完善程序功能。
签到数据的安全设置,是对签到的数据进行字符加密,数据加密前,签到的数据可以看到学生的全部信息,容易造成数据的泄露,和数据的更改,为了防止这种情况出现,还设计了一个用户使用记录表,来保存后台管理用户使用情况,保存是哪个用户什么时候使用了本系统,什么时间,系统管理员可以通过这个记录来反查是哪个时间点的任课教师的一些操作。还要把数据库中的所有的数据进行统一加密,让使用者和签到的学生不容易看到原始信息,避免数据的泄露。数据库的后台数据加密。
第一次使用签到系统,需要在phpStudy2014的支持下运行[1-4],把编写好的文件夹放到phpStudy2014的WWW文件下,再导入系统需要使用的数据库文件,使用的任课教师只要点击运行phpStudy2014,就可运行签到系统服务,phpStudy2014里综合了Apache和MySQL。就是把教师机当作一个服务器网站来使用,学生机通过浏览器访问教师机,完成签到任务。任课教师还需要导入签到的姓名和学号,只需要在电子表格文件中输入,再通过后台的管理界面导入签到名单,这里需要注意的地方是,导入的电子表格文件的列数要和数据库中的学生信息表的字段数一样,如果不一样会出现导入错误,就不能导入签到的学生信息表内容,造成不能系统使用。电子表格的列数为五列,分别为ID,姓名,学号,班级,学期。这个可以参考学生名单导入的样例文件,按照使用帮助说明操作[5,6]。
如果有条件的学校,可以把签到放到学校的服务器中。本系统的优点是,使用简单,使用成本低,能够很好地完成学生的签到功能,无须大量的资金和第三方来实现签到,很好的辅助教学任务,使用的工具是开源免费,不涉及版权问题。缺点是第一次使用系统时,需要配置系统的服务,和调试系统运行,需要有一定计算机相关知识的人员完成,对于完全不懂的任课教师有些困难。为了解决这个问题,编写一个怎样配置系统运行的使用帮助文档,来帮助初次使用者正常使用。可能在不同地区,受不同环境的影响,还会出现不可预测的问题,要在使用中不断完善系统,还有就是数据的加密算法,使用系统自带的加密函数,没有添加自己设计的算法,数据的安全性没有那么好,需要在今后的设计中完善这个缺陷。
3 结 论
签到系统很好完成了学校任课教师的点名签到功能,本人已经使用了四个学期的测试,共16个班级的学生,测试效果良好,运行稳定,可以实现学生的快速签到,无须大量的资金和第三方,不用携带手机等辅助工具,极大的方便任课教师的考勤工作,实现了签到数据的信息化管理,签到数据也有一定的安全措施,保障签到数据的公平公正,为辅助课堂教学提供了很好的帮助。
参考文献:
[1] 软件开发技术联盟.PHP自学视频教程 [M].北京:清华大学出版社,2014.
[2] 明日科技.PHP项目开发全程实录:第4版 [M].北京:清华大学出版社,2018.
[3] 潘凯华,刘中华.PHP从入门到精通:第2版 [M].北京:清华大学出版社,2011.
[4] 徐俊强,史香雯.PHP+MySQL动态网站设计实用教程 [M].北京:清华大学出版社,2015.
[5] 黑马程序员.PHP基础案例教程 [M].北京:人民邮电出版社,2017.
[6] 郑阿奇.PHP实用教程:第2版 [M].北京:电子工业出版社,2011.
作者簡介:陈伟康(1977—),男,汉族,广东陆河人,计算机科学与技术讲师,本科,研究方向:计算机程序语言设计与计算机应用;李广用(1978—),男,汉族,广东陆河人,计算机科学与技术讲师,本科,研究方向:计算机程序语言设计与计算机应用。