asp网上考试设计思路是怎样的?(2)

时间:2010-07-14 21:09:00 

我们进入了试题页面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)

相关数据库结构:
本设计中数据库名为onlinetest.mdb。共有5个表格:loginuser、paper、details、tbl001HTML、tbl002HTML。其中,001HTML、002HTML是按考试科目创建的单独的表格,我们可以根据考试科目的多少继续扩展或添加。

loginuser表结构:
序号 字段名 数据类型 描述
1 Id  Auto Number 主关键字
2 Username Text 注册用户
3 Useremail Text 用户电子邮件地址
4 Password Text 注册口令

details 表结构:
序号 字段名 数据类型 描述
1 Id  Auto Number 主关键字
2 Ref_id Text 考试ID号
3 Subject Text 选择的试题
4 Score Text 成绩

paper 表结构:
序号 字段名 数据类型 描述
1 Id Auto Number 主关键字
2 Topic Text 在线测验所要覆盖的部分/科目列表
3 Tbl_name Text 包含指定科目的相关表格名

tbl001HTML 表结构:
序号 字段名 数据类型 描述
1 Id Auto Number 主关键字
2 Question Text 要显示的试题
3 Choice1 Text 供选择的答案A
4 Choice2 Text 供选择的答案B
5 Choice3 Text 供选择的答案C
6 Choice4 Text 供选择的答案D
7 Answer Text 标准答案

tbl002HTML 表结构:
序号 字段名 数据类型 描述
1 Id Auto Number 主关键字
2 Question Text 要显示的试题
3 Choice1 Text 供选择的答案A
4 Choice2 Text 供选择的答案B
5 Choice3 Text 供选择的答案C
6 Choice4 Text 供选择的答案D
7 Answer Text 标准答案


 

标签:考试,asp
0
投稿

猜你喜欢

  • 对Python 文件夹遍历和文件查找的实例讲解

    2021-11-05 22:29:25
  • 使用git上传到码云分支的实现

    2022-04-01 06:05:06
  • 使用Python对MySQL数据操作

    2024-01-16 16:04:26
  • vue2 利用echarts 单独绘制省份的步骤

    2024-04-09 10:45:42
  • numpy 进行数组拼接,分别在行和列上合并的实例

    2021-06-28 00:06:40
  • mysql中优化和修复数据库工具mysqlcheck详细介绍

    2024-01-23 21:53:38
  • Python实现钉钉发送报警消息的方法

    2022-11-18 06:06:44
  • 解决大于5.7版本mysql的分组报错Expression #1 of SELECT list is not in GROUP BY clause and contains nonaggregated

    2024-01-16 14:08:53
  • ASP实例:幻灯片新闻代码

    2008-11-21 17:40:00
  • python利用sklearn包编写决策树源代码

    2022-01-06 08:14:04
  • numpy实现合并多维矩阵、list的扩展方法

    2022-01-14 22:59:52
  • 如何解决AJAX中跨域访问出现'没有权限'的错误

    2008-09-11 17:20:00
  • MySQL ERROR 1045 (28000): Access denied for user 'root'@'localhost' (using password: NO) 的原因分解决办法

    2024-01-22 10:02:03
  • 从DataFrame中提取出Series或DataFrame对象的方法

    2022-08-04 17:32:06
  • 一篇文章搞懂Python反斜杠的相关问题

    2021-11-26 17:45:19
  • 使用python爬取taptap网站游戏截图的步骤

    2021-09-17 07:44:34
  • Python数据库小程序源代码

    2024-01-17 06:28:30
  • 破解空间实现域名绑定到子目录方法

    2010-03-14 11:29:00
  • js实现根据文件url批量压缩下载成zip包

    2024-04-22 22:15:17
  • 利用python+ffmpeg合并B站视频及格式转换的实例代码

    2021-06-09 21:14:00
  • asp之家 网络编程 m.aspxhome.com