基于JSP和SMART的考试监控及阅卷模块系统

基于JSP和SMART的考试监控及阅卷模块系统 摘 要 Smart在线考试评估系统(简称“SMART系统”),是基于Browser/Server(简称B/S)结构的数据库访问模式

本文包含相关资料包-----> 点击直达获取<-------

基于JSP和SMART的考试监控及阅卷模块系统

摘 要

Smart在线考试评估系统(简称“SMART系统”),是基于Browser/Server(简称B/S)结构的数据库访问模式,采用Struts + Spring + Hibernate作为平台搭建的框架开发的一套新型智能的远程教育软件。主要用于各中小学的学生考试和教学评估。本论文设计作为Smart项目的一个组成部分,主要实现了考试过程监控和客观题的自动阅卷功能。论文首先介绍了设计中所涉及到的项目背景、开发技术,并构建了系统的总体框架;其次根据中小学的实际情况和远程教育软件项目的需求,详细地进行了数据库设计和系统功能模块设计,制定了各功能模块的流程图;然后采用JAVA编程语言对本论文的设计任务进行编码,并最终实现了对考试过程的监控和对客观题的自动阅卷等功能。通过本模块的应用,可以满足SMART系统的在线考试部分需求,对SMART系统的应用和发展起到一定的促进作用。

关键词:Hibernate;在线考试;考试监控;阅卷

Abstract

Smart online examination and evaluation system, as SMART System for short; is a kind of the intelligent long-distance education software which is developed by the framework of the Struts + Spring + Hibernate. This system will be used mainly in the middle and primary schools for examination and evaluation. As the part of the system, it has mainly realized some functions, controlling the course of examination and looking over the papers automatically. First, the thesis introduces the background of the project and the technology that involved in the project, and the construction of the developing platform by according to the actual conditions of the elementary school and middle school. Second, according to the actual conditions of the middle schools and primary schools and the demand of the long-distance education software project, the thesis describes the designation of the database and the module of systematic function in details, and then makes the flow diagram of every function module; and then based upon JAVA language to program. At last the system provides the function of the examination controls and the automatic objective questions inspection. By this module applying, it may satisfy the Smart system demand, and promote the Smart system development.

Key words: Hibernate; online examination; examination controls; paper inspection

1 引言

1.1 课题背景

随着计算机软硬件和互联网的发展,将传统的教育产业信息化成为可能。但是目前学校与社会上的各种考试大都采用传统的考试方式,在此方式下,组织一次考试至少要经过五个步骤,即人工出题、考生考试、人工阅卷、成绩评估和试卷分析。显然,随着考试类型的不断增加及考试要求的不断提高,教师的工作量将会越来越大,并且其工作将是一件十分烦琐和非常容易出错的事情,可以说传统的考试方式已经不能适应现代考试的需要。所以拥有一套实用、完善、高效的在线考试评估系统越来越显的重要。这样能更好的方便学校对教学质量的管理,降低成本,提高效率。

1.2 课题目的

根据目前中小学的具体情况,设计一套符合他们的高效智能的在线考试评估系统(SMART在线考试系统),并为学校、主管部门教学评估、教学质量控制提供决策依据。本课题主要实现该系统的部分功能——考试监控及对客观题的自动阅卷,从而减轻了老师的工作量。把更多的精力放入到对学生的教育中。

1.3 课题意义

SMART在线考试评估系统(简称“SMART系统”)目的是为中小学提供一个公正客观的在线考试、在线评估的智能化平台。考试监控及对客观题的自动阅卷的设计,主要是能够让老师平时繁琐的阅卷以及对整个考试过程的管理中解脱出来,把更多的精力投入到对学生的教育中来;从而大大提高工作效率。与此同时也提高了考试的质量,从而使考试更趋于公正、客观,更加激发学生的学习兴趣。

2 系统总体设计

2.1 系统构架及其相关技术介绍

2.1.1 系统构架

本系统是基于Browser/Server(简称B/S)结构的数据库访问模式,在struts + spring管理的hibernate作为平台框架搭建具体的Smart在线考试评估系统。

采用struts MVC框架主要用于将Smart的数据流和业务流分开,采用hibernate,主要用于更高效率对数据库存取效率及提高项目开发效率。采用spring管理的hibernate主要是获得Spring对Hibernate的支持,获得更高的开发效率和更高的Hibernate操作性能。并能获得Spring相关的事务支持。之所以不完全用Spring框架是考虑项目组的技术水平可能不足以完全驾驭这样的框架规范。所以本系统不属于标准的Struts + Spring + Hibernate的标准J2EE应用。

