SE:系統文件

出自 Z
於 2008年9月27日 (六) 03:23 由 Johnroyer對話 | 貢獻 所做的修訂
(差異) ←上個修訂 | 最新修訂 (差異) | 下個修訂→ (差異)
前往:導覽搜尋

資料庫架構

  • ex_group:題組資料
欄位名稱 資料型態 備註
sn int(12) 流水號
name varchar(200) 題組名稱

注意:「未分類」的流水號固定為 1


  • ex_history:作答記錄
欄位名稱 資料型態 備註
question_sn int(12) 題目的流水號
take_date int(12) 測驗時間,使用 PHP time() 產生的數字
ans varchar(500) 答案,使用者輸入的答案
correct int(1) 是否答對,0:答錯、1:答對


  • ex_question:題目資料
欄位名稱 資料型態 備註
sn int(12) 流水號
name varchar(200) 名稱 (題目的問題)
exam_time int(5) 作答時間 (秒)
q_type int(2) 題目類型。 0:單選、1:複選、2:填充
group int(12) 題組流水號
user_sn int(12) 使用者流水號
choice int(2) 選項個數
ans varchar(500) 答案
ch1 varchar(200) 選項1
ch2 varchar(200) 選項2
ch3 varchar(200) 選項4
ch4 varchar(200) 選項4


  • ex_user:使用者資料
欄位名稱 資料型態 備註
sn int(12) 流水號
id varchar(100) 帳號
password varchar(512) 密碼,可以是明碼也可以是 MD5
authority int(2) 權限,0:一般使用者、1:管理員

檔案說明

Data 目錄

sql_connect.php

資料庫連線設定,程式已經寫好,只要設定前面的幾個變數即可,include 之後就可以直接使用 mysql_query 而不必在設定資料庫連接。

  • $db_host:DataBase 的 IP
  • $db_user:DB 使用者帳號
  • $db_password:DB 使用者密碼
  • $db_name:資料庫名稱

require 目錄

injection.php

預防 SQL injection 的處理程式,會對 $_POST 與 $_GET 陣列值做處理,並將處理完的數值存入 $http_post 和 $http_get。

  • password_encrypt():傳回加密以後的字串
  • delHTM():傳回將所有 HTML 標籤除去後的字串


statistics.php

統計用相關函式:

  • erate_byq($start_time, $end_time, $qsn):compute error rate ny question sn
    • $start_time:統計開始時間 (PHP time stamp)
    • $end_time:統計結束時間 (PHP time stamp)
    • $qsn:ex_question.sn
    • return:錯誤率


  • crate_byq($start_time, $end_time, $qsn):compute correct rate ny question sn
    • $start_time:統計開始時間 (PHP time stamp)
    • $end_time:統計結束時間 (PHP time stamp)
    • $qsn:ex_question.sn
    • return:正確率


  • group_erate($gsn):計算整個題組的錯誤率
    • $gsn:題組 sn
    • return:錯誤率 (float)


  • group_list($user_sn):題組列表
    • $user_sn:使用者 sn
    • return:題組資料的陣列
      • 陣列索引 index:題組的編號
      • 陣列內容 content:題組名稱


  • group_list_by_erate($user_sn):依照錯誤率由高而低排列題組
    • $user_sn:使用者 sn
    • return:題組資料的二維陣列 $data[n][m]
      • n:順序從 0 開始,依照錯誤率由高而低排列
      • m:裡面有三筆資料
        • m = 0:題組編號
        • m = 1:題組中文名稱
        • m = 2:題組錯誤率

chart.php

show_pic($xlen,$ylen,$type,$data,$text):使用 Google Chart API 產生圖表。

  • $xlen:圖表長度。
  • $ylen:圖表高度,$xlen * $ylen 必須小於 30000。
  • $type:圖表類型,line:折線圖、radar:雷達圖。
  • $data:資料。必須是一維陣列。
  • $text:資料的註解。必須是一維陣列,且陣列大小必須與 $data 相同。
  • return:網址。這個網址會連到 Google Chart 伺服器,Google Chart 伺服器則會傳回一張圖表。

若要產生一張 400 * 300 的圖表,畫出:10, 30, 20, 50 的折線圖,但是不加上資料註解,則 PHP 程式碼應該如下:

//設定資料
$x=400;
$y=300;
$data[0] = 10;
$data[1] = 30;
$data[2] = 20;
$data[3] = 50;
$text[0] = " ";    //填空白
$text[1] = " ";    //填空白
$text[2] = " ";    //填空白
$text[3] = " ";    //填空白

//產生圖形
echo "<img src=".show_pic($x, $y, "line", $data, $text ).">"

