返回列表 上一主題 發帖

[教學] (實戰專題) 網路試卷 下篇

[教學] (實戰專題) 網路試卷 下篇

輸出試卷

將讀取進來的『考試題目』顯示在網頁中讓受測學生作答,這是『網路試卷-試卷網頁』的另一個ASP程式機制,我們將透過此機制把讀取的資料庫考題資料輸出至網頁中。
  1. <%
  2. '顯示考題
  3. '讀取資料表的資料錄直到資料錄全部讀取完畢
  4. DO While not recobject.EOF
  5. '顯示題目及配分
  6. Response.Write "<hr size=1><font color=blue>"&recobject(2)&_
  7. "、"&recobject(3)&"&nbsp&nbsp("&recobject(9)&"分)</font><br>"
  8. '顯示備選的答案項目
  9. For I= 1 to 4
  10. Response.Write "<font color=red>("&I&")</font><input type='"&"Radio"&_
  11. "' name='No"&recobject(2)&"' value="&I&">"&recobject("答案"&I)&"<br>"
  12. Next
  13. '將資料錄向後移一筆,顯示下一個題目
  14. recobject.MoveNext
  15. Loop
  16. '關閉資料庫
  17. recobject.CLOSE
  18. conobject.CLOSE
  19. %>
複製代碼


提示
Response.write 方法:負責將字串資訊輸出至使用者端,也可與HTML標示混合使用。標準的HTML標籤資料可直接書寫於ASP程式中,這些單純的HTML標籤資料在ASP程式執行後即會原原本本的直接傳送給瀏覽者的瀏覽器進行解譯的動作,但是,如果是變動性的資料,如日期、時間等,就必須使用 Response 物件的 『write 』方法來編寫。


question.asp
  1. <%
  2. '承接來自Indoor.asp的學號、姓名資料
  3. studentname=Request("studentname")
  4. number=Request("number")
  5. '開啟exam.mdb資料庫中的first(題目)資料表
  6. '建立資料庫連結物件conobject
  7.    Set conobject = Server.CreateObject("ADODB.Connection")
  8. '利用MapPath方法取得資料完整真實路徑   
  9.    DBPath = Server.MapPath("exam.mdb")
  10. '利用Open方法打開資料庫      
  11.    conobject.Open "Driver={Microsoft Access Driver (*.mdb)};DBQ="&DBPath
  12. '建立存取資料庫物件recobject      
  13.    Set recobject=Server.CreateObject("ADODB.Recordset")
  14.    SQL="SELECT * From "&"first"&" ORDER by 題號"
  15.    recobject.Open SQL,conobject,1,1,1
  16. '先將資料表的資料錄移至第一筆   
  17.    recobject.MoveFirst  
  18. %>
  19. <HTML>
  20. <HEAD>
  21. <TITLE>網路試卷-試卷網頁</TITLE>
  22. </HEAD>
  23. <BODY BGCOLOR="#FFFFFF" TEXT="#000000" LINK="#0000FF" VLINK="#800080">
  24. <div align="center"><font color="red" face="新細明體" size="6">網路試卷-試卷網頁</font></div>
  25. <form action="grad.asp" method="get">
  26. <input type="hidden" name="studentname" value="<%=studentname%>">
  27. <input type="hidden" name="number" value="<%=number%>">  
  28. <%
  29. '顯示考題
  30. '讀取資料表的資料錄直到資料錄全度讀取完畢
  31.   DO While not recobject.EOF
  32. '顯示題目及配分  
  33.   Response.Write "<hr size=1><font color=blue>"&recobject(2)&_
  34.                  "、"&recobject(3)&"&nbsp&nbsp("&recobject(9)&"分)</font><br>"
  35. '顯示備選的答案項目                 
  36.   For I= 1 to 4
  37.     Response.Write "<font color=red>("&I&")</font><input type='"&"Radio"&_
  38.     "' name='No"&recobject(2)&"' value="&I&">"&recobject("答案"&I)&"<br>"
  39.   Next
  40. '將資料錄向後移一筆,顯示下一個題目  
  41.   recobject.MoveNext
  42.   Loop
  43. '關閉資料庫  
  44.   recobject.CLOSE
  45.   conobject.CLOSE
  46. %>
  47. <hr size="1">
  48. <div align="center"><input type="submit" value="交卷"></div>
  49. </form>
  50. </BODY>
  51. </HTML>
複製代碼
心安,平安   
發表任何無意義的感謝或灌水文章一律砍,珍惜帳號,請詳閱版規!!

