如何设计与实现当前网上考试系统
来源:岁月联盟
时间:2010-08-30
关键词 :ADO ASP SQL?
0.引言?
随着技术的,传统的考试形式已日益显示出其不足。本文用asp技术和sql结构化查询语言实现了网上的无纸化考试。?
1.设计?
系统基本原理是:用access建立一个数据库文件,用来存储试题及用户的验证信息。当用户登陆时,首先提示要输入验证信息,当输入用户信息后,通过 sql 语言查询此用户是否合法,如果不合法,则显示提示信息。否则,进入考试系统,由服务器抽取试题并显示到考生屏幕上。当考生做完题并递交后,由系统自动评分并显示成绩。?
在本系统中,数据库的建立是用 ACCESS 实现的。其中包括两个表:user 和 test。?
User 表存储用户信息,test 表存储考试内容。?
user 表结构如下:?
字段名 类型 含义
User 文本 存储用户名
Passwd 文本 存储密码
Score 数字 存储成绩
?
Test 表结构如下:?
字段名 类型 含义
Question 文本 存储考试题目
A 文本 存储选项A的答案
B 文本 存储选项B的答案
C 文本 存储选项C的答案
D 文本 存储选项D的答案
Answer 文体 存储正确答案
在提取用户端信息以及反馈信息时用到了 ASP 的内置对象。现说明如下:?
Request 对象?
可以使用 Request 对象访问任何用 HTTP 请求传递的信息,包括从 HTML 表格用 POST 方法或 GET 方法传递的参数、cookie 和用户认证。本系统通过 REQUEST 获取用户输入的用户名和密码。代码为:?
REQUEST.FORM(“name”)和REQUEST.FORM(“passwd”)。?
Response 对象?
可以使用 Response 对象控制发送给用户的信息。包括直接发送信息给济览器、重定向浏览器到另一个 URL 或设置 Cookie 的值。本系统通过 RESPONSE 将成绩反馈给用户。?
RESPONSE.WRITE“你的成绩是”&score?
试题的读取和成绩的录入是通过ADO来进行的。ADO(ActiveX Data Object,ActiveX数据对象)是一个ASP内置的A ctiveX服务器组件(ActiveX Server Componet),用于数据库访问,对数据库进行查询、插入、更新、删除等操作。对数据库的查询是用SQL的select命令,成绩的录入是用SQL的update命令。?
存取数据库的具体步骤是:首先确定数据源,然后打开或连接数据库,,并执行响应的操作,执行完毕关闭数据库。以上操作是通过 ADO 对象来实现的。connection 对象负责打开或连接数据库,recordset 对象负责存取数据表,execute 负责执行 SQL 命令。?
设定数据来源的方法是:在服务器上打开“我的电脑”中的“控制面板”,双击“ODBC”;在“系统 DSN”下选“添加”,选出预先设好的数据库种类、名称和位置。这里要用到的是 access 数据库,数据源名称为 exam ,主数据库名称为 excise.mdb。打开或连接数据库的方法是:先用Server.CreatObject取得对象“ADODB.Connection”的一个实例,然后用“Open”打开待访问的数据库:?
Set Conn=Server.CreatObject (“ADODB.Connection”)?
Conn.Open“exam"?
然后执行 SQL 命令,即对数据库进行操作,这里要使用Execute 命令?
set rs=server.createobject(“adodb.recordset")?
sql=“select * from rest"?
set rs=conn.execute(sql)?
2.具体实现
主页文件 index.asp 的源代码如下:?
〈html〉?
〈head〉?
〈meta http-equiv=”Content-Type" content=”text/html;charset=gb2312"〉?
〈meta name=“GENERATOR" content=”Microsoft FrontPage 4.0"〉?
〈meta name=“Progld" content=”Fronpage. Editor.Document"〉?
〈title〉用户口令检查〈/title〉?
〈/head〉?
〈body bgcolor=”#008080”〉?
〈form method=”post" action=”login.asp"〉?
〈p align=”center"〉〈font size=”6"face=”黑体"〉网上考试系统v4.0〈/font〉〈/p>
〈p align=”center"〉〈font color=“#0000FF"〉作者:尹春勇 孙如霞 〈/font>〈/p〉?
〈p align=”center"〉2002.4.24〈/p〉
〈p align=”center"〉用户:〈input type=”text" name”name"size=”20"〉〈/p〉?
〈p align=”center”〉口令:〈input type=”password”name=”passwd”size=“20"〉〈/p>?
〈p ailgn=”center"〉〈input type=”submit" value=“提交"name=“B1"〉?
〈input type=“reset" value=”全部重写" name=”B2"〉〈/p〉?
〈/form〉?
〈/body〉?
〈/html〉?
信息递交后验证源代码login.asp如下:?
〈%?
name=request.form(“name")?
passwd=request.form(“passwd")??
set rs=server.createobject(“adodb.recordset”)?
set conn=server.createobject(“adodb.connection")?
connstr=“excise"?
conn.open connstr?
sql=“select * from user where user=`“&name&" ’"?
set rs=conn.execute(sql)?
if not(rs.eof) then?
if rs(“score")〈〉O then?
response.write rs(“user")&“的成绩是"&rs(“score")?
else?
session(“pass")=1?
session(“user")=name?
response.redirect “test.asp"?
end if?
else?
response.write“对不起,用户和口令不正确!"?
end if?
%〉?
信息通过后抽取试题源代码test.asp 如下:?
〈%@ language=vbscript%〉?
〈%?
if session(“pass")〈〉1 then response.redirect”login.asp"?
set rs=server.createobject(“adodb.recordset")?
set conn=server.createobject(“adodb.connection")?
connstr=“excise"?
conn.open connstr?
sql=“select * from test"?
set rs=conn.execute(sql)?
%〉?
〈html〉?
〈body bgcolor=“#COCOCO"〉?
〈form method=“POST" action=“result.asp"〉?
〈%?
i=1?
rs.movefirst?
do while not(rs.eof)%〉?
〈%=i%〉??
〈%=rs(“question")%〉?
〈br〉〈hr〉?
〈table border=“O" width=“100%"〉?
〈tr〉?
〈td width=”50%"〉〈input type=radio name=ans〈%=i%〉value=”a"〉A〈%=rs(“a")%〉〈/td〉
〈td width=“50%"〉〈input type=radio name=ans〈%=i%〉value=”b"〉B〈%=rs(“b")%〉〈/td〉
〈/tr〉?
〈tr〉?
〈td width=”50%”〉〈input type=radio name=ans〈%=i%〉 value=”c”〉C〈%=rs(“c”)%〈/td〉?
〈td width=”50%"〉〈input type=radio name=ans〈%=i%〉value=”d"〉D〈%=rs(“d")%〉〈/td〉
〈/tr〉?
〈/table〉?
〈%?
i=i+1?
rs.movenext?
loop?
%〉?
〈input type=”submit" name=”submit1" value=”交卷"〉?
〈input type=”reset" name=”reset1" value=“重做"〉?
〈/form〉
〈/body〉?
〈/html〉?
评分源代码 result.asp 如下:?
〈%@ language=vbscript%〉??
〈%?
set rs=server.createobject(“adodb.recorbset”)?
set conn=server.createobje
ct(“adodb.connection")?
connser=”excise"?
conn.open connstr?
sql=”select ans from test"?
set rs=conn.execute(sql)?
correct=0?
count=0?
do while not rs.eof?
count=count+1?
if request.form(count)=rs(“ans") then?
correct=correct+1?
end if?
rs.movenext?
loop?
scores=correct/count*100?
response.write“你的成绩是:"&scores?
sql=”update user set score=”&scores& where user='”&session(“user")&"'"?
conn.execute(sql)?
%〉