毛戰軍
(長江大學一年級教學工作部,湖北 荊州 434025)
閱卷任務自動分派的編程及實現
毛戰軍
(長江大學一年級教學工作部,湖北 荊州 434025)
同頭課程閱卷的分派工作不難,但是當參加考試的班級多,情況復雜,又要按指定要求分派閱卷任務時,如果只憑手工操作,則計算量大,調整麻煩。對自動分派閱卷任務的編程及其實現進行了研究。在考試情況的統計報表中,利用VBA語句,先編寫滿足分派要求的通用過程“Sub fenzu()”,再逐組逐次調用該過程,就可以按照指定要求自動、靈活地完成閱卷的分派工作。
閱卷任務;自動分派;VBA;編程
長江大學一年級教學工作部《高等數學》(A)課程的期末統考完畢后,通常是安排閱卷教師分組流水閱卷,完成試卷的批閱、整理、裝訂、分數的統計、錄入、成績的分析等多項工作。閱卷任務的分派通常是根據考試情況的統計數據,原則上是按每組閱卷教師所代課程的教學頭數的多少來分派試卷的份數和本數。如果采用手工分派任務,不僅耗時,而且費力、不靈活。由于統計數據用Excel文件保存,為此筆者在Excel文件中利用VBA語句,根據統計數據按指定要求實現自動、靈活地閱卷任務分派。
以2011~2012學年上學期期末為例,共有115個自然班,4049名學生參加該課程的期末統考,有19名教師參與閱卷工作。將閱卷教師分為5組:前4組每組成員均為4名教師,每組教師所代課程均為12個教學頭;第5組3名教師,所代課程為7個教學頭。先按要求計算每組閱卷教師閱卷的份數與本數,再按計算所得的數據分派任務。由于分派各組任務的方法與過程基本相同,可以利用VBA語句,先編寫通用的過程“Sub fenzu()”,再利用循環語句,逐次調用過程“Sub fenzu()”完成任務的分派。主程序流程圖見圖1,過程“Sub fenzu()”的流程圖見圖2。

圖1 主程序流程圖 圖2過程Sub fenzu( )流程圖
2.1讀取分組信息
通過人機對話界面讀取閱卷組數及每組教師所代課程的教學頭數,并計算所有閱卷教師所代課程的教學頭總數。
2.2計算每組的閱卷任務
分派閱卷任務的原則是按每組閱卷教師所代課程的教學頭數的多少來分派試卷的份數和本數。該學期該課程的期末試卷份數為4049份,共115本,參加閱卷的教師19名,所代課程共計55個教學頭。每教學頭平均4049/55≈73.618份和115/55≈2.091本,這2個“平均數”都不是整數,筆者的作法是:前4組由“平均數”乘以“教學頭數”再四舍五入取整得到每組閱卷的份數與本數,剩下的試卷都分給第5組。具體實現過程如下:
2.3編寫通用的過程“Subfenzu()”
由于分派各組閱卷任務的方法與過程基本相同,先編寫可供調用的通用過程:Sub fenzu(zubie, yuans, yuanz, mus, hangs, yjfshu)‘Sub fenzu(組別,組開始行數,組結束行數,調整選擇范圍開始行數,總本數,組閱卷份數)。
1)數據排序 如果只按統計數據的順序來分派任務,并不能每次都恰好滿足要求。如,通過計算可知第1組應閱卷25本,883份。利用循環語句按班級排列順序計算統計數據中的第1~25個班級的試卷總份數為902份,與指定的任務不符。這時,需要對統計數據的排列順序進行調整。筆者將統計數據從最下到最上按班級試卷份數的最少、最多、次少、次多,……的順序排列,排序越靠前,班級的試卷份數越接近每班平均數。按照這樣的順序分派任務時,即使不能恰好滿足要求,也能為數據的調整提供最多的選擇。數據排序利用循環語句和排序命令:第1次將所有區域的數據按班級試卷份數的多少從上到下、從大到小排序;第2次排序時,將不包括最后一行的區域的數據按班級試卷份數的多少從上到下、從小到大排序。奇數次排序實現過程如下:
j = 0
For n = yuans To hangs
If n Mod 2 <> 0 Then
Range(“A” & yuans & “:C” & hangs - j).Sort Key1:=Range(“B” & yuans), Order1:=xlDescending, Header:= xlGuess, OrderCustom:=1, MatchCase:=False, Orientation:=xlTopToBottom, SortMethod:=xlPinYin, DataOption1:=xlSortNormal[2]
‘奇數次排序時,將指定區域的統計數據按從上到下、試卷份數從大到小的方式排序
偶數次排序時,將指定區域的統計數據按從上到下、試卷份數從小到大的方式排序,實現過程與奇數次排序類似。
2)調整份數 如在調整數據的順序之后,再為第1組分派任務時,將數據中的第1~25個班級標注“第1組”,計算第1~25個班級的試卷總份數,總計880份,與指定的任務不符,少了3份。利用循環語句,逐本把第1~25個班級的試卷份數加3一一與第26~115個班級的試卷份數匹配,如匹配成功,將原注釋取消,并在目標班級后標注“第1組”,再通過排序命令,將第1組任務排在前第1~25行:
zshu = 0
For n = yuans To yuanz
2.4調用“Subfenzu()”
分派各組任務的方法與過程都基本相同。利用循環語句,逐次調用過程“Sub fenzu()”完成任務的分派:
yuans = 1
yuanz = yjbshu(1)
For i = 1 To (c-1)
mus = yuanz + 1
Call fenzu(i, yuans, yuanz, mus, hangs, yjfshu(i)) ‘逐次調用過程“Sub fenzu()”完成任務的分派
yuans = yuans + yjbshu(i)
yuanz = yuanz + yjbshu(i+1)
Next
For i = mus To hangs
Range(“c” & i) = “第” & c & “組” ‘為最后一組的閱卷班級作標注
Next
2.5任務匯總
在分派完閱卷任務后,對各組的閱卷任務進行匯總。
For i = 1 To c
Range(“a” & hangs + i) = “第” & i & “組”

Next
該程序在Winxp+Office2003的工作環境下通過,完成了《高等數學》(A)期末的流水閱卷安排。由于采用自動分派任務的方式,因此還可以根據要求靈活、迅速地調整閱卷安排。在筆者所討論的方法中,沒有考慮回避制度(因為是密封閱卷,這個需求也就不是特別迫切),但如果需要回避,則可以在分配某組的閱卷任務時,在數據中剔除該組教師所代班級后,再使用該方法,即可達到目的。
[1]張強,劉飚.Excel 2007與VBA編程從入門到精通[M].北京:電子工業出版社,2008:118.
[2]晶辰工作室.Excel 2000中文版VBA編程開發指南[M].北京:電子工業出版社,2000:72.
[編輯] 洪云飛
10.3969/j.issn.1673-1409(N).2012.06.035
TP311.1
A
1673-1409(2012)06-N105-03