王宏杰
(廣州華商學(xué)院,廣州511300)
近年來(lái)國(guó)家從多方面對(duì)高等教育提出了改革的意見(jiàn)和方案。目前高等教育在某些環(huán)節(jié)上存在一定的缺陷和不足,以考勤管理為例,作者通過(guò)觀察發(fā)現(xiàn)上課很少考勤或不考勤的情況在各高等院校中是很常見(jiàn)的。從我國(guó)學(xué)生的成長(zhǎng)過(guò)程和實(shí)際情況來(lái)看,教師不考勤無(wú)疑滋生了學(xué)生逃課情況的發(fā)生、助長(zhǎng)了消極的學(xué)習(xí)氛圍、打擊了學(xué)生的積極性(全勤的學(xué)生和零出勤的學(xué)生,最后平時(shí)成績(jī)的考勤得分都一樣)。
教師之所以消極對(duì)待考勤,原因主要有兩個(gè):一是沒(méi)有有效的管理制度;二是沒(méi)有便捷的工具。隨著國(guó)家相關(guān)意見(jiàn)、方案的出臺(tái),各高校不斷完善自身的教學(xué)制度和章程,使得管理制度問(wèn)題逐步得到解決。工具方面,有些高校引進(jìn)了互聯(lián)網(wǎng)產(chǎn)品,如“雨課堂”、各在線(xiàn)教學(xué)平臺(tái)等,這些產(chǎn)品都具有考勤管理功能;還有些高校引進(jìn)了打卡設(shè)備,如刷卡機(jī)、刷臉機(jī)、指紋機(jī)等。
然而,各高校的基礎(chǔ)設(shè)施是不一樣的,有些教室是沒(méi)有網(wǎng)絡(luò)或網(wǎng)絡(luò)不穩(wěn)定的。另外,各教師對(duì)課堂環(huán)境的要求也不盡相同,有些要求課堂不能有互聯(lián)網(wǎng)、有些要求課堂只能用內(nèi)網(wǎng)或?qū)S镁W(wǎng)絡(luò)等,一旦沒(méi)有外網(wǎng),傳統(tǒng)的互聯(lián)網(wǎng)考勤工具就無(wú)法工作了。打卡設(shè)備存在易代打、成本高等缺點(diǎn)[1],傳統(tǒng)的紙質(zhì)考勤存在難攜帶、難統(tǒng)計(jì)、易篡改、易丟失等問(wèn)題。
對(duì)此,本文提出一種與課堂網(wǎng)絡(luò)無(wú)關(guān)的高校考勤系統(tǒng),以解決上述問(wèn)題。該系統(tǒng)由兩個(gè)子系統(tǒng)組成,一個(gè)是利用VSTO實(shí)施的與課堂網(wǎng)絡(luò)無(wú)關(guān)的考勤采集子系統(tǒng),一個(gè)是利用SpringBoot和Vue實(shí)施的在線(xiàn)考勤信息系統(tǒng)。
VSTO(visual studio tools for office)是微軟公司在其.net平臺(tái)下的Office開(kāi)發(fā)工具包,是升級(jí)版的Office產(chǎn)品擴(kuò)展解決方案。具有多語(yǔ)言支持、托管代碼擴(kuò)展、數(shù)據(jù)緩存、WPF支持、可視化的設(shè)計(jì)器、自定義用戶(hù)界面、安全改進(jìn)等特點(diǎn)[2]。
SpringBoot是Pivotal團(tuán)隊(duì)開(kāi)發(fā)的能有效簡(jiǎn)化Spring應(yīng)用程序初始搭建及開(kāi)發(fā)過(guò)程的框架,具有簡(jiǎn)化依賴(lài)、簡(jiǎn)化配置、簡(jiǎn)化部署、簡(jiǎn)化監(jiān)控等特點(diǎn)。
Vue是一套用于構(gòu)建用戶(hù)界面的漸進(jìn)式Java Script框架,具有輕量、數(shù)據(jù)雙向綁定、指令簡(jiǎn)單、插件豐富等特點(diǎn)。
與課堂網(wǎng)絡(luò)無(wú)關(guān),意味著課堂上現(xiàn)場(chǎng)產(chǎn)生的考勤數(shù)據(jù)不能立即提交至遠(yuǎn)程服務(wù)器,需要先暫存在本地,待網(wǎng)絡(luò)良好時(shí)再上傳。服務(wù)器的數(shù)據(jù)庫(kù)中有了考勤數(shù)據(jù)后,就可以通過(guò)在線(xiàn)系統(tǒng)向?qū)W生、教師以及其他角色提供考勤信息服務(wù)。因此,本系統(tǒng)設(shè)計(jì)了兩個(gè)子系統(tǒng):考勤采集子系統(tǒng)和考勤信息子系統(tǒng),總體結(jié)構(gòu)如圖1所示。

