羅定福, 陳永松, 吳權軒
(廣東松山職業技術學院 計算機系, 韶關 512126)
大學計算機基礎課程最重要的組成部分是Office。就Office文檔的自動改卷提供一個可行的方案,開發Office操作題改卷中間件平臺[1],通過中間件平臺連接不同的考試系統和Office文檔,不同的考試系統不需要再寫復雜的代碼,只需要調用中間件平臺的相關組件就可以快速實現Office自動改卷,當教學內容更新之后,考試系統不需要改動,只要使用最新版的中間件即可。
國內高職院校關于Office改卷系統的研究主要有兩種,一是構造一個Office軟件的仿真系統[2],通過仿真系統模擬Office軟件的環境界面,考試時記錄考生的操作步驟來進行自動改卷;二是通過引用相關組件,利用VBA技術[3、4、5]提取文檔信息和標準答案比較實現自動改卷。文章提出一種可行方案,將自動改卷的操作封裝為中間件,不同語言不同的DBMS,只要了解中間件的接口,編寫少量代碼就可以實現對Office文檔的自動改卷。
開發出一個Office操作題改卷中間件,給軟件開發者提供了Office文檔自動改卷的數據存取層,屏蔽Office程序的接口細節和實現邏輯,做成組件式的系統[6],需要時將不同組件進行組裝,建立新系統的代價將大大降低。
改卷中間件實現的主要功能有兩個。一是將考生完成的Office文檔(以下簡稱考生文檔)和標準答案進行比較,實現對文檔的評分;二是從教師完成的具有標準答案性質的文檔(以下簡稱樣文)提取信息作為標準答案。
改卷中間件平臺的總體設計目標是在應用程序和Office文檔之間,開發出一個實現應用程序對文檔進行自動改卷的專業中間件平臺。通過改卷中間件平臺就可以控制Office實現自動改卷,可以用不同的程序設計語言和DBMS進行調用,實現可重用性、可維護性。
改卷組件實現Office文檔評分和標準答案生成兩大功能。為了減輕開發難度,改卷組件采用與VBA技術語法相近的VB.NET作為組件開發語言。利用“類庫”[7]開發改卷組件,最終生成動態鏈接庫(DLL)文件。通過.NET平臺提供的工具,可以將DLL偽造一個COM接口[8]并注冊到系統中。通過這個偽COM接口來實現對.NET的DLL的調用。本系統改卷信息點存儲在Access表中。調用時,可以根據需要將數據表導入到不同的DBMS中。
3.2.1 改卷組件建模
改卷中間件平臺最重要的組成部分是改卷組件,它的主要工作流程是通過VBA技術調用Word、Excel、PowerPoint的COM組件的不同對象和屬性,達到自動改卷和答案錄入的目的。改卷組件分為實體類和操作類。實體類封裝要操作的數據,隔離代碼對數據庫的依賴[9],不同數據庫可以通過組件的接口發送和接收實體類數據。而操作類是依據實體類的數據對文檔進行的操作從而實現自動改卷和答案生成功能。
1)實體類
如果將每種操作類型定義為一個實體類[4],每個操作點定義為一個屬性,則不僅設計非常復雜,而且會降低組件的可重用性。為了保證在后期設計中對外接口始終保持不變[10]。只設計了三個實體:Word、Excel、PowerPoint,分別對應于Word、Excel、PowerPoint所有的操作,在類的實例中通過類型號(num)屬性區分該實例為何種類型的操作,不同實例的操作點屬性名使用統一名稱,即第1個操作點屬性用point[1],第r個用point [r]。同時,由于Word、Excel、PowerPoint實體有不少屬性是相同的,因此設計一個parert entity為父類,然后通過繼承生成Word entity、Excel entity、PowerPoint entity。實體圖如圖1所示。

