首页 > 文章中心 > 正文

网上考试系统设计

网上考试系统设计

摘要给出了用ASP和SQL技术实现网上考试系统的一个实例。

关键词:ADOASPSQL

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(ActiveXDataObject,ActiveX数据对象)是一个ASP内置的ActiveX服务器组件(ActiveXServerComponet),用于数据库访问,对数据库进行查询、插入、更新、删除等操作。对数据库的查询是用SQL的select命令,成绩的录入是用SQL的update命令。

存取数据库的具体步骤是:首先确定数据源,然后打开或连接数据库,,并执行响应的操作,执行完毕关闭数据库。以上操作是通过ADO对象来实现的。connection对象负责打开或连接数据库,recordset对象负责存取数据表,execute负责执行SQL命令。

设定数据来源的方法是:在服务器上打开“我的电脑”中的“控制面板”,双击“ODBC”;在“系统DSN”下选“添加”,选出预先设好的数据库种类、名称和位置。这里要用到的是access数据库,数据源名称为exam,主数据库名称为excise.mdb。打开或连接数据库的方法是:先用Server.CreatObject取得对象“ADODB.Connection”的一个实例,然后用“Open”打开待访问的数据库:

SetConn=Server.CreatObject(“ADODB.Connection”)

Conn.Open“exam"

然后执行SQL命令,即对数据库进行操作,这里要使用Execute命令

setrs=server.createobject(“adodb.recordset")

sql=“select*fromrest"

setrs=conn.execute(sql)

2.具体实现

主页文件index.asp的源代码如下:

〈html〉

〈head〉

〈metahttp-equiv=”Content-Type"content=”text/html;charset=gb2312"〉

〈metaname=“GENERATOR"content=”MicrosoftFrontPage4.0"〉

〈metaname=“Progld"content=”Fronpage.Editor.Document"〉

〈title〉用户口令检查〈/title〉

〈/head〉

〈bodybgcolor=”#008080”〉

〈formmethod=”post"action=”login.asp"〉

〈palign=”center"〉〈fontsize=”6"face=”黑体"〉网上考试系统v4.0〈/font〉〈/p>

〈palign=”center"〉〈fontcolor=“#0000FF"〉作者:尹春勇孙如霞〈/font>〈/p〉

〈palign=”center"〉2002.4.24〈/p〉

〈palign=”center"〉用户:〈inputtype=”text"name”name"size=”20"〉〈/p〉

〈palign=”center”〉口令:〈inputtype=”password”name=”passwd”size=“20"〉〈/p>

〈pailgn=”center"〉〈inputtype=”submit"value=“提交"name=“B1"〉

〈inputtype=“reset"value=”全部重写"name=”B2"〉〈/p〉

〈/form〉

〈/body〉

〈/html〉

信息递交后验证源代码login.asp如下:

〈%

name=request.form(“name")

passwd=request.form(“passwd")

setrs=server.createobject(“adodb.recordset”)

setconn=server.createobject(“adodb.connection")

connstr=“excise"

conn.openconnstr

sql=“select*fromuserwhereuser=`“&name&"’"

setrs=conn.execute(sql)

ifnot(rs.eof)then

ifrs(“score")〈〉Othen

response.writers(“user")&“的成绩是"&rs(“score")

else

session(“pass")=1

session(“user")=name

response.redirect“test.asp"

endif

else

response.write“对不起,用户和口令不正确!"

endif

%〉信息通过后抽取试题源代码test.asp如下:

〈%@language=vbscript%〉

〈%

ifsession(“pass")〈〉1thenresponse.redirect”login.asp"

setrs=server.createobject(“adodb.recordset")

setconn=server.createobject(“adodb.connection")

connstr=“excise"

conn.openconnstr

sql=“select*fromtest"

setrs=conn.execute(sql)

%〉

〈html〉

〈bodybgcolor=“#COCOCO"〉

〈formmethod=“POST"action=“result.asp"〉

〈%

i=1

rs.movefirst

dowhilenot(rs.eof)%〉

〈%=i%〉

〈%=rs(“question")%〉

〈br〉〈hr〉

〈tableborder=“O"width=“100%"〉

〈tr〉

〈tdwidth=”50%"〉〈inputtype=radioname=ans〈%=i%〉value=”a"〉A〈%=rs(“a")%〉〈/td〉

〈tdwidth=“50%"〉〈inputtype=radioname=ans〈%=i%〉value=”b"〉B〈%=rs(“b")%〉〈/td〉

〈/tr〉

〈tr〉

〈tdwidth=”50%”〉〈inputtype=radioname=ans〈%=i%〉value=”c”〉C〈%=rs(“c”)%〈/td〉

〈tdwidth=”50%"〉〈inputtype=radioname=ans〈%=i%〉value=”d"〉D〈%=rs(“d")%〉〈/td〉

〈/tr〉

〈/table〉

〈%

i=i+1

rs.movenext

loop

%〉

〈inputtype=”submit"name=”submit1"value=”交卷"〉

〈inputtype=”reset"name=”reset1"value=“重做"〉

〈/form〉

〈/body〉

〈/html〉

评分源代码result.asp如下:

〈%@language=vbscript%〉

〈%

setrs=server.createobject(“adodb.recorbset”)

setconn=server.createobje

ct(“adodb.connection")

connser=”excise"

conn.openconnstr

sql=”selectansfromtest"

setrs=conn.execute(sql)

correct=0

count=0

dowhilenotrs.eof

count=count+1

ifrequest.form(count)=rs(“ans")then

correct=correct+1

endif

rs.movenext

loop

scores=correct/count*100

response.write“你的成绩是:"&scores

sql=”updateusersetscore=”&scores&whereuser=''''”&session(“user")&"''''"

conn.execute(sql)

%〉