对于Hibernate的数据库IO操作,将采用DAO模式将操作封装至DAO对象中。而将建立专门的业务层,对WEB层及其他子模块或类进行接口。

2.1.2 相关技术介绍

三层B/S结构介绍

B/S结构是真正的三层结构,它以访问WEB数据库为中心,HTTP为传输协议,客户端通过浏览器(Browser)访问WEB服务器和与其相连的后台数据库,我们称之为B/S(Browser/Server)模式。其三级结构组成如图所示:

图中从左到右,分为三个层次:

  • 第一层是客户端即浏览器,主要完成客户和后台的交互及最终查询结果的输出功能。在客户端向指定的Web服务器提出服务器请求,Web服务器用HTTP协议把所需文件资料传给用户,客户端接受并显示在WWW浏览器上

  • 第二层Web服务器是功能层,完成客户的应用功能,即Web服务器接受客户请求,并与后台数据库连接,进行申请处理,然后将处理结果返回Web服务器,再传至客户端

  • 第三层数据库服务器是数据层。数据库服务器应客户请求独立地进行各种处理

与传统的C/S模式相比,B/S结构把处理功能全部移植到了服务器端,用户的请求通过浏览器发出,无论是使用和数据库维护上都比传统模式更加经济方便。而且使维护任务层次化:管理员负责服务器硬件日常管理和维护,系统维护人员负责后台数据库数据更新维护。

由以上的分析可知,三层结构也可以理解为增加WEB服务器的C/S模式。

Struts

Struts is是Apache Jakarta项目的一部分,它用Java Servlet/JavaServer Pages技术,开发Web应用程序的开放源码的framework。

Struts有如下的主要功能:

  • 包含一个controller servlet,能将用户的请求发送到相应的Action对象

  • JSP自由tag库,并且在controller servlet中提供关联支持,帮助开发人员创建交互式表单应用

  • 提供了一系列实用对象:XML处理、通过Java reflection APIs自动处理JavaBeans属性、国际化的提示和消息

Struts项目的目标是为创建Java web应用提供一个开放源代码的framework。Struts framework的内核是基于例如Java Servlets, JavaBeans, ResourceBundles, 和 XML,以及各种 Jakarta Commons包的标准技术的灵活的控制层。

Struts提供了它自身的控制器组件,并整合了其他技术,以提供模型和视图。对于模型,同大多数的第三方软件包一样,如Hibernate, iBATIS, 或者 Object Relational Bridge,Struts能够和标准数据连接技术相结合,如JDBC和EJB。对于视图,Struts与Java Server Pages协同工作,包含JSTL和JSF。

Spring

Spring 框架是一个分层架构,由7个定义良好的模块组成。Spring 模块构建在核心容器之上,核心容器定义了创建、配置和管理 bean 的方式,如图所示:

组成 Spring 框架的每个模块(或组件)都可以单独存在,或者与其他一个或多个模块联合实现。每个模块的功能如下:

  • 核心容器 :核心容器提供 Spring 框架的基本功能。核心容器的主要组件是 BeanFactory,它是工厂模式的实现。BeanFactory 使用控制反转(IOC)模式将应用程序的配置和依赖性规范与实际的应用程序代码分开

  • Spring上下文 :Spring 上下文是一个配置文件,向 Spring 框架提供上下文信息。Spring 上下文包括企业服务,例如 JNDI、EJB、电子邮件、国际化、校验和调度功能

  • Spring AOP :通过配置管理特性,Spring AOP 模块直接将面向方面的编程功能集成到了 Spring 框架中。所以,可以很容易地使 Spring 框架管理的任何对象支持 AOP。Spring AOP 模块为基于 Spring 的应用程序中的对象提供了事务管理服务。通过使用 Spring AOP,不用依赖 EJB 组件,就可以将声明性事务管理集成到应用程序中

  • Spring DAO :JDBC DAO 抽象层提供了有意义的异常层次结构,可用该结构来管理异常处理和不同数据库供应商抛出的错误消息。异常层次结构简化了错误处理,并且极大地降低了需要编写的异常代码数量(例如打开和关闭连接)。Spring DAO 的面向 JDBC 的异常遵从通用的 DAO 异常层次结构

  • Spring ORM :Spring 框架插入了若干个 ORM 框架,从而提供了 ORM 的对象关系工具,其中包括 JDO、Hibernate 和iBatis SQL Map。所有这些都遵从 Spring 的通用事务和 DAO 异常层次结构

  • Spring Web模块 :Web 上下文模块建立在应用程序上下文模块之上,为基于 Web 的应用程序提供了上下文。所以,Spring 框架支持与 Jakarta Struts 的集成。Web 模块还简化了处理多部分请求以及将请求参数绑定到 域对象的工作。

  • Spring MVC框架 :MVC 框架是一个全功能的构建 Web 应用程序的 MVC 实现。通过策略接口,MVC 框架变成为高度可配置的,MVC 容纳了大量视图技术,其中包括 JSP、Velocity、Tiles、iText和 POI

