• 沒有找到結果。

學生子系統重點功能

在文檔中 電子教科書互動試題系統 (頁 30-41)

3.2 學生子系統流程與功能實作

3.2.2 學生子系統重點功能

功能一:試題 widget 仿照 QTI 介面格式

QTI 格式其優點,主要是希望 “測驗題目設計者” 所設計出來的題型可以 互相流通與再利用,有別於傳統的出題模式。QTI 標準主要制訂了三個重要個概 念,分別為 ASI Model、Result Report 以及 Render Type,因此我們仿照 QTI,參 考 QTI 的優點,作出仿照 QTI 介面格式的試題 widget。

仿照 QTI 的呈現格式,可以藉由圖 3-5 清楚的瞭解 ASI model 所要呈現的意義,

Assessment 我們可以將他想像成測驗卷的整體、Section 為測驗卷的題型,如選擇 題、是非題等,而 Assessment Item 則為測驗題本身。

圖 3-5 試題 widget 仿 QTI 範例圖 ASI model

另外 Result Report 在於定義測驗者作答的回覆格式,例如選擇題以四個選項 回復如圖 3-6,其程式內容如程式碼 3-1,而是非題則以是和否回復如圖 3-7,程 式內容如程式碼 3-2,問答題以文字回答的方式回答如圖 3-8,程式內容如程式碼

3-3。

圖 3-6 選擇題選項回答 選擇題

<style>

body {font-family: sans-serif;font-size:30px;}

</style>

</head>

<body>

<div style="font-family:verdana;padding:20px;border-radius:10px;border:10px solid

#EE872A;">

<div id="main">

<img width="200" height="150"

src="http://140.122.184.35/ibook/img/loading.gif"></img>

</div>

<input type="radio" name="ques" value="A" onclick="s_click()"/>

(A)

<br/>

<br/>

<input type="radio" name="ques" value="B" onclick="s_click()"/>

(B)

<br/>

<br/>

<input type="radio" name="ques" value="C" checked="checked"

onclick="s_click()"/>

(C)

<br/>

<br/>

<input type="radio" name="ques" value="D" onclick="s_click()"/>

(D)

body {font-family: sans-serif;font-size:30px;}

</style>

</head>

<body>

<div style="font-family:verdana;padding:20px;border-radius:10px;border:10px solid

#EE872A;">

<div id="main">

<img width="200" height="150"

src="http://140.122.184.35/ibook/img/loading.gif"></img>

</div>

<input type="radio" name="ques" value="O" onclick="s_click()"/>

(O)

<br/>

<br/>

<input type="radio" name="ques" value="X" onclick="s_click()"/>

(X)

<style>

body {font-family: sans-serif;font-size:30px;}

</style>

</head>

<body>

<div id="main">

<img width="200" height="150"

src="http://140.122.184.35/ibook/img/loading.gif"></img>

</div>

<td>回答</td>

<br>

<td><input type="text" name="answer"/></td>

</tr>

<button id="send" onclick="send()">儲存</button>

</body>

程式碼 3-3 問答題作答程式碼

Render Type 則是定義了測驗題目的類型,我們在學生子系統上設種題型分 別是,是非題、選擇題、問答題和計算題。

功能二:LocalStorage 儲存

LocalStorage 儲存的功能我們在學生子系統用在兩個地方,一個是基本資料 的儲存,另一個是使用在基本題型的作答,兩者都是將資料暫時儲存於

LocalStorage,以方便上傳之利用。

在基本資料程式部分,在輸入基本資料後,當 send 這個按鈕被按下,就會 被執行 send()這個 function,這個 widget 最重要的工作就是將學生的各項資料 儲存至 localStorage,因此我們可以看見,send()這個 function 裡面就有這樣 的程式,如程式碼 3-4 所示:

localStorage.userName = document.getElementsByName('userName')[0].value;

localStorage.userBirth = document.getElementsByName('birth')[0].value;

localStorage.userSex = document.getElementsByName('sex')[0].value;

localStorage.userHandicap = document.getElementsByName('handicap')[0].value;

localStorage.userEmail = document.getElementsByName('email')[0].value;

程式碼 3-4 資料儲存至 localStorage

設定一個變數叫做 userEmail,它的值是從 tag name 叫做 email 的標籤抓取 來的,將值存入 localStorage,好讓其他 widget 可以使用這個值。

另外在儲存作答結果在基本題型的作答,重點在於,當我們按下 radio button 時,會觸發一個 s_click()的函式,這個函式可以將我們所選擇的答案給儲存起來,

存進 localStorage 當中,以下是程式碼 3-5:

function s_click() { 查現在所選的是哪一個選項,並且把結果存入相對應的 localStorage 當中,

localStorage 的命名方式是這樣:quesNum+題號,所以如果我今天要儲存第一題 的答案,我就會存在 quesNum1 當中,第二題就存在 quesNum2 當中以此類推,在 javascript 中,想要把變數跟程式碼結合,並且執行此結合後的程式碼,可以使 用 eval()這個函式來達到這結果。

功能三:題目前端後端同步

$('#main').html('第' + data.number + '題<br/><br/>'+data.question+'<br/><hr/>');

} 題,Javascript 禁止跨網域的動作,所以當我想要從 iBooks 中的 widget 發送資料

