毕业设计------网上报名及在线考试系统的设计与实现
网上报名及在线考试系统的设计与实现
论文作者姓名:
申请学位专业:
申请学位类别:
指导教师姓名(职称):
论文提交日期:
网上报名及在线考试系统的设计与实现
摘要
随着计算机技术的迅猛发展,学校教学和管理的信息化发展也有长足的进步,考试也是一样。与传统的考试方式相比,网络考试系统极大地提高了教学的灵活性,并在许多领域已经有了广泛的应用。网上考试系统的最大优点是可以动态地管理各种考试信息,这大大的降低了考生作弊的可能性,在各类考试中发挥高效、便捷的作用,能把老师从繁重的工作中解脱出来!
该网上报名及在线考试系统由用户网上报名模块、考试模块和系统管理模块等三大模块组成。其中系统管理模块是进行题目的添加、存储和删除,是系统运行的基础;查询子模块实现了对学生考试信息查询。考生通过自己的姓名和密码登陆系统,进入考试界面后按照管理员预先设置好考试题目,自动生成试卷参加考试。系统选用的开发软件是ASP,后台数据库为ACCESS2000。
关键词:access;在线考试;asp
The Design and Implementation of Online Registration and
Examination System
Abstract
With the fast development of computer technology, there’s great progress in school information management, so does the examinations. Compared with traditional examinations, the online examination system enhances the teaching flexibility enormously and is widely used in many domains. The greatest adventure of online examination system is that it can manage any kinds of exam information, which greatly reduce the rates of examine cheats. At the same time online examination system will have a highly efficiency in any kinds of examination and can release teachers from hard work!
This online registration and examination system is consisted with three main modules, which are register module, examination module and system management module. The system management module can add, save and delete subjects, which is the basis in the whole system. The inquire sub module realizes the query of examine information. The students input their names and passwords to login in the system, and after entering the examination interface, the examination paper is produced automatically as the administrator setting before. The development language is asp, and the backstage database is ACCESS2000.
Key words: access;online examination;asp
目录
论文总页数:24页1引言 (1)
1.1课题背景 (1)
1.2选题意义 (1)
1.3课题研究思路和方法 (1)
2关键技术 (1)
2.1ASP (1)
2.2ACCESS (3)
3 数据库设计说明 (3)
3.1管理员信息表 (3)
3.2课程档案表 (4)
3.3考生考试计划表 (4)
3.4考生表 (4)
3.5试题表 (5)
3.6考试计划表 (5)
3.7考试过程控制表 (6)
4网上报名及考试系统的设计与实现 (6)
4.1功能模块划分 (6)
4.1.1网上报名 (6)
4.1.2前台操作管理 (6)
4.1.3后台管理 (6)
4.2各功能模块的设计与实现 (7)
4.2.1新生报名 (7)
4.2.2在线考试 (8)
4.2.3成绩查询 (12)
4.2.4个人信息及密码修改 (13)
4.2.5操作员管理 (15)
4.2.6课程档案管理 (16)
4.2.7试题档案管理 (17)
4.2.8考试计划管理 (19)
4.2.9考生信息管理 (20)
5系统测试 (20)
5.1对考生在线报名功能的测试 (20)
5.2对在线考生功能的测试 (21)
结论 (22)
参考文献 (22)
致谢...................................................... 错误!未定义书签。声明...................................................... 错误!未定义书签。
1引言
1.1课题背景
考试是教学活动的重要环节,但由于考试类型的不断增加和考试要求的不断提高,传统的考试方式已经不能适应现代考试的需要。随着计算机网络的普及和发展,如何利用计算机进行考试,以提高教学效率和考试质量,更大范围的共享教学资源,是一个值得深入的研究的课题。
目前,开发网上考试系统多采用Microsoft office中access技术,采用VB、VC编写程序,在实时性、交互性和访问WEB服务器上的数据库方面存在不尽人意的地方。而asp作为当今最流行的动态页面技术,具有无可比拟的简单性、实时性、快速性、输出格式容易控制等功能,不仅能够使程序的交互更加方便,更重要的是他还提供了非常方便的访问数据库的功能。因而采用asp技术开发网上考试系统具有显著的优势。
1.2选题意义
随着社会的进步和商品经济的不断发展,社会对劳动者和技术人员的知识和能力水平的要求越来越高。考试作为衡量人的能力的重要手段,在现代生活的地位进一步提高,并深入到社会各个方面,各种各样的学历考试、资格证书考试层出不穷。同时,Internet技术的发展是得考试的技术手段和载体发生了革命性的变化。Internet的开放性和分布性的特点以及基于Internet的巨大计算能力使得考试突破了时间和空间的限制。网络应用不断扩大,如远程教育和虚拟大学的出现等;使得基于Web的在线考试系统成为现实。基于Web的在线考试系统可以发挥网络的优势,建立大型、高效、共享的题库和实现随时随地的考试,降低考试成本,减少人为的干扰。减轻教师的负担,节约人力,物力,和财力。
1.3课题研究思路和方法
本次毕业设计首先分析网上报名和在线考试的相关功能,结合本次毕业设计的相关要求写出需求分析;其次,综合运用以前所学的相关知识(包括计算机网络技术、数据库、网页制作等),采用Asp+ access进行本毕业设计的开发,使用Macromedia Dreamweaver MX 2004来编辑相关页面;在设计中以需求分析为基础,写出系统开发计划、实现流程及相关问题的实现方法。
2关键技术
2.1 ASP
Microsoft Active Server Pages 即我们所称的ASP,其实是一套微软开发的服务器端脚本环境。Active Server Page 是创建动态网页的一个很好的工具,它起一种编程语言的作用,可以利用它编写动态产生HTML的程序代码。因此,只要用户浏览Web站点并请求一个ASP页,Web服务器就可以处理相应的ASP代
码,生成HTML代码,然后将它传递到用户浏览器并显示出网页。ASP内含于IIS3.0和4.0之中,通过ASP我们可以结合HTML网页、ASP指令和ActiveX元件建立动态、交互且高效的WEB服务器应用程序。有了ASP就不必担心客户的浏览器是否能运行所编写的代码,因为所有的程序都将在服务器端执行,包括所有嵌在普通HTML中的脚本程序。当程序执行完毕后,服务器仅将执行的结果返回给客户浏览器,这样也就减轻了客户端浏览器的负担,大大提高了交互的速度。以下罗列了ASP所独具的一些特点
(1)利用ASP可以实现突破静态网页的一些功能限制,实现动态网页技术;
(2)ASP文件是包含在HTML代码所组成的文件中的,易于修改和测试;
(3)服务器上的ASP解释程序会在服务器端制定ASP程序,并将结果以HTML 格式传送到客户端浏览器上,因此使用各种浏览器都可以正常浏览ASP所产生的网页;
(4)ASP提供了一些内置对象,使用这些对象可以使服务器端脚本功能更强。例如可以从web浏览器中获取用户通过HTML表单提交的信息,并在脚本中对这些信息进行处理,然后向web浏览器发送信息;
(5)ASP可以使用服务器端ActiveX主键来执行各种各样的任务,例如存取数据库、访问文件系统等。
(6)由于服务器是将ASP程序执行的结果以HTML格式传回客户端浏览器,因此使用者不会看到ASP所编写的原始程序代码,可放置ASP程序代码被窃取。
ASP包含三方面含义:
(1)Active:ASP使用了微软的ActiveX技术。ActiveX(COM)技术是现在Microsoft软件的重要基础。它采用封装对象,程序调用对象的技术,简化编程,加强程序间合作。ASP本身封装了一些基本组件和常用组件,有很多公司也开发了很多实用组件。只要你可以在服务器上安装这些组件,通过访问组件,你就可以快速、简易地建立自己的WEB应用。
(2)Server:ASP运行在服务器端。这样就不必担心浏览器是否支持ASP 所使用的编程语言。ASP的编程语言可以是VBSCRIPT和JSCRIPT。VBSCRIPT是VB的一个简集,会VB的人可以很方便的快速上手。然而Netscape浏览器不支持客户端的VBSCRIPT,所以最好不要在客户端使用VBSCRIPT。而在服务器端,则无需考虑浏览器的支持问题。Netscape浏览器也可以正常显示ASP页面。
(3)Pages:ASP返回标准的HTML页面,可以正常地在常用的浏览器中显示。浏览者查看页面源文件时,看到的是ASP生成的HTML代码,而不是ASP程序代码。这样就可以防止别人抄袭程序。
由此可以看出,ASP是在IIS下开发WEB应用的一种简单、方便的编程工具。
在了解了VBSCRIPT的基本语法后,只需要清楚各个组件的用途、属性、方法,就可以轻松编写出自己的ASP系统。
2.2 ACCESS
Access是Office系列软件中用来专门管理数据库的应用软件。所谓数据库是指经过组织的、关于特定主题或对象的信息集合。数据库管理系统分为两类:文件管理系统和关系型管理系统。Access应用程序就是一种功能强大且使用方便的关系型数据库管理系统,一般也称关系型数据库管理软件。它可运行于各种Microsoft Windows系统环境中,由于它继承了Windows的特性,不仅易于使用,而且界面友好,如今在世界各地广泛流行。它并不需要数据库管理者具有专业的程序设计水平,任何非专业的用户都可以用它来创建功能强大的数据库管理系统。本章将专门介绍Access 2002(下面简称为Access)的基本功能及其常用的操作,主要内容包括创建和使用数据表,建立和使用查询、窗体,以及数据表与其他数据文件之间的转换等。
Access使用标准的SQL(Structured Query Language,结构化查询语言)作为它的数据库语言,从而提供了强大的数据处理能力和通用性,使其成为一个功能强大而且易于使用的桌面关系型数据库管理系统和应用程序生成器。
一个Access数据库中可以包含表、查询、窗体、报表、宏、模块以及数据访问页。不同于传统的桌面数据库(dbase、FoxPro、Paradox), Access数据库使用单一的*.mdb文件管理所有的信息,这种针对数据库集成的最优化文件结构不仅包括数据本身,也包括了它的支持对象。
此外,Access 2002还利用Office套件共享的编程语言VBA (Visual Basic for Application)进行高级操作控制和复杂的数据操作。
3 数据库设计说明
根据系统需要,我们在数据库中建立了7张表,分别如下:
3.1管理员信息表
管理员信息表是用来存放管理员登录的名称,密码,个人信息,权限等数据。
Adminpurview :c此字段的作用是存放普通管理员的权限,它的取值可以
为以下几种之一;
0 代表拥有所有权限;
1代表维护试题的权限;
2代表维护考生档案;
4代表维护考试计划
8代表维护课程档案
这里权限值使用1.2.4.8的原因是它们分别代表二进制饿1.10.100.1000.所以方便于多种权限的组合判断,在赋予管理员多种权限时,只需要把这些权限值相加即可,在判断时只需要把权限值进行相应的“与”运算就可判断是否拥有某种权限。
3.2课程档案表
课程档案表主要用来存放考试课程名称等数据。
表2 course表
3.3考生考试计划表
本表用来存储每个考生每次考试的成绩,开始时间,结束时间等信息。
Mark:类型为整型,为考生在考试计划中的成绩。
State:类型为整型,为考试进行的状态0为没有考试,1为已经参加过考试,2为正在进行考试。
Endtime:类型为日期时间型,为考生的交卷时间。
3.4考生表
表4 student
考生档案表用来存放考生的个人信息,姓名,登录名称,密码,性别,生日等数据
Studenttype:类型为整型,用来表示考生的类型,当值为0时表示此考生已经进行报名申请但还没有审批;当值为1时表示此考生是已报名考生。
3.5试题表
表5 subject
本表就是系统的题库,本系统中所用的试题都存放在此表中。
Answer字段:类型为整型,用于存放本题的正确答案,此字段表示答案的方法是:当题目类型为选择题时,从低位二进制到高位二进制位分别代表1-6个选项的选择情况。当1时代表选定,0代表未选定;当题目类型为是非题时,1代表对,0代表错
3.6考试计划表
表 6 project
本表是用来存放有关考试计划的。如考试本次考试计划的名称,考试题型,数量,开始时间,结束时间等信息。
3.7考试过程控制表
表7 prj_process
本表的作用是用来管理考试的进程,表内主要存放考生正在进行的考试计划的考试题目与答题情况信息,本表只在考生考试过程中临时存放信息,当考生考试结束时就会删除相关的信息。
4网上报名及考试系统的设计与实现
4.1功能模块划分
系统实现了网上报名,前台操作原理,后台操作管理三大功能。系统结构图如图4-1 所示
4.1.1网上报名
考生登陆考试系统填写资料申请在线报名,当得到管理员的审批后即可登录到考试中心,参加考试。
4.1.2前台操作管理
前台操作管理包括:在线考试、成绩查询、考试信息查询、个人信息及密码修改。
(1)在线考试:学生登录以后可以任选时间进行在线测试,考试结束后,系统会根据已有的标准答案进行在线判卷,考生可以立刻知道考试成绩。
(2)成绩查询:学生可以在线查询以前参加过的每门课程的考试相关信息。
(3)个人信息及密码修改:当考试信息有变动时,考生可以根据变动的信息进行相应信息的修改。
4.1.3后台管理
后台管理模块,主要功能有操作远管理、课程档案管理、试题档案管理、考试计划管理、考生管理等
(1)操作员管理:操作员的类型包括超级管理员与普通管理员,操作员管理包括对管理员信息的添加,删除,修改等操作。
图4-1 系统结构图
(2)课程档案管理:主要用来对考试试题和考试计划进行分课程管理,课程管理模块主要功能有:添加,修改,删除课程信息。
(3)考试计划管理:考试计划实际上相当于考试试卷,管理员如果将要组织一次考试的话,就需要填写一条考试计划,考试计划管理模块的主要功能有:添加,修改,删除考试计划。
(4)试题档案管理:本系统中试题本分为:单选题,多选题,是非题三种,试题档案管理模块的主要功能有:添加,修改,删除等操作。
(5)考生档案管理:分为两部分,一部分是在后台管理员进行管理,后台管理员管理的功能有:考生档案的添加,修改,删除;对已提交注册申请的考生进行审批。一部分是在前台由考生本人进行管理,前台考生对档案管理的功能有;修改自己的基本信息,修改登陆密码。
4.2各功能模块的设计与实现
4.2.1新生报名
如果没有参加报名的考生想要参加考试,可以进入在线报名与考试系统进行在线报名,在线提交相应信息,然后等待管理员的资格审批。只有审批后的考生才能参加考试。完成此功能的主要页面有student_reg.asp,student_regpost.asp效果图如图4-2所示。
图4-2 考生在线报名页面
4.2.2在线考试
考生登陆考试系统时,系统根据登录名和密码判断考生是否为报名后的考生,如果没有报名则提示考生先注册,注册完成后需要管理员审核考生是否符合条件,审核通过后考生才能参加考试。
考生登录后,可以选择相应的试题进行在线考试。考试过程中考生的答案保存在考试过程控制表(prj_process)中。自动生成试卷函数根据考试计划中的设置,从试题库中随机按要求组成试卷并存入考试过程控制表(prj_process)中。
考试结束采取自动交卷和到了规定的时间系统强制交卷的有机结合的方式予以实现。系统根据管理员制定好的答案进行判断,自动给出考生的考试成绩。
在线考试主要页面有function.asp,考试页面testing.asp,保存答案页面test_saveanswer.asp,考试结束显示结果页面testfinish.asp,成绩查询页面student_markquery.asp .
自动生成试卷的主要代码片段如下:
'生成试卷
function makePaper(intPrjID,intStudentID)
dim
rsPaper,strSqlPaper,rsNew,strSqlNew,intCourseID,intCount,arrTemp,intSSCount,arrS S,intMSCount,arrMS,intBCount,arrB,intCurType,I,J,intPos,blnPass
G_CONN.execute "delete from prj_process where prjid=" & intPrjID & " and studentid=" & intStudentID
set rsPaper = server.createobject("ADODB.Recordset")
strSqlPaper = "select courseid,ss_count,ms_count,b_count from project
where prjid=" & intPrjID
rsPaper.open strSqlPaper,G_CONN,1,1
if not rsPaper.bof and not rsPaper.eof then
intCourseID = rsPaper("courseid")
intSSCount = rsPaper("ss_count")
intMSCount = rsPaper("ms_count")
intBCount = rsPaper("b_count")
else
rsPaper.close
set rsPaper = nothing
makePaper = false
exit function
end if
rsPaper.close
for intCurType = 1 to 3
select case intCurType
case 1
intCount = intSSCount
case 2
intCount = intMSCount
case 3
intCount = intBCount
end select
if intCount > 0 then
redim arrTemp(intCount)
strSqlPaper = "select id from subject where type=" & intCurType & " and courseid=" & intCourseID
rsPaper.open strSqlPaper,G_CONN,1,1
if rsPaper.recordcount < intCount then '判断当前题库内试题是否足够
rsPaper.close
set rsPaper = nothing
makePaper = false
exit function
end if
randomize timer
intPos = int(rnd() * rsPaper.recordcount)
arrTemp(1) = intPos
for I = 2 to intCount
intPos = int(rnd() * rsPaper.recordcount)
blnPass = false
while blnPass = false
for J = 1 to I - 1
if intPos = arrTemp(J) then
exit for
end if
next
if J = I then
blnPass = true
else
'使用线性探测解决冲突问题
intPos = intPos + 1
if intPos = rsPaper.recordcount then
intPos = 0
end if
end if
wend
arrTemp(I) = intPos
next
strSqlNew = "select * from prj_process"
set rsNew = server.createobject("ADODB.Recordset") rsNew.open strSqlNew,G_CONN,1,3
for I = 1 to intCount
rsPaper.move arrTemp(I),1
rsNew.addnew
rsNew("prjid") = intPrjID
rsNew("subid") = rsPaper("id")
rsNew("studentid") = intStudentID
rsNew.update
next
rsNew.close
rsPaper.close
end if
next
G_CONN.execute "update prj_student set state=2"
G_CONN.execute "update prj_student set starttime=now()"
set rsPaper = nothing
makePaper = true
end function
考试过程中对考生答案的保存的主要代码片段如下:
<%
dim rsSaveAnswer,strSqlSaveAnswer,intAnswer,strAction,intID '考生答案,动作(主要用于多选题,决定是选中还是取消),试题ID
intAnswer = CLng(trim(request.querystring("answer")))‘取得考试信息和答案
strAction = request.querystring("action")
intID = request.querystring("id")
set rsSaveAnswer = server.createobject("ADODB.Recordset")‘取得详细的题目,考生及考生答题状况信息。
strSqlSaveAnswer = "select P_P.*,P_S.state,P_S.starttime,P.limittime from prj_process P_P,prj_student P_S,project P where P_P.studentid=P_S.studentid and P_P.prjid=P_S.prjid and P_S.prjid=P.prjid and P_P.id=" & intID
rsSaveAnswer.open strSqlSaveAnswer,G_CONN,1,3
if rsSaveAnswer("state") = 2 and DateDiff("n",rsSaveAnswer("starttime"),now()) < rsSaveAnswer("limittime") then '验证此答案是否在有效的时间内提交的.
‘判断答案合法性
if intAnswer = 0 or intAnswer = 1 or intAnswer = 2 or intAnswer = 4 or intAnswer = 8 or intAnswer = 16 or intAnswer = 32 then
'根据题目类型不同以不同方式保存答案
if strAction = "selected" then
if rsSaveAnswer("answer") < 0 then
rsSaveAnswer("answer") = intAnswer
else
rsSaveAnswer("answer") = rsSaveAnswer("answer") or
intAnswer
end if
elseif strAction = "selectcancel" then
rsSaveAnswer("answer") = rsSaveAnswer("answer") and not intAnswer
else
rsSaveAnswer("answer") = intAnswer
end if
rsSaveAnswer.update
else
response.write ""
end if
else
response.write ""
end if
rsSaveAnswer.close
set rsSaveAnswer = nothing
%>
4.2.3成绩查询
考生登陆系统后考生可以使用成绩查询功能进行以往考试科目的成绩查询。考生登录系统后首先验证考生的登录状态,只有登录后的考生才能够进行以往考试成绩的查询,如果考生没有登录则自动转到考生登录页面student_login.asp。要求考生进行登录验证。
其主要代码如下:
if checkStudentLogin() = false then '检测考生登录状态
response.redirect "student_login.asp"‘
end if
strErr = ""
intCourseID = CInt(request.form("courseid"))
'验证日期输入是否正确
if Trim(request.form("starttime")) <> "" then
if IsDate(Trim(request.form("starttime"))) = true then
dtmStartTime = CDate(Trim(request.form("starttime")))
else
strErr = "
end if
else
dtmStartTime = CDate("2000-1-1")
end if
if Trim(request.form("endtime")) <> "" then
if IsDate(Trim(request.form("endtime"))) = true then
dtmEndTime = CDate(Trim(request.form("endtime")))
else
strErr = "
end if
else
dtmEndTime = CDate("2200-1-1")
end if
if strErr = "" then '如果通过验证则显示出查询结果
strSqlMark = "select P.prjname,P_S.mark,P_S.state,P_S.starttime,P_S.endtime from project P,prj_student P_S where "
strSqlMark = strSqlMark & "P.prjid = P_S.prjid and P_S.studentid=" & request.cookies("aoyi")("studentid") & " and P.starttime > #" & dtmStartTime & "# and P.starttime < #" & dtmEndTime & "# and (P_S.state=1 or P_S.state=3)"
if intCourseID > 0 then
strSqlMark = strSqlMark & " and P.courseid=" & intCourseID end if
strSqlMark = strSqlMark & " order by P.starttime desc"
4.2.4个人信息及密码修改
考生登陆系统后可以进行考生个人的信息修改,考生必须先登录系统然后才能进行相应的操作,考生能够修改自己的姓名,出生日期,email,身份证号码,但是必须满足系统的格式要求。如果输入中有不符合系统要求,系统会提示修改失败并且给出失败原因。其效果图如图4-3
图 4-3修改考生信息
修改考生信息的主要代码如下:
sub modifyInfo()
dim
rsModifyInfo,strSqlModifyInfo,strStudentName,blnSex,strTel,strEmail,dteBirthday,st rErr
strErr = ""
'验证考生提交的信息是否合法
if trim(request.form("studentname")) = "" then
strErr = strErr & "
else
strStudentName = trim(request.form("studentname"))
end if
if IsDate(trim(request.form("birthday"))) = false then
strErr = strErr & "
dteBirthday = CDate(trim(request.form("birthday")))
end if
if CInt(request.form("sex")) > 0 then
blnSex = true
else
blnSex = false
end if
strEmail = trim(request.form("email"))
strTel = trim(request.form("tel"))
strStudentName=trim(request.form("studentname"))
blnSex=trim(request.form("sex"))
dteBirthday= trim(request.form("birthday"))
if strErr = "" then
'如果通过验证则进行考生信息的修改并显示成功信息
set rsModifyInfo = server.createobject("ADODB.Recordset")
strSqlModifyInfo = "update student set studentname='"&strstudentname&"',tel='"&strtel&"',email='"&stremail&"',birthday=' "&dtebirthday&"',sex='"&blnsex&"' where username='" & request.cookies("aoyi")("username") & "'"
rsModifyInfo.open strSqlModifyInfo,G_CONN,1,3
'验证考生记录是否存在
%>
4.2.5操作员管理
操作员管理:操作员的类型包括超级管理员与普通管理员,超级管理员管理包括对管理员登陆系统的密码修改。普通管理员的管理包括,管理员的添加,登陆密码修改,权限设置等操作。如图4-4
图4-4 操作员管理页面
删除操作员主要代码如下:
sub del() '删除操作员
dim intAdminID,strErr
intAdminID = CLng(Trim(request.querystring("adminid")))
if G_CONN.execute("select * from admin where adminid=" & intAdminID)("adminname") = "admin" then
strErr = "
call closeConn()
showErrMsg(strErr)
response.write "