用ASP开发一个在线考试系统

⽤ASP开发⼀个在线考试系统
  本⽂所介绍的应⽤程序是以ASP编程的初学者为读者的。虽然这个例⼦⾮常简单,但是它对于那些试图在线对他们的雇员、学⽣或客户进⾏考试的组织是⾮常有⽤的。
  关于这个应⽤程序
  我们的应⽤程序中的第⼀个界⾯包含在index.asp 中,由⼀个注册页组成,其中有两个输⼊域,⼀个是⽤户名,另⼀个是⼝令。⾮会员要想参加考试的话必须要注册。这⼀页是初始屏幕,为⽤户提供⽤户名和⼝令的输⼊框。
  需要注意的是,这两个将要批准的会员域应该有客户机端的javascript 确认,以便不把它们作为空⽩域来传递。
if (theForm.username.value == "")
{
alert("Please enter the \"User Name\"");
theForm.username.focus();
return (false);
}
if (theForm.password.value == "")
{
alert("Please enter the \"Password\"");
theForm.password.focus();
return (false);
}
  创建这些域的HTML代码如下:
< table border="0" cellpadding="0" >
< tr >
< td width="50%" >
< font face="Verdana" size="2" >User Name : < /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" >Password :< /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="Submit" name="B3" >
< input type="reset" value="Reset" name="B4" >
< /font >
< /td >
< /tr >
< /table >
  要注意这个ASP页多多少少是⼀个HTML页⾯,作为ASP页的原因是要显⽰错误信息,例如“错误的⽤户名或⼝令或选择⼀个新⽤户名”,或者是需要显⽰的其它任何信息。注册表单中包含⼀些个⼈信息,如姓名、Email 、⼝令等。同样可以从访问者得到关于年龄、教育程度、职业等⽅⾯的信息。⼀旦成功的输⼊了个⼈信息,访问者就成为⼀名会员,可以使⽤站点的其它部分了。根据应⽤程序的设计要求,这些域可以是必须输⼊的,也可以不是。
  登录代码Register.asp
  当⼀个新的访问者注册了⼀个在线考试时就显⽰这⼀页。它可能会要求⼤量的个⼈信息,但是在本例中只要求姓名、Email 和⼝令。表单提交后,⽤户被引领⾄sendregister.asp。
  Sendregister.asp
  这⼀页从register.asp 中取得表单域的内容,将它们插⼊数据库中。要注意⽤户名必须是唯⼀的。所以,⾸先查询要验证输⼊的⽤户名是否已经存在。如果是的话,⽤户被重新引回register.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") = "THE ENTRY HAD BEEN INSERTED EARLIER .. Please try another log in name"
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"
End If
  这样,如果RS_findmember(0) 返回的值是0,就表⽰⽤户名在数据库中不存在,名字就被输⼊了。会员就可以使⽤站点的其它部分了。反之,如果RS_findmember(0) 返回的值⼤于0,⽤户就被引导回注册主页,并被要求填写⼀个新的⽤户名。
  还要注意,在向数据库中插⼊数据之前有⼀些事情需要警惕。替换函数⽤来确保当访问者键⼊了"",卑南族
就需要⽤代替。
username = replace(request.form("txt_name"),"","")
  Checkuser.asp
  在应⽤程序的开始,访问者键⼊了他们的⼝令之后,他们的细节被指向了⼀页,如sendregister.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")二波罗蜜
End If
If RS_check(0) = 0 Then
Session("error") = "WRONG USER NAME OR PASSWORD"
End If
  sql命令检查⼀个特定的⽤户是否已经注册了。如果返回值为0,就表明⽤户名或email ⽆效,将⽤户引导回注册页。如果是会员,就被引导到default.asp 页。这⼀次⼜⽤到了替换函数,以保证如果会员键⼊了‘ (单引号),就要⽤ (双引号)来替换。
username = replace(request.form("username"),"","")
useremail = replace(request.form("password"),"","")
  选择⼀个测验Default.asp
  ⼀旦成功登录,就出现第⼆个界⾯,提供会员可以选择的测验科⽬的列表。在本例中,我们有HTML 和DHTML ,当然可以增加表格以提⾼主题数。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" >Select the examination
< %Do while not RS_papers.EOF% >
< option value="< %=RS_papers("id")% >" >< %=lcase(RS_papers("topic"))% >< /OPTION >
< %
RS_papers.MoveNext
Loop
% >
  msec函数在X值的基础上调⽤ redirect.asp,把查询字符串: ?x 的值作为下拉菜单中被选择的项的值。
