兰州城市学院本科毕业论文
在线考试系统—
管理员模块设计
学院名称:信息工程学院
专业名称:计算机科学与技术(网络) 学生姓名:谢斌 指导教师:文静讲师
二○一四年五月
摘要
本系统是一个基于Java面向对象程序语言的在线考试系统,用户角色由学生、教师和系统管理员组成。
本系统主要实现了自动组卷、学生在线考试、教师在线批阅和考试设置、试题维护、分数统计等功能。在这个系统中主要设计了管理员模块,负责修改/查阅、分析成绩、用户信息维护等功能的实现。
本系统采用B/S模式设计。系统所用到的技术有HTML、CSS、Javascript、JSP、Servlet等。数据库选用SQLServer2005,Web服务器选用TomCat7.x。前台设计主要在DreamWeaver上设计完成,后台开发主要在Myeclipse上完成。
关键词:Java;在线考试;随机抽题;自动组卷
I
目录
摘要 .............................................................................................................................. I 第1章绪论 ................................................................................................................ 1
1.1 问题的提出.................................................................................................... 1 1.2 系统开发目标................................................................................................ 1 1.3 开发工具的选择............................................................................................ 1 1.4 开发本系统的意义........................................................................................ 2
第2章系统分析 ....................................................................................................... 3
2.1 背景分析........................................................................................................ 3 2.2 可行性分析.................................................................................................... 3
2.2.1 技术可行性分析................................................................................ 3 2.2.2 经济可行性........................................................................................ 3 2.2.3方案可行性......................................................................................... 4
第3章系统设计 ....................................................................................................... 5
3.1 需求分析........................................................................................................ 5 3.2 总体设计........................................................................................................ 6
3.2.1 系统数据流图.................................................................................... 6 3.2.2 系统的功能模块图............................................................................ 7 3.2.3 系统功能模块.................................................................................... 8 3.3 数据库设计.................................................................................................. 10
3.3.1数据字典........................................................................................... 10 3.3.2 实体关系图...................................................................................... 13 3.3.3 数据库的连接.................................................................................. 15 3.4 详细设计...................................................................................................... 17
3.4.1公共类设计....................................................................................... 17 3.4.2 在线考试模块设计.......................................................................... 20 3.4.3 成绩查询模块设计.......................................................................... 22 3.4.4 查看/修改考生试卷模块设计........................................................ 22 3.4.5 分数段统计模块设计...................................................................... 25 3.4.6个人信息维护模块设计................................................................... 25 3.4.7 试题维护模块设计.......................................................................... 29 3.4.8 考试设置信息维护模块设计.......................................................... 29 3.4.9 用户管理模块设计.......................................................................... 30
第4章系统测试 ..................................................................................................... 33
4.1 系统运行环境............................................................................................... 33 4.2 测试目的....................................................................................................... 33
4.3 各功能模块测试.......................................................................................... 33
4.3.1查看/修改试卷测试......................................................................... 34 4.3.2分数段统计测试............................................................................... 34 4.3.3用户管理测试................................................................................... 35 4.4系统压力测试............................................................................................... 36 4.5用户体验....................................................................................................... 37
结论 ............................................................................................................................ 38 参考文献 ................................................................................................................... 39 致谢 ............................................................................................................................ 40
第1章绪论
1.1 问题的提出
计算机技术的发展及计算机的日益普及,很多国内外的大学和社会其他部门都已经开设了远程教育,通过计算机网络实现异地教育和培训,从而为在线考试系统发展提供了坚实的基础。如今计算机硬件技术的发展已经达到了相当高的水平。但是,我国远程教育软件的开发目前还处于起步阶段,随着这项技术不断深入发展,就要求有更好、更完善的软件系统应用到远程教育当中去,这就给软件设计人员提出了更高的设计要求。
在二十一世纪的新时代,随着计算机技术的发展及计算机的日益普及,基于在线考试与无纸化办公一样已成为大势所趋。在线考试系统也越来越成为学校的好帮手,它的优势不但体现在人力上也体现在物力上,在线考试系统的采用自动评阅、计分、成绩存档功能将有效地避免资源的浪费,有利于环保,减少人员操作,节约成本,提高效率。
1.2 系统开发目标
该系统是一个基于B/S模式的Web在线考试系统。它能够从题库中随机抽取试题生成考试试卷,从而有效地提升考试效率与公平性,使考试不受时间和地点的限制。使学生可以更加灵活的检测自己的不足,提高学习效率。 当考试完成后系统能自动地为客观题评分。教师登陆时系统可以还原学生考试试卷,待教师对主观题评完分后系统可以计算出学生总分,并生成各分数段情况信息,供给老师参考,便于了解学生的考试情况。同时充分利用计算机优势对数据进行有效的管理,达到减轻管理者和老师的工作量。
1.3 开发工具的选择
本系统开发语言为JAVA,从各IDE的性能和价格考虑所使用的开发工具主要是Eclipse+MyEclipse,前台页面主要用DreamWeaver来设计。由于本系统数据量和负载量都比较大,从经济和效率上考虑本系统选用SQLServer2005数据库。Web服务器选Apache开源组织提供的TomCat,因为TomCat是一个免费的开源软件是SUN公司推荐的Web服务器。系统自带的IE浏览器。
1
1.4 开发本系统的意义
从电子文档、多媒体的应用,到利用Internet做尝试,网络已经渗入到教育体系的各个环节。在线考试系统作为这场变革中必不可少的环节之一,受到越来越多的关注。在线考试系统不仅和传统考试方式一样要权衡公平性,应该有方便、节约成本等特性。
从管理的角度看,在线考试系统可以帮助教师完成从题目设计,考试安排考试实施,考卷批改到分数统计总结的所有工作,系统实现了无纸化管理,提高了管理的效率。
从规范化管理上,在线考试系统很好的实现了考试和教育相分离,任课老师以不参与所任课程的考试,包括出题、监考、评卷、登分和质量分析。强调严格按教学大纲教学,根据培养目标、教学目的、教学大纲,制定考核大纲,建立一套包括试题库、自动命题、阅卷、评分、考试分析、成绩管理等各种规章制度完备的考核管理系统。
不受空间限制,只要有考试客户端可以连接到考试应用服务器,任何考生在任何地方进行身份确认,都能完成考试.题目有一定的稳定性和随机性。
考试结果反馈的及时准确性.考试的结果在教师修改考完之后就可以知道,同时提供一个机会让考生知道自己哪里做错了,并给出反馈信息说明理由,考生的考试结果可以被保存下来,供教师进行长期的分析和统计,有益于教学水平的提高。
2
第2章系统分析
2.1 背景分析
网络化教育代表了教育改革的一个发展方向,已经成为现代教育的一个特征。随着Internet/Intranet的迅速发展和广泛普及,建立在其上的远程教育成为现代教育技术未来发展方向之一,考试测试作为远程教育的一个子系统也成为一个重要的研究领域。现代远程教育作为一种新的教学手段已经开始进入我们的生活,正在给传统教育模式带来新的变革,并对教育的发展形成新的推动力。
相比传统的考试方式,在线考试系统的主要好处是一方面可以动态地管理各种考试信息,只要准备好足够大的题库,从该题库中抽取一定数量的考题生成考试试卷,从而有效地避免了考试作弊,相互抄袭的弊端;另一方面,考试时间灵活,可以在规定的时间段内的任意时间参加考试;另外计算机化的考试的最大特点是阅卷快,系统可以在考试结束时当场给考生成绩,计算机阅卷给了考生最大的公平感。
2.2 可行性分析
2.2.1 技术可行性分析
系统开发将要用到JSP/Servlet、JavaBean、SQLServer数据库技术。另外,硬件只需要一台pc机,装上软件Eclipse,DreamWeaver等开发工具即可 ,利用SQLserver作为后台的数据库,利用Tomcat作为Web服务器,所以在这方面来说是可行的。已经掌握了开发考试系统方法和开发工具,并且在调查过程中,已经了解和熟悉了在线考试系统的业务流程。综上所述本系统开发从技术上是可行的。
2.2.2 经济可行性
从经济效益来分析,软件的开发成本不大,而其它的投入也只是电脑。电脑的普及也带来了低成本投入。由于系统运行的基础环境均已具备,无需重新开发建设,所以系统开发、运行所需的费用是比较低的。而系统的效益很高可以提高管理效率实现计算机化、系统化、规范化操作,效率大于投入,可行性很高。
3
2.2.3方案可行性
根据系统的分析,本系统充分从适用性出发,全面为不同的使用用户考虑。使系统的许多功能与规则都可根据用户的习惯进行定制,包括软件界面、操作方式、录入方式等。本系统的设计充分从使用用户和教务教学任务考虑。
4
第3章系统设计
3.1 需求分析
本考试系统用户主要分为三类:学生,教师,管理员。 1.学生需求
学生登陆系统主要进行两类操作:在线考试,成绩查询与个人信息管理. (1)在线考试
系统能自动根据所选科目给考生选题,考题必须是随机分配的,以保证考试的公平性。学生在考试过程中页面将提供考试时间倒计时功能,使考生随时了解考试剩余时间。考试时间到时,系统将自动地将学生考试试卷提交,将提醒考生离开考场。当考试试卷提交时,系统自动为选择题、判断题等客观题评分,主观题由教师评分。
(2)成绩查询与个人信息维护
学生可以登陆系统查询各科成绩,其中成绩信息包括每种题型的得分,如单选题,简答题等。别外学生还可以查询自己的考卷,了解自己的考试情况。
除此之外,学生登陆系统可以查看和修改个人的基本信息,如修改密码等。 2.教师需求
教师登陆系统主要有三类操作:查看和修改学生试卷,查看各分数段统计,个人信息的维护
(1)查看/修改学生试卷
系统会将学生试卷从数据库中读出供给老师查看和修改,系统已经对选择题和判断题评了分,所以这些信息对于教师是只读的。而对于主观题,系统将参考答案读出供给老师参考,再将考生答案读出供给教师评分。
(2)查看分数统计
教师修改好试卷之后,系统将成绩汇总,生成各分数段统计信息,并提供给老师查看,以便教师能了解学生的学习情况。
(3)个人信息维护
教师登陆系统之后也可以对个人信息进行查看和修改。 3.管理员
系统管理员登陆系统后主要进行四类操作:考题维护,考试信息的维护,用
5
户维护和个人信息维护
(1)考题的维护
管理员可以往题中添加考题,修改错误试题和删除无用试题。 为了方便试题的维护,管理员也可以批量导入试题。 (2)考试信息的维护
考试信息的维护主要是对于考试设置信息进行维护,这些信息主要是考试总时间,试题数量,各试题分值的分布等。
(3)用户维护
系统管理员可以对用户信息(包括学生信息,教师信息等)进行增,删,改查操作。
为了方便用户(学生)的维护,管理员也可以批量导入学生信息。 (4)个人信息维护
管理员也可以对自己的基本信息的维护
3.2 总体设计
3.2.1 系统数据流图
根据分析系统可知数据流图如图3.1所示:
6
分数统计3个人信息维护更新个人信息教师批改试卷指令查看请求5分数段统计用户管理请求8用户管理添加用户用户信息更新用户4批改学生试卷成绩查询试卷信息管理员考题维护请求维护请求7考试设置维护添加考试设置考试设置信息试卷信息试卷信息试卷信息2成绩查询考试设置信息考生信息6考题维护学生添加考试信息考题信息1在线考试学生信息考题信息成绩信息成绩信息个人信息
图3.1 系统数据流图
3.2.2 系统的功能模块图
根据图3.1所述需求,设计出系统功能模块如图3.2所示:
7
在线考试系统学生教师管理员在线考试成绩查询个人信息维护查看学生试卷批改试卷主观题分数段统计个人信息维护考题维护考试信息维护用户管理个人信息维护图3.2 系统的功能模块图
3.2.3 系统功能模块
1.在线考试
在线考试的流程如下:
首先系统按照随机算法为登录的考生随机选取一定的试题生成考试试卷,考生在系统生成好试卷后进行答题操作。答题必须在规定的时间内进行,此时间是由管理员事先设置好的,如在规定的时间内没有完成答题,系统将强制提交学生考试试卷。考生在试卷提交后系统自动地为客观题进行评分,本系统的客观题主要是单选题,多选题和判断题。其数据流图如3.3所示:
考题信息考题信息学生信息1.1生成试卷试卷信息1.2在线考试试卷信息1.3试卷提交试卷信息1.4客观题评定试卷信息试卷信息考试设置信息考试设置信息图3.3 在线考试数据流图
2.成绩查询
考生根据用户编号查询考试成绩信息。成绩信息包括单选题得分,多选题得
8
分等详细信息。页面提供相应科目试卷的链接,使得学生可以查询自己的考卷,了解自己的考试情况。
3.查看/修改考生试卷
系统首先将考生的试卷读出,再提醒老师对主观题评分,等老师对主观题进行评分后系统生成考生的成绩信息,其数据流图如图3.4所示:
4.1读出考生试卷4.2评定主观题试卷信息4.3信息提交试卷信息批改请求试卷信息成绩信息试卷信息试卷信息 图3.4 修改学生试卷数据流图
4.分数段统计
当教师对考卷的主观题评定后,系统能自动生成分数段统计信息供给老师查看。此功能有助于老师了解学生的学习情况,以便更好的教学。
5.试题维护
试题维护是后台管理员的重要功能,它包括对试题的添加,修改,删除操作。为了使界面更友好,管理员在试题维护时系统会先将考试试题读出,再提供给管理员操作。其数据流图如图3.5所示:
考题信息考题信息考题信息考题维护请求6.1查看考题信息6.2添加考题信息考题信息考题信息考题信息6.2更新考题信息考题信息
图3.5 考题维护数据流图
6.考试设置信息维护
考试设置信息维护是管理员对考试设置信息维护,它包括对考试设置信息的
9
添加,修改,删除。这些考试信息包括考试时间,考题的数量和分值等。其数据流图如图3.6所示:
考试设置信息考试设置信息考试设置信息考试设置维护请求7.1查看考试设置信息7.2添加考试设置考试设置信息考试设置信息考试设置信息7.2更新考题设置考试设置信息
图3.6 考试设置信息维护数据流图
7.用户管理
用户管理是管理员对系统用户信息的管理。这些用户包括学生和教师。用户管理操作包括添加用户,更新用户和删除用户。管理用户时,系统会先将用户信息读出供给管理员参考,再提供给管理员操作。其数据流图如图3.7所示:
用户信息考试设置信息用户信息用户管理请求8.1查看用户信息8.2添加用户信息用户信息用户信息用户信息8.2更新用户信息用户信息
图3.7 用户管理数据流图
8.个人信息维护
学生,教师,管理员都可以对个人信息进行维护。维护操作包括对个人基本信息进行修改,修改密码等。系统能提供极为友好的界面方便用户操作。
3.3 数据库设计
3.3.1数据字典
通过对系统功能的分析可知,本系统主要包括如下的数据库信息:
10
用户表,该表保存了系统用户的基本信息,属性有用户编号、用户名称、用户类型、用户性别。其中用户编号为主码,它是用户信息的唯一标识。表结构如表3.1所示。
考生标记表,该表用于保存考生是否已经考试的标识信息,属性有用户编号、课程名称、标识信息。其中用户编号和课课程名称共同作为主码。表结构如表3.2所示。
考题表,该表用于保存考题的基本信息,属性有考题编号,课程名称,考题类型,题目级参考答案等。其中考题编号为主码。表结构如表3.3所示。
试卷设置表,该表用于记录相应课程的考试设置的相关信息,属性有课程名称,单选题、多选题、判断题、简答题、编程题数量和分值,考试时间等。其中课程名称为主码。表结构如表3.4所示。
试卷表,该表用于保存考生的试卷信息,属性有考生编号,课程名称,考题类型,考生答案和得分等。其中考生编号和课程名称共同作为主码。表结构如表3.5所示。
成绩表,该表用于保存考生的考试成绩信息,属性有考生编号,课程名称,各考题得分,总得分。其中考生编号和课程名称共同作为主码。表结构如表3.6所示。
系统表结构如下:
表3.1 用户表(UserInfo)
字段 Uid Name Utype 类型 Varchar(10) Varchar(50) Int 允许为空 否 是 是 说明 用户编号 用户姓名 备注 pk 用户类型 1为学生,2为教师,3为管理员 密码 性别 password Sex
Varchar(10) Varchar(2) 是 是
11
表3.2 用户标记表(userflag)
字段 Uid Course Flag 表3.3 考题表(Question)
字段 Qid qtype course Ques keyA keyB keyC keyD answer 表3.4 考试设置表(test_set)
字段 Course Sinc persin mulc permul judge perju Jd perjd program perpro totaltime 类型 Varchar(20) Int Int Int Int Int Int Int Int Int Int Int 允许为空 说明 否 科目 否 单选题数 否 每个单选题的分值 否 多选题数 否 每个多选题的分值 否 判断题数 否 每个判断题的分值 否 简答题数 否 每个简答题的分值 否 编程题数 否 每个编程题的分值 否 考试时间 12
类型 Varchar(10) Varchar(20) Int 允许为空 否 否 否 说明 用户编号 课程名称 用户标记 备注 pk pk 0试卷未提交 1试卷已提交 类型 Int Int Varchar(20) Text Varchar(50) Varchar(50) Varchar(50) Varchar(50) Text 允许为空 否 是 是 是 是 是 是 是 是 说明 考题编号 考题类型 课程名称 题目 选项A 选项B 选项C 选项D 参考答案 备注 pk 自增长 1单选题 2多选题 3判断题 4简答题 5编程题 备注 pk
表3.5 试卷表(test)
字段 Uid Qid Course Qtype 类型 Varchar(10) Int Varchar(20) Int 允许为空 否 否 否 否 说明 用户编号 考题编号 课程名称 考题类型 备注 pk pk 题库中的题号 1单选题 2多选题 3判断题 4简答题 5编程题 试卷中的第几题 answer Tnumber score
Text Int Float 是 否 是 考生答案 题目编号 得分 表3.6 成绩表(record)
字段 Uid Course score single multiply judge Jd program 允许为空 Varchar(10) 否 Varchar(20) Float Float Float Float Float Float 否 否 否 否 否 否 否 类型 说明 用户编号 课程名称 总得分 单选题得分 多选题得分 判断题得分 简答题得分 编程题得分 备注 pk pk 3.3.2 实体关系图
根据分析系统实体关系图如图3.8所示:
13
单选题分值单选题数量标记课程名称多选题分值多选题数量用户编号用户标记编程题数量N标记考试设置简答题数量简答题分值编程题分值考试时间判断题数量判断题分值单选题得分密码用户类型性别N1用户多选题得分生用户编号考题类型考题编号生成课程名称考题题目选项A参考答案得分选项B选项C考生答案选项D用户编号图3.8 系统E-R图
系统各实体关系如下: 用户:用户标记 1:N 考试设置:用户标记 1:N 考题:考试设置 N:1 考题:试卷 1:N 用户:试卷 1:N 试卷:成绩 N:1 用户:成绩 1:N
14
N1用户名称成考试试卷111课程名称标记课程名称判断题得分总得分编程题得分考试1成绩简答题得分1照参用户编号N课程名称考试类型考题编号NN题目编号
3.3.3 数据库的连接
在本系统中我们使用JDBC连接,要进行数据库连接首先配置数据源。按照3.3.1和3.3.2的设计,设计好数据库Myexam,再建一个名为Myexam的数据源。系统连接数据库的流程图如图3.9所示:
开始注册驱动建立连接找到数据源?是操作数据库否抛出异常关闭连接结束 图3.9系统连接数据库流程图
建立数据库连接和关闭数据库连接操作方法代码及说明如下,这些方法位于DBAccess类中,当作工具类来用
static{//静态代码块,在类被实例化时被调用,且只被调用一次 try{
lass.forName(\"com.microsoft.sqlserver.jdbc.SQLServerDriver\");//注册驱动 }catch(ClassNotFoundException e){ thrownew ExceptionInInitializerError(e);
}
}
//得到连接
public Connection getConnection(){ try{ String url =
\"jdbc:sqlserver://localhost:1433;databaseName=ExamOnline\";
// SQLServer 2005配置时的用户名
15
String user = \"sa\";
// SQLServer 2005配置时的密码 String password = \"123456\"; // 连接数据库 conn = DriverManager.getConnection(url, user, password); }catch(Exception e){
e.printStackTrace(); out.print(e.toString()); }
return conn; }
//关闭数据库连接
publicvoid CloseDB(Connection conn,Statement sm,ResultSet rs){ try {
if(rs!=null){ rs.close(); }
}catch (Exception e) { e.printStackTrace();
out.print(\"数据库关闭失败!\"); }finally{ try{ if(sm!=null){ sm.close(); } }catch(Exception e){ e.printStackTrace(); out.print(\"数据库关闭失败!\"); }finally{ try{
}
if(conn!=null){ conn.close(); }
}catch(Exception e){ e.printStackTrace(); }
out.print(\"数据库关闭失败!\");
16
} }
3.4 详细设计
3.4.1公共类设计
1.Domain类设计
由于数据库使用的类系统模型,而Java数据为对象模型,使其模型不匹配。为了方便关系模型和对象模型间的转换,建应Domain类,即数据库中每个表对应一个类,表中类属性对应表的各属性,再为各个属性设计一个读方法(get)和一个写方法(set)如用户类: publicclass User {
private String id=\"\"; private String name=\"\"; privateint type=1;
private String password=\"\"; private String sex = \"\"; public String getSex();
publicvoid setSex(String sex) ; }
public String getPassword();
publicvoid setPassword(String password); public String getId();
publicvoid setId(String id); public String getName();
publicvoid setName(String name); publicint getType();
publicvoid setType(int type); 表和类的对应关系如下:
用户表(UserInfo)——用户类(User) 用户标记表(userflag)——用户标记类(UserFlag) 考题表(Question)——考题类(Question) 试卷表(test)——试卷类(Test)
试卷设置表(test_set)——试卷设置类(Test) 成绩表(record)——成绩类(Record)
17
试卷考题类(TestQuestion)——试卷表和考题表联合查询视图 2.公具类设计
根据系统设计需求,设计如下工具类:
数据库连接工具类,主要提供连接数据操作等相关方法 数据库连接类:
public class DBAccess {
public Connection getConnection()//并闭数据库连接
public void CloseDB(Connection conn,Statement sm,ResultSet rs) }
用户操作相关类,主要提供对用户表操作的相关类 public class UserUtil {//根据用户编号得到用户信息
public User getUser(String Uid) //验证登陆信息,根据用户名、密码和用户类型
public boolean checkUser(String userName,String password,int type) //修改用户信息
public boolean motifyUser(User user) //添加用户信息 public boolean insertUser(User user) //修改密码
public boolean motifyPassword(String Uid,String password) //得到指定页的用户 }
public ArrayList getAllUser(int pageSize,int current) //得到用户数量 public int getCount() //删除用户信息 public boolean deleteUser(String Uid)
用户标记工具类,主要提供对用户标记表的相关操作方法 public class UserFlagUtil { //得到交卷信息
public int getFlag(String Uid,String course) //设置交卷信息
public boolean setFlag(String Uid,String course) }
考题工具类,主要提供对考题表的相关操作方法 Public class QuestionUtil{ ///得到选择题的方法
public ArrayList getQuestion(String course,int count,int type)
//得到数据库中题目数量
public int getCount(int type,String course) //得到数据库中题目数量
18
}
public int getCount()
//通过考题编号得到考题
public Question getQuestionById(int Qid) //得到指定页的试题目信息
public ArrayList getAllQuestion(int pageSize,int current) //添加试题信息
public boolean insertQuestioin(Question ques) //修改试题信息
public boolean updateQuestion(Question ques) //删除试题信息
public boolean deleteTest(int Qid) //获取科目
public ArrayList getCourse()
试卷工具类,主要提供对试卷表的相关操作方法 public class TestUtil { //添加试卷信息
public boolean insertTest(ArrayList al) //考生的名字和学号
public ArrayList getStudent(String course) }
//获得试卷库中相应题型的题
public ArrayList getTest(String Uid,String course,int type) //修改试卷库中相应试题的分数
public boolean updateTest(String Uid,int Qid,float score)
考试设置工具类,主要提供对考试设置表的相关操作方法 public class TestSetUtil {
//根据课程名称得到考试设置信息
public TestSet getTestSet(String course) //计算考题总分
public int getTotalScore(TestSet ts) //获得总记录
public int getCount()
//得到指定页的考试信息
public ArrayList getAllTestSet(int pageSize,int current) //添加或修改考试设置,flag=0为添加,flag=1为修改 public boolean insertOrUpdate(TestSet ts,int flag) //删除考试设置信息
19
}
public boolean deleteTest(String course)
成绩工具类,主要提供对成绩表的相关操作方法
public class RecordUtil {
public DBAccess db = new DBAccess(); }
//获取考生指定课程的得分信息
public Record getRecord(String Uid,String course) //判断学生成绩是否存在
public boolean getUser(String Uid,String course) //获取及格人数
public int getPass(String course) //获取该课程总考试人数 public int getCount(String course) //获分数段人数
public int getCountByScore(String course,int score) //得到学生的全部成绩
public ArrayList getAll(String Uid) }
试卷考题工具类,主要提供对试卷表考题表联合查询视图的相关操作方法 public class TestQuestionUtil { }
//获得试卷库中相应题型的题
public ArrayList getTest(String Uid,String course,int type)
3.4.2 在线考试模块设计
在线考试流程为:首先系统将考试信息和考生个人信息提供给考生,并要求考生核对个人信息。在考试开始时系统按照一定的算法为登陆的考生随机选取一定的试题生成考试试卷,考生在系统生成好试卷后进行答题操作。答题必须在规定的时间内进行,此时间是由管理员事先设置好的,如在规定的时间内没有完成答题,系统将强制提交学生考试试卷进。考生在试卷提交后系统自动地为客观题进行评分,并将试卷保存,供给老师查看或修改。在线考试流程图如图3.10所示。
随机抽题算法:产生一个随机整数,这个数在0和相应题型总考题数之间。
20
从这个随机数开始抽取取试题,抽取数量为试卷设置中相应题型的个数(此数小于总题数),若取到最后一道还不满足取题数量,再从第一题开始选取,其抽题流程如图3.11如示。
开始用户登陆核对个人信息否正确?是生成试卷开始考试否时间到?是提交试卷客观题评定否保存试卷保存成功?是结束
图3.10 在线考试流程
21
开始得到相应题型考题总数m产生一个0-m的随机数n得到k=n%m选取数据库中相应题型的第k题,并保存为考题考题数i=i+1i>=试卷设置中相应题型总数?否n+1是结束 图3.11 选题流程
3.4.3 成绩查询模块设计
考生根据用户编号查询考试成绩信息,查询到的成绩是考生的所有课程的成绩。成绩信息包括单选题得分,多选题得分等详细信息。 3.4.4 查看/修改考生试卷模块设计
教师登陆后,可以对考生试卷进行查看和修改。系统首先将考生的试卷读出,教师可能看到系统对试卷主观题的评定。系统会提提醒老师对主观题进评分,等老师对主观题进行评分,系统会将保存对学生试卷的评定,而后生成考生的成绩信息。查看/修改考生试卷的流程图如图3.12所示
22
开始读取考生考卷等待教师对主观题评定接受教师的评定信息保存评定信息否保存成功是计算成绩保存成绩信息否保存成功是结束 图3.12 查看/修改学生试卷流程
教师提交评定的关键代码设计及说明如下:
//获取学生学号
String Uid = request.getParameter(\"Uid\");
//获取session中的课程名称
String course = (String)session.getAttribute(\"course\"); TestUtil tu = newTestUtil(); TestSetUtil tsu = newTestSetUtil(); Record record = newRecord(); RecordUtil ru = newRecordUtil(); //获取试卷设置信息 TestSet ts = tsu.getTestSet(course); float singleTotal = 0;//单选题总分 float multiplyTotal = 0;//多选题总分
23
float judgeTotal = 0;//判断题总分
float jdTotal = 0;//简答题总分
float programTotal=0;//编程题总分 float total=0;
for(int i=0;i Float.parseFloat(request.getParameter(\"choice\"+i)); singleTotal+=score; } for(int i=0;i Float.parseFloat(request.getParameter(\"mulChoice\"+i)); multiplyTotal+=score; for(int i=0;i for(int i=0;i record.setCourse(course); record.setScore(total); record.setSingle(singleTotal); record.setMultiply(multiplyTotal); record.setJudge(judgeTotal); record.setJd(jdTotal); 24 record.setProgram(programTotal); //System.out.print(record.getUid()+record.getCourse()); if(ru.updateRecord(record)){ response.sendRedirect(request.getContextPath() +\"/teacher/success.html\"); }else{ response.sendRedirect(request.getContextPath() +\"/teacher/fail.html\"); } 3.4.5 分数段统计模块设计 当教师对考卷的主观题评定后,系统能自动生成分数段统计信息供给老师查看。统计分数段包括及格率、60-69分、70-79、80-89和90分以上,在统计数量的同时并计算出占数考人数量的比例。 其统计功能的关键代码及说明如下: //获取要统计的分数段 String scoreString = request.getParameter(\"score\").trim(); //获取要统计的课程名称 String course = (String)session.getAttribute(\"course\"); RecordUtil ru = newRecordUtil(); //得到考生总数 int count = ru.getCount(course); int pass = 0;//要统计的分数段人数 if(\"pass\".equals(scoreString))//如果统计的是及格率 { pass = ru.getPass(course); }else { int score = Integer.parseInt(scoreString); pass = ru.getCountByScore(course,score); } //计算比例,由于要用count作为除数,所以必须排出count为0的情况 String percent = count==0?\"0.0%\":((float)pass)/((float)count)*100+\"%\"; 3.4.6个人信息维护模块设计 系统用户包括学生,教师,管理员都可以对个人信息进行维护。维护操作包 25 括对个人基本信息进行修改,修改密码等。系统能提供极为友好的界面方便用户操作。对其本信息进行时,用户不能修改自己的编号。对密码进行修改时按昭一般系统的要求先确认旧密码,再输入新密码和确认新密码。 个人基本信息信息维护的关键代码如下所示: UserUtil userUtil = new UserUtil(); //得到session HttpSession session = request.getSession(true); //获取session中的用户编号 String Uid = (String)session.getAttribute(\"Uid\"); //得到用户名,用gbk对其进行编码 String name = new String(request.getParameter(\"name\").trim().getBytes(\"iso8859-1\"),\"gbk\"); //得到用户类型 String typeString=new String(request.getParameter(\"type\").getBytes(\"iso8859-1\"),\"gbk\"); int type=1; if(\"教师\".equals(typeString)){ type=2; }else if(\"管理员\".equals(typeString)){ type=3; } String sex = new String(request.getParameter(\"sex\").getBytes (\"iso8859-1\"),\"gbk\").trim(); User user = new User(); user.setId(Uid); user.setName(name.trim()); user.setType(type); user.setSex(sex); if(userUtil.motifyUser(user)){ response.sendRedirect(request.getContextPath()+\"/success.html\" }else{ response.sendRedirect(request.getContextPath()+\"/Fail.html\"); } 教师在管理员生成用户后登录教师系统,该业务的页面脚本验证如下: (1)教师登陆界面,如图3.14图3.15 流程图如图3.13所示: 26 开始输入页面否 用户名和密码均码不为空?是否选择科目?否连接数据库并判断用户名和密码是否正确登陆成功图3.13 考生登录流程图 图3.14 密码、用户名、科目为空登录 27 是是 图3.15 科目为空登录 (2)用户默认密码为123456,教师可在个人信息维护模块中对已考该科目的学生人数、分数段统计,修改自己的个人信息,如修改个人密码,如图3.16所示 开始获取个人信息是原密码不为空?是输入秘密和确认输入 两次密码输入一致?是点击修改原密码验证是否数据库刷新密码修改成功 图3.16密码修改 28 3.4.7 试题维护模块设计 试题维护是后台管理员的重要功能,它包括对试题的添加,修改,删除操作。在进行此操作时系统会先将考试试题读出,再提供给管理中员操作。试题维护流程图如图3.17所示。 开始读取考题信息选择操作添加考题信息修改考题信息册除考试信息等待管理员输入信息等待管理员输入信息确认删除?是获取输入信息否添加考题信息获取输入信息否修改考题信息删除考题信息否 删除成功添加成功?是重新绑定数据修改成功?是是否重新绑定数据重新绑定数据结束图3.17 考题维护流程 3.4.8 考试设置信息维护模块设计 考试设置信息维护是管理员对考试设置信息维护,它包括对考试设置信息的添加,修改,删除。这些考试信息包括考试时间,各题的数量和分值等。设置时,系统先读取已存在的考试设置信息供给管理员查询,再提供给管理员操作。考试设置信息流程图如图3.18所示。 29 开始读取试卷设置信息选择操作添加试卷设置修改试卷设置册除试卷设置等待管理员输入信息等待管理员输入信息确认删除?是获取输入信息否添加试卷设置信息获取输入信息否修改试卷设置信息删除试卷设置信息否 删除成功添加成功?是重新绑定数据修改成功?是是否重新绑定数据重新绑定数据结束 图3.18 考试设置信息维护流程 3.4.9 用户管理模块设计 用户管理是管理员对系统用户信息的管理。这些用户包括学生和教师。用户管理操作包括添加用户,更新用户和删除用户。添加用户时,删除管理用户时,系统会先将用户信息读出供给管理员参考,再提供给管理员操作。用户密码不用设置,系统默认为“123456”;修改用户时用户编号和用户密码不能被修改其它均能被修改;用户时,系统会先提醒管理员是否删除,若果确认删除才能删除用户。用户管理流程图如图3.19所示: 30 开始读取用户信息选择操作添加用户更新用户信息册除用户信息等待管理员输入信息等待管理员输入信息确认删除?是获取输入信息否添加用户信息信息获取输入信息否更新用户信息信息删除用户信息信息否 删除成功添加成功?是重新绑定数据更新成功?是是否重新绑定数据重新绑定数据结束 图3.19 用户管理流程 添加/更新用户的关键代码及说明如下: //获取用户名,这里也用gbk对其进行编码 String name=new String(request.getParameter(\"name\").getBytes(\"iso8859-1\"),\"gbk\").trim(); //获取用户类型,1为学生,2为教师,3为管理员 int type=Integer.parseInt(request.getParameter(\"type\")); //获取性别,用gbk对其进行编著码 String sex=new String sex=new String(request.getParameter(\"sex\").getBytes(\"iso8859-1\"),\"gbk\").trim(); //初始密码设为123456 //获取操作标志,0为添加用户信息,1为更新用户信息 String password = \"123456\"; 31 String flag = request.getParameter(\"flag\").trim(); UserUtil userUtil = new UserUtil(); User user = new User(); boolean success = false; user.setId(Uid); user.setType(type); user.setName(name); user.setPassword(password); user.setSex(sex); if(\"0\".equals(flag)){ //添加用户 success= userUtil.insertUser(user); }else if(\"1\".equals(flag)){ //更新用户 success=userUtil.motifyUser(user); }if(success){ response.sendRedirect(request.getContextPath()+\"/admin/success.html\"); }else{ response.sendRedirect(request.getContextPath()+\"/Fail.html\"); } 由于删除用户信息同删除考题功能类似,这时也不再赘述,如有疑问请参考 前面删除考题信息功能。 32 第4章系统测试 4.1 系统运行环境 数据库:SQLServer2005 Web服务器:Tomcat6.0及以上版本 操作系统:能运行Java虚拟机的操作系统均可 4.2 测试目的 系统测试是为了发现错误而执行程序的过程,成功的测试是发现了至今尚未发现的错误的测试。 测试的目的就是希望能以最少的人力和时间发现潜在的各种错误和缺陷。应根据开发各阶段的需求、设计等文档或程序的内部结构精心设计测试用例,并利用这些实例来运行程序,以便发现错误。系统测试应包括软件测试、硬件测试和网络测试。硬件测试、网络测试可以根据具体的性能指标来进行,此处所说的测试更多的是指软件测试。系统测试是保证系统质量和可靠性的关键步骤,是对系统开发过程中的系统分析系统设计和实施的最后复查。 本系统采用自动化测试对系统各模块进行功能测试和压力测试。 4.3 各功能模块测试 将工程导入Tomcat的项目文件夹即webapps文件夹中, 再启动TomCat服务器。在浏览器中输入工程的URL,如“http//:localhost:8080/Onlineexam”可进入系统操作界面,用户可以选择操作。如图4.1所示。 图4.1 系统主界面 33 4.3.1 查看/修改试卷测试 教师在主界面上点击教师管理,并输入正确的登陆信息后可以进入教师管理界面,在左边的菜单选项中点击“查看/修改试卷”,展开子菜单。在展开的子菜单中点击考生姓名可以查看到考生的考试试卷,在如图4.2所示。 在此界面中系统会提醒教师对主观题进行评定,评分时系统也不一个简单的验证,如得分不能超过此题总分等,如图4.3所示。 图4.2 查看/修改试卷界面 图4.3 提交修改试卷 4.3.2 分数段统计测试 当教师提交评定后,系统会生考生成绩信息和该科各分数段统计信息。在教师管 34 理主界面上点击“分数段统计”,操作子菜单。在子菜单中点击要统计的分数段信息。可以统计的分数段有及格率,60-69,70-79,80-89,90-100。图4.4是及格率的统计信息。 图4.4分数段统计界面 4.3.3 用户管理测试 点击管理员菜单中“用户管理”按钮,进入用户管理界面,系统选将用户信息读取到该页面上,用户点击操作按钮可以对其进行操作。如图4.23所示。 图4.23 用户管理界面 点击添加图标,可以进入到添加页面,管理员可以添加用户信息。现添加一个用户名为“student”的用户信息,添加后如图4.24所示。 图4.24 添加用户信息 点击用户信息右边的删除图标,可以删除该用户信息。点击用户信息右边的编辑图标,可以进入编辑页面对该信息进行编辑,现将刚添加的用户的名字改为“测试者”,修改后如图4.25所示。 图4.25 修改用户信息 35 图4.26 学生批量导入 4.4 系统压力测试 由图4.7和图4.8压力测试图可知,最大并发用户数为80人左右,瞬间可达到250人。 图4.7 学生并发运行数 36 图4.8 每秒点击次数 4.5用户体验 用户在浏览器上操作该系统,从感官体验、用户交互体验方面相对人性化,但面对不同的操作群体,有些群体使用专业的方法操作该系统不方便,需求中没有充分考虑到用户的使用习惯导致。 37 结论 本系统目前版本3.x,是严格按照软件开发流程采用B/S模式结构设计的,运用JSP技术和servlet技术相结合,通过JDBC连接操作数据库,学生考试时系统随机地为登陆的考生抽取试题组成考卷。实现了在线考试、成绩查询、考题管理等功能。学生提交考卷后,系统会自动批改客观题,并将试卷提供给教师查看使教师能对试卷主观题进行批改。待教师修改完试卷后,系统会自动生成考生成绩和分数段统计信息。教师可通过查看分数段统计更直观地了解学生的考试情况,后台管理员通过逐条添加记录或整体导入试题完善题库数量,在试题管理中可以设置试卷数目、分值、类型等信息以生成随机标准,用户管理可对所有用户信息进行CRUD操作。此外所有的系统使用者都能修改自己的密码。 该系统运用HTML,CSS,javascript,ajax等前端知识和jsp、servlet、javabean等web后台程序设计知识以及sqlserver数据库,让我们更加直观、更全面地认识了系统设计,更加熟悉对数据库的操作,对面向对象程序设计思想有了更加深刻的体会。通过系统的需求分析到总体设计到详细设计再到系统测试,加深了规范的软件设计流程步骤。 由于时间仓促技术有限,系统存在很多不足之处,如GUI不够美观,业务较简单,安全验证、数据库表设计略显单薄等问题。系统功能在在线考试模块只涉及了随机出题的业务没考虑到对固定出题的需求;随机规则上没有加入对生成试题难易度的限制;系统的操作友好性不够完善;软件代码的美观性和健壮性也存在很多不足;因为系统满足的需求面较狭窄,没有真正做到适应多数学科和领域,但该系统具有良好的可扩展性和可维护性,这些设计的不足之处将在后续的使用中根据需求在新版本中进行相应的bug修复和功能业务的完善。 38 参考文献 [1] 郝玉龙. JavaEE编程技术[M]. 北京:清华大学出版社, 2008年:32-42. [2] 王珊. 数据库系统概论[M]. 北京:高等教育出版社, 2006年:56-101. [3] 陈琦, 刘儒德. 信息技术教育应用[M]. 北京:人民邮电出版社, 1997年:27-53. [4] 向学哲. JSP程序设计教程[M]. 北京:人民邮电出版社, 2007年:60-84. [5] 严蔚敏, 吴伟民. 数据结构[M]. 北京:清华大学出版社, 2003年:40-60. [6] 方盈. SQL server 2000从入门到精通[M]. 北京:中国铁道出版社, 1999年:33-60. [7] JBambara J. J2EE技术内幕[M]. 北京:机械工业出版社, 2007年:51-66. [8] Eckel B. Thinking In Java[M]. 英文第四版. 北京:机械工业出版社, 2007年:33-53. [9] 陈轶, 姚明昆. Java程序设计实验指导[M]. 北京:清华大学出版社, 2006年:51-66. [10] 杨昭. 二级Java语言程序设计教程[M]. 北京:中国水利水电出版社, 2006年:27-40. [11] 赵文靖. Java程序设计基础与上级指导[M]. 北京:清华大学出版社, 2006年:21-66. [12] 赵毅. 跨平台程序设计语言--Java[M]. 西安:西安电子科技大学出版社, 2006年:20-38. [13] 王路详. Java高级程序设计[M]. 北京:中国水利水电出版社, 2006年:30-55. [14] 雍俊海. Java程序设计题集[M]. 北京:清华大学出版社, 2006年:30-58. [15] 朱福喜. Java语言习题与解析[M]. 北京:清华大学出版社, 2006年:51-90. [16] 吴其庆. Java程序设计实例教程[M]. 北京:冶金工业出版社, 2006年:18-79. 39 致谢 历时一段时间终于将这篇论文写完,虽然在论文写作过程中遇到了很多的困难,但都在同学和老师的帮助下克服。尤其是要由衷的感谢我的论文指导老师---文静老师,她对我进行了无私的指导和帮助,不厌其烦的帮我进行论文的修改和改进。 另外,在查找资料的时候,院里的其他老师也给我提供了很多方面的支持与帮助,在此向帮助和指导过我的各位老师表示最衷心的感谢和最崇高的敬意。 感谢这篇论文所涉及到的各位学者。本文引用了数位学者的研究文献,如果没有各位学者的研究成果的帮助和启发,我将很难完成本篇论文的写作。 感谢毕业论文小组的武亚玲同学、邢伟刚同学以及我的朋友,在我写论文的过程中给予我了很多素材,还在论文的撰写和排版过程中提供热情的帮助。 感谢我的父母,是他们的不懈支持给了我前进的动力。 40 因篇幅问题不能全部显示,请点此查看更多更全内容