圖1 總體結(jié)構(gòu)
(1)考勤采集子系統(tǒng)。利用VSTO實(shí)施,它以PPT為宿主程序(PPT打開(kāi)后,該子系統(tǒng)以菜單的形式出現(xiàn)在PPT的菜單欄上),并將Excel作為考勤數(shù)據(jù)的本地暫存介質(zhì)[3]。本地保存成功后,自動(dòng)判斷網(wǎng)絡(luò)是否可用,如果可用則立即將本地?cái)?shù)據(jù)上傳至服務(wù)器;如果不可用則等到有網(wǎng)絡(luò)時(shí),用戶(hù)通過(guò)該子系統(tǒng)的上傳功能,將本地考勤表數(shù)據(jù)提交至服務(wù)器。
(2)考勤信息子系統(tǒng)。利用SpringBoot和Vue實(shí)施,它是在一個(gè)B/S結(jié)構(gòu)的在線(xiàn)WEB系統(tǒng),用戶(hù)通過(guò)瀏覽器實(shí)現(xiàn)對(duì)服務(wù)器數(shù)據(jù)庫(kù)中考勤數(shù)據(jù)的操作。
整個(gè)系統(tǒng)分為考勤采集子系統(tǒng)和考勤信息子系統(tǒng),各子系統(tǒng)又分別包含若干個(gè)功能模塊,如圖2所示。