Hibernate

Hibernate是一个开放源代码的对象关系映射框架,它对JDBC进行了非常轻量级的对象封装,使得Java程序员可以随心所欲的使用对象编程思维来操纵数据库。 Hibernate可以应用在任何使用JDBC的场合,既可以在Java的客户端程序实用,也可以在Servlet/JSP的Web应用中使用,最具革命意义的是,Hibernate可以在应用EJB的J2EE架构中取代CMP,完成数据持久化的重任。

2.2 开发环境及相关技术介绍

2.2.1 开发环境

本设计主要运用JSP语言、Hibernate、Struts等知识,在Window Xp 的环境下,采用SQL Server2000数据库,用Eclipse3.2 + MyEclipse5.0+ Tomcat5.5 + j2sdk1.5 搭建J2EE开发环境进行开发。

2.2.2 相关技术介绍

JSP介绍

JSP(Java ServerPages)是由Sun Microsystems公司倡导、许多公司参与一起建立的一种动态网页技术标准。在传统的网页HTML文件(*.htm,*.html)中加入Java程序片段(Scriptlet)和JSP标记(tag),就构成了JSP网页(*.jsp)。Web服务器在遇到访问JSP网页的请求时,首先执行其中的程序片段,然后将执行结果以HTML格式返回给客户。程序片段可以操作数据库、重新定向网页以及发送 email 等等,这就是建立动态网站所需要的功能。所有程序操作都在服务器端执行,网络上传送给客户端的仅是得到的结果,对客户浏览器的要求最低,可以实现无Plugin,无ActiveX,无JavaApplet,甚至无Frame。

SQL Server 2000介绍

SQL Server 2000是建立在 SQL Server 7.0 在可伸缩性、可用性、可管理性和数据仓库成功的基础上,并且引入了针对电子商务的重要新功能。

在高性能和企业级可伸缩性领域,SQL Server 2000设计成利用 Windows 2000 对更多处理器、更大的系统内存的支持,最终达到支持 64 位硬件平台。在不断提升可用性的努力过程中,SQL Server 2000 采用 Windows 2000 四路群集,提供了大大改进的群集支持。SQL Server 7.0 已经在可管理性和易用性方面在行业内领先,SQLServer 2000 通过与Windows 2000 活动目录紧密结合进一步改进了这些功能。而且,SQL Server 2000 还包含对现有管理工具和实用程序的重大改进,并引入更具自我调节和自我管理的引擎功能。

通过与 OLAP 服务、数据转换服务、存储库和英文查询的紧密结合,SQLServer 7.0 代表了行业内最全面的数据仓库和决策支持平台。SQL Server 2000 继续了这种创新,在整个系统内进行了重要的改进。特别重要的是,SQL Server 2000 关系引擎增加了实质化的视图,改善了在特大型数据库环境中执行复杂查询的性能。同时,SQL Server 2000 引入了新的数据挖掘功能,可自动发现在大量数据之间隐藏的关系并可基于历史数据做出预测。这些数据挖掘功能将要实施,以向最终用户隐藏这种尖端技术的复杂性,并允许开发人员将第三方的数据挖掘产品轻松集成进客户的应用程序中。最后,在电子商务领域,SQL Server 2000 高度集成了对XML 和通过 Web 访问数据库的支持。

SQL Server 2000 按照设计可以为部署和维护强大的、易于管理、支持商务活动的Web 站点提供最好的性能,这些站点可以从事商家和商家之间或商家与客户之间的交易。在寻求一个支持您的电子商务解决方案的数据库时,需要考虑的项目包括:可用性、性能、可管理性和价格。

