羅定福, 陳永松, 吳權(quán)軒
(廣東松山職業(yè)技術(shù)學(xué)院 計(jì)算機(jī)系, 韶關(guān) 512126)
大學(xué)計(jì)算機(jī)基礎(chǔ)課程最重要的組成部分是Office。就Office文檔的自動(dòng)改卷提供一個(gè)可行的方案,開(kāi)發(fā)Office操作題改卷中間件平臺(tái)[1],通過(guò)中間件平臺(tái)連接不同的考試系統(tǒng)和Office文檔,不同的考試系統(tǒng)不需要再寫(xiě)復(fù)雜的代碼,只需要調(diào)用中間件平臺(tái)的相關(guān)組件就可以快速實(shí)現(xiàn)Office自動(dòng)改卷,當(dāng)教學(xué)內(nèi)容更新之后,考試系統(tǒng)不需要改動(dòng),只要使用最新版的中間件即可。
國(guó)內(nèi)高職院校關(guān)于Office改卷系統(tǒng)的研究主要有兩種,一是構(gòu)造一個(gè)Office軟件的仿真系統(tǒng)[2],通過(guò)仿真系統(tǒng)模擬Office軟件的環(huán)境界面,考試時(shí)記錄考生的操作步驟來(lái)進(jìn)行自動(dòng)改卷;二是通過(guò)引用相關(guān)組件,利用VBA技術(shù)[3、4、5]提取文檔信息和標(biāo)準(zhǔn)答案比較實(shí)現(xiàn)自動(dòng)改卷。文章提出一種可行方案,將自動(dòng)改卷的操作封裝為中間件,不同語(yǔ)言不同的DBMS,只要了解中間件的接口,編寫(xiě)少量代碼就可以實(shí)現(xiàn)對(duì)Office文檔的自動(dòng)改卷。
開(kāi)發(fā)出一個(gè)Office操作題改卷中間件,給軟件開(kāi)發(fā)者提供了Office文檔自動(dòng)改卷的數(shù)據(jù)存取層,屏蔽Office程序的接口細(xì)節(jié)和實(shí)現(xiàn)邏輯,做成組件式的系統(tǒng)[6],需要時(shí)將不同組件進(jìn)行組裝,建立新系統(tǒng)的代價(jià)將大大降低。
改卷中間件實(shí)現(xiàn)的主要功能有兩個(gè)。一是將考生完成的Office文檔(以下簡(jiǎn)稱(chēng)考生文檔)和標(biāo)準(zhǔn)答案進(jìn)行比較,實(shí)現(xiàn)對(duì)文檔的評(píng)分;二是從教師完成的具有標(biāo)準(zhǔn)答案性質(zhì)的文檔(以下簡(jiǎn)稱(chēng)樣文)提取信息作為標(biāo)準(zhǔn)答案。
改卷中間件平臺(tái)的總體設(shè)計(jì)目標(biāo)是在應(yīng)用程序和Office文檔之間,開(kāi)發(fā)出一個(gè)實(shí)現(xiàn)應(yīng)用程序?qū)ξ臋n進(jìn)行自動(dòng)改卷的專(zhuān)業(yè)中間件平臺(tái)。通過(guò)改卷中間件平臺(tái)就可以控制Office實(shí)現(xiàn)自動(dòng)改卷,可以用不同的程序設(shè)計(jì)語(yǔ)言和DBMS進(jìn)行調(diào)用,實(shí)現(xiàn)可重用性、可維護(hù)性。
改卷組件實(shí)現(xiàn)Office文檔評(píng)分和標(biāo)準(zhǔn)答案生成兩大功能。為了減輕開(kāi)發(fā)難度,改卷組件采用與VBA技術(shù)語(yǔ)法相近的VB.NET作為組件開(kāi)發(fā)語(yǔ)言。利用“類(lèi)庫(kù)”[7]開(kāi)發(fā)改卷組件,最終生成動(dòng)態(tài)鏈接庫(kù)(DLL)文件。通過(guò).NET平臺(tái)提供的工具,可以將DLL偽造一個(gè)COM接口[8]并注冊(cè)到系統(tǒng)中。通過(guò)這個(gè)偽COM接口來(lái)實(shí)現(xiàn)對(duì).NET的DLL的調(diào)用。本系統(tǒng)改卷信息點(diǎn)存儲(chǔ)在A(yíng)ccess表中。調(diào)用時(shí),可以根據(jù)需要將數(shù)據(jù)表導(dǎo)入到不同的DBMS中。
3.2.1 改卷組件建模
改卷中間件平臺(tái)最重要的組成部分是改卷組件,它的主要工作流程是通過(guò)VBA技術(shù)調(diào)用Word、Excel、PowerPoint的COM組件的不同對(duì)象和屬性,達(dá)到自動(dòng)改卷和答案錄入的目的。改卷組件分為實(shí)體類(lèi)和操作類(lèi)。實(shí)體類(lèi)封裝要操作的數(shù)據(jù),隔離代碼對(duì)數(shù)據(jù)庫(kù)的依賴(lài)[9],不同數(shù)據(jù)庫(kù)可以通過(guò)組件的接口發(fā)送和接收實(shí)體類(lèi)數(shù)據(jù)。而操作類(lèi)是依據(jù)實(shí)體類(lèi)的數(shù)據(jù)對(duì)文檔進(jìn)行的操作從而實(shí)現(xiàn)自動(dòng)改卷和答案生成功能。
1)實(shí)體類(lèi)
如果將每種操作類(lèi)型定義為一個(gè)實(shí)體類(lèi)[4],每個(gè)操作點(diǎn)定義為一個(gè)屬性,則不僅設(shè)計(jì)非常復(fù)雜,而且會(huì)降低組件的可重用性。為了保證在后期設(shè)計(jì)中對(duì)外接口始終保持不變[10]。只設(shè)計(jì)了三個(gè)實(shí)體:Word、Excel、PowerPoint,分別對(duì)應(yīng)于Word、Excel、PowerPoint所有的操作,在類(lèi)的實(shí)例中通過(guò)類(lèi)型號(hào)(num)屬性區(qū)分該實(shí)例為何種類(lèi)型的操作,不同實(shí)例的操作點(diǎn)屬性名使用統(tǒng)一名稱(chēng),即第1個(gè)操作點(diǎn)屬性用point[1],第r個(gè)用point [r]。同時(shí),由于Word、Excel、PowerPoint實(shí)體有不少屬性是相同的,因此設(shè)計(jì)一個(gè)parert entity為父類(lèi),然后通過(guò)繼承生成Word entity、Excel entity、PowerPoint entity。實(shí)體圖如圖1所示。
圖1 實(shí)體圖
實(shí)體圖屬性說(shuō)明:mark:操作實(shí)例總得分;error:錯(cuò)誤信息;para1、para2:特殊參數(shù);position:改卷點(diǎn)地點(diǎn)(位置);sheetnum:工作表序號(hào);cell address:?jiǎn)卧竦刂坊蚍秶?;slide num:幻燈片序號(hào);position:對(duì)象序號(hào);point mark[1]:第1個(gè)改卷點(diǎn)分值,point[r]:第r個(gè)改卷點(diǎn)分值。特殊參數(shù)用于特殊改卷信息的輸入,如替換操作的替換次數(shù)等。
2)操作類(lèi)
改卷組件操作類(lèi)實(shí)現(xiàn)本系統(tǒng)兩個(gè)主要功能:1.讀取考生文檔,返回某項(xiàng)操作得分;2.讀取樣文,獲取某項(xiàng)操作不同改卷點(diǎn)標(biāo)準(zhǔn)答案信息。操作類(lèi)由Word操作類(lèi)、Excel操作類(lèi)、PowerPoint操作類(lèi)組成,三者的設(shè)計(jì)方法相似,以Word操作類(lèi)為例進(jìn)行介紹。
Word操作類(lèi)分為Word評(píng)分類(lèi)(WordMark類(lèi))和Word標(biāo)記類(lèi)(WordTab類(lèi))。評(píng)分類(lèi)實(shí)現(xiàn)考生文檔評(píng)分,標(biāo)記類(lèi)實(shí)現(xiàn)標(biāo)準(zhǔn)答案的生成和檢驗(yàn)。評(píng)分類(lèi)和標(biāo)記類(lèi)都是對(duì)Word文檔進(jìn)行操作,有不少操作和屬性是相同的,因此先設(shè)計(jì)一個(gè)基礎(chǔ)Word程序類(lèi),然后通過(guò)繼承生成評(píng)分類(lèi)和標(biāo)記類(lèi)。在評(píng)分類(lèi)中, Mark方法功能為考生Word文檔評(píng)分,在標(biāo)記類(lèi)中,AnswerTab方法功能為樣文標(biāo)準(zhǔn)答案的生成和檢驗(yàn),BlankTab用于對(duì)空白文檔評(píng)分,空白文檔評(píng)分主要是為了避免樣文和空白文檔某項(xiàng)改卷點(diǎn)結(jié)果相同,從而出現(xiàn)白送分的情況。Tab、BlankTab方法的評(píng)分與AnswerTab方法中檢驗(yàn)答案的操作流程基本相同,而標(biāo)準(zhǔn)答案的生成只需在上述基礎(chǔ)上增加少數(shù)語(yǔ)句就可實(shí)現(xiàn),而且這些語(yǔ)句的執(zhí)行對(duì)性能幾乎無(wú)影響,為了提高編寫(xiě)代碼的效率,提高系統(tǒng)的可重用性,系統(tǒng)在設(shè)計(jì)時(shí),上述3個(gè)方法通過(guò)同一個(gè)操作來(lái)實(shí)現(xiàn)。
在實(shí)際設(shè)計(jì)中,上述操作通過(guò)第三個(gè)類(lèi)Word打分類(lèi)(WordTabing)的評(píng)分方法(WordMark)實(shí)現(xiàn),為了避免每次調(diào)用WordMark方法都進(jìn)行實(shí)例化,WordMark方法聲明為靜態(tài)方法[11](VB.NET稱(chēng)為共享方法)。
出于系統(tǒng)運(yùn)行效率及教師生成答案的操作習(xí)慣的考慮,評(píng)分類(lèi)調(diào)用WordMark方法采取的操作方式是對(duì)考生文檔的多個(gè)操作實(shí)例同時(shí)進(jìn)行評(píng)分,而標(biāo)記類(lèi)調(diào)用WordMark方法采取的操作方式是對(duì)樣文或空白文檔的單個(gè)操作實(shí)例進(jìn)行檢驗(yàn)和生成答案。這樣就存在一個(gè)矛盾,評(píng)分類(lèi)調(diào)用時(shí)按照多個(gè)實(shí)例的集合進(jìn)行操作,標(biāo)記類(lèi)調(diào)用時(shí)對(duì)單個(gè)實(shí)例進(jìn)行操作,為了即能夠?qū)线M(jìn)行操作也能對(duì)單個(gè)對(duì)象進(jìn)行操作。設(shè)計(jì)接口IwordOj。該接口包括Count屬性和Item屬性,Count屬性為返回實(shí)例的個(gè)數(shù),Item(n)返回第n個(gè)實(shí)例。在評(píng)分類(lèi)和標(biāo)記類(lèi)分別實(shí)現(xiàn)該接口,在WordMark方法中以該接口作為WordMark方法的輸入?yún)?shù),從而使WordMark方法同時(shí)實(shí)現(xiàn)對(duì)單一實(shí)例和實(shí)例集合的操作。
3.2.2 改卷信息點(diǎn)數(shù)據(jù)設(shè)計(jì)
改卷中間件平臺(tái)的目的是建立一個(gè)不同DBMS都可以調(diào)用的Office文檔改卷服務(wù)。實(shí)體類(lèi)各個(gè)屬性的含義存儲(chǔ)在A(yíng)ccess表中,該表的結(jié)構(gòu)與改卷組件實(shí)體類(lèi)的結(jié)構(gòu)相類(lèi)似,但增加了解釋(Explain)屬性,去掉了不需要說(shuō)明含義的一些屬性,由于數(shù)據(jù)庫(kù)表不允許出現(xiàn)數(shù)組屬性,將x(m)改成xm屬性。解釋屬性用于對(duì)某個(gè)實(shí)例的輸入進(jìn)行一些必要的說(shuō)明。
本系統(tǒng)中,實(shí)現(xiàn)改卷的代碼主要集中在Word打分類(lèi)的評(píng)分方法編寫(xiě)。
在本系統(tǒng)中,改卷組件的主體為“類(lèi)庫(kù)”,由于類(lèi)庫(kù)輸出類(lèi)型無(wú)法直接啟動(dòng)。為了能對(duì)組件中編寫(xiě)的代碼進(jìn)行調(diào)試,需要編寫(xiě)一個(gè)實(shí)現(xiàn)調(diào)用類(lèi)庫(kù)實(shí)現(xiàn)評(píng)分和答案信息錄入的簡(jiǎn)單項(xiàng)目,考慮到用單機(jī)版程序進(jìn)行調(diào)試最為方便,該調(diào)試項(xiàng)目為用C#開(kāi)發(fā)的WinForm程序。
前面設(shè)計(jì)生成改卷組件文件名為Marking.DLL,是.NET平臺(tái)的“類(lèi)庫(kù)”。建立在.NET平臺(tái)的應(yīng)用程序,可以直接調(diào)用Marking.DLL實(shí)現(xiàn)自動(dòng)改卷,如果是其他語(yǔ)言的應(yīng)用程序,無(wú)法直接調(diào)用。
Marking.DLL設(shè)計(jì)中,使用了集合類(lèi)型,有些方法的參數(shù)為復(fù)雜數(shù)據(jù)類(lèi)型,然而在很多語(yǔ)言中,不支持集合類(lèi)型,也無(wú)法正常調(diào)用復(fù)雜類(lèi)型參數(shù)的方法,為了使不同程序語(yǔ)言開(kāi)發(fā)的應(yīng)用程序,都能正常調(diào)用,平臺(tái)新建一個(gè)專(zhuān)門(mén)作為接口的“COM類(lèi)庫(kù)”,在該類(lèi)庫(kù)中,將復(fù)雜數(shù)據(jù)類(lèi)型的各個(gè)字段轉(zhuǎn)換為類(lèi)的屬性,集合類(lèi)型改用索引器,在類(lèi)的方法中,利用屬性和索引器構(gòu)造復(fù)雜數(shù)據(jù)類(lèi)型和集合類(lèi)型。同時(shí),為了簡(jiǎn)化接口,在類(lèi)庫(kù)中定義AnsInfo方法,將改卷點(diǎn)字符串(由多個(gè)改卷點(diǎn)連接生成)轉(zhuǎn)換為類(lèi)的屬性。最后定義Mark方法,功能是依次調(diào)用AnsInfo方法和改卷方法。引入上述方法后接口單一,調(diào)用也較方便。結(jié)果直接生成DLL和COM文件。其他語(yǔ)言調(diào)用COM文件時(shí),直接調(diào)用Mark方法實(shí)現(xiàn)改卷。經(jīng)多種語(yǔ)言調(diào)用測(cè)試,運(yùn)行結(jié)果相當(dāng)理想。例如用JavaScript調(diào)用本平臺(tái)COM組件實(shí)現(xiàn)Word文檔的自動(dòng)改卷,可以編寫(xiě)如下函數(shù):
function Mark(FileName,strAnswer)
{var Mark = new ActiveXObject("ComMark.Mark");
var s = Mark.WordTab(FileName,strAnswer);
alert("最后得分為"+s);}
其中FileName為待檢驗(yàn)文件名,strAnswer為改卷點(diǎn)字符串,例如檢驗(yàn)隸書(shū)20號(hào)新建樣式,并將新建樣式應(yīng)用到文檔第3段,總分4分,則賦值為"ClassNo11||x0,新建||n0,1||x1,隸書(shū)||n1,1|x4,20||n4,1||
對(duì)全院近三年使用本系統(tǒng)的非計(jì)算機(jī)專(zhuān)業(yè)的計(jì)算機(jī)統(tǒng)考成績(jī)進(jìn)行統(tǒng)計(jì),如表1所示。
表1 近三年計(jì)算機(jī)基礎(chǔ)考級(jí)成績(jī)
可以看到,合格率和平均分都名列前茅,應(yīng)用效果極好。
本文通過(guò)對(duì)現(xiàn)行Office改卷系統(tǒng)進(jìn)行分析,提出Office改卷中間件平臺(tái)解決方案。中間件平臺(tái)實(shí)現(xiàn)了Office文檔評(píng)分和標(biāo)準(zhǔn)答案生成2大功能,由改卷組件和改卷信息點(diǎn)數(shù)據(jù)組成,在核心的改卷組件設(shè)計(jì)中,針對(duì)現(xiàn)有方案的不足,提出一種實(shí)現(xiàn)隔離代碼對(duì)數(shù)據(jù)庫(kù)依賴(lài)和接口簡(jiǎn)單并能最大限度避免誤判的設(shè)計(jì)方案,建立在該方案基礎(chǔ)上的中間件平臺(tái),不同的開(kāi)發(fā)語(yǔ)言不同的DBMS只需編寫(xiě)少量代碼就可以調(diào)用本臺(tái)實(shí)現(xiàn)對(duì)Office文檔的自動(dòng)改卷。同時(shí),本設(shè)計(jì)方案對(duì)于其他課程的自動(dòng)改卷設(shè)計(jì)也有一定的借鑒作用。