圖2 系統(tǒng)功能模塊
考勤采集子系統(tǒng)包括文件讀取、考勤新增、考勤修改、考勤保存、考勤上傳等5個(gè)功能模塊,具體如下:
(1)文件讀取。文件是指考勤表,它是一個(gè)Excel文件,用于存放基礎(chǔ)信息以及考勤數(shù)據(jù)的本地暫存,這個(gè)文件需要提前按照一定規(guī)則初始化好(詳見(jiàn)3.1)。系統(tǒng)讀取該文件獲得教師、課程、班級(jí)、學(xué)生等信息為后續(xù)操作提供數(shù)據(jù)基礎(chǔ)。
(2)考勤新增。向用戶(hù)提供可視化接口,方便用戶(hù)選擇考勤表文件、班級(jí)工作表、考勤方式、學(xué)生以及考勤標(biāo)志等。其中,考勤方式分為全量考勤和隨機(jī)考勤兩種:全量考勤是指對(duì)班級(jí)的所有學(xué)生進(jìn)行點(diǎn)名;隨機(jī)考勤是指隨機(jī)抽取一定數(shù)量的學(xué)生進(jìn)行點(diǎn)名。
(3)考勤修改。以時(shí)間為索引,展現(xiàn)歷史考勤數(shù)據(jù),并支持對(duì)歷史考勤標(biāo)志的修改。
(4)考勤保存。用于將考勤結(jié)果保存至本地考勤表中,考勤結(jié)果包括考勤時(shí)間、考勤對(duì)象和考勤標(biāo)志。
(5)考勤上傳。以本地考勤表Excel的列為數(shù)據(jù)單元,將新增或修改過(guò)的數(shù)據(jù)上傳至服務(wù)器的數(shù)據(jù)庫(kù)中。
考勤信息子系統(tǒng)包括規(guī)則設(shè)置、考勤查看、數(shù)據(jù)統(tǒng)計(jì)、用戶(hù)管理、系統(tǒng)管理等5個(gè)功能模塊,具體如下:
(1)規(guī)則設(shè)置。每位教師可以對(duì)自己所授課程的考勤評(píng)分規(guī)則進(jìn)行設(shè)置。如考勤總分、遲到1次扣多少分、曠課1次扣多少分、曠課多少取消考試資格等。
(2)考勤查看。學(xué)生可以按課程查看自己的考勤情況、考勤得分等信息。
(3)數(shù)據(jù)統(tǒng)計(jì)。教師可以從班級(jí)、學(xué)生等維度進(jìn)行考勤數(shù)據(jù)統(tǒng)計(jì);管理者可以從課程、教師、班級(jí)、學(xué)生等維度進(jìn)行考勤數(shù)據(jù)統(tǒng)計(jì)。
(4)用戶(hù)管理。管理員對(duì)學(xué)生、教師、管理者等用戶(hù)進(jìn)行批量導(dǎo)入、權(quán)限分配以及單個(gè)用戶(hù)的增刪改查等操作。
(5)其他管理。包括班級(jí)、課程、上課時(shí)間、排課等基礎(chǔ)數(shù)據(jù)的管理維護(hù)以及其他相關(guān)工作等。
按照數(shù)據(jù)庫(kù)設(shè)計(jì)原則,在服務(wù)器的MySQL數(shù)據(jù)庫(kù)中設(shè)計(jì)課程信息表(課程id、名稱(chēng)、學(xué)期、理論課教材、實(shí)驗(yàn)課教材等)、教師信息表(教師id、姓名、性別、電話(huà)、院系、專(zhuān)業(yè)等)、班級(jí)信息表(班級(jí)id、名稱(chēng)、院系、專(zhuān)業(yè)等)、學(xué)生信息表(學(xué)生id、姓名、性別、電話(huà)、班級(jí)id等)、排課信息表(id,學(xué)期,班級(jí)id,課程id,教師id等)、上課時(shí)間表(id、季節(jié)、第1節(jié)課開(kāi)始時(shí)間、第1節(jié)課結(jié)束時(shí)間、第2節(jié)課開(kāi)始時(shí)間、第2節(jié)課結(jié)束時(shí)間等)和班級(jí)考勤表等多個(gè)數(shù)據(jù)表。
其中,班級(jí)考勤表的設(shè)計(jì)有些特殊。該表用于記錄班級(jí)信息、教師信息、課程信息、考勤時(shí)間以及各學(xué)生的考勤標(biāo)志等。為了將這些數(shù)據(jù)方便地插入表中,作者將其設(shè)計(jì)成表1所示形式(以20本計(jì)算機(jī)科學(xué)與技術(shù)1班為例)。該表的特殊在于將學(xué)號(hào)信息作為表的字段,由于字段不能是純數(shù)字,所以在學(xué)號(hào)前面加了一個(gè)s。

表1 20本計(jì)算機(jī)科學(xué)與技術(shù)1班考勤
考勤表Excel文件以模板方式提供給用戶(hù),或者通過(guò)程序?qū)崿F(xiàn)相關(guān)數(shù)據(jù)的自動(dòng)填寫(xiě)后,再提供給用戶(hù)下載。假設(shè)以模板方式提供給用戶(hù)時(shí),需要用戶(hù)做以下初始化工作:
(1)考勤表文件名。為了方便程序篩選出所需要的文件,要求文件名必須含有“考勤表”三個(gè)字,且直觀易懂。通常一門(mén)課程對(duì)應(yīng)一個(gè)考勤表,以“C語(yǔ)言程序設(shè)計(jì)”課程為例,其考勤表可以命名為“C語(yǔ)言程序設(shè)計(jì)-考勤表”。
(2)“設(shè)置”工作表。考勤表里有一個(gè)名為“設(shè)置”的工作表(Sheet),需要在其C列填寫(xiě)相關(guān)基礎(chǔ)信息,如圖3所示。

