图2 考试子系统流程图 (二)成绩查询子系统 为了能让考生及时、方便地了解自己的考试成绩,查询子系统也采用Web方式实现,考生在页面输入自己的信息后,服务器就能把成绩信息传送到考生的机器上。 (三)阅卷子系统 本系统对考生来说是不可见的,用DELPHI 和DB2实现。它是一个应用程序,不能通过WEB方式访问。 1、评分模块 该模块能调出学生答案并自动给出客观题的成绩,教师根据学生的答案给出每题得分并输入计算机。 2、成绩统计、排序模块 计算机能根据学生的成绩进行各类统计,生成成绩分布图等,还能按照给定的条件进行排序。 3、信息维护模块 本模块能对试题、考生信息进行维护,教师可以增、删、改、查题目、考生信息,是阅卷子系统的重要组成部分。 (四)数据库子系统 网络考试系统离不开数据库系统的支持,不论是试题、答案,还是考生信息都需要存放在数据库中,而且数据库独立于程序而存在,具有较好的安全性,本例中的数据库采用IBM公司的大型数据库系统DB2实现,数据库名为test_net,其中主要表结构的描述如下: kaosheng表:用来记录考生信息,其中有一字段 jsjjc_dl,如果其值为0,则表明该考生还没参加过《计算机基础》的考试,如果为1:则表示已经参加过该门课程的考试,jsjjc_cj字段存储了《计算机基础》课程的成绩; kaosda表:记录考生的选择题、填空题以及问答题答案,这三类答案分别用三个字段描述,每题答案之间用"$$$"分隔; xuanzt表 :存放选择题题目,其中有题目字段、四个选项字段、试卷代号字段以及答案字段; tiankt表:存放填空题的题目、试卷代号及答案(问答题的处理与填空题类似,这里不作描述) 在ASP程序中,与数据库相关的典型语句如下: <% exec_xzt="select * from xuanzt " set conn=server.createobject("adodb.connection") conn.open "dsn=test_net;uid=db2admin;pwd=db2admin" set rs_xzt=conn.execute(exec_xzt) %> 在上述四行语句执行完后,rs_xzt中为符合条件的记录集。 三、 考试系统的实现方案 考试子系统是网络考试系统的核心部分,下面就该系统中一些常见问题的程序设计方案作一下具体说明。 (一)安全性考虑 1、 考试时间 (1)进入考试网站时首先检查当前时间是否为考试时间,以控制考生在规定的时间内参加考试; <% dim time_cur time_cur=now 'time_cur为当前时间 if time_cur>=cdate("2000-06-08 8:30:00 ") and time_c ur<=cdate("2000-06-08 10:30:00 ") then%> '显示登录页面………… <%else%> 现在不是考试时间 <%end if %> (2)在进入试卷页面后还要控制考试的总时间,在卷面上动态显示目前剩余时间,当总时间已到,系统会自动提交考生的答案,并且把数据库中的相关字段,如 jsjjc_dl设置为1,这样他就不能再次进入试卷页面,这段程序利用客户端程序实现,而且在试卷页面加载时就要设置timeout()的参数,本例中设它为1000ms,即每隔1秒timeout过程执行一次。
2、 身份验证 根据考生的姓名、身份证号码、密码到数据库中查找相应记录,如果库中有该考生的记录,则允许进入,并且把考生信息记录在session中,否则给出信息,不允许进入。 <% dim xm,sfzhm,dw,mm,sjdh,exec1,xm_tj,sfzhm_tj,mm_tj,condition,exec2 '(略)……根据上一个页面中的信息查询库中是否有该考生的记录记录 if (not rs.eof) then ' 如果条件为真,则表示库中有该考生的记录 if rs("jsjjc_dl")=0 then '如果库中有该考生记录,则继续判断该考生是否参加过这门课程的考试 '如果该考生没有参加过这门课程的考试,则用session记录下考生信息 session("xingming")=xm :session("shenfzh")=sfzhm:session("mima")=mm %> '………… 显示试卷页面 <%else response.write "您已经参加过测试,不能再次进入" '如果rs("jsjjc_dl")<>0 则表明考生已经 end if '参加过考试 else%>