代美泉
(西安職業技術學院機電工程系,陜西 西安 710032)
在各種計算機輔助教學軟件的研制中,機械類試題自動組卷軟件的開發一直是一個非常活躍的課題,近年來,眾多學者圍繞自動組卷、智能排版、試卷分析等關鍵技術以及圖形試題處理、CAD軟件二次開發等問題作了大量創新性的研究工作[1-2]。機械制圖、機械設計、工程力學等機械類課程,屬于作者所在學院工科專業所必需掌握的專業基礎課,課堂授課及能力考核以圖形對象為主,規范正規的圖形是必須保證的重要內容,因此從90年代末,我院就開始以CAXA為輔助設計軟件對學生進行授課。CAXA電子圖板是北京北航海爾軟件有限公司推出的功能齊全的通用計算機輔助設計CAD軟件,由于具有易學易用的優點,它已經在機械、電子、航空、航天、汽車、船舶、建筑及工程建設等領域得到廣泛的應用,并在眾多院校的機械類課程授課中成為主要的輔助設計CAD軟件。CAXA為用戶提供了二次開發接口,允許用戶根據自己的需求,通過在電子圖板開發平臺基礎之上進行二次開發,擴充電子圖板的功能,實現用戶化、專業化。國內許多大學以及科研院所也針對該技術做了一些研究和應用,并取得了一定成果。浙江大學張宏基于CAXA電子圖版開發了企業定制的EBCAM系統,實現了企業信息集成[3]。沈陽航空工業學院邢艷秋基于CAXA電子圖板開發了功能完善的CAPP系統,實現了工藝文件的定制與自動生成[4]。CAXA軟件在我院教學與科研中的廣泛應用大大提高了我院的辦學質量,也為基于CAXA進行計算機輔助軟件開發奠定了基礎。
目前國內院校的機械類課程試卷命題主要采用手動組卷、半自動組卷、自動組卷3種方式,應用的組卷軟件大多以位圖文件為處理對象,題庫維護是一個相對繁雜的過程,對考教分離的施行帶來了不便[5]。為解決我院目前機械類試題組卷方式的不足,作者對開發機械類試題組卷軟件的關鍵技術進行了充分調研和深入分析,提出了一個以VC++6.0為開發工具,CAXA電子圖板2005為圖形平臺,SQLServer2000為數據庫服務平臺,建立一個界面友好、使用簡便、與CAXA電子圖板無縫集成的機械類試題自動組卷軟件研究方案,從而進一步提高我院機械類試題組卷水平,推動我院計算機輔助教學CAI的進步和發展。
軟件設計中一個非常重要的步驟就是設計軟件的結構,合理的軟件結構應該是分塊的結構,即軟件應該分解為可以單獨命名的且可以訪問的模塊,所有這些模塊集成到一起可以滿足軟件的需求。論文根據軟件需求從功能上把自動組卷軟件劃分為試題庫管理、試卷生成與管理兩大模塊,并對各模塊進行了細分,如圖1所示。
1)試題庫管理功能模塊
試題庫管理包含的主要功能子模塊有:用戶登錄子模塊、試題庫設置子模塊、試題庫管理子模塊。用戶登錄子模塊為授權用戶提供登錄入口,增強系統安全性;試題庫設置子模塊實現試題庫的初始化;試題庫管理子模塊主要實現試題添加、修改、刪除等維護功能,及CAXA矢量圖的存儲、瀏覽與即時修改等處理。
2)試卷生成與管理功能模塊
試卷生成與管理包含的主要功能子模塊有:試卷生成子模塊、試卷管理子模塊、智能排版子模塊。試卷生成子模塊主要實現手動組卷與自動組卷功能;試卷管理模塊主要實現試卷的保存與刪除等管理功能;智能排版模塊可以在CAXA繪圖軟件中規范迅速的實現機械類圖形試題的自動排版。

