• 沒有找到結果。

第四章 系統實現

4.2 各文件功能介紹及詳解

default.asp selectsubject.asp test.asp result.asp

primary.asp mgstudent.asp

mgadmin.asp

mgsubject.asp

mgscore.asp

mgquestion.asp addquestion.asp

圖 4-1 系統流程圖

4.2 各文件功能介紹及詳解

1.<conn.asp>

該文件實現的是連接資料庫和斷開連接的功能。

文件中主要是定義了兩個過程 conn_init()和 endConnection()。第一 個是連接資料庫,第二個是實現斷開連接。其中 conn_init()過程中的連接 是通過下面語句實現的:

connstr= "DBQ=" + server.mappath("data.mdb") +

";DefaultDir=;DRIVER={Microsoft Access Driver (*.mdb)};"

set conn=server.createobject("ADODB.CONNECTION") conn.open connstr

connstr 確定了資料檔案的路徑和資料庫驅動程式。

Conn 的含義是定義了一個變數用,來存放資料庫連接所創建的物件。

conn.open connstr 則真正實現了資料庫的連接。

該文件主要被包含在其他文件中實現資料庫的連接和斷開功能。

2.<default.asp>

該文件的功能是系統登陸的入口,在此可以實現用戶註冊入口,管理 員管理入口以及用戶進入考試系統登陸介面的功能。

該文件的功能使這樣實現的:表單提交給文件本身。再由 HTML 上面的 ASP 程式對提交資訊進行處理。

最上面的<%@ Language=VBScript %>表示腳本語言是 VBScript。

<!--#include file="conn.asp"-->表示包含 conn.asp 文件。以下的 程式進行了選擇判斷,如果提交的表單中的 submit 值爲“登錄",就繼續 判斷看 student 表中是否存在與該用戶輸入的用戶名和密碼相同的記錄,

如果存在就轉到 selectsubject.asp 頁進行考試科目選擇。不存在就返回

“對不起,請輸入正確的用戶名和密碼。"如果 submit 值爲“註冊",就 轉到 register.asp 頁進行用戶註冊。如果 submit 的值爲“管理"就轉到 admin 文件夾中的 login.asp 頁。重點程式如下:

set rs = server.createobject("adodb.recordset") rs 是一個變數,用來存放一個 recordset 物件。

sql="select * from student where studentname='" &

Request.Form("studentname") & "' and studentpassword='" &

Request.Form("studentpassword") & "'"

變數 sql 代表一個 SQL 語句,功能是從表 student 中選出用戶名和密 碼與考生提交的用戶名和密碼都相同的記錄。

rs.open sql,conn,1,1

該語句的功能是執行 sql 語句並把記錄集結果存儲在變數 rs 中。

rs.close 的作用是關閉紀錄。

session("studentname")=request.form("studentname") 該句的意思是把表單提交的變數 studentname 的值賦給一個 session 物件 studentname。這個物件用來存儲用戶名,它在 該用戶對每個頁面的訪問中有效。

set rs=nothing 含義是清空 rs 變數。

call endConnection()是調用 conn.asp 中的過程,用來關閉於資料庫 的連接。

3.<register.asp>

該文件實現了用戶註冊的功能,用戶只要填寫想要註冊的用戶名及密 碼,文件首先查看用戶名是否已經存在,如果存在就提示該用戶名已經存 在,否則就將用戶輸入的資訊添加到資料庫中的 student 表內。然後用戶 就可以使用自己註冊的用戶名和密碼登錄線上考試系統進行線上考試。

在文件中,表單提交給 register.Asp 自身進行處理,如果 submit 值 爲“註冊"首先進行判斷看用戶名或密碼是否爲空。如果爲空就顯示“錯 誤!用戶名或密碼不能爲空!"的資訊。如果不爲空,進行下一步判斷,看 student 表中是否已經存在用戶想要註冊的用戶名,如果存在,就顯示資訊

“錯誤!該用學生存在!",如果不存在就將要註冊的用戶名和密碼寫入 student 表。代碼如下:

sql="insert into student(studentname,studentpassword) values('" & cstr(trim(request("studentname"))) & "','" &

cstr(trim(request("studentpassword"))) & "')"

conn.execute sql

最後,用一個 Vbscrip 語言編寫的訊息方塊顯示註冊成功資訊。

4.<selectsubject.asp>

該文件是實現用戶登錄線上考試系統後進行考試科目選擇的功能,選

selectsubjectname,然後從 subject 表中選出該科的相關資訊,並也都設 成 session 變數。Singlenumber 表示基本試題數量,multinumber 表示應 用試題數量,singleper 表示基本試題分值,multiper 表示應用試題分值,

testtime 表示考試總時間。接著進入考試介面。

5.<test.asp>

該文件就是考試介面,實現真正的動態隨機選題,並對每個考生的考 試時間進行監控,到結束時間後自動給出提示。

該文件的總體構架是使用了 if else 語句進行了一個選擇,剛進入該 頁面 submit1 得值肯定不等於“開始考試",所以先顯示出“開始考試"

的按鈕。按下以後,首先把當前時間以分種爲單位存儲在 session 的變數

starttime 中。然後進入隨機抽取試題部分,基本題和應用題的抽取很相 似,只不過一個是單選按鈕,一個是單選按鈕罷了。這裏只解釋基本題的 部分。

strid1=""是定義了一個字串變數,並先賦值爲空。

Randomize 是産生隨機種子,在使用 rnd()函數之前一定要先用 Randomize 産生隨機種子才能實現其産生 0~1 之間亂數的功能。

for i=1 to session("singlenumber")直到 next 是選擇 singlenumber

