• ----:)欢迎访问源码网(:----
    • 首页
    • 博客
    • 学院
    • 下载
    • 论坛
    • 影视
    • 发布源码
    • RSS
    • ITPig
    • 笑话网
    • 百家姓
    • 繁體中文

源码网 - 中国第一源码门户
选择镜像:网通镜像 - 电信主站
  • 首 页
  • 新闻动态
  • 网站运营
  • 网页制作
  • WEB开发
  • 编程开发
  • 图像媒体
  • 操作系统
  • 数据库
  • 服务器
热门搜索 优化 SEO 故事 cms IIS7 MySQL 个人 AdSense 主题推广 | 文章搜索: 高级搜索
会员登录/控制面版您的位置: 学院首页 >> WEB开发 >> ASP开发 >> 输出打印 >> 详细内容
 

推荐文章

 
 

热点文章

  • Server.Htmlencode的用法
  • 自己动手,结合javascript和dhtml做一个ubb编辑器
  • ASP中几种分页显示的比较
  • 搜索引擎优化:用ISAPI_Rewrite实现asp的静态化
  • 关于客户端用ASP参生报表
  • Haneng.com的简单留言板制作源程序例子
  • 一些ASP小源程序
  • GB2312转UTF-8
  • asp分页显示详论
  • ASP无组件上传图片的基本方法
  • 关于打印页面的一些经验
  • 统计在线人数、每日访问人数和总人数
 
 

相关文章

  • 动感首页更新实现
  • 完整的站点访问统计系统
  • 对数据库中的记录用上一条下一条显示
  • 对数据库中的记录用上一条下一条显示
  • 不能ASP图像组件来生成图像的ASP计数器程序
  • ASP技术在论坛中的运用
  • ASP环境下邮件列表功能的实现
  • 一个BBS的源代码
  • 如何使用ASP在自己的网站建立投票机制
  • 如何用ASP编写网站统计系统
  • 构建你的网站新闻自动发布系统
  • 制作一个个人搜索引擎(源码)
 
 

百度搜索

 
 

用ASP开发一个在线考试程序

  • 阅览次数:
  • 文章来源: 网海之贝
  • 原文作者: 佚名
  • 整理日期: 2006-10-03
  • 发表评论
  • 字体大小:
  • 小
  • 中
  • 大

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


 

 

 

2000-09-06· 编译青苹果电脑工作室·yesky

创建这些域的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。

 

2000-09-08· 编译青苹果电脑工作室·yesky

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.href="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
response.redirect "viewrecord.asp"
End If
If RS_count(0) = 0 Then
Session("noview") = "NO ONLINE EXAMINATIONS HAVE BEEN GIVEN"
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
● tblHTML
● tblDHTML
loginuser表结构
字段名 数据类型 描述
Id Auto Number 主关键字
Username Text 成员名字
Useremail Text 成员的电子邮件地址
Password Text 成员的口令

details 表结构
字段名 数据类型 描述
Id Auto Number 主关键字
Ref_id Text 成员的参考ID号
Subject Text 成员选择的主题
Score Text 成员得分结果

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

tblHTML 表结构
字段名 数据类型 描述
Id Auto Number 主关键字
Question  Text 要显示的题目
Choice1 Text 供选择的答案
Choice2 Text 供选择的答案
Choice3 Text 供选择的答案
Choice4 Text 供选择的答案
Answer Text 正确答案

  同样,tblDHTML 与 tblHTML 定义的方式相同。
  我给每个科目都创建了单独的表格,在本例中一个是为HTML,另一个是为 DHTML。要想进一步增加新表格或扩展现有表格也都很容易。

 

数据库的连接
  为了运行这个应用程序我使用了global.asa 。运行global.asa 文件的细节在以前的文章- Using Global.asa Correctly 有详细描述。
< 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 >
结论
  这个应用程序非常简单,但是对于那些想要有在线考试的站点却是非常有用的。那些在特殊领域有特殊用途的公司也可以使用它,参考者及他们的详细信息可以从表格中恢复。读者也许还想进一步探讨以增强此应用程序的功能:
    ● 一次只显示一个题目。
    ● 可以从难到易预先设定题目模式。

上一篇:MySQL数据库的导入导出 和 Liunx的权限
下一篇:构建支持Master/Slave读写分离的数据库操作类
  • 网友评论:
  • 查看所有评论
  • 我要发表评论
您的网名:
留言主题:
你要发表的内容:

 

关于本站 | 广告联系 | 版权声明 | 网站地图 | 发布软件 | 帮助中心 | 源码论坛

Copyright © 2005-2007 CodePub.Com  程序支持:木翼  滇ICP备05005971号