统会自动提交试卷,如果你想提前结束考试,可以点击【交卷】按钮来提交试
卷:
7
交卷成功后显示结果信息:
点击【关闭】按钮结束考试。
8
4.3
在线练习模块
学生在登陆窗口勾选【练习模式】并输入正确的学号和密码则进入在线练习,截图如下:
在线练习又包括传统试卷读取和自动组卷两部分:
4.3.1、传统试卷读取
在【在线练习――选择练习卷】窗口,选择科目,然后选择该科目的某份试卷,点击【确定】
按钮进入该练习卷页面,如果没有选择练习卷就按【确定】按钮,则会弹出提示框:
9
练习卷的页面如下:
右上角有个【显示答案】选项,勾选后会弹出标准答案块:
10
标准答案块可以用鼠标拖动,便于学生校对答案,客观题自动判卷实现起来有点棘手,所以并
没有做自动判卷。
4.3.2、自动组卷
在【在线练习――选择练习卷】窗口,单击【高级选项】则进入自动组卷模块:
11
左栏是科目,右栏是该科目的组卷参数配置,右栏下方显示该课程题量信息,如果组卷参数配
置不正确,会有弹出框提示,有如下四种情况的错误:
组卷参数配置正确后点击【自动组卷】生成一份满足要求的随机试卷,随机试卷的页面和传统
练习卷的页面基本一致,截图如下:
12
组卷算法的实现是在线考试子系统的一个难点,该算法的思想和流程由指导老师提供,自己实
现代码部分。
根据算法的参数配置,假设选择的课程代号为cid,题目类型代号为styles,难度系数为level,
所取题量为num。则所取的题目总的难度为level×num,步骤如下:
1、随机抽取满足该课程类型条件的题目一题,将该题号、题目难度系数添入临时表。
2、将总的难度减去之前抽取的题目难度。
3、剩下的难度总数如果在允许的范围内,则继续随机抽取临时表中没有的题目。允许的难度
范围的计算方法:最小值为(剩下的题量×单个题目难度系数最小值),最大值为(剩下
的题量×单个难度系数最大值)。
4、如果剩下的难度系数总数比难度允许范围最小值还小,则剩下的题目都抽取难度系数最小
的题目,如果剩下的难度系数总数比难度允许范围最大值还大,则剩下的题目都抽取难度
系数最大的题目。同样,这些题目在抽取时都要保证它们不在临时表中。
5、循环执行步骤2、3、4直到题目抽取完成。
4.
4
密码修改
模块
在登陆窗口点击【密码修改】弹出密码修改窗口:
13
输入用户名和原密码及两次新密码,点击【确定】按钮修改,错误情况下弹出提示框:
密码修改成功后显示修改成功的信息,单击提示框的【确定】按钮关闭密码修改窗口。
14
存在的问题:
1、正式考试时,同一个时间段不允许有多门考试同时进行,这是当初概要分析时的一个逻辑
错误造成的。
2、为了降低自动组卷的难度,使用的组卷算法是其实一种伪算法,取出的试卷在难度上存在
少许偏差,偏差在可接受的范围内。
3、该系统现在还不能区分试题库中内容相似的题目,也就是说产生的试卷可能存在题目内容
雷同的情况,判断题目的雷同程度也是一个难点。
4、自动组卷供选择的参数不够多。
5、在线练习还无法自动改卷,一个可以替代的方法就是显示正确答案。
6、该系统在IE浏览器下面才能正常的显示(在IE6下表现最佳),在其他的浏览器(比如
FireFox)下的表现一塌糊涂。
7、程序方面:
a)程序的数据层和应用层并没有严格的分开,可重用性和程序可读性都不强,虽然程序
注释块使用了标准的XML格式。
b)在线练习模块中显示某门课程的练习卷列表部分没有使用分页,一旦练习卷数量增大
(单门课程的练习卷数量达到300份以上),页面的异步数据读取将会出现明显的延
迟,给用户造成"该课程没有练习卷"的假象,这无疑加大了后期系统的维护量。
附录A
、数据库表结构的SQL
建表语句(不是最新的,以数据库为准):
--1-用户表id密码权限科室
createtableusers(
idvarchar(20)notnull,
upwdvarchar(20)notnull,
urightint,
uroomvarchar(20)notnull,
unamevarchar(8)notnull,
constraintPK_userprimarykey(id)
);
--用户组表组ID组名
createtableugroup(
ugidintnotnull,
15
n