摘要:運用Visual Basic.NET與Microsoft Acess數據庫及VBA技術,實現通用試題庫管理和基于Word的試卷文檔的輸出。闡述了系統的原理及功能結構,并對開發過程中的一些關鍵技術及其實現方法進行了描述。
關鍵詞:Visual Basic.NET;數據庫;通用題庫管理
中圖分類號:TP311.52 文獻標識碼:A 文章編號:1009-3044(2009)05-1035-03
General Test Database Management System Development
PAN Ying-hui
(Department of Electronic Engineering Wuyi Institute,Wuyishan 354300,China)
Abstract: Using Visual Basic.NET and Microsoft Acess Database and the VBA technology, realize general test database management and the Word examination paper documents output。Elaborated system's principle and the function structure, describe a number of key technologies and their implementation in the development process.
Key words:Visual Basic.NET; Database; General Test Database Management
1 引言
考試是教學過程中必不可少的重要環節,是檢查教學成果的必要手段之一。開發通用題庫管理系統,從題庫中抽取試題,自動生成試卷,有利于按事先指定要求的內容范圍、目標層次及難度系數進行考核,能有效地避免人工組卷中命題和評分標準的主觀隨意性,使考試具有評估功能,有利于試題庫管理的自動化和標準化,可以幫助教師從繁重的手工出題、組卷考試的勞動中解脫出來;同時對樹立良好的學風,建立規范的教學質量監控系統都是行之有效的。
目前較成熟的題庫管理系統一般是文字形式,也有部分支持圖文形式,但由于只支持圖片格式,試題中的圖文、公式、表格混排等內容,只能以圖片格式存于題庫中,若要修改其內容,便無法在原題基礎上進行編輯修改,使得目前開發的試題庫管理系統在圖文、公式混排編輯,自動組卷、自動排版等方面還存在一定的缺陷和設計難點。因此,開發一通用試題庫管理系統,采用統一手段解決各學科、專業對題庫的特殊要求,可以提高管理系統的通用性、擴展性、易用性。
2 系統設計思想
通用試題庫所涉及的數據庫,不僅有文字,還有大量的圖形、公式、表格以及有關工程特殊符號,而組成的圖形又具有大量圖素的屬性數據信息。因此系統要具備文字、圖形、公式、表格等的處理能力,這種處理能力必須是通用的,開放融合的。Microsoft Word是最流行的文字處理軟件,能夠使用各種特殊符號,插人各種對象,能夠實現試題的圖文、表格、公式等的編輯與管理以及共享不同應用程序信息資源。題庫的設計思想是,若試題內容僅為文字,則直接存于數據庫中,若試題內容還有圖文、表格、公式等其它信息,則以Word文檔為載體,存于數據庫中。對于試題中含有圖片、表格或公式等錄人,可以在Word軟件下插人各種對象,或者復制對象進行編輯錄人,不需做任何轉換或處理,這樣用戶可以根據需要對試題庫中的試題,進行編輯、修改,使系統具有良好的擴充性,以適應各種學科和課程所建立試題庫的需要。對于公式、CAD圖形、Protel電路圖形或GIS等專業圖形,由于是采用不同的專業軟件制作而成的,為了便于以后對試題進行修改,不應轉化成簡單的位圖 ,應在題庫錄入時保持源格式入庫。
Visual Basic.NET (以下簡稱VB.NET)是Microsoft公司研發的可視化、面向對象和采用事件驅動方式的結構化高級程序設計語言,可用于開發Windows環境下的各類應用程序,界面友好、簡單易用、功能強大,是十分流行的開發工具,它采用代碼編輯、編譯、連接、調試功能為一體的集成開發環境(IDE)。數據庫部分是整個設計的核心,考慮系統的規模和現有計算機的配置,也為了系統更易于實現和維護,采用Microsoft Access桌面型數據庫系統,同時結合VBA開發工具,設計了“通用題庫管理系統”。該系統提供了試題編輯功能、自動和手動組卷功能、設置試題數量和卷面難度等功能,整套試卷及答卷的最終格式為Word文件,便于試卷修改和調整。
3 系統總體設計
根據系統的需求我們把系統分成用戶管理、題庫管理、試卷管理、數據庫管理四個大模塊,如圖1所示。用戶管理模塊可對用戶進行管理,用戶類型包括管理員和一般用戶,管理員可以添加用戶和刪除用戶、權限設置;題庫管理分為增加試題、刪除試題、修改試題、瀏覽試題四個模塊,一般用戶只能瀏覽試題;試卷管理模塊分為自動組卷、手動組卷、試卷瀏覽三個模塊,在自動組卷方式下需選擇試題類型、難度和試題數量等。數據庫管理分為壓縮數據庫、備份數據庫、恢復數據庫三個模塊。
3.1數據庫結構
數據庫設計的合理與否,對數據的完整性、安全性、程序運行的效率和程序設計的復雜程度等有著十分密切的關系。因一般題庫規模較小,故只需建立一個數據庫,在此數據庫基礎上,建立相關數據庫表,屬性如表1。
試題庫中的難度、所屬章節、知識點、使用次數、上次使用年份,主要用作選題時的參考,題型可以是選擇題、判斷題、填空題、問答題等,題目內容存儲試題的文本信息,若有公式、圖片、表格等,則以Word文檔形式用OLE對象存于素材字段中。試卷庫與試題庫屬性相同,只是將選中的試題存于其中用作考試組卷。
4 系統關鍵技術及實現
4.1 數據庫操作
為便于對Access數據庫進行操作,在VB.NET中可首先添加引用“ADODB”,并在標準模塊中加入以下語句:
Public cnn As ADODB.Connection
Public cmd As ADODB.Command
Public rst As ADODB.Recordset
Public Const mydbf As String = \" testdb.mdb\"‘試題數據庫
Public Const strCon As String = \" Provider = Microsoft.Jet.OLEDB.4.0 ; Data Source = gcbz.mdb ;Jet OLEDB:Database Password=asdf \"
這樣在程序設計時,若需打開數據表進行操作,只須加入語句:
cnn.Open(strCon)
rst.Open(strCom, cnn)
其中strCom為相關選擇語句,如:
strCom = \" SELECT * FROM 試題庫 WHERE 題型=testtype \" ‘testtype為選擇的考試題型。
該語句表示從試題庫表中選擇“題型=testtype”的記錄,這樣就可獲得表中相應數據。
4.2 圖形、公式等數據存取
由于試題庫中的圖形、公式等內容,都是以OLE 對象的數據形式存貯在數據庫中,對這些數據的管理,不能直接用一般文本數據的管理方式,要通過VB.NET中的FileStream流及MemoryStream流完成。以下函數Ole2File就是通過MemoryStream流,讀取數據庫中的OLE 對象數據,再經FileStream流將其另存為一文件。
Private Sub Ole2File(ByVal DestFilePath As String, ByVal keyword As String, ByVal keyname As String)
Dim PictureCol As Integer = 0 ' the column # of the BLOB field
Dim cn As New OleDbConnection(strCon)
Dim cmd As New OleDbCommand(\"SELECT \" + keyname + \" FROM win WHERE ID=\" keyword, cn)
cn.Open()
Dim dr As OleDbDataReader = cmd.ExecuteReader()
dr.Read()
Dim b(dr.GetBytes(PictureCol, 0, Nothing, 0, Integer.MaxValue) - 1) As Byte
dr.GetBytes(PictureCol, 0, b, 0, b.Length)
dr.Close()
cn.Close()
Dim ms As New MemoryStream(b)
Dim testfile As String = \"C:\\windows\emp\\\"
Dim FSO As New FileSystemObject()
Dim fs As New System.IO.FileStream(testfile + DestFilePath, IO.FileMode.Create, IO.FileAccess.Write)
fs.Write(b, 0, b.Length)
fs.Close()
End Sub
利用上述模塊,即可將數據庫存貯的OLE對象數據,還原為對應文檔,完成數據的提取工作。
4.3 文本、參考答案的加密
試題庫中的內容,雖可通過用戶權限管理加以保密,但用戶還可通過其它軟件打開試題庫,為保證數據庫中的數據安全,必須對試題庫中重要內容如試題內容,以加密方式進行存儲,這樣即使用非法方式打開試題庫,也能保證試題安全,因此數據加密解密必不可少。在VB.NET可利用CryptoStream流中DESCryptoServiceProvider類的CreateEncryptor進行加密,CreateDecryptor解密,然后通過MemoryStream流完成數據轉換。
加密函數代碼如下:
Public Function EncryptData(ByVal Value As String, ByVal desKey() As Byte, ByVal desIV() As Byte)
Dim ms As New MemoryStream()
Dim byt() As Byte
Dim bin(4096) As Byte '這是加密的中間存儲器
Dim rdlen As Long = 8 '這是寫的字節的總數。
Dim len As Integer '這是被一次寫的字節的數量.
Dim des As New DESCryptoServiceProvider()
Dim cs As New CryptoStream(ms, des.CreateEncryptor(desKey, desIV), CryptoStreamMode.Write)
byt = Encoding.UTF8.GetBytes(Value)
cs.Write(byt, 0, byt.Length)
cs.FlushFinalBlock()
cs.Close()
Return Convert.ToBase64String(ms.ToArray())
End Function
解密函數代碼如下:
Public Function deEncryptData(ByVal Value As String,ByVal desKey() As Byte, ByVal desIV() As Byte)
Dim ms As New MemoryStream()
Dim byt() As Byte
Dim bin(4096) As Byte
Dim rdlen As Long = 8
Dim len As Integer
Dim des As New DESCryptoServiceProvider()
Dim cs As New CryptoStream(ms, des.CreateDecryptor(desKey, desIV), CryptoStreamMode.Write)
byt = Convert.FromBase64String(Value)
cs.Write(byt, 0, byt.Length)
cs.FlushFinalBlock()
cs.Close()
Return Encoding.UTF8.GetString(ms.ToArray())
End Function
4.4 試題錄入、編輯與刪除的設計
由于試題特殊的符號、公式、圖形、表格等,系統必須具備各學科特殊符號和圖表的處理能力,同時還須具備有圖形、圖像、表格方便的輸入及圖文合一的操作接口。試題的錄入、編輯和刪除由系統試題編輯器來完成,在試題編輯器上設有試題參數選項欄、試題的添加、刪除以及題目和答案的導入、編輯等按鈕,在試題編輯里,用戶設置好當前試題的參數后,點擊編輯按鈕,系統通過System.Diagnostics.Process.Start會自動啟動Word程序,用戶就可以按照Microsoft Word的操作方式來進行試題的錄入和編輯,并且根據各學科的需要,插入復雜的圖形、表格和公式等。編輯完成后保存并關閉Word程序;點擊導入按鈕,系統調用Ole2File模塊,自動將題目導人題庫中。
4.5 自動組卷和手工組卷
自動組卷主要根據用戶為試卷給出的難度、題型以及各種題型的題數自動生成一份試卷。本系統選題算法的要求為:各種難度的試題數量比例及試題數量可以調節;試題不能重復。在預覽試卷總體布局之前,允許用戶將系統選擇好的題目做適當的調換,然后將選擇好的題目保存為一份試卷,并將數據庫中的有關題目的使用年份更改為當前年份,如果數據庫中的表的相應的記錄的年份與當前年份相隔兩年則將該記錄變為可重新利用。
手動挑選題目組卷方式不要求用戶提供任何信息,系統會將當前數據庫中的所有可供挑選的題目都顯示出來,讓使用者自己挑選題目,與此同時,系統會給出每道題目的相應的信息,諸如:難度、分值、是否有圖形、使用的次數等供用戶參考。手動生成試卷向導流程與自動選題中的手動掉換題目相似。
4.6 試卷文件生成方法
系統最終生成的考卷格式為Microsoft Word文檔文件。系統通過Microsoft Word支持的VBA功能,實現Word文檔的自動生成,即Word文件的創建、插入文字圖片、保存等過程都完全由系統自動完成。系統抽取的試卷最終要以Word的形式保存或者打印出來,因此制作Word試卷就顯得尤為重要。Word 2003提供的VBA組件為系統實現這個功能提供了強有力的保障,Word 2003共有193個對象,其中位于最高層的是Application對象,它實際代表整個Word 2003應用程序,是VBA控制Word 2003應用程序的關鍵所在。Word 2003應用程序中所有的功能都可以通過這193個對象控制完成,例如Documents集合對象和Document對象可以獲得所有打開的文檔和當前活動文檔。在自動生成過程中,幾個主要步驟:① 首先在VB中創建好Word文檔,并通過代碼對該文檔進行一些必要的屬性設置(比如頁邊距、字體、對齊方式等),②把相應的題目和答案寫入到Word文檔中,③保存為某個文件,④關閉文檔,釋放資源。本系統利用這個技術實現組建Word試卷的部分代碼如下:
Set wordobj= CreateObject( word.application )
changeFileOpenDirectory [路徑]
Documents.Open FileName:=testname
ActiveDocument.SaveAs FileName:=testnew
Selection.InsertFile FileName:= suiji .rtf
Set newDoc =Nothing
5 結束語
本文以Access數據庫為基礎,采用VBA與VB.NET及Word相結合技術,共享不同的應用程序信息資源,實現文本、圖形、公式等為一體的復合文檔和文檔的編輯,實現了試題庫的實時管理和試卷、答案的控制輸出,較好地保證了系統的有效性、可擴展性、開放性、可移植性,縮短了開發周期,同時為教師提供了方便高效的工作平臺,減輕了工作負擔,提高了試題管理的工作效率,具有較好的實用和推廣價值。
參考文獻:
[1] Microsoft著,VB.NET程序設計語言[M],高等教育出版社,2003.
[2] [美]Michael Halvorson著,VISUAL BASIC.NET程序設計[M],清華大學出版社,2002.
[3] 精銳創作組編著,Visual Basic.NET實用編程技術[M],人民郵電出版社,2001.
[4] 張志兵,王嫦娟,基于VB的工程圖學試題庫系統的設計[J],山東科技大學學報(自然科學版),2005(24,3):18-20.
[5] 田麗平,基于VB.NET的在線智能考試系統開發與實現[J],佛山科學技術學院學報(自然科學版),2O07,(25,4):20-23.