Eclipse介绍

Eclipse 是一个开放源代码的、基于 Java 的可扩展开发平台。就其本身而言,它只是一个框架和一组服务,用于通过插件组件构建开发环境。幸运的是,Eclipse 附带了一个标准的插件集,包括 Java 开发工具(Java Development Tools,JDT)。

虽然大多数用户很乐于将 Eclipse 当作Java IDE 来使用,但 Eclipse 的目标不仅限于此。Eclipse 还包括插件开发环境(Plug-in DevelopmentEnvironment,PDE),这个组件主要针对希望扩展Eclipse 的软件开发人员,因为它允许他们构建与 Eclipse 环境无缝集成的工具。由于 Eclipse 中的每样东西都是插件,对于给 Eclipse 提供插件,以及给用户提供一致和统一的集成开发环境而言,所有工具开发人员都具有同等的发挥场所。

这种平等和一致性并不仅限于 Java 开发工具。尽管 Eclipse 是使用 Java 语言开发的,但它的用途并不限于 Java 语言;例如,支持诸如 C/C++、COBOL 和 Eiffel 等编程语言的插件已经可用,或预计会推出。Eclipse 框架还可用来 作为与软件开发无关的其他应用程序类型的基础,比如内容管理系统。

基于 Eclipse 的应用程序的突出例子是IBM 的 WebSphere Studio Workbench,它构成了 IBM Java 开发工具系列的基础。例如,WebSphere StudioApplication Developer 添加了对 JSP、servlet、EJB、XML、Web 服务和数据库访问的支持。

MyEclipse介绍

MyEclipse企业级工作平台(MyEclipse Enterprise Workbench ,简称MyEclipse)是对Eclipse 3.0 IDE的扩展,利用它我们可以在数据库和J2EE的开发、发布,以及应用程序服务器的整合方面极大的提高工作效率。

Tomcat介绍

Tomcat是一个免费的开源的Serlvet容器,它是Apache基金会的Jakarta项目中的一个核心项目,由Apache,Sun和其它一些公司及个人共同开发而成。由于有了Sun的参与和支持,最新的Servlet和Jsp规范总能在Tomcat中得到体现。

j2sdk介绍

J2SDK=JDK+JRE,J2SDK(Java 2 SoftwareDevelopment Kit) →JAVA2软件开发工具包,包括了Java编译器和Java虚拟器。

3 系统需求分析

需求分析是一切工作的基础,他告诉我们将要做什么。只有当了解了所需要做的任务后,才能对整个系统进行设计。

本课题主要实现SMART在线考试系统的部分功能--考试过程的监控及对客观题的自动阅卷。

3.1 考试监控模块需求分析

考试监控模块的设计,主要是实现对学生参加考试的整个过程的设计及老师对学生考试的监视与控制,包括查看学生信息,改变学生考试状态等。

学生要参加考试,必须根据学生的相关信息(如班级,学号,姓名等)以及当前的服务器时间,来查找该生有权限参加的考试信息并显示在页面上。学生通过点击相应的考试,进入到该门考试的答题界面。为了确保考试的有效性和安全性,系统必须设定一下规则:

  • 只有学生才能参加考试

  • 学生在考试过程中,不能同时进行其他课程的考试

  • 对学生来说,每一门考试只允许考一次;如果已经交卷,系统将会禁止其重新进行考试。如果需要进行补考或者重考,教师可以另外设置一份考卷,让学生进行考试

为防止相邻学生之间可能会出现作弊的情况,要求在学生答题界面生成的题目要随机排序。并且答题页面要禁止实用复制和右键功能。考虑到学生答题过程中有可能会出现断线、死机、电脑故障等问题或者是要返回已经做过的题目,要实现对学生做了的题目答案进行实时保存。当学生要查看已经做过的题目时,要把题目的答案回调在页面上。

监控端主要涉及到对学生考试过程的管理。学生登陆系统时,要判断其是迟到还是由于考试过程中异常情况而重登陆。如果是迟到,则该生的考试时间不推迟,如果是由于考试过程中发生异常情况而造成的重登陆,则需要将学生在重登陆系统所浪费的这个时间补偿给学生。

