---------------------------------------------------------------------------------------------------------
注意:在这个例子里我采用了拼SQL语句的方法,因此是不安全的,无法抵御SQL注入式攻击。!有时间再改进吧。
——hoodlum1980 2008年10月7日12:32:14
---------------------------------------------------------------------------------------------------------
最近很多人讨论数据库和面向对象,使我想起这个我在暑假里帮别人做的在线考试系统,由于需求中提到要提醒考生时间快到了,而我考虑bs不好控制(并且不熟),所以采用了是cs架构。数据库拟采用的是sqlserver,但考虑到为了演示时部署方便,我也添加了使用access数据库的接口(仅用于演示)。
其他需求还有随机抽取题目组成一张试卷。题目的重要属性有题干,选项,答案,难度,相关章节等。考试的属性有难度,时间等。系统角色有学生,教师,管理员。
试卷的属性有所有题目ID字符串,正确答案字符串,用户答案字符串,所得分数等。
我希望用最快速度把它写出来,基本功能我写了4天以后可以在我本机上演示了。由于很多属于数据库操作,所以写起来很烦琐。。。
核心的逻辑主要是随机抽取试题,这里我使用了在程序用random函数。当然在sql语句里面也可以用newid()生成一个随机顺序。需求中要求题目涉及面均衡,我使用把所有题目按照相关章节的顺序排列,然后在里面随机抽取来实现。因此试卷的章节分布和题库的章节比例相一致。但这样可能并不一定是真正的需求,另外一种选择是尽可能使不同章节的题目数量相同。
时间提醒,由于考试时处于紧张状态,显然不希望受到干扰,所以为了不妨碍考生答题,但又能醒目的提供提醒,我引入了一个模仿msn提醒的浮出窗口(它是来源于codeproject.com上的源码)。
程序截图:
教师的登录后界面:
在系统中使用了一些UserControl页面,例如题目页面,每次装载不同题目。用户选择的答案是一个字符,如果用户已经选择答案,则是ABCD中的一个,如果为选,则设为‘X’,表示还没做答。(这里都是单选题目,尚未设置多选题目的界面。)在用户交卷时,系统检查是否有未答题目,如果有,则提醒考生。
所有角色的测试帐号:123456 密码:123456
教师可以增加学生,管理员可以增加教师。
最后是源代码(code of vs03 & vs05)下载的链接:
http://files.cnblogs.com/hoodlum1980/ExamSys.rar