网上考试设计思路是怎样的?_编程10000问

global.asa 

< script LANGUAGE=VBScript RUNAT=Server >

Sub Application_OnStart

   dbPath = "DBQ=" & Server.Mappath("onlinetest.mdb")

   dbConnectionString =  "DRIVER={Microsoft Access Driver (*.mdb)}; " & dbPath

   Set Application("Conn") = Server.CreateObject ("ADODB.Connection")

   Application("Conn").Open dbConnectionString

End Sub

Sub Application_OnEnd

   Application("Conn").Close

   Set Application("Conn") = Nothing

End Sub

Sub Session_OnStart

End Sub

Sub Session_OnEnd

End Sub

< /script >

----------------------------------------------------------------------------------------------------------------

注册页面index.asp。其中有两个输入域:用户名和口令,这两个输入域需要客户机端的javascript确认,以便不把它们作为空白域来传递。非考生要想参加考试必须先注册。这个页面还要显示一些错误信息,如“用户名或口令错误”、“请重新选择一个用户名”等。注册表单中还应包含考生一些个人的信息,如Emai、年龄、教育程度等。登录后,考生就可以参答考试站点的其它试卷了。<?xml:namespace prefix = o ns = "urn:schemas-microsoft-com:office:office" />


index.asp


<title>撼雪喷云之网上考试设计思路</title>

if (theForm.username.value == "")

{

alert("考生姓名\"User Name\"");

theForm.username.focus();

return (false);

}

if (theForm.password.value == "")

{

alert("考生口令\"Password\"");

theForm.password.focus();

return (false);

}

< table border="0" cellpadding="0" >

< tr >

< td width="50%" >

< font face="Verdana" size="2" >姓名:< /font >

< /td >

< td width="50%" >

< font face="Verdana" size="2" >< input type=text name=username size=20 maxlength=50 >< /font >

< /td >

< /tr >

< tr >

< td width="50%" >

< font face="Verdana" size="2" >口令:< /font >

< /td >

< td width="50%" >

< font face="Vedana" size=2 >< input type=password name=password size=20 maxlength= 50 >< /font >

< /td >

< /tr >

< tr >

< td width="100%" colspan="2" align="center" >

< font face="Verdana" size="2" >< br > < input type="submit" value="提交" name="B3" >

< input type="reset" value="重写" name="B4" >

< /font >

< /td >

< /tr >

< /table >

----------------------------------------------------------------------------------------------------------------

登录文件register.asp,当考生登录或新注册后,就显示这一页。我们可以利用它来询问考生的个人信息。该表单被提交后,转到sendregister.asp页面。

----------------------------------------------------------------------------------------------------------------

验证和发送文件sendregister.asp。该页面从register.asp 中取得表单域的内容,查询数据库验证输入的用户名是否已经存在,如果存在,则将考生重新引回register.asp页面,并被提示要求重新选择用户名;如果用户名通过,则输入的内容就被传递并插入到数据库中。


sendregister.asp


sql_findmember = "select count(*) from loginuser where username = '" & username &"'"

Set RS_findmember = Application("Conn").Execute(sql_findmember)

If RS_findmember(0) < > 0 Then

Session("message") = "噢,您输入的名字已经存在,请重新选择一个名字!"

response.redirect "register.asp"

' 如果RS_findmember(0) 返回的值大于0,用户就被引导回注册主页,并被要求填写一个新的用户名.

End If

If RS_findmember(0) = 0 Then

sql_insert = "insert into loginuser (username,useremail,password) _

values('" & username & "','" & useremail & "', '" & pwd &"') "

Set RS_insert = Application("Conn").Execute(sql_insert)

Session("message") = "THE ENtrY HAS BEEN INSERTED .. Thank You"

response.redirect "index.asp"

' 如果RS_findmember(0) 返回的值是0,就表示用户名在数据库中不存在,名字就被存入.这意味着,考生可以参答站点其它的试卷了.

End If

username = replace(request.form("txt_name"),"'","''")

' 防止非法进入数据库哦.替换函数,当访问者键入了"'"单撇号,就用"''"代替.

----------------------------------------------------------------------------------------------------------------

checkuser.asp


' 考生登录验证文件.

sql_check = "select count(*) from loginuser where username ='" & _

username &"' and password = '" & useremail &"'"

' 验证用户名和口令是否存在于数据库中.

Set RS_check = Application("Conn").Execute(sql_check)

If RS_check(0) < > 0 Then

Session("username") = request.form("username")

response.redirect "default.asp"

' 如果已注册,引导到default.asp页.

End If

If RS_check(0) = 0 Then

Session("error") = "对不起,您的姓名或口令无效,请重新输入!"

response.redirect "index.asp"

' 检查用户是否已经注册,如果返回值为0,表明用户名或口令无效,回注册页