学生登陆系统时,都要将信息提交到监控端。监考老师可以通过监控页面直观地看出学生的状态,并且可以改变其中的一个或多个学生的考试状态(如重新考试,结束考试等),改变状态后,学生考试界面要出现相应的提示信息。

3.2 阅卷模块需求分析

传统的手工改卷,工作量既繁重又低效,出错的几率比较高。为了使学生的考试更加趋向于公平公正,本模块主要实现对客观题的自动阅卷(如判断题、多选题、单选题等),来代替传统的老师手工该卷。在学生主动提交考卷、老师强制提交或者是考试结束时间到了自动提交后,要对学生当前的考试进行系统自动阅卷,并统计出学生的各项大题分数和总分,为后面的评估做好基础。

学生考试结束后,如果试卷的组成都是客观题,则学生可以马上查看自己的得分。

4 系统数据库设计

数据库设计也是一个很重要的环节。设计一个合理的数据库,能够让程序员在写代码的时候有很强的逻辑性,而不再为了理清数据库表间的关系浪费大量的时间和精力。在以后的系统运行中,数据库也担当着重要的角色,不合理的数据库往往是成为一个系统的瓶颈。

4.1 考试监控模块数据库设计

此模块主要涉及到的数据库表有如下几张:

学生用户表

字段名称 数据类型 是否是主键 是否是外键 是否可NULL 备注
Student_id DECIMAIL(18,0) YES NO NO 自增ID
Student_no VARCHAR(50) NO NO NO 学生NO
Uin VARCHAR(20) NO NO NO UIN
student_name VARCHAR(50) NO NO NO 学生姓名
Province_no VARCHAR(50) NO NO YES
city_no VARCHAR(50) NO NO YES
county_no VARCHAR(50) NO NO YES 区/县
ref_school_no VARCHAR(50) NO NO YES 学校
ref_grade_no VARCHAR(50) NO NO YES 年级
ref_class_no VARCHAR(50) NO NO YES 班级
Register_id BIGINT NO NO YES 注册时的用户ID
Tel VARCHAR(20) NO NO YES 联系电话
e_mail VARCHAR(50) NO NO YES E_Mail地址
address VARCHAR(100) NO NO YES 地址信息
register_date DATETIME NO NO YES 注册时间
record_number INTEGER NO NO NO 版本控制
remark VARCHAR(100) NO NO YES 备注

班级表

字段名称 数据类型 是否是主键 是否是外键 是否可NULL 备注
class_id UNIQUEIDENTIFIER YES NO NO 全球唯一码
Class_name VARCHAR(50) NO NO NO 班级名字
class_no VARCHAR(50) NO NO NO 班级编号
class_no VARCHAR(2500) NO NO YES 班级描述
length INTEGER NO NO YES 编号长度
lastclass_no VARCHAR(50) NO NO YES 上一级别编号
ruleclass_name VARCHAR(50) NO NO YES 设置的名称
lastname VARCHAR(50) NO NO YES 上级别名称
nextname VARCHAR(50) NO NO YES 下级别名称
record_number INTEGER NO NO NO 版本控制
Remark VARCHAR(100) NO NO YES 备注

考试监控表

字段名称 数据类型 是否是主键 是否是外键 是否可NULL 备注
control_id UNIQUEIDENTIFIER YES NO NO 全球唯一码
exam_name VARCHAR(1000) NO NO NO 考试名称
student_no VARCHAR(50) NO NO NO 学生NO
student_name VARCHAR(20) NO NO NO 学生姓名
class_no VARCHAR(50) NO NO NO 学生所在班级号
Ip VARCHAR(50) NO NO YES 登陆IP
student_state VARCHAR(20) NO NO NO 学生状态
now_time DARETIME NO NO NO 写入时间
start_time DARETIME NO NO NO 考试开始时间
end_time DARETIME NO NO NO 考试结束时间
exam_delay DARETIME NO NO NO 考试时长
landing_time DARETIME NO NO NO 登陆考试时间
submit_time DARETIME NO NO NO 提交考试时间
exam_tate VARCHAR(50) NO NO NO 考试状态
record_number INTEGER NO NO NO 版本控制
Remark VARCHAR(100) NO NO YES 备注

4.2 阅卷模块数据库设计

此模块主要涉及到的数据库表有:

考试临时表

