蔣維 黃紹龍
摘要:從目前Authorware的實際應(yīng)用來看,大多數(shù)人還僅限于制作一些比較簡單的多媒體課件。但是很多軟件在開發(fā)時都需要和數(shù)據(jù)庫等軟件結(jié)合,來對數(shù)據(jù)進(jìn)行大量快速地處理。該文介紹了如何將Authorware和Access二者進(jìn)行有效的結(jié)合,來開發(fā)制作在線考試系統(tǒng)。
關(guān)鍵詞:在線考試系統(tǒng);Authorware;Access;ODBC
中圖分類號:TP37文獻(xiàn)標(biāo)識碼:A文章編號:1009-3044(2012)26-6363-04
1建立數(shù)據(jù)庫
我們采用Access數(shù)據(jù)庫來建立數(shù)據(jù)表,然后讓Authorware使用ODBC技術(shù)去訪問表中的內(nèi)容。在Access中建立信息庫和試題庫,庫中各表的建立如下:
信息庫:學(xué)生信息表(編號,姓名(文本),學(xué)號(文本),成績(數(shù)字))
試題庫:(在試題庫中亦可根據(jù)需要添加試題表)
試題一表(編號,題目類型(文本),題目(備注),答案(文本),分值(數(shù)字),標(biāo)志(數(shù)字))
試題二表(編號,題目類型(文本),題目(備注),答案(文本),分值(數(shù)字),標(biāo)志(數(shù)字))
試題三表(編號,題目類型(文本),題目(備注),答案(文本),分值(數(shù)字),標(biāo)志(數(shù)字))
要訪問數(shù)據(jù)庫首先要連接數(shù)據(jù)庫,通過ODBC接口連接數(shù)據(jù)庫,必須先設(shè)置數(shù)據(jù)源。本設(shè)計中設(shè)置數(shù)據(jù)源的方法是利用Au? thorware提供的外部函數(shù)文件tMsDSN.u32,這是32位的動態(tài)連接庫文件。tMsDSN.u32中只有一個函數(shù)tMsDBRegister(),可以自動在32位ODBC控制面板中注冊數(shù)據(jù)庫。tMsDSN.u32文件在Authorware的安裝目錄中,用戶在使用其函數(shù)tMsDBRegister()前要對其函數(shù)進(jìn)行裝載,并且要將該文件和程序文件一起打包發(fā)布。其次是操作數(shù)據(jù)庫,在Authorware中提供了一個odbc.u32文件,此文件中提供了對數(shù)據(jù)庫進(jìn)行操作的幾個函數(shù),將其中的三個函數(shù)ODBCOpen、ODBCClose、ODBCExecute導(dǎo)入即可運用。ODBCOpen用于打開數(shù)據(jù)庫,ODBCClose用于關(guān)閉數(shù)據(jù)庫,ODBCExecute用于向ODBC的SQL解釋程序發(fā)送一條SQL命令。對于數(shù)據(jù)庫的各種操作均通過SQL語句去執(zhí)行。
2 Authorware中界面的制作
圖1
2.1登錄系統(tǒng)界面的制作
連接信息數(shù)據(jù)庫計算圖標(biāo)內(nèi)容如下:
ODBChandle:=ODBCOpen(WindowHandle,"error","信息庫","","")
if ODBChandle=0 then
dbType:= "Microsoft Access Driver (*.mdb) " --ODBC數(shù)據(jù)源驅(qū)動程序
DSN:= "DSN=信息庫; "--指定數(shù)據(jù)源名
description:= "學(xué)生信息庫; "--數(shù)據(jù)源描述
FIL:= "FIL= MS Access; "--指定數(shù)據(jù)源的數(shù)據(jù)庫類型
DBQ:= "DBQ="^FileLocation^"信息庫.mdb; " --指定數(shù)據(jù)庫文件
dblist:=DSN^description^FIL^DBQ--指定ODBC數(shù)據(jù)源名、描述以及與之相關(guān)聯(lián)的數(shù)據(jù)庫文件
result:=tMsDBRegister(4,dbType,dblist) --配置數(shù)據(jù)源打開數(shù)據(jù)庫源程序
end if
用顯示圖標(biāo)制作一個登錄界面,用交互圖標(biāo)作文本輸入,需定義變量name、num,用來記錄輸入的名字和學(xué)號。利用系統(tǒng)變量EntryText和NumEntry把用戶輸入的姓名和學(xué)號分別儲存到name、num中,代碼為:name:=EntryText,num:=NumEntry。用戶輸入完信息后點擊界面上的確定或重新輸入按鈕。
確定計算圖標(biāo)內(nèi)容如下:
if name<>"" & num<>"" then--輸入的姓名、學(xué)號若不為空
ODBChandle:=ODBCOpen(WindowHandle,"error","信息庫","","") --打開信息庫
sqlstr:="insert into學(xué)生信息表(姓名,學(xué)號)values("^name^", "^num^")"
student:=ODBCExecute(ODBChandle,sqlstr) --把剛才輸入的學(xué)生的姓名、學(xué)號寫入數(shù)據(jù)庫中
ODBCClose(ODBChandle)--關(guān)閉數(shù)據(jù)庫
else--輸入的姓名、學(xué)號若為空
SystemMessageBox(WindowHandle, "輸入不能為空!", "Warning", 48) --給出提示GoTo(IconID@"登錄界面")
框需重新輸入
end if
重新輸入計算圖標(biāo)內(nèi)容如下:GoTo(IconID@"登錄界面")
2.2試題系統(tǒng)界面的制作
為了統(tǒng)計做題分值,需用到兩個外部函數(shù)baSysFolder和CopyFile在本機(jī)建立臨時數(shù)據(jù)庫文件。建立臨時數(shù)據(jù)庫文件計算圖標(biāo)的內(nèi)容如下:
Result:=baSysFolder("temp")--獲取本機(jī)上的臨時文件夾路徑,函數(shù)在Budapi.u32中
CopyFile(FileLocation^"試題庫.mdb", Result^"試題庫.mdb",0) --建立臨時文件,函數(shù)在Winapi.u32中
連接試題數(shù)據(jù)庫計算圖標(biāo)的內(nèi)容如下:
與連接信息庫一樣,只需把DBQ:= "DBQ="^FileLocation^"信息庫.mdb; "改寫成DBQ:= "DBQ="^ Result ^"試題庫.mdb; "即可。隨機(jī)抽取試題分支中每套試題的界面如下:
圖2
2.2.1試題界面的制作(如圖2)
初始總成績和題號計算圖標(biāo)的內(nèi)容如下:
score:=0
n:=1
用顯示圖標(biāo)制作一個做題的界面,再利用交互圖標(biāo)在界面上制作3個交互按鈕,各分支按鈕內(nèi)容的設(shè)置如下:
提交計算圖標(biāo)的內(nèi)容如下:
hh:=SystemMessageBox(WindowHandle, "提交成績后即將退出系統(tǒng)!確定要提交嗎?", "Confirmation", 292)--點擊提交按鈕,會彈出提示框詢問用戶是否確定提交成績
if hh=6 then--用戶若選的是yes按鈕
ODBChandle:=ODBCOpen(WindowHandle,"error","信息庫","","") --打開信息庫
sqlstr:="insert into學(xué)生信息表(成績)values("^score^")"
student:=ODBCExecute(ODBChandle,sqlstr) --把做題總成績寫信息庫
ODBCClose(ODBChandle)--關(guān)閉信息庫
DeleteFile(Result^"信息庫.mdb")--刪除臨時數(shù)據(jù)庫
GoTo(IconID@"退出系統(tǒng)")--進(jìn)入退出系統(tǒng)
end if
下一題計算圖標(biāo)的內(nèi)容如下:
n:=n+1
if (n>=1) & (n<=20) then GoTo(IconID@"填空題")
else if (n>=21) & (n<=40) then GoTo(IconID@"單選題")
else if (n>=41) & (n<=50) then GoTo(IconID@"多選題")
else if (n>=51) &( n<=70) then GoTo(IconID@"判斷題")
else SystemMessageBox(WindowHandle, "已完成全部測試題!可點擊提交按鈕提交成績!", "Information", 64)
--完成全部測試,提示用戶可提交成績
end if
上一題計算圖標(biāo)的內(nèi)容如下:
n:=n-1
if……end if--與下一題計算圖標(biāo)中的內(nèi)容一樣,但沒有else分句;在此分支中設(shè)置按鈕的激活條件為n>=2,當(dāng)題目號為1時,此按鈕不可用
接著系統(tǒng)根據(jù)n值在題型框架圖標(biāo)中選擇相應(yīng)的題型。
2.2.1.1題型界面的制作
每種題型的交互界面可根據(jù)此題型來制作,如填空題的界面制作如上圖2,圖中各圖標(biāo)的內(nèi)容設(shè)置如下:
讀題計算機(jī)圖標(biāo)的內(nèi)容如下:
ODBChandle:=ODBCOpen(WindowHandle,"error","試題庫","","") --打開試題庫
sqlstring:="select題目from試題一where編號="^n^""
timu:=ODBCExecute(ODBChanlde,sqlstring)--根據(jù)n值讀取題目
ODBCClose(ODBChandle)--關(guān)閉試題庫
在顯示填空題目的顯示圖標(biāo)中用文本輸入工具輸入:{timu},利用交互圖標(biāo)作文本輸入交互,用戶根據(jù)顯示的題目答題。以下計算圖標(biāo)中的flag變量是用于記錄此題分值是否被加入過總分,flag:=0表示未被加入過,flag:=1表示加入過,題目原標(biāo)志段中的值為0。
做題交互分支中計算圖標(biāo)的內(nèi)容如下:
answer:=Entrytext --把輸入內(nèi)容儲存在answer變量中
ODBChandle:=ODBCOpen(WindowHandle,"error","試題庫","","")--打開試題庫
sqlstr:="select標(biāo)志from試題一where編號="^n^""
flag:=ODBCExecute(ODBChanlde,sqlstr) --據(jù)n值取出該題目對應(yīng)的標(biāo)志值放在flag變量中
sqlstr:="select答案from試題一where編號="^n^""
daan:=ODBCExecute(ODBChanlde,sqlstr)--據(jù)n值取出該題目對應(yīng)的答案值放在daan變量中
sqlstr:="select分值from試題一where編號="^n^""
fenzhi:=ODBCExecute(ODBChanlde,sqlstr)--據(jù)n值取出該題目對應(yīng)的分值值放在fenzhi變量中
if flag=1 then--若flag為1
score:=score-fenzhi --先從總分中減掉該題的分值
end if
if answer=daan then--若用戶輸入的答案與題目答案一致
score:=score+fenzhi --在總分中加入該題分值
setflag:="update試題一set標(biāo)志=1 where編號="^n^"" --把該題的標(biāo)志值置成1
ODBCExecute(ODBChanlde, setflag)
end if
ODBCClose(ODBChandle) --關(guān)閉數(shù)據(jù)庫
2.3退出系統(tǒng)界面的制作
用顯示圖標(biāo)制作一個退出的界面,利用quit()函數(shù)退出即可。
3網(wǎng)絡(luò)發(fā)布
將程序打包為text.a7r文件,再用Authorware的Web Packager打包生成用于網(wǎng)絡(luò)上瀏覽的text.aam,將生成的text.aam流文件放在服務(wù)器的考試系統(tǒng)目錄下,最后使用任何文本編輯軟件編寫簡單的html[2]詹慧靜.用Authorware7.0制作多媒體課件[M].北京:高等教育出版社,2009.
[3]李智鑫.Authorware7.0中文版多媒體制作教程[M].北京:中國水利水電出版社,2006.
[4]繆亮,付邦道.Authorware多媒體課件制作實用教程[M]. 2版.北京:清華大學(xué)出版社,2008.