function.php

  • 題目外掛名稱 question_function.php
    • 顯示題組 print_class($fun_value, $next_step)
    • 顯示題目 print_question($class_num)
    • 確認頁面 print_ensure($fun_value, $next_step, $sn, $name, $exam_time, $q_type, $group, $user_sn, $choice, $ans, $ch1, $ch2, $ch3, $ch4)
    • 返回頁面 next_page($fun_value, $next_step)
  • 題組外掛名稱 group_function.php
    • 確認頁面名稱 print_ensure($fun_value, $next_step, $sn, $name)
    • 返回管理頁面 next_page($fun_value, $next_step)

P.S 目前兩檔案以上傳,有使用到的請自行修改

global.php

global.php 用來設定所有程式在執行前需要使用的變數、函式庫或是伺服器參數。

  • session_start():啟用 session
  • $timestamp:程式執行時間,使用 time() 產生

question_mod.php

  • Step1:使用print_group();印出題組列表,並輸入題組編號
  • Step2:使用print_question();印出題目列表,並輸入題目編號
  • Step3:選擇修改題目的之後,會依照該題目類型印出該類型可修改的選項內容
    • 單選:題目名稱、作答時間、答案欄位、題目選項
    • 複選:題目名稱、作答時間、答案框框、題目選項
    • 填充:題目名稱、答案欄位、作答時間
  • Step4:更改資料庫中的資料

question_newadd.php

  • 選擇新增題目的類型(單選、填充、複選)之後,會依照該題目類型印出該類型的選項內容,填選完會將資料送至question_newadd_safety.php 作檢查機制以及預覽的功能
    • 單選:題目名稱、答案欄位、作答時間、題目選項
    • 複選:題目名稱、答案框框、作答時間、題目選項
    • 填充:題目名稱、答案欄位、作答時間

question_newadd_safety.php

  • 檢查從question_newadd_safety.php接受到的資料是否合乎規定
    • 填充題:題目及答案欄位不可為空
    • 單選題:題目、選項不可為空;若是答案不在選項中則印出錯誤訊息
    • 複選題:題目、選項不可為空;若沒有勾選答案則會出現錯誤訊息,以及答案有多個的話,需做答案上的整合
  • 新增題目的預覽顯示
    • 若檢查機制沒有問題的話,則會預覽出欲新增題目的內容,若使用者核對沒有問題的話,則可以確認送出至question_newadd_use_function.php頁面作寫入到資料庫的動作

question_newadd_use_function.php

  • 將從question_newadd_safety.php頁面,所接收到的題目資訊寫入到資料庫中
    • 單選:題目名稱、答案欄位、作答時間、題目選項
    • 複選:題目名稱、答案框框、作答時間、題目選項
    • 填充:題目名稱、答案欄位、作答時間

group_delete.php

提供題組的刪除(不能刪題目):

  • Step1: 使用print_group()列出所有的題組(with Checked Box),使用者可以勾選欲刪除的題組,並點選確定。
  • Step2: 顯示題組有無刪除成功的訊息! 使用者確認後點選確定返回題組管理頁面。

question_delete.php

選定題組,並選擇性的將該題組的題目刪除

  • Step1: 使用print_group()列出所有的題組,使用者輸入題組編號,並點選確定。
  • Step2: 使用print_question($q_sn)列出所有在該題組底下的題目(with Checked Box),使用者選取欲刪除的題目,並點選確定。
  • Step3: 顯示題目有無刪除成功的訊息! 使用者確認後點選確定返回題目管理頁面。

group_newadd.php

輸入新的題組名稱的頁面,將要新增的題組名稱(group_name)傳送到question_use_function.php頁面做處理

  • 參數名稱:group_name(題組名稱)

group_newadd_use_function.php

  • 將從group_newadd.php接收到的group_name資料,將此資料寫入資料庫
  • 參數名稱:group_name(題組名稱)

group_mod.php

修改題組名稱的頁面(不提供修改題組編號)

  • Step1:使用print_group();印出題組列表,並輸入題組編號
  • Step2:讓題庫管理者修改題組名稱
  • Step3:更改資料庫中的資料

statistics_question.php

統計單一題目數據並產生折線圖的頁面

  • Step1:使用group_list($user_sn);印出題組列表
  • Step2:使用question_list($user_sn);印出題目列表
  • Step3:計算題目正確率後,使用show_pic($xlen,$ylen,$type,$data,$text);將資料傳至Google Chart產生成長曲線

statistics_group.php

統計單一或全部題組數據並產生雷達圖的頁面

  • Step1:使用group_list($user_sn);印出題組列表
    • 選擇單一題組,下一步驟為Step2
    • 選擇全部提組,下一步驟為Step3
  • Step2:印出單一題組的錯誤率(並不產生圖表)
  • Step3:印出全部提組的錯誤率並產生雷達圖

測試資料說明

測試資料的產生規則如下:

  1. 每個題組 30 個題目
  2. 從 2007/01/01 8am 產生測試資料
  3. 假設每天每個題目都做 3 次測驗
  4. 正確率從 10% 到 95% 做線性增加

目前總共 228774 比資料。