字段名称 数据类型 是否是主键 是否是外键 是否可NULL 备注
Exam_temp_id UNIQUEIDENTIFIER YES NO NO 全球唯一码
exam_paper_no UNIQUEIDENTIFIER NO NO NO 试卷号
exam_paper_question_no VARCHAR(50) NO NO NO 试题号
exam_name VARCHAR(50) NO NO NO 考试名称
student_no VARCHAR(50) NO NO NO 学生NO
student_name VARCHAR(20) NO NO NO 学生姓名
Answer VARCHAR(50) NO NO YES 试题答案
record_number INTEGER NO NO NO 版本控制
Remark VARCHAR(100) NO NO YES 备注

考试结果表

字段名称 数据类型 是否是主键 是否是外键 是否可NULL 备注
smart_exam_result_id UNIQUEIDENTIFIER YES NO NO 全球唯一码
exam_paper_no UNIQUEIDENTIFIER NO YES NO 试卷号
exam_paper_question_no UNIQUEIDENTIFIER NO YES NO 试题号
exam_name VARCHAR(50) NO NO NO 考试名称
student_no UNIQUEIDENTIFIER NO YES NO 学生NO
student_name VARCHAR(20) NO NO NO 学生姓名
Answer VARCHAR(50) NO NO YES 试题答案
Is_right INTEGER NO NO YES 是否正确
Score FLOAT NO NO YES 试题得分
record_number INTEGER NO NO NO 版本控制
Remark VARCHAR(100) NO NO YES 备注

考试结果统计表

字段名称 数据类型 是否是主键 是否是外键 是否可NULL 备注
smart_exam_stat_result_id UNIQUEIDENTIFIER YES NO NO 全球唯一码
exam_paper_no UNIQUEIDENTIFIER NO YES NO 试卷号
exam_name VARCHAR(50) NO NO NO 考试名称
student_no UNIQUEIDENTIFIER NO YES NO 学生NO
student_name VARCHAR(20) NO NO NO 学生姓名
Single_choice_score FLOAT NO No YES 单选题得分
multi_choice_score FLOAT NO NO YES 多选题得分
judgement_score FLOAT NO NO YES 判断题得分
score_total FLOAT NO NO YES 总分
record_number INTEGER NO NO NO 版本控制
Remark VARCHAR(100) NO NO YES 备注

5 系统功能设计及实现

5.1 考试监控模块设计及实现

考试监控模块的设计,是指对整个考试过程及考试过程中发生的一些事件进行监视和控制。总体流程如下:

学生在点击参加考试后,通过对学生所在的班级NO的判断,查找出所有该班有权限参加的考试,再通过发卷时间与服务器当前时间的比对,在页面上显示出符合该生的考试信息。

学生考试信息图

主要实现代码

通过用户登陆时写入Session的用户类型,判断是否是学生用户。如果是,则通过用户ID查找到该用户对应的班级NO,再通过班级NO查找对应的符合该班级的考试信息。

javascript //得到用户登陆是存在Session中的用户类型及用户ID Authorization user = (Authorization)request.getSession().getAttribute(Constants.USER_KEY); //用户ID Long userId = user.getLoginInfo().getUserId(); //用户类型 String userType = user.getLoginInfo().getType(); Map params = new HashMap(); SmartStudent entity = null; //判断该用户如果是学生类型,则将userID传到后台,通过SmartStudent试题得到相关学生信息 if(userType.equals(UserType.STUDENT)) { params.put("stuId", userId); entity = (SmartStudent) this.call(new Carrier(params, BusinessConstants.PCM_USER_BUSINESS, "LoadStudent")); } //得到学生所在班级NO String classNo = entity.getClassNo(); params = new HashMap(); //通过班级NO查找符合该班的考试信息 params.put("classNo", classNo); List result = (List) this.call(new Carrier(params, BusinessConstants.EXAM_OPTION_BUSINESS, "SearchExam"));

比对服务器时间与考试发卷时间及考试结束时间,如果服务器时间早于发卷时间或者迟于考试结束时间,则不显示该门的考试信息。

