代美泉
(西安職業(yè)技術(shù)學(xué)院機(jī)電工程系,陜西 西安 710032)
在各種計(jì)算機(jī)輔助教學(xué)軟件的研制中,機(jī)械類試題自動(dòng)組卷軟件的開發(fā)一直是一個(gè)非?;钴S的課題,近年來,眾多學(xué)者圍繞自動(dòng)組卷、智能排版、試卷分析等關(guān)鍵技術(shù)以及圖形試題處理、CAD軟件二次開發(fā)等問題作了大量創(chuàng)新性的研究工作[1-2]。機(jī)械制圖、機(jī)械設(shè)計(jì)、工程力學(xué)等機(jī)械類課程,屬于作者所在學(xué)院工科專業(yè)所必需掌握的專業(yè)基礎(chǔ)課,課堂授課及能力考核以圖形對(duì)象為主,規(guī)范正規(guī)的圖形是必須保證的重要內(nèi)容,因此從90年代末,我院就開始以CAXA為輔助設(shè)計(jì)軟件對(duì)學(xué)生進(jìn)行授課。CAXA電子圖板是北京北航海爾軟件有限公司推出的功能齊全的通用計(jì)算機(jī)輔助設(shè)計(jì)CAD軟件,由于具有易學(xué)易用的優(yōu)點(diǎn),它已經(jīng)在機(jī)械、電子、航空、航天、汽車、船舶、建筑及工程建設(shè)等領(lǐng)域得到廣泛的應(yīng)用,并在眾多院校的機(jī)械類課程授課中成為主要的輔助設(shè)計(jì)CAD軟件。CAXA為用戶提供了二次開發(fā)接口,允許用戶根據(jù)自己的需求,通過在電子圖板開發(fā)平臺(tái)基礎(chǔ)之上進(jìn)行二次開發(fā),擴(kuò)充電子圖板的功能,實(shí)現(xiàn)用戶化、專業(yè)化。國內(nèi)許多大學(xué)以及科研院所也針對(duì)該技術(shù)做了一些研究和應(yīng)用,并取得了一定成果。浙江大學(xué)張宏基于CAXA電子圖版開發(fā)了企業(yè)定制的EBCAM系統(tǒng),實(shí)現(xiàn)了企業(yè)信息集成[3]。沈陽航空工業(yè)學(xué)院邢艷秋基于CAXA電子圖板開發(fā)了功能完善的CAPP系統(tǒng),實(shí)現(xiàn)了工藝文件的定制與自動(dòng)生成[4]。CAXA軟件在我院教學(xué)與科研中的廣泛應(yīng)用大大提高了我院的辦學(xué)質(zhì)量,也為基于CAXA進(jìn)行計(jì)算機(jī)輔助軟件開發(fā)奠定了基礎(chǔ)。
目前國內(nèi)院校的機(jī)械類課程試卷命題主要采用手動(dòng)組卷、半自動(dòng)組卷、自動(dòng)組卷3種方式,應(yīng)用的組卷軟件大多以位圖文件為處理對(duì)象,題庫維護(hù)是一個(gè)相對(duì)繁雜的過程,對(duì)考教分離的施行帶來了不便[5]。為解決我院目前機(jī)械類試題組卷方式的不足,作者對(duì)開發(fā)機(jī)械類試題組卷軟件的關(guān)鍵技術(shù)進(jìn)行了充分調(diào)研和深入分析,提出了一個(gè)以VC++6.0為開發(fā)工具,CAXA電子圖板2005為圖形平臺(tái),SQLServer2000為數(shù)據(jù)庫服務(wù)平臺(tái),建立一個(gè)界面友好、使用簡(jiǎn)便、與CAXA電子圖板無縫集成的機(jī)械類試題自動(dòng)組卷軟件研究方案,從而進(jìn)一步提高我院機(jī)械類試題組卷水平,推動(dòng)我院計(jì)算機(jī)輔助教學(xué)CAI的進(jìn)步和發(fā)展。
軟件設(shè)計(jì)中一個(gè)非常重要的步驟就是設(shè)計(jì)軟件的結(jié)構(gòu),合理的軟件結(jié)構(gòu)應(yīng)該是分塊的結(jié)構(gòu),即軟件應(yīng)該分解為可以單獨(dú)命名的且可以訪問的模塊,所有這些模塊集成到一起可以滿足軟件的需求。論文根據(jù)軟件需求從功能上把自動(dòng)組卷軟件劃分為試題庫管理、試卷生成與管理兩大模塊,并對(duì)各模塊進(jìn)行了細(xì)分,如圖1所示。
1)試題庫管理功能模塊
試題庫管理包含的主要功能子模塊有:用戶登錄子模塊、試題庫設(shè)置子模塊、試題庫管理子模塊。用戶登錄子模塊為授權(quán)用戶提供登錄入口,增強(qiáng)系統(tǒng)安全性;試題庫設(shè)置子模塊實(shí)現(xiàn)試題庫的初始化;試題庫管理子模塊主要實(shí)現(xiàn)試題添加、修改、刪除等維護(hù)功能,及CAXA矢量圖的存儲(chǔ)、瀏覽與即時(shí)修改等處理。
2)試卷生成與管理功能模塊
試卷生成與管理包含的主要功能子模塊有:試卷生成子模塊、試卷管理子模塊、智能排版子模塊。試卷生成子模塊主要實(shí)現(xiàn)手動(dòng)組卷與自動(dòng)組卷功能;試卷管理模塊主要實(shí)現(xiàn)試卷的保存與刪除等管理功能;智能排版模塊可以在CAXA繪圖軟件中規(guī)范迅速的實(shí)現(xiàn)機(jī)械類圖形試題的自動(dòng)排版。
圖1 軟件功能模塊
CAXA電子圖板的二次開發(fā)是在電子圖板開發(fā)平臺(tái)基礎(chǔ)之上,使用C/C++作為二次開發(fā)語言,編譯、連接和調(diào)試均在Visual C++6.0環(huán)境下進(jìn)行,添加菜單、對(duì)話框、快捷鍵等資源均使用可視化編輯。
用戶進(jìn)行CAXA二次開發(fā)可以參考如下步驟[6]:
1)安裝、設(shè)置二次開發(fā)平臺(tái);
2)創(chuàng)建用戶二次開發(fā)程序;
3)添加應(yīng)用程序?qū)崿F(xiàn)代碼;
4)應(yīng)用程序的編譯、連接;
5)應(yīng)用程序的運(yùn)行、調(diào)試。
項(xiàng)目采用ADO技術(shù)來訪問和管理數(shù)據(jù)庫,實(shí)現(xiàn)自動(dòng)組卷軟件應(yīng)用程序?qū)QL Server試題庫的訪問。VC中使用預(yù)編譯指令#import來告訴編譯器將此指令中指定的動(dòng)態(tài)鏈接庫引入工程中,在工程文件stdafx.h中加入如下語句:
#pragma warning (disable: 4146)
#import "c:program filescommon filessystemadomsado15.dll" no_namespace
rename("EOF","adoEOF")
rename("LockTypeEnum","newLockTypeEnum") ename("DataTypeEnum","newDataTypeEnum") ename("FieldAttributeEnum","newFieldAttributeE num")
rename("EditModeEnum","newEditModeEnum") ename("RecordStatusEnum","newRecordStatusEn um")
rename("ParameterDirectionEnum","newParameter DirectionEnum")
如何實(shí)現(xiàn)CAXA電子圖版與VC++6.0客戶程序及SQLServer2000數(shù)據(jù)庫的無縫集成,是軟件開發(fā)的主要難點(diǎn)之一。作者在充分研究應(yīng)用CAXA二次開發(fā)接口API函數(shù)的基礎(chǔ)上,快捷方便地實(shí)現(xiàn)了試題庫管理過程中CAXA矢量圖的存儲(chǔ)、瀏覽與即時(shí)修改。
1)CAXA二次開發(fā)的數(shù)據(jù)類型與API函數(shù)
用戶在進(jìn)行二次開發(fā)過程中,可以使用所有C/C++支持的數(shù)據(jù)類型,如int、UINT、double、char、BOOL等,或使用MFC提供的類如CString、Cdialog等來聲明對(duì)象及指針、引用,也可以使用 EB_POINT、EB_BOX、EB_NODE、EB_SELECT來定義點(diǎn)、矩形邊界、結(jié)點(diǎn)、選擇集,以便于進(jìn)一步結(jié)合API函數(shù)高效的處理CAXA電子圖板中所有的圖形元素。
用戶可使用的庫函數(shù)包括:Windows API函數(shù)、OPENGL庫函數(shù)、VC++提供的MFC類、運(yùn)行庫函數(shù)以及CAXA電子圖板提供的應(yīng)用程序接口API函數(shù)。其中電子圖板提供的API函數(shù)大大簡(jiǎn)化了用戶編程,使用戶簡(jiǎn)單的調(diào)用一個(gè)或幾個(gè)函數(shù)就可以實(shí)現(xiàn)圖形預(yù)顯、圖形編輯、數(shù)據(jù)管理及系統(tǒng)操作等復(fù)雜的二次開發(fā)問題。
2)CAXA矢量圖的存儲(chǔ)
將試題添加到試題庫時(shí),CAXA圖形文件的存儲(chǔ)有兩種方式:其一是數(shù)據(jù)庫存儲(chǔ),即圖形文件直接存儲(chǔ)到SQLServer數(shù)據(jù)庫;其二是目錄存儲(chǔ),先將文件復(fù)制到指定目錄,然后把目錄加文件名作為該文件的訪問路徑并存儲(chǔ)到SQLServer數(shù)據(jù)庫。考慮到方式二易于實(shí)現(xiàn)且可以大大降低SQLServer數(shù)據(jù)庫的數(shù)據(jù)存儲(chǔ)量,因此自動(dòng)組卷軟件所涉及的CAXA矢量圖均存儲(chǔ)到指定目錄,編程上通過調(diào)用Windows API函數(shù)CopyFile來完成,代碼如下:
// m_editFilepath:CAXA文件當(dāng)前存儲(chǔ)路徑;strFileCopyPath:CAXA文件目標(biāo)存儲(chǔ)路徑+文件名
CopyFile(m_editFilepath, strFileCopyPath,FALSE);
3)CAXA矢量圖的瀏覽與即時(shí)修改
首先在試題庫管理窗體中添加一個(gè)Picture控件,并設(shè)置控件ID為IDC_PICTURE_PREVIEW。CAXA矢量圖的瀏覽與即時(shí)修改需調(diào)用電子圖板提供的API函數(shù),主要調(diào)用參考如下:
…
CRect m_prevRect; // 添加成員變量,用于獲得預(yù)顯框的大小
EB_SELECT select; // 添加成員變量,用于選擇集的操作
…
// 得到預(yù)顯框大小并將其轉(zhuǎn)化為客戶區(qū)大小
GetDlgItem(IDC_PICTURE_PREVIEW)->Ge tWindowRect(&m_prevRect);
ScreenToClient(&m_prevRect);
…
// 初始化用戶窗口預(yù)顯圖形
ebInitDlgPrev(m_hWnd);
…
// 結(jié)束用戶窗口預(yù)顯圖形
ebDestroyDlgPrev(m_hWnd)
…
// 將預(yù)顯框設(shè)定為所需的邏輯大小
EB_BOX box={-100.0,-100.0,100.0,100.0};
ebSetDlgPrevWin(box,m_prevRect,&dc,this);
…
//打開選擇集
ebFilePartOpen(select,m_editFilepath);
…
//繪制選擇集
if (ebIfSelectEmpty(select)) {return;}
ebDrawSelect(select,NORMAL);
…
//選擇集發(fā)送到CAXA電子圖版客戶區(qū)
ebInsSelectToSys (select,False);
…
//釋放不再使用的選擇集
ebFreeSelect(select);
高質(zhì)量的自動(dòng)組卷軟件應(yīng)該能根據(jù)教師輸入的命題決策信息,科學(xué)高效的自動(dòng)生成試卷。試卷生成算法是自動(dòng)組卷軟件的關(guān)鍵和核心,算法的優(yōu)劣直接決定了所生成試卷的質(zhì)量。如何設(shè)計(jì)一個(gè)算法來抽出滿足要求的試題, 是一個(gè)非常復(fù)雜的問題,需要綜合考慮對(duì)各個(gè)知識(shí)點(diǎn)所要求掌握的層次、題型、題量以及章節(jié)分布等因素。同時(shí),機(jī)械類試題自動(dòng)組卷軟件以圖形為主,與一般試卷生成軟件在排版輸出方面有著較大的差異。如何在技術(shù)上實(shí)現(xiàn)自動(dòng)排版,使其既合理又迅速,并符合人工出卷情況,是一個(gè)值得研究的問題。
自動(dòng)組卷在本質(zhì)上就是利用一定的組卷算法,自動(dòng)地從題庫中抽取合適的試題,使它們組成的試卷既能滿足教學(xué)要求又能滿足用戶要求。如何設(shè)計(jì)一個(gè)算法從題庫中既快又好地抽出一組最符合考方要求的試題,涉及到一個(gè)全局尋優(yōu)和收斂速度快慢的問題[7]。目前有關(guān)組卷算法的實(shí)現(xiàn),主要有隨機(jī)選取法、回朔試探法、遺傳算法等3種方法以及圍繞這3種方法的改進(jìn)。采用哪種方法主要由試卷的相關(guān)特征決定,例如題型、題量是由算法自動(dòng)控制還是組卷時(shí)指定;每類題型的分?jǐn)?shù)是由算法確定還是組卷時(shí)指定;試卷難度是僅控制各試題的平均難度還是要進(jìn)一步控制各試題難度的分布等。
組卷算法是自動(dòng)組卷軟件開發(fā)的關(guān)鍵技術(shù)之一,為了保證組卷效率以及試卷的質(zhì)量,作者在對(duì)歷次機(jī)械制圖試卷進(jìn)行統(tǒng)計(jì)分析的基礎(chǔ)上,根據(jù)制圖課程試卷的特點(diǎn)建立了多方案自動(dòng)組卷策略,每個(gè)組卷方案都由專家組對(duì)題型比例做了約束與設(shè)置,抽題過程中主要基于選定的自動(dòng)組卷方案,從題庫中找到和這些指標(biāo)值相符合的試題即可,同時(shí)也要考慮到試題的平均難度和抽取次數(shù)等問題,這樣才能組成一份合格的試卷。
簡(jiǎn)單的說,本文組卷算法的原理就是:首先將用戶要求量化成組卷約束;然后基于組卷約束建立相應(yīng)的自動(dòng)組卷方案;最后根據(jù)選定的自動(dòng)組卷方案在題庫中找到滿足要求的試題即完成了組卷。自動(dòng)組卷算法流程如圖2所示,為實(shí)現(xiàn)隨機(jī)組題必須保證所隨機(jī)產(chǎn)生的數(shù)據(jù)不能重復(fù),在進(jìn)行算法設(shè)計(jì)及實(shí)現(xiàn)的過程中,我們巧妙利用多維數(shù)組與隨機(jī)數(shù)進(jìn)行各題型試題的抽取,并利用試卷的總體難度系數(shù)對(duì)所組試題進(jìn)行優(yōu)化,取得了較好的效率與質(zhì)量效果。
圖2 自動(dòng)組卷算法流程圖
以機(jī)械制圖為主的機(jī)械類試題自動(dòng)組卷與一般試題庫在排版輸出方面有著很大的差異[8]。一般試題庫以文字、公式和表達(dá)式為主,情況單一,在Microsoft Word軟件中借助回車符,很容易實(shí)現(xiàn)自動(dòng)排版功能;機(jī)械制圖試題庫則以圖形為主,而且要求圖形規(guī)范,繪圖軟件中對(duì)圖形的位置處理多以坐標(biāo)形式定位,與前者相比,其分頁及版面布置要復(fù)雜得多。試卷內(nèi)容確定以后,如何在技術(shù)上實(shí)現(xiàn)自動(dòng)排版,使其既合理又迅速,并符合人工出卷情況,是一個(gè)值得研究的問題。作者在深入分析智能排版約束及科學(xué)創(chuàng)建試卷模板的基礎(chǔ)上,如圖3所示提出了一種簡(jiǎn)便、高效、實(shí)用的算法,使智能排版技術(shù)在機(jī)械類試題自動(dòng)組卷軟件中得以實(shí)現(xiàn)。
圖3 智能排版算法流程圖
基于CAXA的機(jī)械類試題自動(dòng)組卷軟件是作者經(jīng)過近兩年的研究而最后得到的成果,本文則是對(duì)軟件開發(fā)中的關(guān)鍵技術(shù)問題的集中闡述。結(jié)論如下:
1)論文深入探討了CACA程序二次開發(fā)技術(shù),快捷方便的實(shí)現(xiàn)了試題庫管理過程中CAXA矢量圖的存儲(chǔ)、瀏覽與即時(shí)修改,解決了現(xiàn)有試題庫管理軟件在處理圖形試題時(shí)不能即時(shí)維護(hù)的難題;
2)基于多方案自動(dòng)組卷策略設(shè)計(jì)了高效的自動(dòng)組卷算法,巧妙利用多維數(shù)組與隨機(jī)數(shù)實(shí)現(xiàn)了試題的隨機(jī)抽取,并利用試卷的總體難度系數(shù)對(duì)所組試題進(jìn)行優(yōu)化,取得了較好的組題質(zhì)量;
3)基于創(chuàng)建的制圖試卷模板設(shè)計(jì)了一種簡(jiǎn)便、高效、實(shí)用的算法,使智能排版技術(shù)在機(jī)械類試題自動(dòng)組卷軟件中得以實(shí)現(xiàn)。
[1]王 妍, 關(guān)麗杰, 郭 鳳. 工程制圖試題庫管理系統(tǒng)的開發(fā)[J]. 佳木斯大學(xué)學(xué)報(bào), 2008, 26(3):340-342.
[2]薛愛文. 工程制圖練習(xí)和試題庫系統(tǒng)的研究與開發(fā)[D].太原: 太原理工大學(xué), 2006.
[3]張 宏. 基于CAXA電子圖版的EBCAM系統(tǒng)研究與開發(fā)[D]. 杭州: 浙江大學(xué), 2006.
[4]邢艷秋. 基于CAXA電子圖板下CAPP的二次開發(fā)[D].沈陽: 沈陽航空工業(yè)學(xué)院, 2007.
[5]唐曉初, 張 旭, 張 燕. 工程制圖試題庫建設(shè)使用發(fā)展歷程[J]. 化工高等教育, 2003, 32(5): 70-71.
[6]代美泉. 機(jī)械類課程試題自動(dòng)組卷軟件開發(fā)研究[D].西安: 西安理工大學(xué), 2010.
[7]成典勤. 試卷提交與生成系統(tǒng)的設(shè)計(jì)與實(shí)現(xiàn)[D]. 西安: 西安理工大學(xué), 2006.
[8]嚴(yán)紹進(jìn). 畫法幾何及機(jī)械制圖試題庫系統(tǒng)的開發(fā)[J].機(jī)械管理開發(fā), 2005, 85(4): 40-42.