張艷艷
(浙江海洋學(xué)院數(shù)理與信息學(xué)院,浙江舟山 316004)
考試系統(tǒng)是實(shí)現(xiàn)無紙化考試的重要手段,可以全面考核學(xué)生的基礎(chǔ)知識和基本操作能力。目前考試系統(tǒng)大多采用ASP、VB來制作,本考試系統(tǒng)采用了全新的思路,即將flash與xml結(jié)合起來,在外部xml文檔中存儲題目和正確答案,在flash軟件中制作考試系統(tǒng)界面并調(diào)用xml文檔,這樣做的優(yōu)點(diǎn)是:一、獨(dú)立的xml試題庫可以確保考試的公平性。二、xml文檔易于擴(kuò)充,可以非常方便地添加刪除題目,提高考試系統(tǒng)的通用性。三、使用flash來搭建平臺,可以使考試系統(tǒng)的體積做到非常小巧。
xml是可擴(kuò)展標(biāo)記語言(eXtensible Markup Language)的縮寫,在xml文檔中,用戶可以自己定義標(biāo)記,標(biāo)記擴(kuò)充容易、靈活性大。xml文檔容易創(chuàng)建,可讀性強(qiáng),非常簡潔[1]。xml文檔采用樹狀組織結(jié)構(gòu),每個標(biāo)記為一個節(jié)點(diǎn),有且只有一個根節(jié)點(diǎn)。本考試系統(tǒng)中單項選擇題對應(yīng)的xml代碼為:
<root>
<timu>
<tigan>1.以助記符代替機(jī)器碼的語言是()</tigan>
<o(jì)ptiona>高級語言</optiona>
<o(jì)ptionb>匯編語言</optionb>
<o(jì)ptionc>C 語言</optionc>
<o(jì)ptiond>VB</optiond>
<answer>2</answer>
</timu>
……
</root>
上文中<timu> </timu>是用來存放題目的標(biāo)記,<tigan> </tigan>是用來存放題干的標(biāo)記,<o(jì)ptiona> </optiona>是用來存放選項A的標(biāo)記,<answer></answer>是用來存放正確答案的標(biāo)記。如果需要更改題目或選項,只需更改各標(biāo)記中的相應(yīng)內(nèi)容即可。通過添加xml文檔中的標(biāo)記,可以添加多道題目。
本代碼采用了專門的xml編輯器xmlwriter來編寫。為了解決在flash中顯示中文會出現(xiàn)亂碼的問題,在xml文檔里要指明編碼格式:“encoding="UTF-8"”,并且要在flash的幀動作中加入語句System.useCode-Page=true。
Flash actionscript2.0使用childNodes來訪問xml的子節(jié)點(diǎn),而actionscript3.0[2]對xml的支持更加完美。在AS3.0中通過URLloader來加載xml文檔,并且可以直接使用“.”加子元素的名稱來訪問子節(jié)點(diǎn)。首先需要定義多個數(shù)組來存放xml節(jié)點(diǎn)的相應(yīng)內(nèi)容,其次在加載時,需要定義URLRequest和URLLoader對象,并添加事件偵聽器。加載xml文檔的核心代碼為:
var myXML:XML=new XML(); //定義XML對象
myXML.ignoreWhitespace=true; //忽略空白
var myXMLURL:URLRequest=new URLRequest("xuanze.xml");
var myLoader:URLLoader=new URLLoader(myXMLURL);
myLoader.addEventListener("complete",xmlLoaded);
function xmlLoaded(evtObj:Event){ //定義加載函數(shù)
var myXML:XML=XML(myLoader.data);
for(var i=0;i<myXML.length;i++){
title.push(myXML.timu[i].tigan); //將 xml內(nèi)容加載到數(shù)組中
option1.push(myXML.timu[i].optiona);
option2.push(myXML.timu[i].optionb);
option3.push(myXML.timu[i].optionc);
option4.push(myXML.timu[i].optiond);
}
}
上文的代碼實(shí)現(xiàn)的功能是將xml文檔中各個節(jié)點(diǎn)的內(nèi)容放入相應(yīng)的數(shù)組之中,其中將題干的內(nèi)容存放在title數(shù)組中,四個單選項的內(nèi)容分別放在option1~option4數(shù)組中。為了在flash界面中顯示出相應(yīng)的內(nèi)容,需要將數(shù)組的內(nèi)容賦值給各個動態(tài)文本框,如將title數(shù)組中的內(nèi)容賦值給la1文本框[3],其核心代碼如下:
var NUM=0;
function next_btn_click(evtObj:Event){
NUM++;
if(NUM==(n)){
next_btn.enabled=false;}
la1.text=title[NUM]; //將題干的內(nèi)容顯示在la1文本框中
op1.text=option1[NUM]; //將各選項顯示在對應(yīng)的動態(tài)文本框中
op2.text=option2[NUM];op3.text=option3[NUM];
op4.text=option4[NUM];
}
next_btn.addEventListener("click",next_btn_click);
如果采用默認(rèn)格式,則在flash界面中顯示出來的字號偏小,針對這種情況,可以采用兩種解決辦法,一種是使用CSS樣式[4]來設(shè)置xml文檔的顯示格式,另一種是直接在flash中使用TextFormat對象設(shè)置顯示格式。本系統(tǒng)采用了后一種方法:
var mytf:TextFormat=new TextFormat();
mytf.color=0x0099CC;//設(shè)置顏色
mytf.size=17;//設(shè)置字號
la1.setStyle("textFormat",mytf);
op1.setStyle("textFormat",mytf);
op2.setStyle("textFormat",mytf);
op3.setStyle("textFormat",mytf);
op4.setStyle("textFormat",mytf);
本考試系統(tǒng)包含主界面、單項選擇題頁面、多項選擇題頁面、判斷題頁面和反饋頁面,在flash中分別設(shè)置不同關(guān)鍵幀,設(shè)計不同的界面。
以單項選擇題為例,界面中包含顯示題干的文本框(實(shí)例名la1),顯示各備選項的四個文本框(實(shí)例名為op1-op4),以及“上一題”和“下一題”按鈕(實(shí)例名分別為before_btn和next_btn)。界面如下圖所示:
圖1 單項選擇題頁面Fig.1 Page of monomial-choices
圖2 加載xml文檔后單項選擇題頁面Fig.2 Page of monomial-choices after loading xml
多項選擇題頁面與此類似,不同之處是使用復(fù)選按鈕替換了單選按鈕。判斷題可以直接使用單項選擇題的形式,設(shè)置選擇項為“是”或“否”。
此環(huán)節(jié)設(shè)置動態(tài)文本框顯示用戶回答正確的題目數(shù)及得分。首先在上圖單項選擇題的頁面中,設(shè)置四個單選按鈕同屬mygroup組中,并且給其value屬性分別賦值。其次將數(shù)組中的正確答案與單選按鈕的value值進(jìn)行匹配,如果相同,則表示回答正確的變量加1。最后在flash的關(guān)鍵幀中顯示答對的題目數(shù)和得分。
本考試系統(tǒng)采用外部的xml文檔存放考試題目,實(shí)現(xiàn)了單項選擇題、多項選擇題和判斷題的測試。Flash制作的考試系統(tǒng),體積小巧,安裝方便。Xml除了可以與flash結(jié)合構(gòu)建考試系統(tǒng),也可以與java結(jié)合,或者直接生成PDF試卷??傊S著人們對xml技術(shù)研究的深入,xml必將對教育教學(xué)產(chǎn)生更大的影響。
[1]Comp-U-Learn Tech India Ltd.賈素玲,王強(qiáng)等編譯.XML核心技術(shù)[M].北京:高等教育出版社,2005:8.
[2]楊 珊.征服Flash CS4中文版完全實(shí)戰(zhàn)學(xué)習(xí)手冊[M].北京科海電子出版社,2009:226-543.
[3]張培山.基于XML的flash選擇題測驗?zāi)0宓难芯颗c實(shí)踐[J].信息技術(shù)教育,2006.12:69-71.
[4]黃泳瑜,徐蕙英.XML網(wǎng)頁設(shè)計應(yīng)用基礎(chǔ)教程[M].北京:中國鐵道出版社,2006:86.