End If

username = replace(request.form("username"),"'","''")

useremail = replace(request.form("password"),"'","''")

' 替换函数.

----------------------------------------------------------------------------------------------------------------

选择试卷页面default.asp。登录成功后,进入该页面。在这儿,考生可以选择的考试科目列表。在本设计中,用了001html 和002html两个,在实际应用中,可以增加表格以增加考试科目数。default.asp 要求表格安装一个下拉菜单,其中包含科目的列表,然后查询数据库,从试卷的表格中搜集两个域。

default.asp


sql_papers = "select *id, topic from paper sort order by topic asc"

SET RS_papers = Application("Conn").Execute(sql_papers)

 

' 以下代码是为了在下拉菜单中显示结果.

select size=1 name=select1 onchange="msec(document.form1._

select1.options[document.form1.select1.selectedIndex].value);" >

< option value="0" >选择科目考试

< %Do while not RS_papers.EOF% >

< option value="< %=RS_papers("id")% >" >< %=lcase(RS_papers("topic"))% >< /OPTION >

< %

RS_papers.MoveNext

Loop

% >

 

function msec(x)

' msec函数在X值的基础上调用 redirect.asp,把查询字符串: ?x的值作为下拉菜单中被选择的项的值.

{if (x==0)

{ alert("欢迎参加撼雪喷云之精英考试,请选择一个考试科目!")

}

else

{ location.href="redirect.asp?section=" + x

}

}

----------------------------------------------------------------------------------------------------------------

终于可以参加精英赛了!我们进入了试题页面redirect.asp。它将考生送到实际生成试题的ASP页面,如果数据库中没有所选择的科目的任何题目,就会显示错误信息和返回链接。如果数据库有题,则这一页就被重新引导到exam.asp页面,考生就可以进行在线考试了。


redirect.asp

id = Request.QueryString ("section")

' 先调用查询字符串部分,将值存入变量 id中.

 

SQL = "select tbl_name from paper where id="&id

Set RS = Application("Conn").Execute(SQL)

subject= RS(0)

' 再使用SQL声明传递试卷表格中的域名table_name,结果存储在subject中.

 

MyString = Split(subject,"tbl",-1,1)

' 分离变量subject,将其存储在MyString中.注意,此处用Split 函数在客户端显示测验名是为了更好地显示.

IF RS_subject.BOF AND RS_subject.EOF Then

Response.Write Online " & MyString(1) & 题库正在创建中,请稍后再来! < a href=default.asp >返回< /a >"

Else

Response.Redirect ("exam.asp?section="&id )

End If

----------------------------------------------------------------------------------------------------------------

exam.asp是标准试卷页面,代码共分两大部分:计时器函数和本页查询选取试题。显示试题,并以单选按钮方式供考生答题。从数据库中选择的试题,本设计采用了随机函数,这也是目前题库生成试卷的通用方式。题目的个数设定为10个,考生每次回答5个。时间限定为20秒,剩余的时间在屏幕底部的状态窗口中显示。所有的试题都一起显示出来,然后开始计时。时间和试题个数都可以改变。


exam.asp


' 以下是计时器函数.

< script language="javascript" >

var ck=0;

var tf=0;

var timeUp=0;

var timeLeft=0;

var tcount=0;

TimerFunc();

function TimerFunc() {

tf=window.setTimeout("TimerFunc();",1000);

tcount++;

timeLeft=20 - tcount;

window.status = "嘻嘻,做得的好快哦,还剩" +timeLeft + "秒";

}

< /script >

 

id = Request.QueryString ("section")

session("id") = id

' 查询字符串存储在一个 session("id")中,按顺序启动查询.

sql_tblname = "select tbl_name from paper where id="&id

' SQL声明的目的是从试卷表格中找到表格名,如果找到了表格名就开始向指定表格的查询.

Set RS_tblname = Application("Conn").Execute(sql_tblname)

subject= RS_tblname(0)

MyString = Split(subject,"tbl",-1,1)

' split函数从结果中去掉tbl, 本设计使用了表格名前加tbl前缀的命名惯例.

 

 

sql_details = "select a.id, a.question, a.choice1, a.choice2,a.choice3, " &_

" a.choice4 from " & subject & " a where a.id="&MyArray(Counter)

' 用随机函数生成从1-10之间的任意数字, MyArray(Counter)是已经生成的随机数字,用来从指定的科目表格中选取id.id,question,choice1,choice2,choice3,choice4都是科目表格域名.

----------------------------------------------------------------------------------------------------------------

考试成绩单result.asp,显示结果,并将这些结果增加到数据库细节表格中,以供查询:

result.asp


for each item in Request.Form

sql_check = "select Count(*) from "&subject&" where answer ='" & Request.Form(item) & "'"

Set RS_check = Application("Conn").Execute(sql_check)