function msec(x)
{if (x==0)泰妙菌素
{ alert("Please select any one of the Examinations")
}
else
{ location. f="redirect.asp?section=" + x
}
}
点击在新窗⼝查看原始图⽚
  Redirect.asp
  这⼀页将⽤户送到实际⽣成题⽬和选项的ASP页。如果数据库中没有所选择的特定主题的任何题⽬,就显⽰错误信息和返回连接。
⾸先:
id = Request.QueryString ("section")
重庆航运建设发展有限公司调⽤查询字符串部分,将值存⼊变量 id中。
然后:
SQL = "select tbl_name from paper where id="&id
Set RS = Application("Conn").Execute(SQL)
subject= RS(0)
MyString = Split(subject,"tbl",-1,1)
  SQL声明传递试卷表格中的域名 table_name 。结果存储在subject中。进⼀步分离变量subject,将其存储在MyString中。Split 函数⽤来在客户端显⽰测验名,是为了看起来效果更好。
IF RS_subject.BOF AND RS_subject.EOF Then
Response.Write Online " & MyString(1) & Test is still to be launched. Come back _
later < a href=default.asp >BACK< /a >"
Else
Response.Redirect ("exam.asp?section="&id )
End If
  如果以上查询产⽣了结果,就表⽰会员所选择的科⽬中有题⽬,可以进⾏在线考试。如果特定部分还在创建中,就告诉访问者稍后再回来进⾏考试。这是主考者的特殊兴趣,因为会员能够知道在前⾯的屏幕上下拉菜单所提供的科⽬哪些是悬⽽未决的。这样,如果这个部分有题⽬和相应的选项,这⼀页就被重新引导到exam.asp 页,其中包含着实际的题⽬。
  测验代码
  Exam.asp 提供⼀系列的题⽬和以单选按钮为格式的选项。为了使测验更具挑战性,还要有时间限制。我设置了⼀个装载时⾃动启动的时钟,将其时间设为20秒。剩余的时间在屏幕底部的状态窗⼝中显⽰。时间因素同题⽬个数⼀样可以改变。为了在每次会员想要参加考试时,都从数据库中选择不同的题⽬,我使⽤了随机函数。在数据库中,题⽬的个数固定为10个,每次会员回答5个问题。所有的题⽬都⼀起显⽰出来,然后开始计时。以下代码是计时器的函数:
< 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 + " Seconds remaining";
}
< /script >
  要注意,没有时间限制的测验是没有乐趣的。
这页的查询是这样的:
id = Request.QueryString ("section")
session("id") = id
sql_tblname = "select tbl_name from paper where id="&id
Set RS_tblname = Application("Conn").Execute(sql_tblname)
通州二中subject= RS_tblname(0)
MyString = Split(subject,"tbl",-1,1)
  查询字符串存储在⼀个 session("id")中, 按顺序启动查询。这个SQL声明的⽬的是从试卷表格中到表格名。使⽤split 函数的⽬的是从结果中去掉tbl。(我使⽤了表格名前加tbl前缀的命名惯例)。⼀旦到了表格名,就开始了向指定表格的查询。为了使应⽤程序更有意思,我使⽤了随机函数,⽣成从1到10之间的任意数字。这些数字⽤来从指定的科⽬表格中选取id:
sql_details = "select a.id, a.question, a.choice1, a.choice2,a.choice3, " &_
" a.choice4 from " & subject & " a where a.id="&MyArray(Counter)
  在这个查询中,id,question、 choice1、 choice2、 choice3、 choice4 都是科⽬表格中的域名。
MyArray(Counter) 是已经⽣成的随机数字。
点击在新窗⼝查看原始图⽚
  测验结束后,结果被存储起来并被增加到数据库的细节表格中。这样会员就能看到测验的结果了。(在本例中,我只保留了科⽬的⼀个记录和百分制的分数。还可以有⼀个时间-⽇期标志。)
  记录结果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中存储了结果。
  百分数是从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 &") "
Set RS_insert = Application("Conn").Execute(SQL_insert)
  View.asp
  观看模块检查会员是否以前曾经进⾏过在线考试。如果是的话,将⽤户引导到viewrecord.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
End If
If RS_count(0) = 0 Then
Session("noview") = "NO ONLINE EXAMINATIONS HAVE BEEN GIVEN"

本文发布于:2024-09-22 02:02:32,感谢您对本站的认可!

本文链接:https://www.17tex.com/xueshu/273948.html

版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系,我们将在24小时内删除。

标签:会员   表格   数据库   测验
留言与评论(共有 0 条评论)
   
验证码:
Copyright ©2019-2024 Comsenz Inc.Powered by © 易纺专利技术学习网 豫ICP备2022007602号 豫公网安备41160202000603 站长QQ:729038198 关于我们 投诉建议