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 标准答案
猜你喜欢
- 本文实例讲述了python使用PyGame模块播放声音的方法。分享给大家供大家参考。具体实现方法如下:import pygamepygame
- 目录一、6个非常重要的str处理词二、重要的str处理 几乎所有的 数据类型里也都能用1、提取字符串中 特定位置的字符2、len 得到当前变
- ASP.NET WEB FORMS 给开发者提供了极好的事件驱动开发模式。然而这种简单的应用程序开发模式却给我
- 一、 官网下载安装包: 官网网址:https://www.python.org/ 我下载的是3.6.3版本,如下图:&n
- 本文实例讲述了Python使用Pickle库实现读写序列操作。分享给大家供大家参考,具体如下:简介pickle模块实现了用于对Python对
- 这时候最好的做法就是按需引入,动态引入组件js和样式,文件load完成后调用callback,运行js。代码还是很简便的 1. 判断文件lo
- 1.time.sleep(secs)参考文档原文:Suspend execution for the given number of sec
- 由用户指定需要扫描的盘符或目录,输入需要查找的文件或者文件夹名称(不包含中文名称)代码:# encoding=utf-8import os.
- 背景构建和测试大型项目时都会很耗时,且容易出错。开发者在开发过程中需要不断执行go build、go run 、go test等相关命令。还
- 研究网页编码很长时间了,因为最近要设计一个友情链接检测的VBS脚本,而与你链接的人的页面很可能是各种编码,以前采取的方法是:如果用GB231
- 前言上项目的时候,遇见一次需求,需要把在线的 其中一个 collection 里面的数据迁移到另外一个collection下,于是就百度了看
- 已知有一个XML文件(bookstore.xml)如下:<?xml version="1.0" encoding=
- 思路:<img alt="" src="/img/图片真实地址" ></img&g
- 由于谷歌浏览器80以后版本采用了新的加密方式,所以记录在这里# -*- coding:utf-8 -*-import osimport js
- 内容摘要:本文介绍了使用SQL语句修改数据记录的两种方法,一是使用rs.update,二是使用conn.Execute(sql),相信对初学
- 本篇文章介绍了Python中一些常见的包的作用和安装方法,希望对学习Python中的朋友有帮助!Python中一些包的基本用处和安装方法pi
- 从MySQL 5.0.2开始,通过mysql_stmt_attr_set() C API函数实现了服务器端光标。服务器端光标允许在服务器端生
- 本文实例讲述了Python判断Abundant Number的方法。分享给大家供大家参考。具体如下:Abundant Number,中文译成
- 在pycharm使用过程中,对于每次新建文件的编码格式和关于代码编写者的一些个人信息快捷填写,方法如下:1.打开pycharm,选择File
- 用read_csv读数据遇到分隔符问题的两种解决方式import pandas as pd1.更改read_csv函数中的传参&ld