if RS_check(0) > 0 then

result = result + 1

end if

next

' 变量result存储结果.

  

percent = round(( 100 * result )/count)

' 百分数换算.

sql_id = "select id from loginuser where username='" & Session("username") &"'"

Set RS_id = Application("Conn").Execute(sql_id)

id= RS_id(0)

SQL_insert = "insert into details (ref_id,subject,score) values('" & id & "','" _

& subject & "', '" & percent &"') "

' 执行查询,将结果存储在数据库中.

----------------------------------------------------------------------------------------------------------------

view.asp 文件查询是否在此参加过考试。

view.asp


sql_id= "select id from loginuser where username='" & Session("username") &"'"

Set RS_id = Application("Conn").Execute(sql_id)

id= RS_id(0)

sql_count = "Select count(*) from details where ref_id = '" & id &"'"

Set RS_count = Application("Conn").Execute(sql_count)

If RS_count(0) < > 0 Then

response.redirect "viewrecord.asp"

' 如果已参加过考试,则转到viewrecord.asp页面.

End If

If RS_count(0) = 0 Then

Session("noview") = "噢,您还没在我们这儿考过试呢!"

response.redirect "default.asp"

End If

----------------------------------------------------------------------------------------------------------------

viewrecord.asp文件以表格形式显示注册用户的信息。

viewrecord.asp


sql_details = "Select *subject, score from details where ref_id = '" & id &"'"

Set RS_details = Application("Conn").Execute(sql_details)

----------------------------------------------------------------------------------------------------------------

 

[1]

时间: 2024-09-15 18:45:56

网上考试设计思路是怎样的?_编程10000问的相关文章

如何实现网上考试?_编程10000问

login.asp<?xml:namespace prefix = o ns = "urn:schemas-microsoft-com:office:office" /> ' 考生验证.<%@ Language=VBScript%><%name=trim(request("name"))passwd=trim(request("passwd"))if name<>"" and pass

ASP问答集_编程10000问

问:为什么我的记录集的RecordCount值总是返回-1? 答:你应当使用这种模式来打开存取数据库的记录集:   rec.open strSQL,conn,1,1   其中的strSQL是操作数据库的SQL语句;conn是联接数据库的Connection 变量. 问:我在ASP脚本中写了很多的注释,这会不会影响服务器处理ASP文件的速度? 答:经国外技术人员测试,带有过多注释的ASP文件整体性能仅仅会下降0.1%,也就是说基本上不会影响到服务器的性能下降的. 问:我需不需要在每个ASP文件的开

如何创建Word文件?_编程10000问

creatdoc.asp<?xml:namespace prefix = o ns = "urn:schemas-microsoft-com:office:office" /> <!DOCTYPE html PUBLIC "-//W3C/Dtd html 3.2 Final//EN"><head><title>星河影动之创建Word文件</title><META HTTP-EQUIV="Re

如何动态添加Form项?_编程10000问

<%@ language = vbscript%><% Response.Expires = 0 %><html><head><title>星河影动之动态添加Form项</title></head><body><%If Request("Action") = "提交列表" ThenResponse.Write "<B>提交的项:</B&g

如何把URL和邮件地址转换为超级链接?_编程10000问

Function InsertHyperlinks(inText)Dim objRegExp, strBufDim objMatches, objMatchDim Value, ReplaceValue, iStart, iEnd   strBuf = ""  iStart = 1  iEnd = 1  Set objRegExp = New RegExp   objRegExp.Pattern = "\b(www|http|\S+@)\S+\b"  <?xm

如何取回已忘记的密码?_编程10000问

forget.asp<?xml:namespace prefix = o ns = "urn:schemas-microsoft-com:office:office" /> ' 申请. <html> <head> <title>闪亮日子之用户密码核实</title> </head> <div align="center"><center> <table border

如何检测用户第一次访问我的网站并显示友好信息?_编程10000问

< %@ LANGUAGE="VBscript" % >< % RequestName = Request.Form("Name")RequestLeaveMeAlone = Request.Form("LeaveMeAlone")If RequestName <  >"" or RequestLeaveMeAlone <  >"" then<?xml:nam

如何用FileSystemObject组件来做一个站内搜索?_编程10000问

searchpage.htm' 搜索页面. <html><?xml:namespace prefix = o ns = "urn:schemas-microsoft-com:office:office" /> <head>        <title>千花飞舞之站内搜索引擎</title>    </head>    <body>        <CENTER>            <

如何用POP3接收电子邮件?_编程10000问

<%  Set pop3 = Server.CreateObject( "JMail.POP3" )   pop3.Connect "username", "password", "pop3mail.intels.net"  ' POP3的连接用户名,密码,POP3地址.   Response.Write( "你现在有" & pop3.count & " 封邮件.<br