javascript //调用DatetimeGap(String headDatetime, String tailDatetime)函数,返回两个日期时//间字符串之间的差,日期尾减日期头,以秒为单位。 如果值为负数,说明日*期头大于日//期尾,返回的格式为“long”。 SmartExam smartExam = (SmartExam)result.get(i); //得到考试发卷时间 String sendTime = smartExam.getSendTime().toString(); //得到考试结束时间 String endTime = smartExam.getEndTime().toString(); //格式化时间 DateFormat time = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss"); //获取服务器当前时间 String nowTime = time.format(new Date()); headDatetime - 日期头 格式为1999-10-10 12:12:12 tailDatetime - 日期尾 格式为1999-10-10 12:12:12 //将当前时间与考试发卷时间比较 long send = DateUtil.getDatetimeGap(sendTime.toString(),nowTime.toString()); //将当前时间与考试结束时间比较 long end = DateUtil.getDatetimeGap(endTime.toString(),nowTime.toString()) ; if(send < 0 || end > 0) {} else { //如果当前时间在发卷时间和考试结束时间内,则将smartExam内的元素写入到resultList resultList.add(smartExam); }} //写入session request.getSession().setAttribute("resultList", resultList);

学生通过点击对应的考试进入考试界面(此时将学生的信息,如姓名、学号、登陆时间、登陆IP等写入监控表),进行答题。

学生考试答题图

学生考试过程中要定时的获取服务器时间(比如10秒),再将该时间写入监控表,服务器端也要每隔一段时间去读取监控表内的该时间,如果该时间很久没有刷新,则说明此时考试端可能出现了异常情况(如掉线、死机等)。这样就方便管理员去管理学生考试。流程图如下:

用户考试端获取服务器时间并写监控表流程图

用户监控端读取监控表流程图

监控端监考老师可以选择一个或多个班级进行监控。通过选择班级后,将这些班级的所有参加当前考试的学生信息罗列出来,监考老师可以对学生进行相应的操作。

具体实现

监考老师可以直接选择要监控的班级,或者也可以通过年级查询先过滤一些年级再进行操作。点击确定后跳到对应班级的所有学生的监控页面。

用户监控端班级列表图

监考老师可以实时获得各个学生的考试状态。也可以对某个或多个学生进行对应的考试操作,如让他们重新考试或者是结束考试等。

用户监控端监控页面图

用户监控端改变考试状态流程图

用户考试端获取考试状态流程图

具体实现方法

javascript //创建XMLHttpRequest类 var xmlHttp; function createXMLHttpRequestObject(){ if(window.ActiveXObject) xmlHttp=new ActiveXObject("Microsoft.XMLHTTP"); else if(window.XMLHttpRequest) xmlHttp=new XMLHttpRequest(); } //向服务器发送请求 function startRequest(url,functionName){ //url为要执行的在action中的更新方法 var url = "<%=request.getContextPath()%>/examPageAction.do?action=update"; createXMLHttpRequestObject(); //发送请求后的回调函数 // getExamState为我要调用的javascript函数名(主要实现对各种状态的处理) xmlHttp.onreadystatechange=getExamState; xmlHttp.open("GET",url,true); //发送请求并异步执行 xmlHttp.send(null); } //实现的javascript代码 function getExamState() { if (xmlHttp.readyState == 4 && xmlHttp.status == 200) { //取得考试状态 var examState = xmlHttp.responseXML.getElementsByTagName("examState"); var state = examState[0].firstChild.nodeValue; //对不同的状态进行不同的操作 if(state == 'kaoshizhong') {…} if(state == 'kaoshihou') {…} if(state == 'kaoshiqian') {…} } } //定时调用该函数,时间单位为毫秒 window.setInterval("startRequest()", 10000);

如老师禁止学生考试,则在学生考试端显示相关的信息。学生确认消息后则自动退出当前考试。

用户考试端 状态被改变后的答题页面

5.2 阅卷模块设计及实现

在学生主动提交考卷、老师强制提交或者是考试时间到了自动提交后,对存在考试临时表内的学生试题信息进行判断,并将结果存入到考试结果表中。最后将分数进行统计存到考试结果统计表中。

其中涉及到的表主要有3张:考试临时表,考试结果表和考试结果统计表。

阅卷相关表与其他表间的关系图

自动阅卷流程图

具体实现