圖3 考勤表基礎(chǔ)信息設(shè)置
(3)班級(jí)工作表。一個(gè)班級(jí)創(chuàng)建一個(gè)工作表(Sheet),并以班級(jí)名作為Sheet名,工作表內(nèi)有學(xué)生學(xué)號(hào)和姓名信息。如某教師本次帶20本計(jì)算機(jī)科學(xué)與技術(shù)1班與20本軟工程1班的C語(yǔ)言程序設(shè)計(jì)課程,則需要?jiǎng)?chuàng)建2個(gè)工作表,并將學(xué)生信息錄入到表中,如圖4所示。

圖4 班級(jí)工作表初始化
(4)安全規(guī)范。考勤表通常保存在教師U盤(pán)中,具有很大的丟失風(fēng)險(xiǎn),為了防止相關(guān)數(shù)據(jù)的泄露,要求考勤表利用Excel密碼加密的方式進(jìn)行安全保護(hù)。考勤采集子系統(tǒng)在讀取考勤表時(shí)會(huì)要求用戶(hù)輸入密碼。
(1)功能菜單。在Visual Studio中創(chuàng)建項(xiàng)目后,在RibbonMain中添加功能區(qū)選項(xiàng)卡,該選項(xiàng)卡就是將來(lái)顯示在PPT菜單欄上的菜單項(xiàng)。利用可視化工具箱,拖拽Group控件和Button控件創(chuàng)建如圖5所示的子菜單。

圖5 功能菜單
(2)網(wǎng)絡(luò)檢測(cè)。當(dāng)菜單加載后需要檢測(cè)到服務(wù)器的網(wǎng)絡(luò)情況,并將結(jié)果反映在菜單項(xiàng)的網(wǎng)絡(luò)狀態(tài)按鈕上。同時(shí),支持用戶(hù)點(diǎn)擊網(wǎng)絡(luò)狀態(tài)按鈕,觸發(fā)網(wǎng)絡(luò)檢測(cè)。由于通過(guò)Ping實(shí)施網(wǎng)絡(luò)檢測(cè)需要消耗一定時(shí)間才能獲得返回值,因此網(wǎng)絡(luò)檢測(cè)功能需要進(jìn)行異步處理。部分關(guān)鍵代碼如下:


(3)文件讀取。按照教學(xué)PPT與考勤表通常放在U盤(pán)同一目錄的習(xí)慣,考勤表位置默認(rèn)為當(dāng)前PPT路徑,也支持用戶(hù)通過(guò)瀏覽的方式自定義考勤表位置。當(dāng)路徑確定后,系統(tǒng)自動(dòng)讀取并展示所有文件名包含“考勤表”的Excel文件。當(dāng)用戶(hù)選擇某Excel文件后,彈出密碼框,要求用戶(hù)輸入Excel保護(hù)密碼,驗(yàn)證成功后,以列表方式展示除“設(shè)置”以外的所有班級(jí)工作表,并將班級(jí)人數(shù)統(tǒng)計(jì)出來(lái),如圖6所示。

圖6 初始設(shè)置界面
(4)考勤新增。用戶(hù)選擇班級(jí)工作表后,系統(tǒng)默認(rèn)選擇“隨機(jī)考勤”,且數(shù)量默認(rèn)是班級(jí)總?cè)藬?shù)的四分之一,也支持用戶(hù)通過(guò)滑動(dòng)條在[1,班級(jí)人數(shù)]之間進(jìn)行調(diào)整。點(diǎn)擊“確定”后,出現(xiàn)“考勤-新增”選項(xiàng)卡,里面以列表方式展示系統(tǒng)抽取到的需要點(diǎn)名的學(xué)生信息,選中學(xué)生時(shí),考勤標(biāo)志默認(rèn)為到課,通過(guò)考勤標(biāo)志單選按鈕進(jìn)行修改,如圖7所示。

