姚文龍
(廣西第一工業(yè)學校, 廣西 南寧 530023)
目前,很多學校的考試方式基本還是采用紙質(zhì)試卷的考試方式,考完之后由教師逐一批改試卷。這種方式的優(yōu)點的可以保留學生做題的痕跡,以便以后查閱。缺點是當考試的次數(shù)比較多時,有時可能還要求多備幾份試題,由教務(wù)部門在考試前隨機抽取一份,這樣教師出題和批改的工作量就會相當大。隨著現(xiàn)在計算機的普及,對于標準化類型的試題,完全可以考慮使用網(wǎng)絡(luò)智能化方式進行考試,使用程序的進行隨機抽題、考試和即時改卷。可以節(jié)省紙張,并且減輕的教師的工作量。2011年,我校計算機專業(yè)的學生參加了全國系統(tǒng)的一個設(shè)計比賽,需要對參加多個競賽的學生進行訓練,智能化考試非常適合這種情況,網(wǎng)絡(luò)智能化考試的系統(tǒng)就是在此背景下開發(fā)實現(xiàn)的。
網(wǎng)絡(luò)智能化考試可以采用兩種模式:客戶機―服務(wù)器(CS)模式和瀏覽器―服務(wù)器(BS)模式。C/S要求第一臺考試機都要安裝一個考試端軟件。我們的考試系統(tǒng)首先考慮在使用上應(yīng)當簡單易用,對教師和學生的操作要求不高,只要在教師機上進行簡單的安裝和設(shè)置就可以使用。所以在結(jié)構(gòu)上使用Web結(jié)構(gòu)的B/S方式,這樣硬件上只要求考試用計算機聯(lián)網(wǎng)就可以了,軟件上則只要求每臺計算機安裝有瀏覽器。具體技術(shù)上考慮易于安裝,使用PHP語言編寫動態(tài)網(wǎng)頁和數(shù)據(jù)處理,用PHP內(nèi)置支持的SQLite數(shù)據(jù)庫保存數(shù)據(jù),前端使用jQuery,JSON和Html顯示試題,并且將學生的考試結(jié)果生成報表。這樣,只要在教師上安裝一個 WampServer軟件,就完成了運行環(huán)境的安裝,再把程序復(fù)制進去就完成了整個環(huán)境的配置了。在考試管理上可以使用電子表格錄入試題,然后用Delphi編寫程序?qū)⒃囶}導(dǎo)入到SQLite數(shù)據(jù)庫。
系統(tǒng)結(jié)構(gòu)確定之后,考慮最簡單的處理方式,在數(shù)據(jù)庫中使用兩個表進行數(shù)據(jù)的存儲:試題表和成績表。其中試題表則用于存儲試題的相關(guān)信息,包括課程,題目,正確答案和ABCD四個選項,可以處理單項選擇題、多項選擇題和判斷題這幾個標準題型。成績表則是存儲學生的考試成績,包括學生姓名,成績和考試的時間這些信息。
數(shù)據(jù)存儲使用SQLite,SQLite是一個單文件的數(shù)據(jù)庫,PHP內(nèi)置支持,用程序?qū)⒃囶}并導(dǎo)入之后,在考試時教師只要將這個數(shù)據(jù)庫文件復(fù)制入去就可以開始考試了,不需要再進行其它的設(shè)置,更加方便使用,這也是為什么選擇SQLite數(shù)據(jù)庫,而不是MySQl或者SQLServer的原因。
對于考試的題目的管理考慮使用電子表格準備數(shù)據(jù),這里不采用PHP網(wǎng)頁的管理方式,而是使用電子表格模板來準備數(shù)據(jù),然后用用 Delphi設(shè)計程序?qū)氲墓芾眍}目數(shù)據(jù)到SQLite數(shù)據(jù)庫的用戶表中。因為電子表格符合人們的使用習慣,相對于直接使用PHP編程在網(wǎng)頁中一行行錄入的方式,雖然另行編寫錄入程序在開發(fā)時比較麻煩,但用戶使用時很方便,因為導(dǎo)入和管理都是教師機上進行,用Delphi編寫程序處理數(shù)據(jù)也不難處理。
整體結(jié)構(gòu)如下,前端由Html,javaScript處理數(shù)據(jù)的顯示,后臺由PHP編寫相應(yīng)的頁面進行數(shù)據(jù)和存取處理:
第一步,使用 Navicat for SQLite數(shù)據(jù)庫工具,建立SQLite數(shù)據(jù)庫,再在其中建立試題和成績兩個表。
第二步,使用Delphi設(shè)計試題表的管理程序,實現(xiàn)導(dǎo)入數(shù)據(jù),管理數(shù)據(jù)功能,這樣可以避開用管理網(wǎng)頁的不便。
這里的關(guān)鍵技術(shù)是在Delphi中調(diào)用管理SQLite數(shù)據(jù),這時是采用 SQLiteTable3.pas,sqlite3udf.pas,SQLite3.pas三個單元來實現(xiàn)。
下面的代碼用來操作SQLite數(shù)據(jù)庫顯示到表格中。sldb ∶= TSQLiteDatabase.Create('radtest.sqlite');sSQL ∶= 'select * from radtm ';
sltb ∶= sldb.GetTable(UTF8Encode(sSQL));第三步,將 sltb內(nèi)存表的數(shù)據(jù)通過循環(huán)轉(zhuǎn)入到ClientDataSet再實現(xiàn)綁定到控件中。
數(shù)據(jù)的導(dǎo)入則是使用 TExcelApplication;TExcelWorkbook; TExcelWorksheet;三個單元,連接電子表格,然后取出單元格的數(shù)據(jù),再寫入到ClientDataSet中,保存時使用循環(huán)將數(shù)據(jù)寫到SQLite數(shù)據(jù)庫中。
第四步,是系統(tǒng)的主要的部分,用 PHP技術(shù)結(jié)合JavaScript實現(xiàn)隨機抽題和考試、批改功能。登記頁面如下:
當用戶選擇項目,填寫用戶名后,點擊進入考場。使用location.href將用戶名和科目傳給考試出題頁radtest.htm。在該頁面中用javaScript先取出傳來的參數(shù),然后使用Ajax方式從后臺調(diào)用PHP程序獲取試題數(shù)據(jù):
javaScript代碼:
kc = decodeURI(getUrlPara("kc"));
un = decodeURI(getUrlPara("un"));
$.getJSON("radtest.php", {
cmd∶ "getTM",
kc∶encodeURI(kc)
},prodojson);
function prodojson(json){
//……
}
PHP代碼:
include_once("conn_sqlite.inc.php");
$kc = urldecode($_GET["kc"]);
$useTMcount = 100; //題量
$querys = sprintf('SELECT title,ra,rb,rc,rd,da,tp,js,rtx,rap,rbp,rcp,rdp FROM radtm where kc="%s"ORDER BY random() limit %d', $kc, $useTMcount);
$results = $dbs->prepare($querys);
$results->execute();
$dbs = null;
$arr4s = array();
foreach ($results as $row) {
$arr4s[] = $row;
}
echo json_encode($arr4s);
在prodojson中取得PHP傳來的JSON數(shù)據(jù),首先保存到items二維數(shù)組,然后逐一分析題型,構(gòu)造考試頁面顯示。多選題使用checkbox類型的表單元素,單選題或判斷題則使用 radio類型的表單元素。并使用JavaScript函數(shù)進行倒計時,考試的頁面如下:
當考試時間到時,或者用戶點擊提交時,進行試卷的批改,將用戶的選擇項與items二維數(shù)組中的正確答案元素進行比較,進行正誤提示,同時突出顯示相應(yīng)的正確答案。最后得出本次的練習成績,并將成績記錄到數(shù)據(jù)庫的成績表中。
另外,如果點擊查看成績記錄,會顯示一個報表,顯示已經(jīng)提交的所有練習人員的成績,方便個人進行對比。
因篇幅關(guān)系,以上只是列出了關(guān)鍵部分代碼。用比較簡單的方式,實現(xiàn)了自動隨機智能出題,考試和批改功能,以及成績記錄功能。整個系統(tǒng)混合使用了Delphi,SQLite,PHP,jQuery,JSON,Html技術(shù)。
網(wǎng)絡(luò)智能化考試系統(tǒng)編寫完成后,交給我校參加競賽訓練的教師和學生使用,學生和教師都覺得使用上很方便,出題靈活多變,省去了手工出題批改的麻煩,也節(jié)省了大量的紙張,經(jīng)過練習,選手在比賽中也取得了比較好的成績。
對這類BS方式的架構(gòu),一般都會考慮全部使用網(wǎng)頁方式進行維護,但在使用中發(fā)現(xiàn)網(wǎng)頁方式對于批量數(shù)據(jù)導(dǎo)入的處理很不方便。在此使用混合處理方式,各取其優(yōu)點,在使用上方便靈活,達到比較好的效果。
在簡單的練習測試使用的基礎(chǔ)上,只要在其中加入用戶管理功能,就可以實現(xiàn)登錄考試的功能,可以用于自動網(wǎng)絡(luò)化考試抽題與批改。如能進一步加入考試記錄表,就可以保留考生的答案選項,進行備案和考后查閱。
如上所述,在將來的考試方式中,對于標準化部分題目的考試,完全可以使用網(wǎng)絡(luò)方式進行,節(jié)省紙張和時間,考試結(jié)果也更快速和準確,對教師來說,只要將試題準備好就可以發(fā),可以省去出試卷,和考后的試卷批改這些麻煩,其它工作都由考試系統(tǒng)去完成了,大大提高了教師的工作效率,實現(xiàn)教學考試的現(xiàn)代化,具有重大開發(fā)意義。
[1] (澳)Luke Welling ——PHP 和 MySQL Web 開發(fā)(第四版)[M].機械工業(yè)出版社,2009.
[2] (印)Vijay Joshi——PHP與jQuery [M].人民郵電出版社,2011.