陳偉康 李廣用



摘? 要:在現代課堂教學中,學生的考勤是一個煩瑣和重要的教學環節,采用傳統的點名方式需要占用寶貴課堂時間,利用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—),男,漢族,廣東陸河人,計算機科學與技術講師,本科,研究方向:計算機程序語言設計與計算機應用。