圖7 考勤新增界面
(5)考勤修改。用戶(hù)選擇班級(jí)工作表,選擇“更新考勤”后點(diǎn)擊“確定”,出現(xiàn)“考勤-修改”選項(xiàng)卡,系統(tǒng)從班級(jí)工作表的第3列開(kāi)始讀取所有列的第一個(gè)單元格里的時(shí)間值并展示在列表中,用戶(hù)選擇時(shí)間點(diǎn)后點(diǎn)擊“確定”,歷史考勤信息被展示出來(lái),通過(guò)考勤標(biāo)識(shí)單選按鈕進(jìn)行修改,如圖8所示。

圖8 考勤修改界面
(6)考勤保存。當(dāng)用戶(hù)點(diǎn)擊“提交考勤”(考勤新增的提交)或“提交修改”(考勤修改的提交)時(shí),都需要將數(shù)據(jù)保存至本地考勤表中。如果是考勤新增的保存,則考勤數(shù)據(jù)追加在班級(jí)工作表的最后一列,其第一個(gè)單元格為當(dāng)前時(shí)間值;如果是考勤修改的保存,則考勤數(shù)據(jù)保存在原始列,其第一個(gè)單元格里的時(shí)間值不變。兩種情況的保存,都需要在第一個(gè)單元格的時(shí)間值后面添加“#”,表示該列數(shù)據(jù)需要上傳。考勤數(shù)據(jù)保存完畢后,修改考勤表文件名,在原文件名后添加“#”,表示該Excel文件有需要上傳的數(shù)據(jù)。部分關(guān)鍵代碼如下:


(7)考勤上傳。當(dāng)考勤保存成功后,自動(dòng)進(jìn)行網(wǎng)絡(luò)檢測(cè),若當(dāng)前網(wǎng)絡(luò)可用則自動(dòng)觸發(fā)考勤上傳,此時(shí)系統(tǒng)遍歷當(dāng)前班級(jí)工作表中的所有列,對(duì)第一個(gè)單元格含有“#”的列,將其數(shù)據(jù)插入到數(shù)據(jù)庫(kù)對(duì)應(yīng)的班級(jí)考勤表中。若當(dāng)前網(wǎng)絡(luò)不可用時(shí)則不進(jìn)行上傳,待有網(wǎng)絡(luò)時(shí),用戶(hù)通過(guò)“點(diǎn)擊上傳”手動(dòng)觸發(fā)考勤上傳,此時(shí)系統(tǒng)遍歷當(dāng)前考勤表里的所有班級(jí)工作表,對(duì)第一個(gè)單元格含有“#”的列,將其數(shù)據(jù)分別插入到數(shù)據(jù)庫(kù)對(duì)應(yīng)的班級(jí)考勤表中。列數(shù)據(jù)上傳成功后,自動(dòng)去掉該列第一個(gè)單元格里中的“#”,表示該列數(shù)據(jù)已上傳。所有數(shù)據(jù)上傳完畢后,自動(dòng)修改考勤表文件名,去掉其“#”,表示該文件的數(shù)據(jù)已上傳。
考勤信息子系統(tǒng)是利用SpringBoot和Vue實(shí)施的在線(xiàn)系統(tǒng),包括規(guī)則設(shè)置、考勤查看、數(shù)據(jù)統(tǒng)計(jì)、用戶(hù)管理、其他管理等功能,由于篇幅原因,其實(shí)施過(guò)程在此不展開(kāi)論述。
利用VSTO實(shí)施的考勤采集子系統(tǒng),先將考勤數(shù)據(jù)保存至本地Excel中,再伺機(jī)上傳至服務(wù)器,實(shí)現(xiàn)了與課堂網(wǎng)絡(luò)無(wú)關(guān)的考勤數(shù)據(jù)采集,且該子系統(tǒng)以PPT為宿主,貼合課堂考勤場(chǎng)景。利用SpringBoot和Vue實(shí)施的在線(xiàn)考勤信息子系統(tǒng),能滿(mǎn)足不同角色對(duì)系統(tǒng)和數(shù)據(jù)的操作要求。兩個(gè)子系統(tǒng)結(jié)合能有效解決文章開(kāi)篇提出的問(wèn)題,實(shí)現(xiàn)與課堂網(wǎng)絡(luò)無(wú)關(guān)的考勤管理。