評分及公佈成績
當受測學生填寫好試卷並按下『網路試卷-試卷網頁』中的『交卷』按鈕後,就會連結進入『評分及公佈成績』的網頁,在本例中我們將這個網頁檔案名稱定為:『grad.asp』在這個網頁中ASP程式將進行分數的計算,並且將評分後的成績送至資料庫檔案中儲存,不僅如此,ASP程式還會馬上將評定的成績結果立即顯示在網頁中。現在我們接著來撰寫這個『評分及公佈成績』的網頁與網頁中的ASP程式。

在我們網頁中主要的ASP程式機制中,我們將要進行:


  • 連結資料庫並讀取資料中的資料來進行答案的比對。
  • 試題批改並將批改的結果輸出至網頁中。

    9-8.png

  • 評分成績存入資料庫的資料表中。
  • 在評分成績儲存到資料庫之後我們還必須將成績公佈出來,不但如此我們還將撰寫另一個ASP程式來判斷成績高低的顯示方式,成績低於60分者一律以紅色字來顯示,同時還會依照分數的高低來排定受測同學是死當還是有機會進行補考

    9-9.png


question.asp
  1. <%
  2. '承接來自question.asp的資料
  3. studentname=Request("studentname")
  4. number=Request("number")
  5. '開啟exam.mdb資料庫中的first考題資料表
  6. '在此開啟資料庫是用來讀取答案與寫入計算後的成績
  7. '建立資料庫連結物件conobject
  8.    Set conobject = Server.CreateObject("ADODB.Connection")
  9. '利用MapPath方法取得資料完整真實路徑      
  10.    DBPath = Server.MapPath("exam.mdb")
  11. '利用Open方法打開資料庫      
  12.    conobject.Open "Driver={Microsoft Access Driver (*.mdb)};DBQ="&DBPath
  13. '建立存取資料庫物件recobject        
  14.    Set recobject=Server.CreateObject("ADODB.Recordset")   
  15. '讀取資料表內容   
  16.    SQL="SELECT * From "&"first"&" ORDER by 題號"
  17.    recobject.Open SQL,conobject,1,1,1
  18. '先將資料表的資料錄移至第一筆      
  19.    recobject.MoveFirst
  20. '先將計算的總分設為0   
  21.    Score=0
  22.    Response.Write "<div align=center><font color=green face=新細明體 size=6>網路試卷-成績批改</font></div>"
  23. '將正確答案及受測學生選的答案一起顯示比對   
  24.    Do While Not recobject.EOF
  25.    Sel=Request("No"&recobject(2))
  26.    Ans=recobject(8)
  27. '計算成績,答對的題目加上該題應得分數
  28. '同時告知該題目是答對還是答錯
  29.    IF Trim(Sel)=Trim(Ans) then
  30.           Score=Score+recobject(9)
  31.       RM="-->答對"
  32.    ELSE
  33.       RM="-->答錯"
  34.    End IF
  35.    Ans=recobject(Ans+3)
  36.    yourans=recobject(Sel+3)
  37. '將試題批改的結果輸出至網頁中
  38.    Response.Write "<hr size=1>"&recobject(2)&_
  39.                  "&nbsp&nbsp"&recobject(3)&"<font color=red>"&RM&"</font><br>"
  40.    recobject.MoveNext
  41.    LOOP
  42.    recobject.CLOSE
  43.    conobject.CLOSE
  44. '開啟exam.mdb中的student資料表,顯示受測學生的成績
  45.    Set conobject = Server.CreateObject("ADODB.Connection")
  46.    DBPath = Server.MapPath("exam.mdb")
  47.    conobject.Open "Driver={Microsoft Access Driver (*.mdb)};DBQ="&DBPath
  48.    Set recobject=Server.CreateObject("ADODB.Recordset")
  49.    SQL="SELECT * From student where 學號="&number&" and 姓名='"&studentname&"'"
  50.    recobject.Open SQL,conobject,1,3
  51.       recobject.MoveFirst
  52. '將批改後的受測學生成績存入資料庫中
  53.       recobject("first")=Score
  54.       recobject.Update
  55. %>
  56. <HTML>
  57. <HEAD>
  58. <TITLE>網路試卷-成績批改</TITLE>
  59. </HEAD>
  60. <BODY BGCOLOR="#FFFFFF" TEXT="#000000" LINK="#0000FF" VLINK="#800080">
  61. <hr size="1">
  62. <!-- 顯示應考學生的資料 -->
  63. <table align="center" border="0" width="50%">
  64. <tr><td align="center" width="50%"><font color="blue">
  65. 姓名:<%=studentname%></font></td>
  66. <td align="center" width="50%"><font color="blue">
  67. 學號:<%=number%></font></td></tr>
  68. </table>
  69. <!-- 顯示應考學生的成績 -->
  70. <table align="center" border="1" width="50%">
  71. <tr><td align="center" width="50%">考試進度</td><td align="center" width="50%">分數</td></tr>
  72. <tr><td align="center">本次測驗成績</td><td align="center">
  73. <!--將成積不及格的分數以紅色顯示-->
  74. <%
  75.   IF Score<50 THEN
  76. Response.Write "<font color=red>"&Score&"分,死當</font>"
  77.   ELSEIF Score<60 THEN
  78. Response.Write "<font color=red>"&Score&"分,補考</font>"
  79.   ELSE
  80. Response.Write Score&"分,及格"
  81.   END IF
  82. recobject.CLOSE
  83. conobject.CLOSE
  84. %>
  85. </td></tr>
  86. </table>
  87. <hr size="1">
  88. <p>
  89. <!-- 重新填寫測驗卷 -->
  90. </p>
  91. <divalign="center">
  92. <a ref="indoor.asp?studentname=<%=studentname%>&number=<%=number%>">[再考一次]</div>
  93. </BODY>
  94. </HTML>