圖1 軟件功能模塊
CAXA電子圖板的二次開發是在電子圖板開發平臺基礎之上,使用C/C++作為二次開發語言,編譯、連接和調試均在Visual C++6.0環境下進行,添加菜單、對話框、快捷鍵等資源均使用可視化編輯。
用戶進行CAXA二次開發可以參考如下步驟[6]:
1)安裝、設置二次開發平臺;
2)創建用戶二次開發程序;
3)添加應用程序實現代碼;
4)應用程序的編譯、連接;
5)應用程序的運行、調試。
項目采用ADO技術來訪問和管理數據庫,實現自動組卷軟件應用程序對SQL Server試題庫的訪問。VC中使用預編譯指令#import來告訴編譯器將此指令中指定的動態鏈接庫引入工程中,在工程文件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")
如何實現CAXA電子圖版與VC++6.0客戶程序及SQLServer2000數據庫的無縫集成,是軟件開發的主要難點之一。作者在充分研究應用CAXA二次開發接口API函數的基礎上,快捷方便地實現了試題庫管理過程中CAXA矢量圖的存儲、瀏覽與即時修改。
1)CAXA二次開發的數據類型與API函數
用戶在進行二次開發過程中,可以使用所有C/C++支持的數據類型,如int、UINT、double、char、BOOL等,或使用MFC提供的類如CString、Cdialog等來聲明對象及指針、引用,也可以使用 EB_POINT、EB_BOX、EB_NODE、EB_SELECT來定義點、矩形邊界、結點、選擇集,以便于進一步結合API函數高效的處理CAXA電子圖板中所有的圖形元素。
用戶可使用的庫函數包括:Windows API函數、OPENGL庫函數、VC++提供的MFC類、運行庫函數以及CAXA電子圖板提供的應用程序接口API函數。其中電子圖板提供的API函數大大簡化了用戶編程,使用戶簡單的調用一個或幾個函數就可以實現圖形預顯、圖形編輯、數據管理及系統操作等復雜的二次開發問題。
2)CAXA矢量圖的存儲
將試題添加到試題庫時,CAXA圖形文件的存儲有兩種方式:其一是數據庫存儲,即圖形文件直接存儲到SQLServer數據庫;其二是目錄存儲,先將文件復制到指定目錄,然后把目錄加文件名作為該文件的訪問路徑并存儲到SQLServer數據庫。考慮到方式二易于實現且可以大大降低SQLServer數據庫的數據存儲量,因此自動組卷軟件所涉及的CAXA矢量圖均存儲到指定目錄,編程上通過調用Windows API函數CopyFile來完成,代碼如下:
// m_editFilepath:CAXA文件當前存儲路徑;strFileCopyPath:CAXA文件目標存儲路徑+文件名
CopyFile(m_editFilepath, strFileCopyPath,FALSE);
3)CAXA矢量圖的瀏覽與即時修改
首先在試題庫管理窗體中添加一個Picture控件,并設置控件ID為IDC_PICTURE_PREVIEW。CAXA矢量圖的瀏覽與即時修改需調用電子圖板提供的API函數,主要調用參考如下:
…
CRect m_prevRect; // 添加成員變量,用于獲得預顯框的大小
EB_SELECT select; // 添加成員變量,用于選擇集的操作
…
// 得到預顯框大小并將其轉化為客戶區大小
GetDlgItem(IDC_PICTURE_PREVIEW)->Ge tWindowRect(&m_prevRect);
ScreenToClient(&m_prevRect);
…
// 初始化用戶窗口預顯圖形
ebInitDlgPrev(m_hWnd);
…
// 結束用戶窗口預顯圖形
ebDestroyDlgPrev(m_hWnd)
…
// 將預顯框設定為所需的邏輯大小
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);
…
//選擇集發送到CAXA電子圖版客戶區
ebInsSelectToSys (select,False);
…
//釋放不再使用的選擇集
ebFreeSelect(select);
高質量的自動組卷軟件應該能根據教師輸入的命題決策信息,科學高效的自動生成試卷。試卷生成算法是自動組卷軟件的關鍵和核心,算法的優劣直接決定了所生成試卷的質量。如何設計一個算法來抽出滿足要求的試題, 是一個非常復雜的問題,需要綜合考慮對各個知識點所要求掌握的層次、題型、題量以及章節分布等因素。同時,機械類試題自動組卷軟件以圖形為主,與一般試卷生成軟件在排版輸出方面有著較大的差異。如何在技術上實現自動排版,使其既合理又迅速,并符合人工出卷情況,是一個值得研究的問題。
自動組卷在本質上就是利用一定的組卷算法,自動地從題庫中抽取合適的試題,使它們組成的試卷既能滿足教學要求又能滿足用戶要求。如何設計一個算法從題庫中既快又好地抽出一組最符合考方要求的試題,涉及到一個全局尋優和收斂速度快慢的問題[7]。目前有關組卷算法的實現,主要有隨機選取法、回朔試探法、遺傳算法等3種方法以及圍繞這3種方法的改進。采用哪種方法主要由試卷的相關特征決定,例如題型、題量是由算法自動控制還是組卷時指定;每類題型的分數是由算法確定還是組卷時指定;試卷難度是僅控制各試題的平均難度還是要進一步控制各試題難度的分布等。
組卷算法是自動組卷軟件開發的關鍵技術之一,為了保證組卷效率以及試卷的質量,作者在對歷次機械制圖試卷進行統計分析的基礎上,根據制圖課程試卷的特點建立了多方案自動組卷策略,每個組卷方案都由專家組對題型比例做了約束與設置,抽題過程中主要基于選定的自動組卷方案,從題庫中找到和這些指標值相符合的試題即可,同時也要考慮到試題的平均難度和抽取次數等問題,這樣才能組成一份合格的試卷。
簡單的說,本文組卷算法的原理就是:首先將用戶要求量化成組卷約束;然后基于組卷約束建立相應的自動組卷方案;最后根據選定的自動組卷方案在題庫中找到滿足要求的試題即完成了組卷。自動組卷算法流程如圖2所示,為實現隨機組題必須保證所隨機產生的數據不能重復,在進行算法設計及實現的過程中,我們巧妙利用多維數組與隨機數進行各題型試題的抽取,并利用試卷的總體難度系數對所組試題進行優化,取得了較好的效率與質量效果。

