趙建國, 魏青鋒
(鄭州大學(xué)機(jī)械工程學(xué)院,河南 鄭州 450001)
“高教杯”制圖競賽自 2008年以來已舉辦3屆,在全國高校產(chǎn)生了廣泛影響,各省、地區(qū)都相繼舉辦區(qū)域性的制圖競賽和選拔賽。制圖競賽分機(jī)械、建筑、水利3個類別,競賽內(nèi)容分尺規(guī)繪圖、計算機(jī)二維繪圖和三維建模3項,同時又有團(tuán)體賽和個人參賽兩種模式。在獎項設(shè)置上,設(shè)有團(tuán)體一、二等獎和單項個人一、二等獎和個人全能獎。全能獎的標(biāo)準(zhǔn)是單項個人全部是一等獎的考生獲全能一等獎;單項個人全部是二等獎及以上的考生獲全能二等獎。競賽的時間一般是2天,在全國的制圖競賽中,參賽高校有百余所,參賽選手千余名。制圖競賽要在競賽前1 ~2天內(nèi)完成千余考生的考場安排、在競賽結(jié)束后數(shù)個小時內(nèi)完成成績的統(tǒng)計與排名,時間非常緊。另外,獎項的設(shè)置規(guī)則尤其是全能獎的設(shè)置,即使使用了輔助的表格工具,如使用Excel進(jìn)行統(tǒng)計,要在大量的信息里靠人工篩選,效率十分低。由于比賽科目、內(nèi)容、及獎項設(shè)置等因素,現(xiàn)有的成績管理類軟件不能完全適應(yīng)考試的需要[1-2],因此需要開發(fā)一個競賽管理系統(tǒng)以節(jié)省人力,提高效率。
為充分滿足制圖競賽的實際工作需要,通過調(diào)研,在競賽管理需求進(jìn)行分析的基礎(chǔ)上[3],設(shè)計系統(tǒng)主要功能模塊如圖1所示。
圖1 系統(tǒng)功能模塊框圖
各模塊及其子模塊的相關(guān)功能描述如下:
1)用戶管理模塊:以系統(tǒng)管理員的權(quán)限管理所有用戶的登錄信息,以及普通用戶修改自己的登錄信息。
2)參賽信息管理模塊:分為參賽單位信息管理模塊和考生信息管理模塊。前者用于管理參賽單位的領(lǐng)隊、指導(dǎo)老師、參賽科目等基本信息,后者用于管理考生的姓名、單位、照片、參賽模式等基本信息。
3)考試安排模塊:分為考生編號生成、考場信息管理和隨機(jī)排號3個子模塊。考生編號生成模塊用于生成考生在考場上的唯一準(zhǔn)考證號,該編號將作為考生試卷的唯一標(biāo)識;考場信息管理用于設(shè)置并修改考場信息;隨機(jī)排號模塊使用隨機(jī)排號策略為考生自動安排考場及座號。
4)成績管理模塊:分為成績錄入、成績匯總和獲獎排名3個模塊。成績錄入模塊用于管理成績錄入、修改和查詢;成績匯總用于分析與查看總體成績;獎項設(shè)置與排名模塊用于設(shè)置獎項并篩選出獲獎單位和考生的各項信息。
5)打印系統(tǒng):打印模塊分為打印準(zhǔn)考證、打印考場桌面貼條和打印成績單3個子模塊。前兩個子模塊是考場安排模塊的輔助模塊,主要用于從數(shù)據(jù)庫中取出數(shù)據(jù)信息自動生成并打印考生準(zhǔn)考證和考場桌面貼條,根據(jù)準(zhǔn)考證和桌面貼條上的考生信息和考場座號,考生就能夠簡單、快速地找到自己的位置;打印成績單用于在篩選出獲獎名單之后打印獲獎考生的成績。
以上各功能模塊均以數(shù)據(jù)庫為基礎(chǔ)且相對獨立,按照競賽實際日程順序協(xié)同工作,有效地完成了系統(tǒng)功能,提高了競賽管理事務(wù)的效率。
在系統(tǒng)主要功能分析和競賽日程設(shè)計軟件系統(tǒng)流程,總體框圖如圖2所示。
圖2 系統(tǒng)流程圖
Access數(shù)據(jù)庫是微軟公司發(fā)布的Office軟件包中的關(guān)系型數(shù)據(jù)庫軟件,具有存儲方式簡單、界面友好、易操作等特點,是開發(fā)單機(jī)小型數(shù)據(jù)庫應(yīng)用系統(tǒng)的理想工具。本系統(tǒng)使用Access軟件創(chuàng)建數(shù)據(jù)庫,根據(jù)系統(tǒng)功能將數(shù)據(jù)庫表分為學(xué)校信息表,學(xué)生信息表,尺規(guī)繪圖考場信息表,計算機(jī)繪圖考場信息表,成績表,用戶信息表[4]。部分?jǐn)?shù)據(jù)庫的結(jié)構(gòu)及其關(guān)系如圖3所示。
圖3 部分?jǐn)?shù)據(jù)表的結(jié)構(gòu)及其關(guān)系
系統(tǒng)在Windows XP環(huán)境下采用Visual Basic 6.0+Access數(shù)據(jù)庫編程實現(xiàn)系統(tǒng)功能。輔助開發(fā)工具有Excel 2003和Crystal Reports 11.5。其中主要有ADO數(shù)據(jù)訪問、Excel VBA 二次開發(fā)、Window API和水晶報表等技術(shù)。下面對使用到的關(guān)鍵技術(shù)加以介紹。
ADO是微軟公司發(fā)布的一個用于存取數(shù)據(jù)源的COM組件,它提供了編程語言和統(tǒng)一數(shù)據(jù)訪問方式OLE DB的一個中間層,它允許開發(fā)人員編寫訪問數(shù)據(jù)的代碼而不用關(guān)心數(shù)據(jù)庫是如何實現(xiàn)的,而只關(guān)心數(shù)據(jù)庫的連接。其主要優(yōu)點是易于使用、高速度、低內(nèi)存支出和占用磁盤空間較少[5]。
ADO是數(shù)據(jù)訪問對象DAO、遠(yuǎn)程數(shù)據(jù)對象RDO和開方數(shù)據(jù)互連ODBC 3種方式的擴(kuò)展,DAO或RDO是層次型的,ADO則定義了一組平面型頂級對象,它包含較少的對象,更多的屬性、方法和事件[6]。ADO對象模型如圖4所示。
系統(tǒng)中使用ADO數(shù)據(jù)訪問技術(shù),主要實現(xiàn)數(shù)據(jù)庫中所有信息的錄入、修改、刪除以及查詢等功能。
Windows API (Application Programming Inter-face)即 Windows應(yīng)用編程接口,它是Windows的核心,提供了許多用于Windows編程的功能模塊,運(yùn)用這些功能模塊,可以使應(yīng)用程序具有圖形用戶界面、顯示圖形和格式化文本、并可以方便的管理系統(tǒng)對象如內(nèi)存、文件和進(jìn)程。
圖4 ADO對象模型
Excel是微軟推出的Office組件之一,是一個功能強(qiáng)大的電子表格工具。VBA (Visual Basic For Application)是開發(fā)語言Visual Basic的子集,是Office組件的開發(fā)接口,在Excel中可以使用VBA編程實現(xiàn)自動化,并擴(kuò)展應(yīng)用程序的功能[7]。
該系統(tǒng)中使用Windows API函數(shù)將Excel表格嵌入到系統(tǒng)窗體中,利用Excel表格自身強(qiáng)大的數(shù)據(jù)處理功能匯總數(shù)據(jù),結(jié)合VBA編程實現(xiàn)包含照片信息的批量錄入功能。
Crystal Reports(水晶報表)是一款商務(wù)智能(BI)軟件,主要用于設(shè)計及產(chǎn)生報表。水晶報表是業(yè)內(nèi)最專業(yè)、功能最強(qiáng)的報表系統(tǒng),它除了強(qiáng)大的報表功能外,最大的優(yōu)勢是實現(xiàn)了與絕大多數(shù)流行開發(fā)工具的集成和接口。
該系統(tǒng)中使用水晶報表實現(xiàn)打印模塊的功能。
下面僅介紹打印模塊的實現(xiàn)方法和步驟,由于篇幅有限,其余部分的實現(xiàn)過程不再贅述。
打印系統(tǒng)的主要功能包括打印準(zhǔn)考證、考場桌面貼條。該模塊對于實現(xiàn)考試安排的自動化,提高考試安排的效率、促進(jìn)考試的有序進(jìn)行具有很大作用。實現(xiàn)該模塊的功能需要從數(shù)據(jù)庫中提取出相關(guān)信息,并按照一定的排版格式將信息一次性打印輸入。其中,從數(shù)據(jù)庫中提取數(shù)據(jù)和排版是設(shè)計該模塊的重點,同時要對排版后的結(jié)果實現(xiàn)打印功能。在這種情況下,使用報表工具比直接編程打印更直接、更高效,輸出格式更靈活,打印質(zhì)量也更高。
VB程序的內(nèi)置報表功能相對較弱,而專業(yè)的報表工具Crystal Reports功能強(qiáng)大,同時具有效率高、集成性好等優(yōu)點[8]。我們選擇 Crystal Reports(水晶報表)來實現(xiàn)打印系統(tǒng)的功能。在本系統(tǒng)中,選用Crystal Reports XI。
水晶報表程序控件有兩種模式,即:PULL(拉)模式和 PUSH(推)模式。PULL模式代碼量少、執(zhí)行效率高;PUSH模式可以公用系統(tǒng)數(shù)據(jù)庫連接,減少數(shù)據(jù)庫連接損耗、可以自由組合多數(shù)據(jù)源。
比較二者的特點,為了減少數(shù)據(jù)庫連接的損耗,我們選擇PUSH模式來控制報表。
1)模板設(shè)計
為了使打印出的準(zhǔn)考證及考場桌面貼條整齊、美觀,需要首先設(shè)計報表模板。
運(yùn)行Crystal Reports,新建一個空白報表,在彈出的數(shù)據(jù)庫專家對話框中選擇[創(chuàng)建新連接]-[僅字段定義],然后選擇字段定義文件或者創(chuàng)建新的字段文件,選定字段定義文件后,點擊確定。字段定義文件可以使用記事本編輯,格式如圖5所示。
圖5 TTX文件結(jié)構(gòu)
其中,圖片用 BLOB類型,相當(dāng)于 Access中的OLE對象,即二進(jìn)制文件。
然后將報表選定的字體拖放到詳細(xì)資料區(qū),合理調(diào)整各部分的大小和位置,并使用報表的其它功能對設(shè)計進(jìn)行優(yōu)化,如使用組專家對數(shù)據(jù)按單位(或考場)分組、使用節(jié)專家使報表分兩列顯示等。完成報表設(shè)計后將報表另存為.rpt文件。設(shè)計效果如圖6所示。
圖6 準(zhǔn)考證模板
2)設(shè)計打印窗體和程序控制
完成報表模板設(shè)計后,剩下的工作就是設(shè)計打印窗體,編寫代碼從數(shù)據(jù)源中取出數(shù)據(jù)并調(diào)用模板。
在VB系統(tǒng)里新建窗體Form1,添加水晶報表瀏覽控件CrystalActiveXReportViewer,命名為CRViewer1。在窗體的加載事件里,編寫從數(shù)據(jù)庫取出數(shù)據(jù)、調(diào)用模板及給模板賦值的代碼。代碼片斷如下:
'定義水晶報表應(yīng)用程序?qū)ο?/p>
Private bjCRApp As New CRAXDRT.Application
'定義報表對象
Private objCRReport As New CRAXDRT.Report Private Sub Form_Load()
'獲取記錄集
strsql = "select 單位,姓名,考場號,座號,編號,照片 from students"
rs.CursorLocation = adUseClient
'打開記錄集
rs.Open strsql,conn,3,3
'賦給報表數(shù)據(jù)
'objCRReport.Database.SetDataSource rs
'報表顯示外觀設(shè)置
'顯示導(dǎo)出按鈕
CRViewer1.EnableExportButton = True
圖7 準(zhǔn)考證效果圖
本文開發(fā)一個新的制圖競賽管理系統(tǒng),該系統(tǒng)已在河南省兩屆制圖競賽中使用,運(yùn)行良好,為高效、有序地組織制圖大賽提供了保障。該系統(tǒng)具有如下特點:① 處理數(shù)據(jù)效率高。信息的錄入及輸入實現(xiàn)了批量化,處理信息更簡單快捷。② 打印效果好。系統(tǒng)使用了專業(yè)的報表工具 Crystal Reports設(shè)計并打印準(zhǔn)考證及桌面貼條,模板設(shè)計更美觀,輸出信息可以方便地進(jìn)行分組和分節(jié)管理。③ 考試管理更科學(xué)、試卷保密性更好??忌幪柡妥柖际请S機(jī)生成的,而編號只出現(xiàn)在桌面貼條上,并作為卷面的唯一標(biāo)識,有效提高考試及評卷的公平性。
該系統(tǒng)雖然是針對制圖競賽而設(shè)計的,其處理數(shù)據(jù)輸入輸出的方法和競賽的考試安排策略對于其它的競賽類考試和管理類軟件的開發(fā)具有借鑒意義。
[1] 王育勤,朱衛(wèi)東,等. 基于.NET的考試平臺管理系統(tǒng)的設(shè)計與實現(xiàn)[J]. 計算機(jī)工程與設(shè)計,2007,28(10): 2475-2477.
[2] 周麗莉. 基于 B/S結(jié)構(gòu)的等級考試管理系統(tǒng)[J]. 計算機(jī)工程,2005,31: 195-197.
[3] 邊小凡,馬兵會. 根據(jù)系統(tǒng)需求決策軟件產(chǎn)品線體系結(jié)構(gòu)[J]. 計算機(jī)應(yīng)用與軟件,2009,26(3):142-144.
[4] 李建廷. 數(shù)據(jù)查詢計算機(jī)化[J]. 計算機(jī)應(yīng)用與軟件,2006,23(10): 50-52.
[5] 王 昕. 基于 vb+SQL訪問數(shù)據(jù)庫的方法及接口比較的研究[J]. 微計算機(jī)信息,2009,25(15): 153-154.
[6] 梁碧勇. Visual Basic程序開發(fā)中數(shù)據(jù)庫訪問技術(shù)的探討論[J]. 電腦知識與技術(shù),2010,6(5): 1111-1113.
[7] 姜德生,楊 艷. 基于 Excel VBA的數(shù)據(jù)庫訪問技術(shù)的研究[J]. 微計算機(jī)信息,2008,24(7): 103-104.
[8] 郝慎學(xué). Crystal Report在VB報表設(shè)計中的應(yīng)用技巧[J]. 電腦知識與技術(shù),2009,34(5): 9699-9700.