複製代碼
心安,平安   
發表任何無意義的感謝或灌水文章一律砍,珍惜帳號,請詳閱版規!!

TOP

使用Access來建立資料庫與資料表
在本範例中我們將學生資料,考題題目與答案、成績計算結果等三項資料記錄放在資料庫檔案中,而我們所使用的資料庫為Access格式的*.mdb資料庫檔案,接下來就為各位簡單的介紹如何建立這個資料庫檔案。


  • 開啟 Access ,選擇『Access空白資料庫』來建立新的資料庫,接著於『開新資料庫』對話視窗中的『檔案名稱』欄位中輸入我們的資料庫檔名『exam.mdb』,然後按下建立按鈕:

    9-10.png

    9-11.png

  • 接著就會出現一個『exam:資料庫』對話視窗,在這個對話視窗中,左側的選項欄中你會發現『資料表』項目是下凹而被選取的,此時請雙擊滑鼠左鍵選取對話視窗右側欄位中的『使用設計檢視建立資料表』來建立我們所需的資料庫資料表:

    9-12.png

  • 在出現的資料表設計視窗中請在『欄位名稱』欄位中依序輸入:型式、題號、試題內容、答案、答案、答案、答案、ANS、配分等項目,同時在『資料類型』欄位中依序為各個欄位項目選取相對應的資料類型:文字、數字、文字、文字、文字、文字、文字、數字、數字。

    9-13.png

  • 接著按下工具列上的『存檔』按鈕,將這張資料表儲存為『first』,再按下確定按鈕後Access會問我們要不要建立主索引,選是或否都可以,小誌是選『是』啦!

    9-14.png

  • 回到『exam:資料庫』對話視窗後,在這個對話視窗中,右側的欄位中你會發現多了一個『first』資料表項目,此時請在這個『first』資料表項目上雙擊滑鼠左鍵來開啟『first』資料表進行資料表內容的編輯:

    9-15.png

  • 請在開啟的資料表畫面中,依各欄位進行題目的編輯工作,特別注意一下,型式欄位的『單』意思是說我們的題目是單選題,而『ANS』欄位內容則為題目的正確答案。

    9-16.png

  • 請依照步驟2~6的說明建立另一個存放受測學生姓名、學號及分數的『student』資料表。

    9-17.png


 請注意:
受測學生名單的姓名與學號務必先行建立於資料庫的資料表中,否則在『網路試卷-試場大門』網頁的ASP程式讀取資料庫中的受測學生名單資料來與受測學生所填的資料作比較時,如果受測學生所填的資料不在資料表名單上將會出現錯誤訊息,至於『first』欄位則是用來紀錄『評分及公佈成績』的網頁中ASP程式所進行的分數計算結果。


(實戰專題) 網路試卷完整範例壓縮檔下載: eask.zip (18.08 KB)
心安,平安   
發表任何無意義的感謝或灌水文章一律砍,珍惜帳號,請詳閱版規!!

TOP

        靜思自在 : 自己害自己,莫過於亂發脾氣。
返回列表 上一主題