圖2 自動組卷算法流程圖
以機械制圖為主的機械類試題自動組卷與一般試題庫在排版輸出方面有著很大的差異[8]。一般試題庫以文字、公式和表達式為主,情況單一,在Microsoft Word軟件中借助回車符,很容易實現自動排版功能;機械制圖試題庫則以圖形為主,而且要求圖形規范,繪圖軟件中對圖形的位置處理多以坐標形式定位,與前者相比,其分頁及版面布置要復雜得多。試卷內容確定以后,如何在技術上實現自動排版,使其既合理又迅速,并符合人工出卷情況,是一個值得研究的問題。作者在深入分析智能排版約束及科學創建試卷模板的基礎上,如圖3所示提出了一種簡便、高效、實用的算法,使智能排版技術在機械類試題自動組卷軟件中得以實現。

圖3 智能排版算法流程圖
基于CAXA的機械類試題自動組卷軟件是作者經過近兩年的研究而最后得到的成果,本文則是對軟件開發中的關鍵技術問題的集中闡述。結論如下:
1)論文深入探討了CACA程序二次開發技術,快捷方便的實現了試題庫管理過程中CAXA矢量圖的存儲、瀏覽與即時修改,解決了現有試題庫管理軟件在處理圖形試題時不能即時維護的難題;
2)基于多方案自動組卷策略設計了高效的自動組卷算法,巧妙利用多維數組與隨機數實現了試題的隨機抽取,并利用試卷的總體難度系數對所組試題進行優化,取得了較好的組題質量;
3)基于創建的制圖試卷模板設計了一種簡便、高效、實用的算法,使智能排版技術在機械類試題自動組卷軟件中得以實現。
[1]王 妍, 關麗杰, 郭 鳳. 工程制圖試題庫管理系統的開發[J]. 佳木斯大學學報, 2008, 26(3):340-342.
[2]薛愛文. 工程制圖練習和試題庫系統的研究與開發[D].太原: 太原理工大學, 2006.
[3]張 宏. 基于CAXA電子圖版的EBCAM系統研究與開發[D]. 杭州: 浙江大學, 2006.
[4]邢艷秋. 基于CAXA電子圖板下CAPP的二次開發[D].沈陽: 沈陽航空工業學院, 2007.
[5]唐曉初, 張 旭, 張 燕. 工程制圖試題庫建設使用發展歷程[J]. 化工高等教育, 2003, 32(5): 70-71.
[6]代美泉. 機械類課程試題自動組卷軟件開發研究[D].西安: 西安理工大學, 2010.
[7]成典勤. 試卷提交與生成系統的設計與實現[D]. 西安: 西安理工大學, 2006.
[8]嚴紹進. 畫法幾何及機械制圖試題庫系統的開發[J].機械管理開發, 2005, 85(4): 40-42.