```javascript

<class name="com.smart.entity.examManage.SmartExamTemp"
        table="temp_smart_exam" schema="dbo" catalog="SMARTDB">
<!-- 实体属性 -->
<id name="examTempId" type="string">
<!-- 数据库字段 -->
    <column name="exam_temp_id" length="16" />
    <generator class="u34_fe1e_1e4a9e9 guid" />
</id>
<property name="questionNo" type="string">

......

//构造实体类 public class SmartExamTemp extends PersistenceObject implements Audit, java.io.Serializable {…} //接口 public class SmartExamTempImpl extends AbstractDAO implements SmartExamTempDAO { public List search(String no) {…} … } //在Business中调用 public class SmartExamTempBusiness extends BaseBusiness { public Object process search(Carrier vo) {…} … } //在action中调用 public class ExamControlAction extends BaseAction { public ActionForward save(ActionMapping mapping, ActionForm form, HttpServletRequest request, HttpServletResponse response) throws Exception { ... this.call(new Carrier(map2, BusinessConstants.PAPER_CHECK_BUSINESS, "SavePaperResult")); ... } ... } ```

6 系统测试

依据上述分析和设计资料,经过多次测试,已完成系统所需的功能。系统截图参考上面系统功能设计部分。

单元测试 :在开发系统的过程中,对所有代码的正确性和逻辑行得到一定的检验,暂时看来不存在大的错误。单元测试就是指为了确保我们的软件在运行过程中的正确无误。

单元测试任务包括 : 模块接口测试、数据库连接测试等。

本系统的单元测试中,使用了Eclipse作为测试工具。在测试过程中,我们要对每一个类实现的方法编写一个相应的测试方法。例如下面一个简单方法的用例。

javascript public class ExamOptionImpl extends AbstractDAO implements ExamOptionDAO { //通过班级no查找对应的考试 public Object loadExam(String no) { return this.load(SmartExam.class, no); } public static void main(String[] args){ ExamOptionImpl dao=new ExamOptionImpl(); String no="18e0f279-050c-4eb3-9d57-5c4385cd0365"; //强制转换成List类型 List list1= (List)dao.loadExam(no); Iterator it =list1.iterator(); while(it.hasNext()){ SmartExam se=(SmartExam) it.next(); String name = se.getExamName(); Date startTime = se.getStartTime(); Date endTime = se.getEndTime(); String examDelay = se.getExamDelay(); long s = DateUtil.getDatetimeGap("2007-05-12 09:20:00.1233",startTime.toString()) ; //打印结果,看测试是否成功 System.out.println(name); System.out.println(startTime); System.out.println(endTime); System.out.println(examDelay); System.out.println(s+"分钟"); System.out.println(new Date()); DateFormat date = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss"); System.out.println("the date is format =>" + date.format(new Date())); } }

功能测试 :它是在已知系统所应具有的功能,通过测试来检测每个功能的情况。本系统功能全部实现,并能正常使用。

性能测试 :测试软件的运行性能。这种测试常常与强度测试结合进行,需要事先对被测软件提出性能指标。从测试的结果看,多个用户同时访问时,性能存在有一个饱和点,一旦超过这个负荷,就使性能表现出下降趋势。而且系统的性能还跟计算机硬件性能也有很大的关系。硬件也好,该软件的性能也越好。

参考文献

  • 在线测评系统的设计与实现(内蒙古大学·焦燕)
  • 基于.NET的网络考试系统的设计与实现(天津大学·钱灵)
  • 基于JSP的招生考务管理系统的设计与实现(长安大学·石方夏)
  • 基于J2EE的网络考试系统研究与实现(厦门大学·张秋娜)
  • 基于J2EE的学生网上考试系统的设计与实现(华南理工大学·李占新)
  • 驾照考试系统设计与实现(黑龙江大学·魏孝全)
  • 大规模在线考试考务综合管理系统的设计与实现(哈尔滨工业大学·张春雨)
  • 基于J2EE的远程网络教育系统研究与实现(电子科技大学·陈南荪)
  • 中国石油哈尔滨石化公司在线考试系统的开发与设计(吉林大学·徐景洪)
  • 网络考试系统的设计与实现(山东大学·李凡)
  • 网上在线考试子系统(电子科技大学·荣莉)
  • 基于JSP/XML考试系统的设计与实现(华侨大学·朱达欣)
  • 山西传媒学院在线考试系统的设计和实现(吉林大学·王蕾)
  • 在线考试系统的设计与实现(吉林大学·朱雅迪)
  • 基于JSP技术的网络考试系统研究及实现(电子科技大学·冷小鹏)

本文内容包括但不限于文字、数据、图表及超链接等)均来源于该信息及资料的相关主题。发布者:源码项目助手 ,原文地址:https://m.bishedaima.com/yuanma/35383.html

相关推荐

发表回复

登录后才能评论