分享
 
 
 

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

王朝asp·作者佚名  2006-11-24
窄屏简体版  字體: |||超大  

本文所介绍的应用程序是以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"

response.redirect "register.asp"

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"

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")

response.redirect "default.asp"

End If

If RS_check(0) = 0 Then

Session("error") = "WRONG USER NAME OR PASSWORD"

response.redirect "index.asp"

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)

在这个查询中,

[1] [2] 下一页

 
 
 
免责声明:本文为网络用户发布,其观点仅代表作者个人观点,与本站无关,本站仅提供信息存储服务。文中陈述内容未经本站证实,其真实性、完整性、及时性本站不作任何保证或承诺,请读者仅作参考,并请自行核实相关内容。
2023年上半年GDP全球前十五强
 百态   2023-10-24
美众议院议长启动对拜登的弹劾调查
 百态   2023-09-13
上海、济南、武汉等多地出现不明坠落物
 探索   2023-09-06
印度或要将国名改为“巴拉特”
 百态   2023-09-06
男子为女友送行,买票不登机被捕
 百态   2023-08-20
手机地震预警功能怎么开?
 干货   2023-08-06
女子4年卖2套房花700多万做美容:不但没变美脸,面部还出现变形
 百态   2023-08-04
住户一楼被水淹 还冲来8头猪
 百态   2023-07-31
女子体内爬出大量瓜子状活虫
 百态   2023-07-25
地球连续35年收到神秘规律性信号,网友:不要回答!
 探索   2023-07-21
全球镓价格本周大涨27%
 探索   2023-07-09
钱都流向了那些不缺钱的人,苦都留给了能吃苦的人
 探索   2023-07-02
倩女手游刀客魅者强控制(强混乱强眩晕强睡眠)和对应控制抗性的关系
 百态   2020-08-20
美国5月9日最新疫情:美国确诊人数突破131万
 百态   2020-05-09
荷兰政府宣布将集体辞职
 干货   2020-04-30
倩女幽魂手游师徒任务情义春秋猜成语答案逍遥观:鹏程万里
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案神机营:射石饮羽
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案昆仑山:拔刀相助
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案天工阁:鬼斧神工
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案丝路古道:单枪匹马
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案镇郊荒野:与虎谋皮
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案镇郊荒野:李代桃僵
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案镇郊荒野:指鹿为马
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案金陵:小鸟依人
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案金陵:千金买邻
 干货   2019-11-12
 
推荐阅读
 
 
 
>>返回首頁<<
 
靜靜地坐在廢墟上,四周的荒凉一望無際,忽然覺得,淒涼也很美
© 2005- 王朝網路 版權所有