圖1 實體圖
實體圖屬性說明:mark:操作實例總得分;error:錯誤信息;para1、para2:特殊參數;position:改卷點地點(位置);sheetnum:工作表序號;cell address:單元格地址或范圍;slide num:幻燈片序號;position:對象序號;point mark[1]:第1個改卷點分值,point[r]:第r個改卷點分值。特殊參數用于特殊改卷信息的輸入,如替換操作的替換次數等。
2)操作類
改卷組件操作類實現本系統兩個主要功能:1.讀取考生文檔,返回某項操作得分;2.讀取樣文,獲取某項操作不同改卷點標準答案信息。操作類由Word操作類、Excel操作類、PowerPoint操作類組成,三者的設計方法相似,以Word操作類為例進行介紹。
Word操作類分為Word評分類(WordMark類)和Word標記類(WordTab類)。評分類實現考生文檔評分,標記類實現標準答案的生成和檢驗。評分類和標記類都是對Word文檔進行操作,有不少操作和屬性是相同的,因此先設計一個基礎Word程序類,然后通過繼承生成評分類和標記類。在評分類中, Mark方法功能為考生Word文檔評分,在標記類中,AnswerTab方法功能為樣文標準答案的生成和檢驗,BlankTab用于對空白文檔評分,空白文檔評分主要是為了避免樣文和空白文檔某項改卷點結果相同,從而出現白送分的情況。Tab、BlankTab方法的評分與AnswerTab方法中檢驗答案的操作流程基本相同,而標準答案的生成只需在上述基礎上增加少數語句就可實現,而且這些語句的執行對性能幾乎無影響,為了提高編寫代碼的效率,提高系統的可重用性,系統在設計時,上述3個方法通過同一個操作來實現。
在實際設計中,上述操作通過第三個類Word打分類(WordTabing)的評分方法(WordMark)實現,為了避免每次調用WordMark方法都進行實例化,WordMark方法聲明為靜態方法[11](VB.NET稱為共享方法)。
出于系統運行效率及教師生成答案的操作習慣的考慮,評分類調用WordMark方法采取的操作方式是對考生文檔的多個操作實例同時進行評分,而標記類調用WordMark方法采取的操作方式是對樣文或空白文檔的單個操作實例進行檢驗和生成答案。這樣就存在一個矛盾,評分類調用時按照多個實例的集合進行操作,標記類調用時對單個實例進行操作,為了即能夠對集合進行操作也能對單個對象進行操作。設計接口IwordOj。該接口包括Count屬性和Item屬性,Count屬性為返回實例的個數,Item(n)返回第n個實例。在評分類和標記類分別實現該接口,在WordMark方法中以該接口作為WordMark方法的輸入參數,從而使WordMark方法同時實現對單一實例和實例集合的操作。
3.2.2 改卷信息點數據設計
改卷中間件平臺的目的是建立一個不同DBMS都可以調用的Office文檔改卷服務。實體類各個屬性的含義存儲在Access表中,該表的結構與改卷組件實體類的結構相類似,但增加了解釋(Explain)屬性,去掉了不需要說明含義的一些屬性,由于數據庫表不允許出現數組屬性,將x(m)改成xm屬性。解釋屬性用于對某個實例的輸入進行一些必要的說明。
本系統中,實現改卷的代碼主要集中在Word打分類的評分方法編寫。
在本系統中,改卷組件的主體為“類庫”,由于類庫輸出類型無法直接啟動。為了能對組件中編寫的代碼進行調試,需要編寫一個實現調用類庫實現評分和答案信息錄入的簡單項目,考慮到用單機版程序進行調試最為方便,該調試項目為用C#開發的WinForm程序。
前面設計生成改卷組件文件名為Marking.DLL,是.NET平臺的“類庫”。建立在.NET平臺的應用程序,可以直接調用Marking.DLL實現自動改卷,如果是其他語言的應用程序,無法直接調用。
Marking.DLL設計中,使用了集合類型,有些方法的參數為復雜數據類型,然而在很多語言中,不支持集合類型,也無法正常調用復雜類型參數的方法,為了使不同程序語言開發的應用程序,都能正常調用,平臺新建一個專門作為接口的“COM類庫”,在該類庫中,將復雜數據類型的各個字段轉換為類的屬性,集合類型改用索引器,在類的方法中,利用屬性和索引器構造復雜數據類型和集合類型。同時,為了簡化接口,在類庫中定義AnsInfo方法,將改卷點字符串(由多個改卷點連接生成)轉換為類的屬性。最后定義Mark方法,功能是依次調用AnsInfo方法和改卷方法。引入上述方法后接口單一,調用也較方便。結果直接生成DLL和COM文件。其他語言調用COM文件時,直接調用Mark方法實現改卷。經多種語言調用測試,運行結果相當理想。例如用JavaScript調用本平臺COM組件實現Word文檔的自動改卷,可以編寫如下函數:
function Mark(FileName,strAnswer)
{var Mark = new ActiveXObject("ComMark.Mark");
var s = Mark.WordTab(FileName,strAnswer);
alert("最后得分為"+s);}
其中FileName為待檢驗文件名,strAnswer為改卷點字符串,例如檢驗隸書20號新建樣式,并將新建樣式應用到文檔第3段,總分4分,則賦值為"ClassNo11||x0,新建||n0,1||x1,隸書||n1,1|x4,20||n4,1||
對全院近三年使用本系統的非計算機專業的計算機統考成績進行統計,如表1所示。

表1 近三年計算機基礎考級成績
可以看到,合格率和平均分都名列前茅,應用效果極好。
本文通過對現行Office改卷系統進行分析,提出Office改卷中間件平臺解決方案。中間件平臺實現了Office文檔評分和標準答案生成2大功能,由改卷組件和改卷信息點數據組成,在核心的改卷組件設計中,針對現有方案的不足,提出一種實現隔離代碼對數據庫依賴和接口簡單并能最大限度避免誤判的設計方案,建立在該方案基礎上的中間件平臺,不同的開發語言不同的DBMS只需編寫少量代碼就可以調用本臺實現對Office文檔的自動改卷。同時,本設計方案對于其他課程的自動改卷設計也有一定的借鑒作用。