王宏杰,許麗娟
(廣東財(cái)經(jīng)大學(xué)華商學(xué)院,廣州 511300)
考勤是教師管理課堂、督促學(xué)生學(xué)習(xí)的一個(gè)重要手段,也是評(píng)定學(xué)生平時(shí)成績(jī)的一個(gè)重要因素。盡管信息化教學(xué)已發(fā)展多年,各課室都配備了多媒體設(shè)備,幾乎所有教師都使用電子課件,但考勤工作卻沒(méi)能跟上信息化的步伐。目前市面上有很多具有考勤功能的軟件,但往往需要聯(lián)網(wǎng)、安裝第三方軟件等,這與很多學(xué)校的設(shè)施或管理是相沖突的,導(dǎo)致很多教師只能采用傳統(tǒng)的紙質(zhì)考勤。但傳統(tǒng)紙質(zhì)考勤,存在攜帶、篡改、丟失、統(tǒng)計(jì)等問(wèn)題,使得部分教師對(duì)考勤比較消極,不打或很少打考勤,進(jìn)而導(dǎo)致對(duì)學(xué)生平時(shí)成績(jī)的評(píng)定無(wú)法公開(kāi)、公平。
對(duì)此,本文提出基于VBA 的PPT 考勤管理系統(tǒng),通過(guò)VBA 技術(shù)實(shí)現(xiàn)在Microsoft PowerPoint 課件上點(diǎn)名,在Microsoft Excel 中存儲(chǔ)考勤數(shù)據(jù),使得考勤工作完全電子化。系統(tǒng)完全集成在PPT 課件上,無(wú)需安裝任何軟件,無(wú)需網(wǎng)絡(luò)連接,只要能播放PPT 的環(huán)境就能運(yùn)行。Microsoft Excel 中的考勤數(shù)據(jù),教師可以直接打開(kāi)進(jìn)行查看、統(tǒng)計(jì)等。
VBA(Visual Basic For Application)是美國(guó)微軟公司在Visual Basic 基礎(chǔ)上開(kāi)發(fā)出來(lái),應(yīng)用于其桌面應(yīng)用程序的一種自動(dòng)化任務(wù)編程語(yǔ)言。1993 年,VBA 開(kāi)始出現(xiàn)在 Microsoft Excel 和 Microsoft Project 中[1],以滿足用戶在特定領(lǐng)域?qū)ffice 基本功能擴(kuò)展的需求。目前,VBA 已集成于Microsoft Office 的大多數(shù)產(chǎn)品中,包括 Word、Excel、PowerPoint、Outlook 等。
本系統(tǒng)使用的VBA 是基于Microsoft PowerPoint 2016 的 Microsoft Visual Basic for Application 7.1。
ActiveX 是微軟公司對(duì)一系列策略性面向?qū)ο蟪绦蚣夹g(shù)和工具的稱呼,其中主要的技術(shù)是組件對(duì)象模型(COM)。ActiveX 控件,是可以在應(yīng)用程序中重復(fù)使用的程序?qū)ο螅闹饕夹g(shù)是ActiveX。VBA 編輯器提供的ActiveX 控件比較豐富,本系統(tǒng)使用到的有:命令按鈕控件、標(biāo)簽控件、文本框控件、List Box 控件、單選按鈕控件等。
系統(tǒng)以PPT 為宿主對(duì)象,以Excel 為數(shù)據(jù)文件對(duì)象,以班級(jí)為基本操作對(duì)象,設(shè)置新增考勤、再次考勤、更新考勤三大功能模塊(圖1)。
(1)新增考勤。用于一天中第一次對(duì)某班級(jí)點(diǎn)名,考勤數(shù)據(jù)將以當(dāng)前時(shí)間為索引單獨(dú)保存在Excel 的一列中。
(2)再次考勤。用于對(duì)前一次考勤進(jìn)行補(bǔ)充,新考勤數(shù)據(jù)將之前的進(jìn)行合并。根據(jù)再次點(diǎn)名的學(xué)生是否能與之前已點(diǎn)名的學(xué)生重復(fù),分為兩種情況:一是“全量隨機(jī)”,此時(shí)可以重復(fù),被重復(fù)點(diǎn)名的學(xué)生,考勤數(shù)據(jù)以最后一次為準(zhǔn);二是“剩余隨機(jī)”,此時(shí)再次點(diǎn)名的學(xué)生不會(huì)與已經(jīng)點(diǎn)過(guò)名的學(xué)生重復(fù)。
(3)更新考勤。用于對(duì)歷史考勤數(shù)據(jù)的修改,系統(tǒng)先列出當(dāng)前班級(jí)所有的歷史考勤時(shí)間索引;然后,根據(jù)用戶指定的時(shí)間索引將歷史考勤數(shù)據(jù)呈現(xiàn)出來(lái);最后,用戶對(duì)歷史數(shù)據(jù)進(jìn)行修改,提交保存。
(4)點(diǎn)名方式。點(diǎn)名方式分兩種:一是全量點(diǎn)名,對(duì)選定班級(jí)的所有學(xué)生進(jìn)行點(diǎn)名;二是隨機(jī)點(diǎn)名,在選定班級(jí)中隨機(jī)抽取一定數(shù)量的學(xué)生進(jìn)行點(diǎn)名。兩種點(diǎn)名方式,最后都將點(diǎn)名結(jié)果以時(shí)間為索引保存在Excel 中。
VBA 技術(shù)支持對(duì) MySQL、SQL Server、Access 等數(shù)據(jù)庫(kù)的訪問(wèn)[2]。但考慮系統(tǒng)的簡(jiǎn)單、實(shí)用性,本設(shè)計(jì)以Microsoft Excel 作為考勤數(shù)據(jù)的“數(shù)據(jù)庫(kù)”,以方便非專業(yè)的用戶對(duì)考勤數(shù)據(jù)的查看、統(tǒng)計(jì)等操作。
(1)Excel 文件。考勤數(shù)據(jù)的存儲(chǔ)以課程為單位,一門(mén)課程一個(gè)考勤表(Excel 文件),以“xxx 考勤表”為文件命名,并和PPT 放在同一目錄下。
(2)Excel 工作表。一個(gè)Excel 文件里面可以有多個(gè)工作表(sheet)。一個(gè)班級(jí)設(shè)置為一個(gè)工作表,工作表表名為班級(jí)名稱。工作表里第一行為標(biāo)題行,初始設(shè)置 2 列(第 1 列標(biāo)題為“學(xué)號(hào)”,第 2 列標(biāo)題“姓名”),將班級(jí)學(xué)生信息填充到表中,學(xué)號(hào)順序沒(méi)有要求。
(3)考勤信息。從工作表的第3 列開(kāi)始,系統(tǒng)自動(dòng)寫(xiě)入考勤信息。其中,第一行為時(shí)間索引表示點(diǎn)名時(shí)間,格式為“年/月/日/小時(shí):分鐘”(如 2020/01/28/11:07);其余行用字母作為考勤標(biāo)識(shí):C-遲到,D-到課,K-曠課,Q-請(qǐng)假,Z-早退,沒(méi)有任何標(biāo)識(shí)的表示該學(xué)生沒(méi)被點(diǎn)名。
根據(jù)上述數(shù)據(jù)存儲(chǔ)設(shè)計(jì)規(guī)則,新建一個(gè)Excel 文件,并將學(xué)生信息按班級(jí)寫(xiě)入表格中。Excel 文件的存放路徑與PPT 保持一致。
(1)系統(tǒng)觸發(fā)。設(shè)置一個(gè)命令按鈕控件作為用戶調(diào)用系統(tǒng)的觸發(fā)器,由于點(diǎn)名時(shí)PPT 可能在任意頁(yè)面,所以將命令按鈕設(shè)置在幻燈片母版中[3],這樣由母版創(chuàng)建的每一張PPT 頁(yè)面都有這個(gè)按鈕,而我們只需對(duì)母版命令按鈕的點(diǎn)擊事件進(jìn)行編程即可。
系統(tǒng)觸發(fā)后先讀取考勤表里的班級(jí)、人數(shù)信息,然后加載到初始化窗口中。但以PPT 為宿主的VBA 不能直接使用Excel 相關(guān)對(duì)象和函數(shù),需要先加載Excel對(duì)象庫(kù),即通過(guò)VBA 編輯器的“工具”,引用“Microsoft Excel 16.0 Object Library”,之后就可以通過(guò)程序來(lái)操作Excel 了,部分代碼如下:
(2)初始化窗口。將上一步讀到班級(jí)、人數(shù)信息,加載到初始化窗口(圖2)的ListBox 控件中,并設(shè)置單選按鈕作為用戶選擇點(diǎn)名方式的控件。如果是隨機(jī)點(diǎn)名,則將班級(jí)人數(shù)四分之一的整數(shù)值作為文本框控件的默認(rèn)值。同時(shí),根據(jù)班級(jí)的不同,動(dòng)態(tài)給出輸入值范圍,并對(duì)用戶輸入的合法性進(jìn)行校驗(yàn)處理,部分代碼如下:
圖2 初始化窗口
(1)生成要點(diǎn)名的學(xué)生ID 數(shù)組。一個(gè)班級(jí)里可能有學(xué)生退學(xué)、重修等情況,導(dǎo)致一個(gè)班級(jí)里學(xué)號(hào)可能不連續(xù),所以不能用學(xué)號(hào)作為序號(hào)。本系統(tǒng)將Excel 的行號(hào)作為學(xué)生ID,由于第一行是標(biāo)題,因此ID 數(shù)組的取值范圍為[2,PUB_studentsnum+1],其中 PUB_students?num 為全局變量,用于保存當(dāng)前班級(jí)的學(xué)生人數(shù)。
全量點(diǎn)名時(shí),ID 數(shù)組的數(shù)據(jù)元素就是{2,3,4,…,PUB_studentsnum+1}。隨機(jī)點(diǎn)名時(shí),利用Rnd 函數(shù)產(chǎn)生一系列不重復(fù)的隨機(jī)數(shù)并保存到ID 數(shù)組中,代碼如下:
(2)讀取班級(jí)表格中需要點(diǎn)名的ID 對(duì)應(yīng)的學(xué)生信息。上述得到的ID 數(shù)組,實(shí)際就是Excel 的行號(hào),根據(jù)行號(hào)讀取對(duì)應(yīng)班級(jí)表里的學(xué)生信息:第一列的學(xué)號(hào)和第二列的姓名,組合成字符串“學(xué)號(hào)-姓名“,保存到數(shù)組中。部分代碼如下:
(3)點(diǎn)名。點(diǎn)名窗口(圖3)的ListBox 控件設(shè)置為2 列,第1 列用于加載上一步的學(xué)生信息,第2 列表示考勤信息??记谛畔⒂米址麡?biāo)識(shí):C-遲到,D-到課,K-曠課,Q-請(qǐng)假,Z-早退。同時(shí),為每個(gè)考勤標(biāo)識(shí)設(shè)置單選按鈕控件并對(duì)其點(diǎn)擊事件編程,達(dá)到通過(guò)點(diǎn)擊單選按鈕動(dòng)態(tài)改變考勤標(biāo)識(shí)的作用。以“請(qǐng)假”單選按鈕為例的代碼如下:
圖3 點(diǎn)名窗口
(4)保存考勤數(shù)據(jù)。遍歷圖3 的ListBox 控件,得到考勤標(biāo)識(shí),如果考勤標(biāo)識(shí)為空則默認(rèn)為“D”(到課)。然后,在班級(jí)表里新增一列,將這些考勤標(biāo)識(shí)逐一寫(xiě)到ID 數(shù)組所記錄的行里。部分代碼如下:
設(shè)置“全量隨機(jī)”和“剩余隨機(jī)”兩個(gè)單選按鈕,系統(tǒng)動(dòng)態(tài)給出取值范圍。同時(shí),以最大值的1/3 作為“剩余隨機(jī)”的默認(rèn)輸入值,1/4 作為“全量隨機(jī)”的默認(rèn)輸入值供用戶參考,如圖4。
再次考勤窗口的參數(shù)由用戶設(shè)定后,點(diǎn)擊“確定”,系統(tǒng)將生成新的需要點(diǎn)名的ID 數(shù)組,之后的操作與前面類似。再次考勤的數(shù)據(jù)將與之前的數(shù)據(jù)進(jìn)行合并,時(shí)間索引更新為最后一次點(diǎn)名時(shí)間。
圖4 再次考勤界面
遍歷班級(jí)表的第一行,取出所有的歷史時(shí)間索引(圖5),加載到考勤時(shí)間選擇窗口的ListBox 控件中(圖6)。待用戶確定時(shí)間點(diǎn)后,系統(tǒng)讀取表里該時(shí)間點(diǎn)所在列的相關(guān)信息:行ID,學(xué)號(hào)-姓名,考勤標(biāo)識(shí)。考勤標(biāo)識(shí)不為空的,就是之前點(diǎn)過(guò)名的學(xué)生,之后的操作與前面類似。新考勤數(shù)據(jù)覆蓋到原考勤時(shí)間所在的列中,實(shí)現(xiàn)歷史考勤的更新。
圖5 班級(jí)考勤表
圖6 考勤時(shí)間選擇窗口
本系統(tǒng)以PPT 為宿主對(duì)象,以Excel 為數(shù)據(jù)文件對(duì)象,以班級(jí)為基本操作對(duì)象,利用VBA 技術(shù)實(shí)現(xiàn)了考勤管理的自動(dòng)化、電子化,能滿足部分教師的日??记谛枰BA 簡(jiǎn)單易學(xué),教師們可以開(kāi)發(fā)更多特色功能,豐富自己的教學(xué)工具,提升教學(xué)工作的“科技含量”。