本論文在其他論文欄目,由論文格式網整理,轉載請注明來源www.donglienglish.cn,更多論文,請點論文格式范文查看
基于Authorware通用測試系統的題庫設計與實現
[摘 要]分析了利用Authorware技術和SQL Server數據庫技術設計通用測試系統題庫的方法,對題庫的安全性、數據源的網絡配置與應用、隨機抽題的實現、難易題型的調用以及題庫交卷處理等功能進行了研究。
[關鍵詞]題庫;Authorware;ODBC;SQL Server
1 引言
隨著網絡和多媒體技術在教學領域的廣泛應用,在CAI軟件中建立題庫系統,甚至開發專門的考試系統來適應教育發展的要求。在目前的題庫設計中,大部分設計采用Access建立題庫,利用Authorware圖標編程來實現自動選題,這種方式對于題庫的安全性和通用性均存在一定的局限性。同時如何對題庫中難易題型的智能抽取也是題庫設計需要考慮的一個重要方面。目前,許多測試系統的開發,正朝著智能化方向發展。Authorware作為最常用的多媒體教學軟件開發工具,具有豐富的系統變量和系統函數,支持數據庫和用戶自定義函數,強大的擴展性,非常適合設計題庫系統。在后臺數據庫管理方面,SQL Server2000是Microsoft公司最新開發的大型關系數據庫管理系統,具有非常強大的關系數據庫創建、開發、設計與管理功能。其嚴格的加密機制與對象認證機制能以密碼鎖定和訪問權限的形式,確保題庫管理的安全,并能有效防止黑客和病毒通過網絡對題庫進行破壞。文章討論基于Authorware和SQL Server如何設計題庫,突出題庫設計的關鍵技術與過程實現,以及各部分的聯系。
2 題庫系統的設計
1測試系統菜單基本框架,如圖1所示:
2 數據源題庫的建立與連接
(1) 題庫結構,如圖2所示:
題庫建立及手工連接examdata數據庫后,載入ODBC.U32庫函數包,在Authorware 6.5版本前,它包含三個函數:ODBCOpen(打開數據源)、ODBCExecute(填入合法參數及SQL指令語句)、ODBCClose(關閉數據源)。但是,ODBCOpen函數只能在建立單一數據源的情況下使用,當要配置其它數據源時,還得重新手工配置。在7.0版本后的ODBC.U32函數包中,新增的ODBCOpenDynamic函數要比ODBCOpen方便靈活得多,并且無須手工啟動“配置數據源向導”進行數據源連接。因此,它可以方便操作和關閉多個不同的數據源。
(2) 局域網數據源連接
方法一:利用ODBC.u32庫函數包可以方便實現局域網數據源連接,代碼及操作如下:
DNS_type:=baReadIni("accesstype", "Type", "", FileLocation^"setup.ini")
if DNS_type="局域網(mdf)" then
ODBCHandle:=ODBCOpenDynamic(WindowHandle,"ErrorVar","DRIVER={SQLserver}; server
="^server^";address="^address^";Database="^DNS_menu^";UID=;PWD=
jensenduan;")
acc_menu:="SELECT menu_text FROM menu ORDER by menu_text"
acc_menu:=ODBCExecute(ODBCHandle, acc_menu)
ODBCClose(ODBCHandle)
end if
執行代碼前,確定配置好了數據源的網絡使用類型,如圖3所示,并以menu.mdf中的數據項menu_text作為試卷名的關聯調用。那么系統就會自動將這些信息保存到setup.ini文件里。若選擇“局域網”類型,那么系統就自動構建為局域網測試系統。而文件讀取函數baReadIni則對系統目錄下的setup.ini文件進行讀取操作(baWriteIni為寫入命令),并返回"Type"所指定的值(局域網(mdf)),用變量DNS_type儲存起來,提供聯網類型的條件判斷。然后進行SQL數據源的連接,即利用ODBCOpenDynamic函數進行數據庫連接。接著,利用ODBCExecute打開指定的SQL語句(acc_menu),最后,用ODBCClose來關閉連接(ODBCHandle),釋放系統資源。此外,setup.ini里的信息還可以手工對其修改。利用這樣的文件操作技術既可以省略了煩瑣的數據操作,又可以永久保存一些系統的當前設置,并給用戶提供重要信息,同時也方便了對其修改等。當用戶下次登錄時,系統就可以從setup.ini中自動調用這些設置,以免用戶又要重新配置。在setup.ini中還包括了一些目錄路徑、數據源路徑以及信息、圖片地址等。
方法二: 利用Tmsdsn.u32庫函數包中的tMsDBRegister函數實現數據源的自動配置、增加和刪除。語法結構如下:
result := tMsDBRegister(dbReqType, dbType, dbList)
dbReqType:填寫1到7的整數值。其中4為增加系統數據源;DbType:指定數據源驅動程序的類型;dbList:指該ODBC數據源名稱、描述以及相連的數據庫名。結合SQL Server數據庫:exam_date.mdf,進行以下操作:首先,載入一個命名為“ODBC自動注冊” 的計算圖標,輸入如下代碼:List1:="DSN=examdate;"
List2:="Description=這是一個ODBC自動配置的例子"
server:="server=gui;" –-SQL Server服務管理器名。
address:="address=""^filelocation^"exam_date.mdf;" –-數據庫物理地址。
Database:="Database=exam_date;"
Dblist:=List1^List2^server^address^Database
tMsDBRegister(4,"SQL server", Dblist) 最后再結合 ODBCOpen便可對數據庫examdate進行操作。
(3) 遠程數據源連接
方法一: 利用ENSODEX公司的HOSTSOCKETS中間插件(MiddleWare)來實現通過TCP/IP協議來連接遠程數據庫。方法二: 先構建一ASP網頁,再利用Authorware網絡功能ReadURL接口函數完成數據庫操作。由ReadURL接口函數將數據庫操作的任務交給ASP,由ASP在服務器端完成數據庫操作,然后將結果返回給ReadURL函數。再由客戶端進行相關的處理操作。方法三: 利用ODBCOpenDynamic也可以實現基于SQL Server遠程數據庫連接和配置,代碼如下:
ODBCHandle:=ODBCOpenDynamic(WindowHandle,"ErrorVar","DRIVER={SQLserver};server="^se
rver^";address="^address^";Network="^Network^";Database="^Database^";UID="^user^";PWD="^其中ODBCOpenDynamic參數項包含有遠程服務器,即:SQL Server 服務管理器(server),以及SQL數據源地址(address)、TCP/IP協議(Network)。基于這樣的功能,只要對參數變量正確賦值,便可實現遠程數據源連接。接著就是編寫SQL查詢語句以及結合ODBC指令來對數據源的處理調用。
3 題庫系統的基本設計
(1) 題庫的調用與顯示
學生端登陸并開始答題后,對“單選題”、“多選題”、“填空題”、“簡答題”進行切換測試。這樣便可實現題型的調用和顯示。而題型之間的調用和顯示是類似的技術。以“單選題”為例,它的試題調用和顯示的實現過程如下:
ADD_D_tihao:=[:] –-定義數組ADD_D_tihao[ ]。
find_D_tihao:="SELECT 單選題號 FROM 測試題單選 ORDER by 單選題號"
find_D_tihao:=ODBCExecute(ODBCHandle,find_D_tihao)
Record:=LineCount(find_D_tihao , "\r") –-統計記錄個數。
repeat with i:=1 to Record
D_tihao:=GetLine(find_D_tihao,i,i,"\r") –-以記錄行的方式讀取數據表中的記錄。
AddProperty(ADD_D_tihao, D_tihao, "" ) –-將D_tihao記錄存入數組ADD_D_tihao里。
end repeat
WriteExtFile(FileLocation^"D_tihao.ini", ADD_D_tihao)
將數組內容寫入系統目錄下的D_tihao.ini文件里。
代碼執行后,在系統流程中有一個名為:"題目列表"的Microsoft forms 2.0 Listbox控件,通過它
可顯示試題內容。然后,再有如下代碼:
CallScriptIcon(IconID@"打開數據源")
find_D_tihao:="SELECT 單選題號 FROM 測試題單選 ORDER by 單選題號"
find_D_tihao:=ODBCExecute(ODBCHandle,find_D_tihao)
Record:=LineCount(find_D_tihao , "\r")
ADD_D_tihao:=ReadExtFile (FileLocation^"D_tihao.ini")
–-把系統目錄下的D_tihao.ini文件的內容讀出到變量ADD_D_tihao中。
ADD_D_tihao:=List(ADD_D_tihao) –-將ADD_D_tihao的值以列表的形式存到變量中。
repeat with i:=1 to Record
List_D_tihao:=GetLine(find_D_tihao,i,i,"\r")
da_an:=ADD_D_tihao[List_D_tihao] –-將數組內容賦給變量。
if da_an="" then da_an:="未答"
CallSprite(@"題目列表",#AddItem,i^"\t"^List_D_tihao^"\t"^da_an)
–-向列表框中增加數據項(AddItem),而最后的字符串變量是要增加的內容。
end repeat
CallScriptIcon(IconID@"關閉數據源")
SetSpriteProperty(@"題目列表", #LISTINDEX, 0) –-將列表項索引值設為0 。
代碼的實現主要是基于“測試題單選”數據表來給"題目列表"添加單選題號和答題情況,以便用戶可直觀地對試題進行操作。而D_tihao.ini文件已對一些單選數據即時存儲,由ReadExtFile函數讀取。通過以上技術還可由列表框中的題號來調用對應的題目內容,方法是:利用“單選”表中的“題號”字段和“測試題單選”表中的“單選題號”字段進行條件查詢。即當這兩個字段的值相等時,就開始試題內容的調用和顯示。在系統中,當按下列表題號項或“提交答案”按鈕時,它就會智能地顯示相應的題目內容。如果選了答案,還可在題號列表中顯示所選答案,并把答案存放到“答題”數據表和D_tihao.ini配置表中(不同的題型,配置表會不同)。待交卷后,根據所選答案為該題評分。至于答案的提交和顯示,用到了一些列表顯示和數據表的寫入操作,其中也還涉及到一些變量的使用,通過這些變量來跟蹤用戶的答題情況。例如:當選中單選按鈕A時,就把選中的“A”答案用變量儲存,以便進行相關操作。要實現這種功能,只需設計好實現的SQL代碼和條件判斷即可。
(2)交卷處理
考生端在規定時間里答題完畢后,便可進行交卷。“交卷”也是題庫信息的綜合處理。為此,必須將答題信息進行臨時讀取,并用變量儲存,以便提供后臺評分處理。由于配置文件D_tihao.ini(單選題)、DX_tihao.ini(多選題)、TK_tihao.ini(填空題)、JD_tihao.ini(簡答題)儲存著考生作答的答案。所以臨時存儲是為了交卷后可立即刪除這些配置文件,以便增強題庫的嚴密性,防止學生交卷后隨意篡改其中的答案。而測試目錄會自動恢復到原始狀態,使得前一個考生的操作不會影響下一個考生的考試。實現代碼如下:
ADD_D_tihao:=ReadExtFile (FileLocation^"D_tihao.ini")
ADD_DX_tihao:=ReadExtFile (FileLocation^"DX_tihao.ini")
ADD_TK_tihao:=ReadExtFile (FileLocation^"TK_tihao.ini")
ADD_JD_tihao:=ReadExtFile (FileLocation^"JD_tihao.ini")
臨時存儲答題后,以考生學號作為存儲條件寫入“答題”表中,進行以后的成績統計。實現代碼如下:
addSQL_up:="Update 答題 set 單選題答案='"^ADD_D_tihao^"',多選題答案='"^ADD_DX_tihao^"',填空題答案='"^ADD_TK_tihao^"',簡答題答案='"^ADD_JD_tihao^"' where 學號='"^find_ID^"'"
ODBCExecute(ODBCHandle, addSQL_up)
交卷后,刪除配置文件代碼:
DeleteFile(FileLocation^"D_tihao.ini")
DeleteFile(FileLocation^"DX_tihao.ini")
DeleteFile(FileLocation^"TK_tihao.ini")
DeleteFile(FileLocation^"JD_tihao.ini")
DeleteFile(“FlieName”)函數除了可以刪除文件外,還可刪除空文件夾;而建立空文件夾命令還可用CreateFolder( “FlieName”); CopyFile(“FlieName” )函數可以復制文件;FileType(“FileName”)函數可以檢測文件類型,當文件不存在目標文件夾時,返回0。利用這些函數可以擴展系統的一些文件操作功能。經過以上操作后,就可以進行成績統計與顯示。
(3) 試題設置
如圖4所示:后臺管理系統為教師提供題庫的管理功能:題庫的新建、修改、增加、刪除等。
題型設置
該部分包括了單選題、多選題、填空題、簡答題的設置,以單選題為例,代碼如下:
find_R_D_tihao:="SELECT 單選題號 FROM 測試題單選 ORDER by 單選題號"
find_R_D_tihao:=ODBCExecute(ODBCHandle,find_R_D_tihao)
find_D_tihao:="SELECT 題號 FROM 單選 ORDER by 題號"
find_D_tihao:=ODBCExecute(ODBCHandle,find_D_tihao)^"\r" –-多出一個回車符,實現換行。
Record_R:=LineCount(find_R_D_tihao , "\r")
repeat with i:=1 to Record_R
List_R_D_tihao:=GetLine(find_R_D_tihao,i,i,"\r")
if Find(List_R_D_tihao, find_D_tihao)<>0 then
Find為字符模式匹配函數,判斷find_D_tihao是否在List_R_D_tihao里,不在則返回0。
find_D_tihao:=Replace(List_R_D_tihao^"\r", "", find_D_tihao)
Replace為字符替換,在這里是把find_D_tihao里的所有List_R_D_tihao^"\r"用空值代替。
end if
CallSprite(@"當次試題列表",#AddItem,List_R_D_tihao) –-向“當次試題列表”中增加題號。
end repeat
Record:=LineCount(find_D_tihao , "\r")
repeat with t:=1 to Record
List_D_tihao:=GetLine(find_D_tihao,t,t,"\r")
CallSprite(@"試題庫列表",#AddItem,List_D_tihao)–-向“試題庫列表”中增加題號。
end repeat
執行“增加”按鈕的執行代碼:
TM:=GetSpriteProperty(@"試題庫列表", #text) –-獲得試題庫列表中選定的內容。
把用戶選定的內容逐行添加到“當次試題列表”中:
CallSprite(@"當次試題列表",#AddItem,TM)
lindex:=GetSpriteProperty(@"試題庫列表", #ListIndex) –-獲得用戶在試題列表中選定的行號。
CallSprite(@"試題庫列表",#RemoveItem,lindex) –-移除用戶選擇的行號內容。
TM:=GetSpriteProperty(@"當次試題列表", #text) –-獲得試題庫列表中選定的內容。
執行“移除”按鈕的執行代碼片段:
CallSprite(@"試題庫列表",#AddItem,TM) –-把用戶選定的內容逐行添加到“當次試題列表”中。
lindex:=GetSpriteProperty(@"當次試題列表",#ListIndex) –-獲得用戶在列表中選定的行號。
scount:=CallSprite(@"當次試題列表",#RemoveItem,lindex) –-刪除用戶選擇的行號內容。
(2) 隨機抽題
所謂“隨機”的含義也就是對一些數據集進行無序性的操作。“隨機抽題”就是在輸入框中指定抽取題目數量后,無序地抽取題目來進行測試。其實現代碼如下:
ti_num:=MojoInputBox("抽取題目數量","請輸入抽取題目數量","") –-產生輸入對話框。
再利用ti_num設計循環體的次數,以便可對多條題目添加或移除。
SyncPoint(0) –-設置時間同步。
SyncWait(0.5) –-設置等待時間為0.5秒,實現記錄增減的延遲效果。
num:=Random(0, (Record-i), 1) –-產生一個由0到Record-i之間的隨機題號。
SetSpriteProperty(@"試題庫列表", #LISTINDEX, num)
設置列表的隨機索引屬性,確定num產生的隨機題號對應的列表項。
List_DD_tihao:=GetSpriteProperty(@"試題庫列表", #text) –-獲取SetSpriteProperty后的值。
CallSprite(@"當次試題列表",#AddItem,List_DD_tihao) –-向"當次試題列表"增加獲取的值。
lindex:=GetSpriteProperty(@"試題庫列表", #ListIndex) –-獲取隨機的LISTINDEX的值 。
CallSprite(@"試題庫列表",#RemoveItem,lindex) –-移除隨機的LISTINDEX所對應的項。
“隨機抽題”就是根據上述步驟實現,但這種選題方式還存在一定的盲目性,具體表現在它的難度分布和覆蓋范圍上的不合理性。改進方法如下:
1 隨機選擇法:計算機每次從題庫中隨機選擇一個習題。但是這樣就會有一定的盲目性,可能在習題中出現難度分布不均、覆蓋面不廣的現象。所以系統中所利用的這種測試方式應進行改進。
2 閃牌排隊法:采用輪流法選擇習題。先將所有系統練習一遍后,再重新做答錯的習題,直到熟練掌握為
止。該法保證學生在難題上有較多的練習機會,但習題量不宜太多。
3 變距排隊法(閃牌排隊法的改進):控制再次練習時習題出現的順序,以加深學生對習題的印象。
為了達到良好的測試效果,對系統的選題方式進行改進,這些方法很值得參考。雖然系統可用手動選題替換,但是面臨題量較多的情況,這種方式難免也有不足。2和3的實現方法可以采用系統變量或數組對題目出現的順序或上次測試中答錯的題目進行臨時跟蹤賦值,并用文件錄入的形式進行保存,當再次登陸時,系統可以自動調用這些設置。對于3來說,還可以利用“判斷圖標”控制習題的出現次序,從而保證習題出現的頻率和覆蓋的范圍更合理化。此外,對于試題的難度的分布,以及題目智能地抽取,這是當前的一大熱點。它以試題難度作為分類并組合成題庫,這樣就能保證試題難度的均勻分布。現以1選題法為例來簡述:首先,把難度各異的題目進行手工標號,并把它們存入題庫相應的表中,或者也可利用配置文件來跟蹤標號。接著,在隨機抽題技術的基礎上,進行對標號的判斷和題目的條件篩選,以及難易題目的數量限制等,進行對題庫的建立和處理。最后,就初步搭建了試題難度均勻分布的題庫。
(4)題庫設置
“題庫設置”主要完成的功能是題庫的新建和刪除以及題型的新增和刪除,如圖5所示:
(1) 新建題庫
SQL Server數據庫在附加使用時,是不允許拷貝、移動和刪除的。這是由于它自身的安全機制所致的。所以,利用SQL Server作為后臺題庫的新建模板時,必須要分離出該數據庫模板,同時要保持以模板數據庫名一致,由于SQL Server中多個主數據庫可通過同一個日志文件來共用關聯,所以保存的路徑必須要不同。其代碼如下:
old_acc:=OpenFileDlg("請打開SQL題庫模板", "", FileLocation^"SQL data", "exam_date.mdf", "*.mdf|*.mdf|All files|*.*|")
生成一個選擇SQL Server主數據庫模板對話框,并返回模板數據庫名。
new_acc:=baGetFilename("save",FileLocation^"exam_date",old_acc,"*.mdf|*.mdf|All files|*.*|", 2+4+32+524288+2097152, "新試題庫", FALSE, -1, 0)
保存并返回新增的SQL Server主數據庫名(old_acc)。
qr:=CopyFile( old_acc , new_acc ,"Always+" ) –-將源文件old_acc復制到new_acc目標文件。
addSQL:="insert into menu(menu_text) values('"^SubStr(new_acc, (RFind("\\\\", new_acc)+1), (RFind(".", new_acc)-1))^"')" –-向menu數據表(題庫)中插入內容。
以上代碼建立了一個結構與模板一樣的新題庫文件。接著利用ODBC指令即可實現該數據庫的操作,同時,利用SQL命令exec sp_renamedb還可對題庫名的更改。
(2) 刪除題庫
以下代碼均在分離相關數據庫,及斷開連接時才可實現:
acc_menu:="SELECT menu_text FROM menu ORDER by menu_text" –-查詢menu表中的字段內容。
……
del_menu:=ListBox((ScreenWidth-250)/2, (ScreenHeight-100)/2, 50, 10, acc_menu)
產生一個列表框,并增加acc_menu到列表中。
del_menu_:="delete * from menu where menu_text='"^del_menu^"'"–-按條件刪除menu表的內容。
DeleteFile(SubStr(DNS_menu,1,RFind("\\\\",DNS_menu))^del_menu^".mdf")
刪除與del_menu名字對應的試題庫文件。
(3) 題型新增與刪除
題目類型的新增和刪除功能,也可通過ODBC指令把手工錄入的內容寫進數據庫或更新數據庫內容。為此只需在條件判斷下更改對應的SQL語句即可實現。
3 總結:
題庫系統的構建需要考慮到其通用性、兼容性、安全性等,以及題庫數據源的連接和應用技巧,題庫的動態管理和維護。本系統充分利用了Authorware強大的交互功能進行題庫管理,并靈活采用選題的方法,使得試題難度均勻分布以及合理調用,能根椐用戶的實際情況不斷更新題庫,解決了只能建立單一試題的局限性,并能適用于各個學科,在教學實踐中收到了良好的效果。
參考文獻:
1、 薛偉勝、王博亮,基于Authorware的網絡題庫的實現 廈門大學學報(自然科學版),第41卷,第2期,2002.3:258-260
2、徐全生、王艷,基于Authorware題型的自動閱卷系統的設計與實現 沈陽工業大學學報 2005.2第1期
3、 楊象馳 基于authorware的多媒體教學軟件設計研究 計算機工程與設計 2004.5第5期
4、 支建飛 基于authorware的網上考試系統的開發 西南民族大學學報·自然科學版 第29卷第3期
5、 趙經成、李貝貝 《網絡教學課件制作[M]》 人民郵電出版社 2004.10
6、 雷任風 DIY 一個簡易考試系統——用Authorware實現自動化考試 中小學信息技術教育,2003.7
7、 于麗華 也談用Authorware實現自動化考試 中小學信息技術教育 2003.8:69-70
8、 畢廣吉 Authorware使用的外部函數 《Authorware 變量、函數、控件、手冊與范例》 電子工業出版社,2003.9