到伺服器端,並要求資料的回傳時,就會遇到問題,iBooks 中 widget 的資料是它 內建的,怎麼樣也無法讓 widget 中的 Javascript 不跨網域來收取資料,所以這裡 我們就需要用到 jsonp 這個型態,jsonp 提供了一個跨網域的解決方法,使用 jsonp 型態連到伺服器端,並且設定回傳的資料是 json 格式的檔案時,就可以跨網域。

因此可以看到 Ajax 的核心程式碼當中,dataType 設定為 jsonp,把題號 ques_num 傳送給伺服器端,讓伺服器端去資料庫中搜尋並將題目內容返回。若 AJAX 成功,就返回兩個參數:ques_amount,在題庫中總共有幾題以及 question 代表題目的內容,並將 ques_amount 儲存在 localStorage 中,將題目內容嵌入 HTML 中輸出給使用者看。

伺服器端的程式碼如下程式碼 3-7:

$sql = "select * from question";

$resource = mysql_query($sql, $link_ID);

$ques_count = mysql_num_rows($resource);

$ques_num = $_GET["ques_num"];

$sql = "select * from question where ques_num=$ques_num";

$resource = mysql_query($sql, $link_ID);

$data = mysql_fetch_array($resource);

$result["ques_amount"] = $ques_count;

$result["number"] = $ques_num;

$result["question"] = $data["content"];

echo $_GET['json_callback'] . '(' . json_encode($result) . ');';

程式碼 3-7 題目伺服器端接收

以上程式碼說明如何連接資料庫,比較值得注意的是,要回傳的資料將它們 分類好放在陣列當中,再用 json_encode 把它編碼成 json 格式。

功能四:基本題型上傳與自動對答

學生在作答完後可以把作答結果,連同學生的基本資料,利用 Ajax 方式傳送

給 Sever 儲存如程式碼 3-8,讓教師子系統可以讓老師了解學生程度。

$.ajax({

url:'http://140.122.184.35/ibook/receive_ques_data.php', jsonp: 'json_callback',

data:{'ques_answer':ques_string, 'name':name, 'sex':sex, 'birth':birth, 'handicap':handicap, 'email':email},

dataType:'jsonp',

$ques_answer = $_GET["ques_answer"];

if($sex == "male") $sex = 0;

else

$sex = 1;

$sql = "insert into user_answer (answer, name, sex, birth, mainDisable, mailOrPhone, build_time) values('$ques_answer', '$name', '$sex', '$birth', '$handicap', '$email', Now())";

$resource = mysql_query($sql);

程式碼 3-9 基本題型回答 Sever 接收

而自動對答方面,作答結果會以字串的方式存到陣列如程式碼 3-10:

var ques = new Array();

for(var i=1; i<=parseInt(localStorage.ques_amount); ++i) {

eval('ques['+(i-1)+'] = localStorage.ques'+i+'');

}

var ques_string = ques.join(',');

程式碼 3-10 作答結果存成陣列字串

另外學生可以在作答完成後觀看自己的作答結果和正確答案,同時也可以知

道對錯幾題,如下程式碼 3-11,以 document.write()語法呈現字串。

var ques_string = ques.join(',');

function answer() {

document.write(ques_string);

}

<script type="text/javascript">

answer(ques_string);

</script>

程式碼 3-11 document.write()語法呈現字串 功能五:Canvas 畫板作答 -Touch-and-Mou,其中比較特別因為要使用在平板上面,所以需給 iPad 或 Android 智慧型動裝置上定義一個變數,如下程式碼 3-12:

var is_touch_device = 'ontouchstart' in document.documentElement;

程式碼 3-12 touch_device 變數 功能六:進階題型截圖與上傳

由於智慧型動裝置有內建截圖功能,如 ipad 的 Home 鍵+電源鍵同時按下即 可截圖,而上傳檔案部分,不同於基本題題型流程,為了方便老師 Email 回覆給 學生批改結果,會要求學生輸入姓名與 Email,而上傳中同時將圖片檔存入 Sever 端使用 move_uploaded_file()語法並且圖片檔位址使用 sql 語法 insert 同時寫入資

料庫,程式碼如下程式碼 3-13:

move_uploaded_file($_FILES["file"]["tmp_name"],iconv("UTF-8",

"big5","upload/".$userpic_1));//上傳至資料夾

$instr = fopen(iconv("UTF-8", "big5","upload/".$userpic_1),"rb");

$file = addslashes(fread($instr,filesize(iconv("UTF-8",

"big5","upload/".$userpic_1))));

$sql="insert into

imageDB(image,name,email)values('".$string."','".$_POST["newname"]."','".$_POST[

"email"]."')";//位址寫入資料庫

程式碼 3-13 圖片上傳

在文檔中 電子教科書互動試題系統 (頁 30-41)

相關文件