(代表某科目的基本題數量)個基本題。

下面的代碼實現了從資料庫中隨機不重復的選題:

set rs=server.createobject("adodb.recordset") sql="select * from question where

subjectname='"&session("selectsubjectname") & "'and type='基本題' and haveselect=0 "

rs.open sql,conn,3,2 count=rs.recordcount temp=fix(count*rnd(10)) rs.move temp

rs("haveselect")=1 rs.update

strid1=strid1 & rs("ID") & ","

其中 haveselect 標誌某題是否已經被選過。

Count 變數用來存放所有未被選過的基本題的總數。

temp 變數用來存放 0~Count 之間的隨機整數值。

rs.move temp 是將當前記錄移到第 temp 條紀錄。

rs("haveselect")=1 是將當前選出的紀錄的標誌位元設爲 1,然後用 rs.update 把資料庫中的相應標誌位元改爲 1。

strid1=strid1 & rs("ID") & ","是將所有選出的試題的 id 號用逗號 分割後存儲在 strid1 一個變數中,以方便的把所有選出的試題的 id 號傳 到 result.Asp 文件中,這也是本設計的一個獨特的地方。需要說明的是 strid1 變數的最後是一個逗號,在下一個文件中會詳細說明如何進行處理。

set rs=server.createobject("adodb.recordset") sql="select * from question where haveselect=1 "

rs.open sql,conn,3,2

rs.movefirst

do while not rs.eof rs("haveselect")=0 rs.update

rs.movenext loop

上面一段程式是在選完題之後將所有已經設成 1 的 haveselect 改寫成 0,這樣自己下次或別人就仍可以選擇所有的試題。

最後一段程式是用來計時的,考試時間到了之後自動給出提示。

6.<result.asp>

考生提交答卷以後,該文件就把考生的答案同 question 表中的正確答 案進行比較,最後得出考生的得分。

首先是變數賦值,取得 session 物件的一些變數值,以方便使用。

endtime=now()是去的考試結束時間。

selectstr1=request.form("hidQuestID1")和

selectstr2=request.form("hidQuestID2")是獲取存放被選基本和應 用試題的 id 號的兩個字串。

len1=len(selectstr1)和

len2=len(selectstr2)是取得兩個字串的長度。

str1=left(selectstr1,len1-1)

str2=left(selectstr2,len2-1)是把兩個字串的結尾(也就是逗號)取 掉。

dim id1,id2

id1=split(str1,",")

id2=split(str2,",")是用 split()函數將存有 id 號的字串拆開並存 放到陣列當中,以便調用。

以上就實現了所有被選中的試題的 id 號的傳遞。

下面這段程式就實現了基本試題的答案於正確答案的比較,並得出基本 題應得分數。

for i=1 to singlenumber

result=request.form("no"&id1(i-1)) if not isempty(result) then

sql="select * from question where id="& clng(id1(i-1))

set rs=server.createobject("adodb.recordset") rs.open sql,conn,3,2

if result=rs("answer") then score=score+cint(singleper) end if

rs.close

set rs=nothing else

7.<primary.asp>

該文件實現的功能是管理員選擇進行管理的專案,也就是管理主介面。

8.<mgstudent.asp>

該文件實現對用戶進行管理(刪除或添加)的功能。

9.<mgadmin.asp>

該文件實現對管理員進行管理(刪除或添加)的功能。

10.<mgsubject.asp>

該文件的功能是實現對考試科目及相關參數(如考試時間、基本及應 用題量)進行管理。

11.<mgscore.asp>

該文件的功能是對考試記錄進行查詢或刪除。

12.<mgquestion.asp>

<mgquestion.asp>和<addquestion.asp>兩個文件和起來實現對試題 庫進行刪除修改和添加的功能。

subjectname=trim(request("subjectname"))是將上一個介面傳來的 科目名稱賦值給 subjectname 變數。

set rs=server.createobject("adodb.recordset")

rs.open "select * from question where subjectname='" &

cstr(trim(request("subjectname")))&"' order by id desc ",conn,1,1 上面這段代碼是從 question 表中將所有其科目名與所選科目相同的問 題都選出來。

<a href='mgquestion.asp?type=<%=trim(rs("type"))%>

&subjectname=<%=trim(rs("subjectname"))%>&action=edit&id=<%=trim (rs("id"))%>&page=<%=request("page")%>'>編輯</a>&nbsp<a

href='javascript:SureDel(<%=rs("id")%>)'>刪除</a>

上面這段代碼的的作用是將刪除的參數傳給文件自身或將編輯的參數 傳給 SureDel(id,subjectname)函數。

如果實執行刪除操作就轉到 SureDel(id,subjectname),提示是否真的 要刪除,如果選擇確定就執行如下代碼:

sql="delete from question where id=" &request("id") conn.execute sql

執行刪除該問題的操作,將 question 表中的相應記錄刪除。否則,如 果選擇取消就不執行刪除操作。

如果執行編輯同樣將參數傳給文件自身,先執行下面代碼將 isedit 的 值設爲真:

if request("action")="edit" then isedit=true

end if

文件最下面是編輯試題或添加試題部分,表單提交給 addquestion 進 行處理。

13.<addquestion.asp>

首先將表單傳過來的各個參數值賦給不同的變數,以便於使用。然後 判斷 question,subjectname,answer 和 leixing 四個變數是否爲空,如果 爲空顯示錯誤資訊。不爲空就進行判斷,看是修改問題還是添加問題,分 別進行相應處理(修改 question 表中的記錄或向其中添加記錄),然後返 回到 mgquestion.asp 頁面。

相關文件