欢迎添加微信互相交流学习哦!

项目源码:https://gitee.com/oklongmm/biye2

在线考试系统的设计与开发

目录
TOC 1-3 第一章 绪论 1
1.1在线考试系统的研究背景 1
1.1.1在线考试系统研发背景 1
1.1.2国内外在线考试系统研究背景 1
1.2在线考试系统内容和意义 2
1.2.1在线考试系统的内容 2
1.2.2在线考试系统的意义 2
1.3论文组织结构 2
第二章 Struts2和Hibernate相关技术的介绍 3
2.1 J2EE技术 3
2.1.1 J2EE分层模型结构 4
2.2 MVC模式 5
2.3 Struts2+Spring+Hibernate(SSH2)框架技术 7
2.3.1 Struts2 8
2.3.2 Spring 9
2.3.3 Hibernate 11
第三章 在线考试系统的需求分析与总体设计 12
3.1在线考试系统需求分析 12
3.1.1功能分析 12
3.1.2系统流程分析 14
3.2系统架构选择 17
3.2.1数据库设计 17
3.2.2技术实现方案......................................................................................................................19
第四章 系统关键模块的设计与实现 30
4.1系统开发环境 30
4.2 SSH2在系统中的运用 30
4.2.1 SSH2架构的工作流程 30
4.3系统关键模块的实现 32
4.3.1试卷与试题之间的关系和存储 32
4.3.2试卷的展示 33
4.3.3考试监控 33
4.3.4考试计时和显示剩余时间 33
4.3.5安全问题 33
4.4公共模块 34
4.4.1字符串处理类 34
4.4.2过滤器类 34
4.5登陆模块 35
4.5.1考生登录系统设计 35
4.5.2考生个人信息维护设计 36
4.5.3考生管理模块 37
4.5.4增加考生设计 37
4.5.5维护考生信息设计 39
4.6试卷管理模块 40
4.6.1题库管理设计 40
4.6.2试卷管理设计 42
4.6.3开启试卷设计 45
4.7考试管理模块 47
4.7.1考试项目管理设计 47
4.7.2考生查询成绩设计 49
4.8考务管理模块 50
4.8.1在线监考管理设计 50
4.8.2考卷评分设计 51
4.8.3考试分析管理设计 52
第五章 总结与展望 54
5.1论文工作总结 54
5.2展望 56
参考文献 57
致 谢 59
基于Struts2的在线考试系统的设计与开发
摘 要
随着当今科学技术的不断发展,考试的手段跟媒介都发生了革命性的改变。能通过网络进行的在线考试,并客观、准确地评估人的知识和水平的,实现教考分离,在一定程度上减少影响考试的人为主观因素,同时也减少教师工作量的在线考试系统得到了当今远程教育研究者的关注。
本文在分析在线考试系统的现状的基础上,结合软件工程中的方法,对系统进行了详细的分析,运用Struts2-Hibernate集成架构的相关技术,论述了该在线考试系统的总体结构以及系统模块的实现过程。本系统采用模块化设计,将在线考试系统分为五大功能模块,分别为登陆模块、考生管理模块、管理员管理模块和考卷管理模块以及考试管理模块。在进行系统分析与总体设计时,首先对系统进行需求分析、系统功能模块结构划分及系统流程分析,其次进行数据库设计,最后采用Struts2技术模式,进行系统架构设计。
关键字: Struts2; Hibernate; MVC ;JSP ; 在线考试
Design and implementation of Online Examination System Based on Sturuts2
Abstract
With the continuous development of science and technology, the means of examination and media are also a revolution change. Online Examination can use by the network , objectively and accurately assess the level of peoples knowledge and achieve separation of teaching and testing . To a certain extent, reduce the influence of subjective factors exam , but also reduce the workload of teachers that online examination system has been get attention by the education researchers.
This article analyzes the current situation of online examination system based on the combination of software engineering methods , the system is analyzed in detail , using Struts2-Hibernate Integrated Architecture technologies , discusses the overall structure and system modules of the Online Examination System implementation process. The system is modular in design, online examination system is divided into five functional modules , namely landing module , candidate management module, the administrator management module and exam management module and exam management module. When conducting system analysis and overall design , the system first needs analysis , system functions and system structure is divided flow analysis , followed by the database design, the final model using Struts2 technology , system architecture design .

KEY WORDS :Struts2; Hibernate; MVC ;JSP ;Online Examintion
第一章 绪论
1.1在线考试系统的研究背景
1.1.1在线考试系统研发背景
现今,社会对各阶层要求的知识水平和能力水平越来越高,为了让教育培训内容和形式更加得让人想学习、接受更好的培训,方式非常多,其中最具吸引力的手段是考试。考试是作为衡量人们各种能力的重要手段。各种各样的学历考试、资格证书考试、培训考试数不胜数,不管是国内还是国外的各大教育部门和各大厂商,都不断推出一系列的考试、认证,如微软的MCSE、Cisco的CCNA以及国内的自考、成考和各种资格证书考试等。
同时,由于科学技术的高速发展,社会进入网络时代,计算机网络已经成为社会发展的强大动力。网络不仅给我们带来的是无穷的信息,也带来了更多便利。  Internet技术的发展使得考试的技术手段和载体发生了革命性的变化,Internet的开放性、分布性和基于internet的巨大的计算能力使得考试突破了时间和空间的限制。与传统考试模式相比,在线考试具有很多优越性,它可以将传统考试过程中的试卷组织、传送、收集、登记、评判等各环节缩小到一至两个环节,几乎屏蔽了所有人工直接干预考试的可能性,不但能够节约大量的时间、人力、物力与财力,而且还可以大幅度提高考试的客观性和公正性。在线考试系统课题产生的背景是当今教育信息化的趋势及我国高等教育信息化建设。
1.1.2国内外在线考试系统研究背景
在线开始系统的实现技术主要有二种:C/S模式、B/S模式。传统的C/S模式,需要试题内容放在远程的副武器上,在考试机上安装考试应用程序和数据库客户机配置,因此每次考试时要对机器进行安装、配置,维护、升级麻烦,考务工作繁琐;而且考试程序放在客户机上,安全性受到一定影响。传统的C/S模式的软件系统还需要针对不同的操作系统考法不同版本的软件,这种代价高和低效率的技术已不适合工作需要。 而采用另一种客户端零安装、零维护零安装、零维护的B/S模式实现的考试系统。Web技术超越了传统的C/S两层结构,采用三层体系结构:用户界面层/业务逻辑层/数据库层。因此,B/S结构具有更好的安全性。在用户机上不需要安装任何应用程序,应用程序可以安装在事务层的计算机上,试题存放在数据库服务器上。即使中途换机考试等意外情况下都可以继续考试,使得网络化考试比传统的纸质考试和单机化考试有着无法比拟的效率和公平上的优越性,是现代在线考试的发展方向。
1.2在线考试系统内容和意义
1.2.1在线考试系统的内容
本文在调研了在线考试系统在国内外的研究现状,研究了基于Struts2架构的采用J2EE技术、MVC模式等技术的在线考试系统的设计与开发的方法和技术手段。采用目前主流的B/S结构,以J2EE多层架构为基础,设计了广东白云学院在线考试系统。该系统采用模块化设计方法,将在线考试系统分为登陆模块、考生管理模块、考生管理模块和试卷管理模块以及考务管理模块五大块。其中,登陆模块包括考生登陆系统、考生个人信息维护模块、管理员登陆系统;考生管理模块包括考生个人信息维护模块、参加考试、考生查询成绩;考生管理模块包括增加考生、维护考生信息;试卷管理模块包括题库管理、考卷管理、开启试卷;考务模块包括在线监考、考卷评分、考试分析管理。
1.2.2在线考试系统的意义
随着标准化随着标准化考试的日益普及,在各种考试中越来越多地采用了计算机考试的方式。相对于传统卷面考试而言,传统的卷面考试从出题印刷到下发试卷等环节需要较长的时间,接触的人员相对较多,因而在便利性和在保密方面具有一定的困难。
在线考试系统的客户端配置只需要操作系统自带的浏览器,考试可以不受地域与时间的限制,考生可随时随地进行业结考试。且计算机考试系统采用试题库方式提供试题来源,考前无任何成套试卷,考试时考卷由计算机现场随机生成,各考生试卷不完全相同,从而避免了互相参看等作弊现象或不公平成绩的出现。同时也可考后即可获得成绩,省去了人力评卷的麻烦和弊端。
1.3论文组织结构
本文的组织结构具体如下:
第一章简述了在线考试系统研究背景,分析了在线考试系统国内外的研究现况以及论文的内容和意义。
第二章是介绍在线考试相关技术。对J2EE技术和MVC模式以及Struts2,Spring,Hibernate三层框架技术进行详细的介绍。
第三章是对在线考试系统进行整体分析与设计。
第四章详细阐述了系统的设计思想以及各个模块的实现过程。
第五章是对本文的工作进行总结和一些展望。
第二章 Struts2和Hibernate相关技术的介绍
2.1 J2EE技术
J2EE (Java 2平台企业版,Java 2 Platform, Enterprise Edition)包含许多组件,主要用来简化且规范应用系统的开发与部署,进而提高可移植性、安全与再用价值的技术架构。J2EE核心是一组技术规范与指南,J2EE巩固了标准版中的许多优点,方便存取数据库的JDBC API, CORBA技术以及能够在Internet应用中保护数据的安全模式等等,同时还提供了对EJB ( Enterprise JavaBeans ), Java Servlets API;JSP ( Java ServerPages)以及XML技术的全面支持。
J2EE为搭建具有可伸缩性、灵活性、易维护性的商务系统提供了良好的机制:保留现存的IT资产,能被高效的开发,支持异构环境,具备可伸缩性和稳定的可用性。通过提供统一的开发平台,J2EE降低了开发多层应用的费用和复杂性,同时提供对现有应用程序集成强有力支持,完全支持EJB,有良好的向导支持打包和部署应用,添加目录支持,增强了安全机制,提高了性能[1]。
2.1.1 J2EE分层模型结构
J2EEJ2EE使用多层的分布式应用模型,一般可分为客户层、Web层、业务层及企业信息系统层(Enterprise Information System,简称EIS),Web层和业务层又可统称为中间层,如图2-1所示。
图2-1 J2EE四层模型结构
J2EE四层结构具体描述如下:
1、客户层
应用客户端程序和Applets是客户层组件,J2EE应用程序可以是基于Web方式的,也可以是基于传统方式的。
2、Web层
J2EE Web层组件可以是JSP页面或Servlets。Web层可能包含某些JavaBean对象来处理用户输入,并把输入发送给运行在业务层上的Enterprise Bean来进行处理。
3、业务层
Enterprise Bean从客户端程序接收数据,进行处理,并发送到企业信息系统层存储,这个过程是可逆的。运行在业务层的EJB依赖于容器提供如事务、生命期、状态管理等复杂的系统级功能。
4、企业信息系统层(EIS)
企业信息系统层处理企业信息系统软件,包括企业基础建设系统。例如企业资源计划 (​http:​/​​/​baike.baidu.com​/​view​/​109408.htm _blank​) (ERP),大型机事务处理,数据库系统 (​http:​/​​/​baike.baidu.com​/​view​/​7809.htm _blank​),和其它的遗留信息系统。它是J2EE2体系架构与J2EE外部资源的连接,给J2EE应用程序的开发者提供了灵活性。
2.2 MVC模式
MVC(Model-View-Controller,模型一视图一控制器)是一种业务逻辑和数据显式分离的方法组织代码,将业务逻辑聚集到一个部件里面,在界面和用户围绕数据的交互能被改进和个性化定制的同时而不需要重新编写业务逻辑,MVC架构最早是smalltalk语言研究团提出的,应用于用户交互应用程序 (​http:​/​​/​baike.baidu.com​/​view​/​330120.htm _blank​)中。smalltalk语言和java语言有很多相似性,都是面向对象语言 (​http:​/​​/​baike.baidu.com​/​view​/​7847.htm _blank​),并因为其优秀的特性,得到了业界的广泛接受[2]。
在MVC模式中,应用程序被强制分成三个核心部件:模型(Model) ,视图(View)、控制器((Controller) ,它们各自处理自己的任务。其体系结构见图2-2所示:
图2-2 MVC设计模式结构图
1、视图
视图代表用户交互界面,对于旧式的Web应用来说,可以概括为HTML界面;新的技术出现后,则包括XHTML、XML/XSL和WML等。随着应用的复杂性和规模性,界面的处理也变得具有丰富性和挑战性。一个应用可能有很多不同的视图,但MVC设计模式对于视图的处理仅限于视图上数据的采集和处理,以及用户的请求,它只是作为一种输出数据并允许用户操纵的方式,并不包括在视图上的业务流程的处理。业务流程的处理交予模型(Model)处理。
2、模型
MVC系统中的模型从概念上可以分为两类——系统的内部状态和改变系统状态的动作。模型是你所有的商业逻辑代码片段所在。本文为模型提供了业务实体对象和业务处理对象:业务实体对象可以通过定义属性描述客户端表单数据。所有业务实体对象都EntityBase派生子类对象,业务处理对象可以直接对它进行读写,而不再需要和request、response对象进行数据交互。通过业务实体对象实现了对视图和模型之间交互的支持,以及业务逻辑的重用。
3、控制器
控制器封装的是外界作用于模型的操作。一般控制器接受用户的输入并调用模型和视图去完成用户的需求,在模型和视图之间起到了沟通的作用,处理用户在视图上的输入,并转发给模型处理。在MVC的处理过程中,首先控制器接收用户的请求,并决定应该调用哪个模型来进行处理,然后模型用业务逻辑来处理用户的请求并返回数据,最后控制器用相应的视图格式化模型返回的数据,并通过表示层呈现给用户[2]。
MVC中的三个部件相互独立,构造良好的松藕合构件。MVC模式可以使多个视图同时共享一个模型,逻辑结果还可以根据用户的不同需要以多种形式呈现出来。三者既分工又合作地完成用户提交的每项任务。
2.3 Struts2+Spring+Hibernate(SSH2)框架技术
Struts2+Spring+Hibemate框架结构是能设计一个高层次,高质量的软件,构建一个低耦合,高内聚的系统的技术。使用Struts2应用MVC模型,使页面显示与业务逻辑分离,达到页面显示与业务逻辑低耦合效果。当网页上显示内容需要改变时,只需要修改页面,不影响其中的业务逻辑。同样,业务逻辑需要改变时,只需要修改Java程序,而不用修改页面。使用Spring运用IOC(Inversion of Control,反向控制),减少业务逻辑的相互依赖关系。使用Hibernate则是使我们的业务逻辑与数据持久化分离,也就是与将数据存储到数据库的操作分离。我们在业务逻辑中只需要将数据放到值对象中,然后交给Hibernate,或者从Hibernate那里得到值对象。Struts2+Spring+Hibernate框架层次结构如图2-3:
图2-3 Struts2+Spring+Hibernate框架层次结构
框架层次结构层次分为表现层、持久层、业务层、域对象层四个层。每个框架分别负责一个层次的实现,表现层使用Struts2,业务层使用Spring,持久层使用Hibernate。这些框架层次在以一种松散祸合的方式彼此作用而不用管低层的技术细节。
2.3.1 Struts2
Struts2是Struts的下一代产品,是在Struts和WebWork的技术基础上进行了合并的全新的Struts2框架。采取拦截器的机制来处理用户的请求,这样的设计也使得业务逻辑控制器能够与Servlet API完全脱离开。Struts2是对MVC构架的具体实现。它可以将模块化的应用程序清楚地分成逻辑、表示和数据[4]。
图2-4为Struts2的MVC三层结构:
图2-4 Struts2 MVC体系结构
视图层:是一组JSP文件,Struts2自身包含了一组可扩展的自定义标签库,可以简化创建用户界面的过程。这些JSP文件中没有业务逻辑,也没有信息模型。
控制层:控制器就是Java Servlet,由Struts框架提供,负责视图和模型之间的交互。控制器的每个入口点都由名为struts2-config.xml的配置文件设置。
模型层:模型主要是表示一个系统的状态和业务逻辑。在Struts2中,系统的状态主要由ActiomForm Bean体现,对于业务逻辑通常由JavaBean或EJB组件来实现。
Struts2是一种基于Java的JSP Web框架技术,Web应用程序开发人员可通过它充分利用面向对象设计、代码重用。Struts2提供了一种创建具有良好可管理性的Web应用框架,其中对应用程序的显示、表示和数据的后端代码进行了抽象。
Struts2的优点主要集中体现在如下:
(1) Struts2将业务数据、页面显示、动作处理进行分离,有利于各部分的维护。
(2) Taglib是Struts2的标记库,其灵活运用能大大提高开发效率。
(3) Struts2的Valicator可以帮助完成验证工作,避免重复编写验证代码工作,减少了开发工作量,实现验证代码集中管理,方便维护。
(4)页面转发可以使系统的脉络更加清晰,可以在很大程度上提高系统的维护性。
(5)通过Struts2提供的ActionForm封装web form中的元素。
(6) Struts2采用Front Controller模式来实现动作处理,该方式方便人们在入口中加入一些全局控制代码的实现,如安全控制、日志管理等。
下面是Struts2在框架结构中所负责的工作:
(1)为用户管理请求和响应。
(2)提供一个控制器代理调用业务逻辑和其它上层处理。
(3)为显示提供一个模型。
(4)执行用户接口验证。
2.3.2 Spring
Spring是框架的业务层,这个框架是一个分层架构,能实现反转控制和面向方面编程,由7个定义良好的模块组成[5]。
如图2-5所示Spring体系结构:
图2-5 Spring体系结构
Spring模块构建在核心容器之上,核心容器定义了创建、配置和管理bean的方式,其主要优势有如下几点:
(1) 在Spring中,通过声明式方式灵活地进行事务的管理,提高开发效率和质量。
(2) 在Spring里,可以随手随时用非容器依赖的编程方式进行所有的测试工作。
(3) Spring能很好组织中间对象。
(4) Spring构建的应用程序易于单元测试。
(5) Spring可以降低各种框架的使用难度,Spring提供了对各种优秀框架(如Struts2,Hibernate、Hessian、Quartz)等的直接支持。
(6) Spring能够实现针对接口编程。
(7) Spring使EJB成为一个实现选择,而不是必需的选择。你可以用POJO或当地EJB来实现业务接口,却不会影响到调用代码。
(8) Spring能使用AOP提供声明性事务管理,不直接操作JTA也能够对事务进行管理。
(9) Spring为数据存取提供了一致的框架,不论是使用JDBC还是O/R mapping的产品。
(10) MVC Web框架,提供一种清晰,无侵略性MVC实现方式。
Spring业务层在框架中主要负责事项:预留与其他层交互界面,管理业务层对象之间的依赖,增加在表现层和持久层的灵活性,使他们互不通讯,管理上下文从表示层到业务层应用程序的业务逻辑和业务验证,实现从业务逻辑到持久层的管理。
2.3.3 Hibernate
Hibernate 是一个对象/关系映射框架,它较轻量级的对象封装了 JDBC,通过开放其源代码使得 Java 程序员非常容易运用对象编程的思维对数据库进行操作[6]。无论是 Java 的客户端程序,还是 Servlet/JSP 的 Web 应用程序,只要是使用了 JDBC 的场Hibernate 框架都可以正常使用。不仅如此,Hibernate 还能够在应用了 EJB 的 J2EE 架构中取代 CMP 去达到数据持久化的目的,这才是最具有革命意义的。
Hibernate框架的体系结构图如图2-6所示:
图2-6 Hibernate体系结构
Hibernate框架的优势有下面几点:
(1) Hibernate可扩展性强。
(2) Hibernate适用于独立的Java程序,以及Java Web的应用,而且在J2EE架构中可以取代CMP,完成持久化任务。并且能集成到会话EJB和基于BMP的实体EJB中。
(3) Hibernate可以和多种WEB服务器,应用服务器良好集成,并且支持所有的数据库服务器。
(4) Hibernate有详细的参考文档,使用方便,容易上手。
以下是Hibernate在持久层框架中负责的工作:查询相关的信息并成为对象,Hibernate是透过HQL面向对象查询语言,或使用条件表达式API来完成的。以及保存,更新,删除存储在数据库中的信息。
第三章 在线考试系统的需求分析与总体设计
3.1在线考试系统需求分析
需求分析作为软件开发最为关键的第一阶段,关系到软件开发是否合理、可行。用户需求,在软件工程的建设中,指的是软件系统必须满足的功能。并通过全面性的综合研究,采用用例图方式对问题域建立分析模型,然后抽象出功能模块,准确理解系统功能需求以及对系统功能模块进行划分。
3.1.1功能分析
在线考试系统包括在线考试系统前台和在线考试后台管理两个部分。在线考试系统前台部分,考生可以进行测试、查询成绩、修改个人密码、修改个人信息等操作;在线考试系统后台部分,则是提供给教师进行操作的,管理员可以进行题库管理、考生信息管理、试卷管理、历史数据分析等操作。
本系统需要完成的功能包括:
(1)参加考试:在学员登录系统后,可查询到需要参加的考试项目,选择参加考试后即进入考试。考试的题目按格式列出,并且提示考试时间。完成答卷后,学员可以提交答卷,如果考试时间到,系统自动进行提交。
(2)考生成绩查询:考生登录后,可以查询以往考试的信息。通过这个功能。考生可以查询考试的成绩以及考试试题的标准答案。
(3)考试信息管理:考生登录后,可以对自身的易变化的相关信息进行修改,主要是一些联络方式方面的信息,基本的信息由管理员进行控制的。此外,考生可以对登录的密码进行修改,如果遗忘了密码,可以向管理员申请恢复原始密码。
(4)学员信息管理:管理员登录后,可以对学员的信息进行维护:添加学员信息、修改学员信息、查询学员考试的历史成绩、恢复学员原始密码。
(5)题库管理:管理员登录后对题库进行维护,可以进行题目的添加修改和删除操作,题型分单选题、多选题、填空题及简答题。
(6)试卷管理:从题库中抽取题目,形成试卷。试卷形成后,在未进行开考操作以前,可以进行修改操作。
(7)考卷的分发:通过条件选取对己经生成的试卷进行人员的分配。确定人员之后执行开考操作,此时相关的学员就可以进行登录参加考试了。
(8)考务管理:对在线考试的学员的考试进行监控,从监控台可以看到当前考生的状态,己达到监考的目的。
(9)考卷评分:对考试完毕的考生的考卷进行评分操作。客观题在考卷提交时,己经由系统给出分数,这里主要是进行主观题目的评分。
(10)考试分析:对结束的考试进行统计分析。列出参加此次考试的考生的考试详细信息,并统计出各个分数的人员,提供给系统的管理者作决策支持。
图3-1该在线考试系统前台功能
图3-1该在线考试系统前台功能
3.1.2系统流程分析
通过以上的分析得出,系统中的流程,部分受其它条件约束,部分不受其它条件约束,具体分析如下:
(l)添加学员:这个过程不受其它条件的约束。
(2)添加题目:这个过程不受到其它的条件约束。
(3)添加试卷:在这个过程中,受到添加题目的约束。只有有了题目以后,才能进行试卷的生成操作。一旦题库建立以后,这种约束也会解除。
(4)分配考卷:这个过程受到添加学员操作的约束。只有添加了要选的学员,才能进行考卷的分配工作。一旦学员都添加完毕,这种约束也会解除。
由图3-3该在线考试系统考生操作流程图(前台操作)、图3-4该在线考试系统教师操作流程图(后台操作),可以看出,考生登录系统之后参加答题,答题完毕之后提交试卷,管理员这时就可以看到考生提交的试卷,并进行评分给出成绩。这个过程的前提就是管理员生成试卷以后进行了考卷的分配工作,并且分配完毕执行开考工作。
图3-3 该在线考试系统考生操作流程图
图3-4该在线考试系统教师操作流程图
3.2系统架构选择
考虑到各种用户的系统配置的不同、庞大的客户端维护量以及C/S系统的局限性,因此本在线考试系统决定采用当前互联网领域非常流行的B/S ( Browber/Server,浏览器/服务器)结构,运用Web页面作为本地与远程信息的连接渠道。
在现阶段,主要用于建设B / S结构系统的两套技术是:微软的.NET和SUN公司的J2EE技术。考虑到广泛使用的J2EE架构,案例经验丰富,是更加成熟和跨平台的总体架构,系统可靠性高,易于扩展,因此系统决定采用J2EE的整体架构[7]。
目前很多基于J2EE体系结构的成熟框架,运用框架技术可以提高软件开发的可重用性和系统的可扩展性,因此该系统采用了Struts2,Spring和Hibernate三层框架技术,设计采用了一个典型的三层B / S结构,如图3-5所示:
图3-5 系统架构图
1、用户通过浏览器与Web系统交互;
2、Web服务器采用基于Struts2,Spring和Hibernate框架结构处理业务逻辑;
3、数据库服务器采用SQL Server 2000。
3.2.1数据库设计
1数据库需求说明
Microsoft SQL Server2000是由Microsoft公司开发的,简称SQLServer,由一系列相互协作的组件构成,能满足最大的Web站点和企业数据处理系统存储和分析数据的需求。Microsoft SQL Server2000具有如下特性:
(1)其数据库引擎提供完整的XML支持,一个数据库引擎可以在不同的平台上使用,其关系数据库引擎支持当今苛刻的数据处理环境所需的功能。
(2)一系列管理和开发工具,是其系统容易安装、部署、管理和使用。
(3)有析取和分析汇总数据以进行联机分析处理(OLAP)的工具。因此,该在线考试系统数据库服务器采用Microsoft SQL Server2000。根据在线考试系统的需求,设计对应的数据表。
1 学员信息表:存放与学员信息相关的信息数据。
2 题库信息表:存放系统所有的题目的基础信息数据。
3 试卷基础信息表:存放系统所生存的试卷的基础信息数据,不包含试卷的详细信信息。
4 试卷详细信息表:存放试卷的详细信息数据。
5 考卷基础信息表:存放分配以后考卷的基础信息数据。
6 考卷详细信息表:存放考生的考卷的详细信息数据。
7 一般基础信息表:存放系统中一般的基础信息数据。
8 学历教育基础信息表:存放有关学员学历的基础信息数据。
9 机构基础信息表:存放有关学员所属机构的基础信息数据。
10 职务基础信息表:存放有关学员职务的基础信息数据,
11 管理员信息表:存放管理员的相关信息数据。
2数据库逻辑设计
根据以上设计,数据表的字段详细信息如下:
(1)学员信息表(line_cadet):此表共设有15个字段,cadet_id为主键;sex。ageney_id,duty_id,condition,businesee,diploma_id字段与基础信息表进行关联,如表3-6学员信息表所示。
表3-6 学员信息表
表名 类型 长度 主键 可空 描述
cadet_id char 8 是 不允许 学员标识
password varchar 10 否 允许 密码
Name varchar 20 否 允许 姓名
Sex varchar 3 否 允许 性别
Age Integer 否 允许 年龄
agency_id Integer 否 允许 机构标识
duty_id Integer 否 允许 职务标识
Condition varchar 3 否 允许 状态
Business varchar 3 否 允许 业务标识
diploma_id Integer 否 允许 学历标识
Habitat varchar 80 否 允许 地址
Tel varchar 40 否 允许 电话
Handset varchar 40 否 允许 手机号码
Email varchar 40 否 允许 电子邮件
Describe varchar 200 否 允许 备注
(2)管理员信息表(line_admin):此表中id为关键字,name为管理员用户名,password为密码字段,如表3-7管理员信息表所示。
3-7管理员信息表
字段名 类型 长度 主键 可空 描述
Id Integer 是 不允许 标识
Name varchar 20 否 不允许 管理员姓名
Password varchar 20 否 允许 管理员姓名
(3)题库信息表(line_theme):此表共有10个字段,t_id为主键;t_sort 、t_lore、t_style、t_difficulty 字段与一般基础信息表line_baseinfo关联,如表3-8题库信息表所示。
3-8题库信息表
字段名 类型 长度 主键 可空 描述
T_id Integer 是 不允许 题目标识
T_sort varchar 3 否 允许 题库类别标识
T_lore varchar 3 否 允许 知识点标识
T_score float 否 允许 分值
T_style varchar 3 否 允许 题型标识
T_difficulty varchar 3 否 允许 难度标识
T_matter text 否 允许 题目内容
T_answer text 否 允许 回答
T_solution text 否 允许 标识答案
T_lore varchar 100 否 允许 图标路径
(4)关于试卷的内容存储,分为两个表来进行处理:试卷基础信息表和试卷详细信息。
表3-9为试卷基础信息表(lins_staddlepaper),共有12个字段;s_id为主键,s_category,s_manner,s_condition与一般基础信息表lins_generalinfo进行关联。
表3-9试卷基础信息表
字段名 类型 长度 主键 可空 描述
S_id Integer 是 不允许 试卷标识
S_name varchar 100 否 允许 试卷名称
S_category varchar 3 否 允许 试卷类型标识
S_time Integer 否 允许 答题时间
S_itemlist text 否 允许 考题列表
S_start Datetime 否 允许 起始时间
S_close Datetime 否 允许 终止时间
S_cadetlist text 否 允许 考试人员列表
S_manner varchar 3 否 允许 评分方式
S_passscore Integer 否 允许 通过分数
S_sum Float 否 允许 总分
S_condition varchar 3 否 允许 状态
试卷详细信息表(表lins_staddlepaper_detail):试卷详细信息表的主键为s_id、t_id。其中t_id与题库信息表中的主键关联,t_category与一般基础信息表lins_generalinfo进行关联,如表3-10试卷详细信息表所示。
表3-10试卷详细信息表
字段名 类型 长度 主键 可空 描述
S_id Integer 是 不允许 试卷标识
T_id Integer 否 不允许 题目标识
T_num Integer 否 允许 题目序号
T_category varchar 3 否 允许 题型
T_solution text 否 允许 标准答案
(5)考卷基础信息表(lins_testpaper:考卷的存储也分为两个表来进行,包括考卷基础信息表和考卷详细信息表。
基础信息表存放一些有关考卷的基础信息,其中t_id为主键,t_condition与一般基础信息表lins_generalinfo进行关联,如表3-11考卷基础信息表所示.
表3-11考卷基础信息表
字段名 类型 长度 主键 可空 描述
T_id Integer 是 不允许 考卷流水号
cadet_id varchar 3 否 允许 准考证号
S_id varchar 3 否 允许 试卷标识
T_start float 否 允许 开始考试时间
T_close varchar 3 否 允许 结束考试时间
T_passscore varchar 3 否 允许 通过分数
S_autoscore text 否 允许 自动评分
S_manualscore text 否 允许 手工评分
S_sum text 否 总分 评分方式
S_condition varchar 100 否 允许 状态
考卷详细信息表(lins_testpaparparticular):此表中t_id和T_id构成主键,其中t_id与题库信息表进行关联,如表3-12考卷详细信息表所示。
表3-12考卷详细信息表
字段名 类型 长度 主键 可空 描述
T_id Integer 是 不允许 考卷流水号
t_id Integer 否 bu允许 题目标识
T_answer text 否 允许 考试回答
T_score float 否 允许 考试得分
(6)基础信息表。在本系统中,基础信息表共有四个:一般基础信息表(lines_generalinfo)、学历教育基础信息表(g_diploma_category)、机构基础信息表(g_agency)、职务基础信息表(g_duty_category)。一般基础信息表存放的是系统中大部分的基础信息,其中,学历教育基础信息表存放的是有关学历信息的表,机构基础信息表维护的是有关机构的信息,职务基础信息表存放的是职务基础信息。由于篇幅问题,这四个表均不作太多介绍。
3.2.2技术实现方案
1系统架构设计
对在线考试系统的需求进行了分析以后,就要对系统的整体架构进行设计。整个应用程序遵循多层的架构模式,从上到下依次为视图层、控制层、业务逻辑层、数据访问层,图3-13为该在线考试架构图。
图3-13该在线考试系统架构图
各层次间的依赖关系应该是自顶向下的,即上层可以依赖下层,而下层不应对上层有依赖或尽量减少对上层的依赖。例如,在系统中使用Hibernate来实现持久层,若要采用其它机制实现持久层,不需要改动业务逻辑中的代码。
2视图层的分析与设计
视图的基本作用就是获得应用程序的数据和向应用程序程序发送数据,它不包含业务逻辑,也不包含用于向数据源中存储数据或从数据源中检索数据的任何代码,而是仅仅提供界面的功能。保持模型和视图的分离,可以使更改应用程序的界面不会影响模型层。
视图组件主要是由JSP组件组成的,除此以外还包括HTML文档、JSP标签库和Struts2标签库、Javaserript脚本和CSS样式、消息资源、ActionForm。
3控制层的分析与设计
Struts2设计模式的核心是一个MVC风格的控制器,该控制器实际上是模型组件和视图组件之间的桥梁,是整个Web应用程序的重要组成部分。Struts2设计模式采用控制器组件来预处理所有的客户请求,这种集中控制方式可以满足MVC设计模式其中两方面的需求。
一方面,控制器在用户输入数据和模型之间起到媒体或翻译的作用,提供一些通用的功能,例如安全、登录或其他对用户请求的重要服务。当系统的这些通用功能出现变化,不需要修改整个的应用程序,只要修改局部的控制器组件即可。
另一方面,由于所有的请求都经过控制器过滤,因此可以降低视图组件之间,以及视图组件和模型组件之间的相互依赖关系,提高每个组件的相对独立性。由控制器组件决定把合适的视图组件返回给用户,这样可以减少视图组件之间直接的、错综复杂的链接关系,使用更加灵活,便于系统的维护。
Struts2框架控制器部分由一个核心控制器ActionServlet组件和多个业务控制器Action组件实现。其中Action组件负责调用业务逻辑;ActionServlet组件负责接受请求,然后转发给某个Action组件处理。
Actionservlet组件由Strots2框架提供,无需开发者编写,类型为org.apache.Strruts2.action.ActionServlet,通过继承HttpServlet实现。该组件负责接受请求、调用业务处理以及为客户响应等控制功能,与平常Servlet控制器类的不同点在于AetionServlet是根据Struts-config.xml文件中的配置实现控制,开发者只需编写不同的Struts-config.xml文件,就能实现不同功能的控制器。
Action组件负责处理客户端请求,为了便于集中开发、维护,该组件在实现时包括业务代码,通过Dao类来封装数据库的操作,并映射到对象语义上来。
控制层中Action类继承了Action基类,当调用这个类的同时,也执行execute()方法。
每个Action类型的对象实际上都在充当用户的业务代理,因此,Action类被运行在一个多线程的环境中。Action类必须在线程安全”的方式进行编程,因为控制器会使多个同时发生的请求共享一个实例,相应的,在设计ACtion类时就需要注意以下两点:
(l)不能使用实例或静态变量存储特定请求的状态信息,它们会在同一个操作中共享超越请求的全局资源。
(2)如果要访问的资源(如JavaBean)在并行访问时需要进行保护,那么访问进行同步。
4模拟层的分析与设计
这里的模型组件可以划分为DAO层和数据持久层。DAO层位于控制层和数据持久层之间。
数据持久层实现了底层的数据存取逻辑。不管是任何应用,都需要数据的持久化,这里的数据持久层采用Hibernate技术来实现。
(1)数据持久化
持久化”指通过数据库或者其他信息存储方式,将系统需要保存的数据保持在持续信息载体中的过程。从广义上,持久化不仅仅包括系统到信息载体单方面存储的过程,还包括这些信息的读取和关系的整个交互过程。
应用程序涉及的对象是不能在内存中长期驻留的,而大量业务数据却需要在整个系统生命周期中存在以及变更,因此必须通过外部信息载体的存储和管理获得数据的持久化。这个实现数据持久性的过程就叫做数据持久化。数据持久化可以通过直接调用JDBC.API或者使用对象映射工具结合关系型数据库来实现,也可以运用专门API结合文件系统、XML或者对象型数据库来实现。多层结构中的持久层就是实现数据存取和管理的应用层次。一旦数据被持久化,它们可以在应用运行时被重新读入到内存中,并重新构造出业务对象。业务对象的持久化过程。
(2)数据访问对象(DAO)
对象-关系的映射是一种耗时的工作。围绕对象-关系的映射和持久化数据的访问,在软件领域中发展了一种数据访问对象(Data Access Object,简称DAO)设计模式。
DAO模式有以下两个主要作用。
1 抽象数据源
在这里数据源是一个广义的概念,一般来说,指可能的数据来源和方式,可以理解为数据来源。该数据源用于提高数据访问的效率。
2 抽象相关的修改!删除!添加以及查询的逻辑
DAO模式可以使用任意的Java数据访问,包括JDBC、EJB、JDO/Hibernate以及任何其它的对象关系映射工具。
DAO模式提供了访问对象关系型数据库系统所需的所有操作接口,其中包括创建数据库,建立表之间的关系,更新和查询数据库等。DAO模式将底层数据访问操作与高层业务逻辑分离开,对上层提供面向对象的数据访问接口。
3 数据访问对象实现
本系统数据访问对象通过配置文件Hibernate.cfg.Xml读取映射文件*.hbm.Xm,通过映射文件*.hbm.Xml获得对象对应的数据表名以及属性对应的数据表列名,然后通过反射机制获得持久化对象的各个属性,通过Hibernate内部机制最终组织成与数据库交互的SQL语句,实现程序与数据库的交互。持久化对象是指本系统涉及到的实体Bean类,方法包括get()和set()。
5.Hibernate层文件及其配置
Hibernate层文件包括与数据表对应的持久类POJO(即普通JAVA Bean文件,实体类)、Hibernate映射文件和Hibernate配置文件。在该在线考试系统中,数据表、持久类和Hibernate映射文件对应关系如表3-14所示。
表3-14数据表、持久类和Hibernate映射文件对应关系表
数据表 持久类文件 Hibernate映射文件
line_cadet line_cadet.java line_cadet.hbm.xml
line_admin line_admin.java line_admin.hbm.xml
line_theme line_theme.java line_theme.hbm.xml
line_staddlepaper line_staddlepaper.java line_staddlepaper.hbm.xml
line_staddlpaper_detail line_staddlpaper_detail.java line_staddlpaper_detail.hbm.xml
T_condition T_condition.java T_condition.hbm.xml
lins_testpaperparticular lins_testpaperparticular.java lins_testpaperparticular.hbm.xml
lins_generalinfo lins_generalinfo.java lins_generalinfo.hbm.xml
G_diploma_category g_ diploma_category.java G_diploma_category.hbm.xml
G_agency g_ agency.java G_agency.hbm.xml
G_duty_category g_duty_category.java G_duty_category.hbm.xml
该在线考试系统Hibernate配置文件Hibernate.cfg.Xml中内容如图3-14所示。在图3-14中,包含line_eadet.hbm.xml、line_admin.hbm.xml、1ine_theme.hbm.xml、lins_staddlepaper.hbm.xml、1ins_staddlepaper_detail.hbm.xml、t_condition.hbm.xml、1ins_testpaperparticular.hbm.xml、lins_generalinfo.hbm.xml、g_diploma_category.hbm.xml、g_agency.hbm.xml、g_duty_eategory.hbm.xml等映射文件配置。
该在线考试系统Hibernate配置文件内容:
-//Hibernate/Hibernate Configuration DTD//EN
http://hibernate sourcaforge.net/hibernate-configuration-2.0.dtd>

jdbc:microsoft:sqlserver://localhost:1433;SelectMethod=cursor;DatabaseName=KAOSHI

com.microsoft jdbc.sqlserver.SQLServerDriver

sa

sa

net.sf,hibernate.dialect.SQLServerDialect

true

true

第四章 系统关键模块的设计与实现
4.1系统开发环境
系统开发环境如表4-1所示:
表4-1 系统开发环境
服务器操作系统 Windows Server2003操作系统
客户端操作系统 统一使用Windows XP操作系统
数据库版本 SQL Server2000数据库
Web服务器 Tomcat5.5
Java编译器 Jdk1.5.25
Struts版本 Struts2.0
Spring版本 Spring2.5
Hibernate版本 Hibernate3.0
开发工具 MyeEclipse6.0.1
4.2 SSH2在系统中的运用
下面主要描述Struts2,Spring和Hibernate三种开源框架在系统中的工作流程。
4.2.1 SSH2架构的工作流程
在线考试系统中的每个业务(用户请求的处理)涉及到整个系统的架构设计,以及Struts2,Spring和Hibernate的整体协作。图4-2描述了整个系统相互协作的过程。
图4-2 系统协作过程图
首先用户发送.do请求到Web容器中,Web容器分别调用编码转换过滤器,安全校验过滤器之后容器把请求交给Struts2处理,Struts2通过用户请求的路径在Struts2-config.xml匹配的对应配置信息包括Action信息和forward信息,此时由于Struts2-config.xml中的processorClass已经由Spring的DelegatingRequestProcessor来代替,因此Struts2通过Spring的Bean管理来获取Action实例,Action被定义在Spring的applicationContext.xml中,同时也定义了Action所需要注入的业务处理类Manager对象,由于Manager实现类又依赖于Dao接口,所以对应的Dao对象也同时注入到Manager中,至此Struts2获取了包含了具有处理业务能力的Action对象。
其次,Struts2触发Action对象的处理方法,此方法中调用Manager中对应的业务处理方法,如果业务有持久化需求,则调用Manager中的Dao对象将数据持久化到SqlServer数据库。
最后,Action调用完毕,返回对应的ActionMapping , Struts2根据ActionMapping信息渲染模板,将最终HTML输出交给Web容器,通过Web容器再发送到用户端,显示用户需要的最终结果。
通过SSH2架构实现的系统具有结构清晰,分层合理,各层直接松祸合等特点。
4.3系统关键模块的实现
4.3.1试卷与试题之间的关系和存储
试卷与试题是一对多的关系,在第三章中利用两个表来表示这种关系,通过关联,能够对试卷与试题建立起联系。
其中,因为题型不同,所以要区分试题的存储方式,试题存储的最大区别在于答案的存储。在本系统中,设置了主观题和客观题。对于主观题,统一采取直接存储答案的方式,因为它是主观评分且展现的时候只需展示题干部分,因为这样的存储可满足需求。对于客观题,由于是自动评分且展现的时候需要列出备选答案选项,所以要有规律地进行存储,采取的方式是将备选答案按照特定的符号区分来进行存储。
对于试卷的存储,要注意的是题目id列表的存放。由于在展现试卷的时候,要读取到题目id列表,因而要将题目规律地进行存储,以便读取的时候能够进行区分。采用的方式是在题型与题型之间利用特定的符号隔开,在题目与题目之间用另外一种特定的符号隔开,这样在读取题目id列表的时候就能够进行有效的分析和提取。
4.3.2试卷的展示
试卷的展示也是本系统的一大难点。基于前面对试卷中题目id列表的存储的分析可知,主要是分析此列表中的数据。根据特定的符号区分各种题型所拥有的id列表,然后再根据每题型具备的特点,列出每个题目。
4.3.3考试监控
考试监控属于管理员监考的部分。对考试即时监控,能够了解到考生当前的情况,利于管理员做下一步的决定。考试的监考主要是对考卷详细信息进行查询处理,因为此表中存放了考生考卷的当前状态。查询考卷的状态就能够获取考生考试的情况。此外由于考卷状态是动态更新的,这样就能够判断考生考试的情况,达到监考的目的。
4.3.4考试计时和显示剩余时间
考试时,需要在考试页面中显示计时和剩余时间。为了解决这个问题,需要利用Ajax技术实现。首先需要创建一个封装Ajax的JavascriPt函数AjaxTime.js,然后在开始考试页面中包含该文件。
实现自动计时步骤如下:编写调用AjaxTime.js的Javascrip函数,AjaxTime.js调用计时方法CIOCkTime(),在ClockTime()方法中,首先需要获取保存在Session中的考试开始时间,并将其转换为对应的毫秒数,然后获取当前时间的毫秒数,再将两者之差保存在ClockTime()方法的参数中,在考生考试页面中显示出来。
实现自动显示剩余时间步骤如下:编写调用AjaxTime.js的Javascrip函数,AjaxTime.js调用计时方法ClockkTime(),在ClockTime()方法中,首先需要获取保存在SeSSion中的考试开始时间,并将其转换为对应的毫秒数,然后获取当前时间的毫秒数,得到两者之差,再用考试总时间的毫秒数减去这一差值,保存在RestTime()方法的参数中,在考生考试页面中显示出来。
4.3.5安全问题
这里讨论的安全问题主要是指该在线考试系统应用程序级的安全。采取的安全措施包括用户密码的加密和角色分开管理两种。
1用户密码的加密
为了防止考生和管理员密码的泄露,采用MDS算法。MDS是一种不可逆的算法,它把所有的数据都转换成一个128的数据,而这个数据很难通过反函数的方式推导出原来的数据如果要判断某数据是否与原来的数据相等,只能把新的数据进行一次MDS变换,然后用该变换结果与原来变换结果比较,如果相等,则认为两个原始数据是相等的。在下文所有密码验证之处,都采用MDS算法,为节省篇幅,在具体模块实现时不再重复。
2角色分开管理
该在线考试系统角色分学员和管理员两种,为了避免角色混乱,在系统设计时,将学员和管理员两种角色分开存储,分别存储在学员信息表和管理员信息表中,两种角色登录系统时,分别登录到各自的界面。
4.4公共模块
在开发该在线考试系统过程中,遇到在不同的方法中处理相同问题的情况,为了避免重复编码,将这些处理封装到单独的类中。
4.4.1字符串处理类
在该在线考试系统时,要考虑中文乱码问题,因此需要编写一个独立的类Tostring来实现字符的转换。该方法还包含当值为null”时,转为空格,可以防止黑客利用SQL注入的方法来攻击系统。
4.4.2过滤器类
在该在线考试系统时,要对某些特殊字符加以过滤,因此需要编写一个独立的类Filter来实现对特殊字符的过滤。
4.5登陆模块
4.5.1考生登录系统设计
登录模块包括考试用户的登录和后台管理员的登录,两者实现的原理是相同的。登录模块实现进入系统的一个验证功能,主要是验证用户登录的时候输入的信息的准确性,确定用户的身份。此功能作为系统的初始界面来展示。
用户的登录信息验证主要涉及用户名和密码的匹配。根据输入的用户名和密码信息进行数据库的查询操作,如果在数据库中查找到相应的记录,即可判定输入信息有效,否则登录信息有误。在实现的过程中,需要将用户登录的信息加入Session对象中,这样可以限制非法用户再不登录的情况下进入系统的各个功能点。
系统主页面的顶端是菜单选择栏和个人信息展示栏。系统主页面包括:首页”、参加考试”、考试查询”、用户资料”、修改密码”、退出登录”等6个菜单。
下面进行考试用户登录的业务代码设计。
1.页面代码设计
用户登录的页面是系统的主登录页面index.jsp,页面触发的操作是logon,对应的操作类为LogonAction.java,其中页面包含一个显示管理员登录入口的链接,这个链接触发ShowAdminlogin.do的操作。
2.逻辑处理
在逻辑处理层,用LogonAction类来进行判断。
在代码中,通过调用CadetDAO类中的isUser()方法来判断验证信息Form里面的内容是否在数据库中存在。如果用户信息存在,则将其中的登录名信息放入到LogonBean的对象中,并将其加入到HttpSeession对象中,返回到考试系统的主页面;如果用户不存在,则返回到失效页面。
3.数据库操作
在业务逻辑层,登录操作主要用到CadetDAO中的iSUSer()方法来进行验证。这个方法通过准考证号查询出密码字段的信息,其中的查询参数由传入的LogomForm对象的属性来进行填充,如果找到的密码记录与LogonForm对象中的密码属性值相等的话,则返回true,否则返回fa1se。与数据库的具体交互过程,CadetDAO通过配置文件Hibernate.cfg.xml读取映射文件
line_cadet.hbm.Xml,通过该映射文件获得对象对应的数据表名lifle_cadet以及属性对应的数据表列名,然后通过反射机制获得持久化对象line_cadet.java的各个属性,通过Hibernate内部机制最终组织成与数据库交互的SQL语句,实现用户登录程序与数据库的交互。
4.5.2考生个人信息维护设计
考试人员个人信息维护模块的功能主要是维护考生的联系方式、修改密码等信息。根据传入的用户准考证号从数据库中查询出对应的记录信息,并展示给用户。其中,关键信息显示不可修改,而联系方式相关信息则可以修改,提交修改信息保存到数据库对应的记录中。密码的修改首先通过对输入的旧密码与数据库中的密码进行匹配,确认旧密码输入无误,然后利用验证后的新密码更新数据库中的旧密码。
在个人信息维护页面中,左边的栏目设计成不能维护的信息,这些敏感信息只能由管理员进行维护。右边的信息是考生自身联系方法的信息,可以进行维护。
在进行修改密码的时候要先输入旧密码,并输入新密码两次,进行新密码的确认,完毕后即可提交,如果没有信息、输入错误的话,提交即可成功。考生一般信息的维护同管理员对考生信息的维护类似,省略。这里着重阐述密码修改的操作。
1.页面代码设计
密码修改页面包含Form表单中的项,其中除了输入旧密码、新密码、再次输入新密码,还有一个隐藏的passwordPre,用于进行旧密码的核对。
2.逻辑处理
saveEditPwd操作,对应的类为EditAdminPwdAction.java。代码功能,首先得到传入的4个密码参数,然后得到Session中的Logon对象,从中得到一个字符串(即保存Session中的准考证号)赋给字符串对象logon,如果密码对比无误,则调用CadetDAO对象中的renewalPwd()方法来进行密码的更新,而logon对象是作为参数传入,最后返回成功页面;如果密码对比有误,则返回错误页面。
3.数据库操作
CadetDAO中的renewa1Pwd()方法代码,通过执行一个SQL语句进行密码的修改,传入的3个参数分别是新密码、准考证号、旧密码。当密码和准考证号都正确的时候修改密码。
4管理员登录系统设计
登录模块包括考试用户登录和后台管理员登录,两者实现的原理是相同的。
4.6考生管理模块
4.6.1增加考生设计
新增人员模块是人员管理模块中的一部分,主要实现对系统考试人员的添加。人员的添加是针对人员信息表进行数据的插入,其中对于有关人员的基础信息,首先存放在基础信息表里,在进行人员添加的时候取出其中的数据,选择相应数据之后进行添加人员的操作。
在本系统中,考试人员是由系统管理员进行添加的。管理员添加用户后,并将其状态设为有效”,用户即可登录系统。
在添加用户页面中,*号的项目是必填的,其它的项目由考生自己进行维护。必填项不能为空值,其数据格式也受约束。在该新增人员模块中,准考证号和Email地址必须保持唯一,且Email的值必须含有@”符号。在输入准考证号之后,光标移开输入框时,如果系统中有此准考证号和Email值,会出现提示错误。此处利用Ajax技术辅助实现。实现的原理是,在光标移动以后,利用doCheek,调用ajax_fune.js中的send_reouest方法,向服务器发起http请求,执行数据格式校验和唯一性校验工作。Seod_reqoest方法有3个参数分别为get、目标URL地址addCheck.jsp、准考证号或Email地址内容,如果输入框里为空值或格式不符,表单fellback_info的label会显示提示信息。如果用户己经输入准考证号或电子邮件,则Send_request方法将被调用,向服务器发送http请求,调用业务逻辑CadetACtion中findCadetByName()和findCadetByEmail进行唯一性判断,业务逻辑CadetAction再调用数据层CadetDAO进行数据库查询,对准考证号或者电子邮件进行唯一性。图4-3为准考证号唯一性校验序列图。
图4-3准考证号唯一性校验序列图
下面是增加考生代码分析。
1页面代码设计
在添加用户的操作中用到的页面是addCadet.jsp,其中的代码主要功能是对Form对象的属性进行设置。调用业务逻辑CadetAction中findCadetByName()和findCadetByEmail进行唯一性判断。根据查找的结果,在被包含的addCheck.jsp显示提示用户名是否可用信息,最终在addCadet.jsp显示信息。
2.逻辑处理
在逻辑层用到SaveAddCadetAetion。
处理的过程首先是对传入的ACtionFor:对象进行类型转换,转换成ACtionF0rm对象,然后对Cadet对象中的属性通过CadetActionForm对象中的属性值进行设计,最后调用CadetDAO对象中的addCadet()方法进行数据库操作,并返回到成功页面。
3.数据库操作
CadetDAO对象中的addCadet()方法中的代码功能,首先进行插入操作,然后对要插入的数据的数据库进行更新,以达到插入新学员信息的目的。
4.6.2维护考生信息设计
人员维护管理模块主要是对已经添加的人员信息进行数据的维护,包括:用户的信息修改、用户的删除、查看用户开始的历史信息、密码恢复等。
人员维护管理的实现是通过对人员基础表中的信息进行修改和查询来完成。将某一个用户的准考证作为参数传入相应的业务操作中,进行每条记录的修改,即完成某种人员维护的管理。
管理员在添加用户之后可对用户的信息、进行修改、删除、密码恢复,以及查看用户考试的历史信息。
在考生列表页面中,列出所有考生的考生信息,包括:准考证号、考生姓名、性别、年龄、考生状态、所属机构!、岗位、电话。以及详细信息”和重置密码”两个链接操作。详细信息链接是用来查看考生的过去所参加过的考试的全部信息,而重置密码则是在用户忘记了密码的时候,将用户的密码重置为初始值。当管理员点击考生姓名”链接时,可以对考生的个人信息进行修改。
在这个页面中,可以通过修改考生的状态为冻结”,使得考生无法登录。以上就是学员信息的总体介绍。
1.页面代码介绍
考生列表的页面代码中,通过遍历页面得到的Cadets对象,列出每个cadet的各个属性的值,并加上三个链接操作。这三个链接操作分别带有cadetid参数,来进行修改用户个人信息,查看考生历史考试信息,重置用户密码等操作。
2.逻辑处理
由页面代码介绍知道,在此层用到的类有:EditCadetACtion、CadetTest、PartieularsAetion、SaveEdiqCadetAetion.java。
EditCadetAction.java,代码功能首先得到要修改的用户的准考证号,然后通过CadetDAO类中的findByKev()方法查处此对象记录,根据此用户对象中的各个属性值,设置要带入修改页面中的ActionForm对象的各个属性,最后带入到个人信息修改页面。
SaveEditCadetACtion.java,代码功能,首先得到要重置密码的用户准考证号,该准考证号也是登录的初始密码。通过CadetDAO类中的reInitPwd()方法类重置用户的密码。
3.数据库操作
上面提到在用户信息维护时,主要用到了CadetDAO类中的几个方法,包括findByKey()、reInitPwd()。
findByKeyO,通过对FIND_BY_KEY语句进行数据库查询得到结果集,将结果集中的数据赋值给Examniee对象中的各个属性,最后返回这个Cadet对象。
reInitPwd(),将密码重置为用户的准考证的值,亦即初始值。
4.7试卷管理模块
4.7.1题库管理设计
在进行题库管理的时候,需要进行多种题型的题目的添加、修改和浏览,而各种体型所具备的特质是不一样的,因而在逻辑处理方式也要有所不同。
数据库分析中己经指出题目的信息存放在两个表中,一个是试卷基础信息表,一个试卷的详细信息表,这样的好处是减少了数据的冗余。存放题目时,在对于题目的答案存放上有所不同。例如,对于单选题哪个企业应用集成技术可用来保障集成事务的完整性”,将考生答案这样存放在t_answer字段中:事务处理监控器消息中间件##数据库网关##工作流技术”,通过##0区分每一个选项;对应于标准答案t_solution字段,存入正确选项为A。这样就可以通过对/##0的切割,来获取每个答案选项以便在页面中进行展示,而利用标准答案来进行对比。多选题与单选题类似。填空题则在字段t_a此wer中不存放任何内容,只在t_Standand字段中存放标准答案的内容,标准答案中每个空的答案利用,”隔开,以便进行手工评分的处理。简答题与填空题类似,都属于主观题的范畴。
题库管理页面设计。首先设计题目的添加页面。根据各种题目添加的特点,需要针对每种题型设计各自的添加页面。这里介绍单选题和填空题的页面设计。
在单选题的添加页面中,在界面顶部定义单选题的基本信息,包括所属题库、知识点、分值、难度等,在页面中间是题目所要表达的内容项,在页面下部则是此题的答案的填写和相关图片的上传。在单选题方面,设置的是radio组来处理;而对于多选题,则是用CheCkBoX组进行处理。在进行题目添加完毕以后要返回一个考题列表页面,因而要对这个页面进行设计。
在考题列表页面中,列出己经添加了的题目的基本信息,包括试题流水号、类型、所属题库、题目内容简介、知识点、难度、分值等,并且在操作栏目有一个查看”按钮,点击按钮即可查看选中的题目的详细信息。在页面的上方设有一个删除按钮,可以对选中的题目进行删除操作。
下面,就题库管理中所要实现的功能,进行业务代码的分析和设计。首先介绍页面代码,接着介绍业务逻辑处理代码,最后分析数据库操作的代码。这里,先介绍单选题的页面代码设计。
1.页面代码设计
添加单选题设计的代码页面为f_add_Single.jsp,在这段代码中,设置了表单提交的时候所触发的操作为AUD一ThemeACti.d,并且在进行操作的时候带参数,根据不同的参数,触发不同的添加操作方法。
在代码中,设置了表单中要提交的有关题目的基础信息,包括题库类别、知识点、分值等。
根据添加单选题的特点,设置radio组来进行答案的添加。分别设置radio的值为A、B、C、D,在提交的时候即可正确的添加选择的答案项。
2.逻辑处理
由上面form中的action属性可知,表单提交到AUD_ThemeAction进行处理。这段代码功能如下:
(1)如果文件不为空值的话,上传文件,并设置题目的图片路径。
(2)根据所传入的题型参数设置题型。
进行首字母的判断,是S”的话就是单选题,然后对单选题的题目信息进行处理,并从基础信息中找到题型对应的id。
(2)将题目的信息加入数据库中。
调用试题的DAO类进行数据库操作,最后返回题目列表页面。
3.数据库操作
从上面的代码中可知,使用了DAO层的ThemeDAO类中的addTheme()方法。首先设置SQL语句ADD_THEME中的参数。
添加题目的操作基本上都是类似的,只是在进行答案存储的过程中有所不同,客观题的存储涉及选择项的存储,而主观题只需要将答案直接存入数据库中对应的字段即可。
填空题添加的页面与选择题添加的页面在上部和中部都是一样的,只是在下部填写答案的时候使用一个TeXtArea来进行处理。简答题的添加页面同填空题类似。
4.7.2试卷管理设计
试卷管理包括试卷的新增和维护,是建立在题目已经初始化了基础之上的。现在介绍如何进行是试卷管理的设计。
试卷的添加过程是试卷管理的核心过程,分两步来进行。首先是进行题目策略的选择,也就是对题目的选择;其次是进行试卷基础信息的添加过程。在进行题目的选择时,根据不同的题型进行添加,最终将各种不同的题型的题目存储成一个字符串,保存到数据库表中对应的字段。例如某一张试卷的题目列表的存储内容为:@@##28@@##19@@##12@@##26@@##13”。在此字符串中,利用@@”来区分题型,而利用##”来区分每种题型中不同的题目,其中的数字代表题目的id。这样,就能够按一定规律存储一张试卷。这种字符串处理过程,利用通用的公共模块来实现。基础信息添加完毕后,一张试卷即可产生,同时要将这张试卷的状态设置为已生成未分配”。
对于试卷管理的页面设计,思路是:在页面中设置一个基本信息栏和一个试卷选题策略栏。
在试卷选题策略栏”,设置一个题型的列表,包括:单选题、多选题、填空题、简答题。分别在各自的题型上添加各自的题目,选择题目以后,会动态地在列表中显示所选题目的基本信息,包括:考题列表、总数量、难题数量、中等难度题数量、容易题目数量、此类型题目总和等信息。在设置的时候,首先进行试卷选题策略”中的选题工作,然后再进行基础信息的填充。
以上信息都处理完毕后即可进行提交的工作。
在进行选题的时候,需要一个选题页面。
设计的选题页面中列出了所有可以进行选择的题目的信息。选择某条题目信息可以进行查看操作。勾选上要选择的题目,提交以后即返回选择的题目列表id信息到试卷中。
在试卷提交以后,会返回到一个试卷列表的页面。
这个页面罗列出所有试卷的基本信息,选择某个试卷,可以预览试卷的信息,同时,可以进行试卷修改和删除操作。
以上是关于试卷管理的一个总体分析,下面具体分析一下这些功能是如何实现的。
1.选题操作
由于各种题型的不同,需要设计不同的选题的页面来进行选题的操作,分别设计四个页面,进行单选、多选、填空、简答四种题型的添加过程。下面介绍添加单选的操作。
(1)页面代码设计
这段代码列出所有可选择的题目信息,包括id、知识点、难度、分值、链接图片等,并且设置一个可以查看的操作。
当点击添加单选操作链接的时候,触发添加单选题目的操作,并带上两个参数,前一个参数是单选题型的id,后者说明添加的是单选题。
(2)逻辑处理
逻辑处理的代码,首先得到选中的CheCkBOX的值,这个值本身就是存储题目id的数组,返回。然后将这个字符串组有规律的进行连接,返回一个字符串。将这个字符串临时写入数据库相应的字段,并返回继续选择题目的页面。
这样的处理是为了在进行选题的时候能够从数据库中读出哪些题目已经被选择,将其定为不能选”的状态。
(3)数据库操作
在这个模块中用到的StaddlePaperDAO中的addEXamintionPaper()方法。
2.试卷添加
在选题操作结束后,需要对试卷的基本信息进行完善。在填写试卷的基本信息之后,才能进行试卷的添加。下面介绍试卷的业务代码。
(l)页面代码设计
试卷添加的页面代码包括两个按钮,一个是添加选择试题,一个是清空己经选择的试题。
(2)逻辑处理
在逻辑处理层用到了Addstaddlel,aperAction操作。方法调用数据库的操作类StaddlePaperDAO的更新方法,来进行添加上面己经添加的试卷记录,并将试卷的状态改为己生成未分配”。
(3)数据库操作
各种操作都用到了StaddlePaperDAO类,这是个对于有关试卷信息进行数据库操作的类。
StaddlePaper方法用来添加一个试卷记录到数据库中,其中SQL语句对应的代码,插入题目列表用到了特殊的字符来进行分隔,而插入起止时间则是默认的插入当前时间和晚一点的日期时间。
图4-4为试卷添加序列图。
图4-4添加试卷序列图
4.7.3开启试卷设计
启动试卷的设计是对要参加考试的考生进行考卷的分配,使得考生能够得到相应的考卷。它针对的是已生成未分配”的试卷,将选择了参加此试卷考试的考生的id列表存成一个字符串,存入试卷的基础信息表表中对应的字段,例如,##20080001##20080002##20080003”,通过##”分割每个考生的准考证号。利用这种分割,可以获取到每个考生的准考证号,然后在考卷基础信息表中分别加入每个准考证号对应的考卷信息,同时将试卷的id加入到对应的字段中。此外,进行考卷详细信息表的添加操作,获得每个考卷题目列表信息,进行题目的id分割,得到每个题目的id,逐一加入到考卷详细信息表中。最后,将考卷的状态改成开考”,而每张考卷的状态设置为未考”,
整个过程结束。
下面进行页面详细的设计。在试卷生成以后,要进行试卷的分发。分配给考生,并且执行了开考操作以后,考生即可登录进行考试。在试卷分发页面中罗列出当前待分配的试卷信息列表,并设有一个分配考生的链接。点击这个链接进入考生选择页面。在考生选择页面中,可以进行考生的选择,勾选完提交,就将当前的试卷分配给了考生。
可以看到,试卷分发页面中的操作栏多出了一个开考链接,点击开考链接即可开考,考生登录系统就可以进行考试。接下来,重点介绍考生分配的操作。
1.页面代码设计
考生分配的页面是cadetChooser.jsp,程序功能是对考生的信息进行定位,可以通过查询所属机构!职务来定位考生的信息。
页面中触发的操作SaveChooseCadetAction,其对应的类为SaveChooseCadetAetion.java。
2.逻辑处理
由上面的页面代码设计可知,在逻辑处理层用到了SaveChooseCadetAction类。首先是得到一个包含被选中的考生id数组,然后对其代码进行格式化,并返回一个字符串eLIS,取得试卷状态为已分配未进行”的代码id,并调用StaddlePaperDAO类中的renewa1s_COndition()方法将试卷的状态改为己分配未进行”,最后返回成功页面。
3.数据库操作
这个层主要用到了CadetChooserDAO类和StaddlePaperDAO类中的方法进行数据库操作。
CadetChooserDAO类的renewall_ist()方法是更新数据库中的试卷id和其对应的考生列表id。StaddlePaperDAO中的renewa1s_eondition()方法用来更新数据库表中的试卷id对应的试卷状态。也就是更新lins_staddlepaper表中的s_eondition和5id字段。
图4-5为开启试卷中考生分配序列图。
4.8考试管理模块
4.8.1考试项目管理设计
考试项目模块,主要是列出登录的某个考生待考的考卷信息列表,这是通过对考卷基础信息表进行查询来完成的。在基础信息表中查找对应此考生准考证号的记录信息,从中国过滤出考卷状态为未考”的考卷信息,此结果集即为该考生的待考试卷列表。
由上面的系统登录后主界面设计可知,当用户登录系统以后,系统主页面列出6大功能点。其中参加考试”功能点是列出当前登录用户待考试的考试列表。
这个页面列出了当前用户待考的考试项目,包括试卷名称、试卷类型、起止时间、总分、通过分数、答题时间,以及参加考试”操作。下面分析这个过程的代码。
1.页面代码设计
该页面代码,首先遍历staddlePaperset对象中的记录,并将其列出来,而staddlePaperset对象则是经过StaddlePaperLIStAction操作后传入此页面的。在页面中定义了一个FoI.m,包含一个隐藏字段S_id,,亦即试卷的id,,在提交Form时候带上此参数即可显示有关此试卷的详细信息。
2.逻辑处理
在此层,主要用到的是StaddlePaPerListAction类的操作。在这段代码中,首先根据从Seesion中取得的用户准考证号进行数据库查询,通过staddlePaPer0A类中的getsearcho方法。通过执行查询语句,,其中的参数为考生的准考证号,查询出来的记录逐一加入到list对象中,并返回之。
4.7.2参加考试设计
参加考试模块是系统前台的核心模块,其功能是使登录的考生能够进入其待考的某个项目,并展示出这张考卷的内容,考试完毕之后提交考生作答的内容,完成考试。
考试的实现主要是通过对考卷的状态来进行控制的。当考生进入了某个考卷后,此考卷对应的状态改变为进行中”,当考生提交了考卷信息后,此考卷状态变为己考完未评分”。考卷状态的控制是这个考试过程的核心内容,这关系到后续的评分和查询等操作的顺利完成。考卷的展示过程,主要通过对考卷详细信息表,以及题库信息表的操作来完成。首先,根据考卷的id从考卷详细信息表中提取考题id列表,然后根据考题的id在题库信息中查询出每个考题的详细内容,最后以一定的格式展示给考生。
此外,在进行考试的时候过程中,需要一系列的辅助措施。第一,要给考生考试总时间的提示,用设计的JS函数来实现;第二,,要有当前时间的提示,有一个时钟信息提示用户已经进行了多长时间,同样是利用JS函数来实现;第三,考试时间截止前一分钟,对考生进行提示。这里的操作都是根据考生登录的考试项目的时间来进行。
在列出了待考的试卷以后,考生就可以通过单击参加考试”按钮来进行考试了。
考试试卷页面的设计是按照一张试卷的模样来进行的,依照单选题、多选题、填空题、简答题的顺序来进行排列。在考卷的上面还有时间提示。在考生完成试卷之后即可进行交卷操作。下面来分析一下这段操作的代码。
1.页面代码设计
显示试卷的页面代码,在进行提交的时候触发saveTestPaper.do操作。其它部分则是Form表单的内容。
2.逻辑处理
上面提到触发Save1.estPaper操作,其对应的类为SaVeTestpaperAetion.java,代码功能如下:
(l)得到各种题型答题的结果集合;
(2)得到用户提交的答案,其中answerl包含的单选的答案,anSWerZ包含的是多选的答案;
(3)开始准备更新数据库表lins_testpaperpartiColar中的信息;
(4)更新单选题的信息,和标准答案进行评分,得到单选的得分;
(5)更新多选题的信息,比较多选答案,得到客观题的总得分;
(6)更新填空题的信息;
(7)更新简答题的信息;
(8)完成对表lins_testpaper的更新,主要是更新考卷的状态以及考卷的总分,并返回成功提交页面。
3.数据库操作
数据库操作与上面类似,限于篇幅,略。
4.8.3考生查询成绩设计
考卷成绩查询是在整个考试结束之后进行的。考生可以查询出所参加的所有考试的考试成绩,并且可以详细查看考试的详细信息。考卷成绩查询是通过对试卷基本信息表以及考卷基础信息表的处理来实现的。首先查询此登录用户的对应考卷信息,如果对应的考卷所对应的考卷状态为己结束”,则此条信息符合查询条件,并列出此条考卷信息,显示考生的得分。考卷的状态在考试结束时间变成己结束”。考试结束以后,管理员可以进行评分。评分结束以后,考生即可查询其考试的成绩。
此页面的设计与参加考试列表页面设计类似,不同之处在于,通过点击考试名称链接,可以查看到考生的考卷具体信息,考生可以通过比较标准答案,
找出自己的不足。由于整个流程的处理与考试项目设置功能点类似,限于篇幅,这里只介绍一下查询显示试卷的代码。
1.页面代码设计
查询显示试卷的页面的设计同考试项目设计”中的考试信息列表页面类似,限于篇幅,省略。
2.逻辑处理
逻辑处理用到的是工nqueryEXamACtion.java。代码功能:
(l)设置考卷的id;
(2)设置考卷的其它信息,包括设置考生的姓名、开始时间、结束时间、得分、自动评分的得分;
(3)根据5id查询题目信息集合;
(4)根据转换类得到单选题、多选题、填空题、简答题的基础信息id;
(5)通过循环分别得到具体的单选题、多选题、填空题、简答题集合;
(6)设置要传入的inqueryExam.jsp页面的examTestAetionForm对象的几个属性,包括单选、多选、填空、简答题的集合;最后返回到inquryExam.jsp页面中进行显示。
3.数据库操作
数据库操作与上面类似,限于篇幅,略。
4.9考务管理模块
4.9.1在线监考管理设计
考试时,有必要对考试的过程进行监督。这个在线监控管理功能就是来实现这个监督效果的。可以设计一个控制台来对每个考生的考试进行监督,可以查看到当前考生参加考试状态。
在线监控是通过考卷基础信息表的查询来完成。针对某个试卷的id,在考卷基础信息表中查询出其对应的考卷的信息列表,这样也就列出了所有考生的考试信息。此功能的实现还需要考虑到考试是个动态的过程这个特点。因而,每个考生的考试信息都是在动态变化的,还需将此功能设置成动态更新的,所以利用页面的刷新来实现这样的效果。在线监控的形式相当于真实考试中的监考,因而要设计一个监考的控制台页面,设计的效果如图4-6在线监控页面界面图所示。
由图4-6在线监控页面界面图可以看出,这个页面分为两个部分:上部是显示试卷的基本信息,下步是显示考生的记录信息。这个页面设计成每隔一段时间就刷新一次,己获得最新的考试状态。此外,单击缺考人员按钮可以获得缺考人员的信息。下面进行在线监控管理的代码分析。
1.页面代码设计
控制台的显示页面代码是从Form中抽取出来的表单中的一些属性设置,用来显示试卷的基本信息。代码中当提交缺考人员”操作时,触发absenCeACtion.do操作,并传入一个S_id。
2.逻辑处理
向该页面传送数据的操作是Contro1ACtion.java类,代码功能如下:
首先,通过上述代码获得试卷的id号Sid。
接着,根据S_id的值利用StaddlePaperDAO类中的findBykey()方法来获得StaddlePaper对象,然后将其加入request对象中。
最后利用TestPaperDAO类中的getByS_id()方法得到对应S_id的考卷的列表信息,并将其放入request对象中,返回到s_control.jsP页面。
3.数据库操作
上面提到了TestPaperDAO类中的getByS_id()方法,其功能执行了一条查询语句,通过加入参数Sid(试卷编号)以及一系列的条件来查询对应的结果集,然后将结果记录一一加入到集合对象中,并返回。
4.9.2考卷评分设计
考卷的评分是针对考卷中的主观题而言的,客观题在考卷进行提交的时候己经自动评分。考卷评分的过程是一个层层推进的过程。首先确定某一次考试要进行评分,接着确定某一张考卷要进行评分,最后确定这张考卷中某个考题的评分。在每个考题进行评分后,即在数据库中更新此考题的评分,考卷中所有的题目评分结束之后,提交考卷评分,计算出总分保存到数据库中。在提交考卷评分后,考卷的状态更新为已评分”。
管理员在评分列表页面中打开一条试卷的评分信息之后,应该出现一个待评分的考卷列表,因而,要设计一个与之对应的页面。在这个页面中,列出所有己考完的考卷信息,包括准考证号、姓名、试卷名称、起止时间等基本信息。此外,还有一个操作链接评分”,点击此链接会出现具体题目评分列表信息页面。
这个页面显示的就是当前要被评分的考卷的具体题目评分列表信息。可以通过查看”链接查看每条答题的详细信息,然后给出分数。
这个页面列出题目的标准答案和考生的答案,同时列出题目的分值以及考生本题得分的文本框。管理员在本题得分栏填写不大于题目分值的数目,提交即为考生本题给出了分数。评分是一个联系重复的过程,当所有题目都给完分数以后,即为试卷评出了总分。下面介绍业务代码。
1.页面代码设计
在页面层设计如下三个页面。
(1)S_manner_Staddle.jsp:用来显示一次考试中的考卷列表信息;
(2)e_manner_test.jsp:用来显示一张考卷的考题列表信息;
(3)e_manner_theme.jsp:用来显示一张考卷中一个考题的详细信息;
(4)e_manner_test.jsp页面程序功能,在提交考分计算的时候,触发mannerAction.do操作,并带有参数countTotatValue。
(5)s_manner_theme.jsp页面代码功能:在页面提交的时候,触发mannerAction.do操作,并带有参数SaveGrade。
2.逻辑处理
这里介绍GradeAction.java类中的counTotalValue方法。首先利用TestPaperParticular DAO对象中的countTottalValue()方法来计算总分,然后得出手工的分数,并且将考卷的状态设置为己评分”,最后利用TestpaperDAO对象中的renewa1TestPaper()方法来更新考卷的信息。
3.数据库操作
上面提到了TestPaperDAO对象中的renewalTestPaper()方法。通过执行SQL的更新语句,带有4个参数,分别是:手工评分、总分、考卷状态以及考卷id,并将传入的4个参数,最后执行更新操作。
4.9.3考试分析管理设计
考试分析主要是统计考试的一些数据和指标,用来给决策者作参考。
考试分析通过多表关联的查询来进行分析,主要分两个部分:一是本次考试的考生名次,二是分数段人员数量和百分比的统计。考生的名次可以通过查询考卷基础信息表中的考试总分来进行排序。分数短的统计则根据count()函数来计算某个段的考生人数的数量。对一次己经结束的考试进行统计分析,有助于管理决策人员了解考生的情况,为继续作决策提供数据支持。在需求分析中己经提到,对已经结束的考试要能够进行统计,因而需要设计相应的统计页面。
在这个统计页面中,将页面分为两个部分。在上部分列出考生的名次表,分数由高到底依次排列;在下部分进行本次考试的分数段统计,10分为一个分数段进行统计,统计包括百分比和具体的人数。下面进行业务代码设计。
1.页面代码设计
在页面表示层,代码功能,遍历testPaperList集合对象中的每一个paper对象,列出考生考试的名次。遍历ScoreLISt集合对象中的每一个score对象来列出考试的分数段统计。
2.逻辑处理
在逻辑处理层,通过StatistiCACtion.8ava类中的方法类处理数据,然后传入s_statistic.jsp页面中代码功能,根据传入的参数,通过TestP即erDAO类型的对象中的Sorting()方法来进行数据处理,返回一个ArrayLISt类型的对象,并将其加入到reques七对象中。
根据传入的参数,通过Test尸aperDAO类型的对象中的statistic()方法来进行数据处理分数段统计的工作,返回一个ArrayList类型的对象,并将其加入到request对象中,并使页面转到s_statistic.jsp。
3.数据库操作
由上可知,在数据库操作层主要用到了TestPaPerDAO类中的方法sorting()、Statistie()。这里只介绍sorting()方法。在这段代码中,执行了一条SQL语句,传入参数S_id,将结果集逐一加入到集合对象list中,并返回。SQL语句,通过一系列的条件组合,最后按照总分的倒序将结果排序。
第五章 总结与展望
5.1论文工作总结
本在线考试系统包括登录模块、考生管理模块、试卷管理模块、考试管理模
块和考务管理模块等五个功能模块。
该在线考试系统采用面向对象的、跨平台、易于扩展的JAVA编程语言开发,体系结构采用开源框架Struts2体系,Struts2属于JZEE技术范畴,是一个为开发基于模型(Model)一视图(View)一控制器(Controller)(MVC)模式的应用架构的开源框架,具有MVC模型、视图、控制器相分离的优点,同时简化了基于MVC的web应用程序的开发在该在线考试系统研发过程中,采用Struts2能充分满足应用开发的需求,为Web应用的开发和维护带来以下好处:利用Struts2提供的taglib,节约开发时间;表现与逻辑分离;组件模块化,结构层次分明,维护扩展比较方便;便于开发与设计分工,便于团队开发;可以提高系统的可维护性和可重用性;对其它技术和框架显示出很好的融合性。Hibernate技术和Ajax技术的使用,进一步提高了系统的开发效率、运行性能以及易维护性。该系统的部署形式为B/S模式,功能符合实际考试步骤,成功地实了无纸化考试、题库管理、阅卷评分、成绩管理为一体的多种功能,操作简单方便,无需专业培训,利用浏览器,即使不熟悉计算机的教师也可以轻松快速完成题库维护、出卷、评卷、阅卷工作。该在线考试系统的功能基本完整,系统的关键部分集中在题库的存储、试卷的存储、考卷的管理、考试的管理、考试监控上。

5.2展望
本系统在设计时受技术与时间所限制,虽然实现了基本功能,还是有一定的不足之处有待改进与完善:
1.题库的保密性方面
需要对生产试卷作加密处理,答题前需要进行解密,并且需要对答案也加密。减少泄密的可能性。
2.考场的安全公正方面
考试监控有待进一步加强,可能会有考生替考。为防止考生作弊,可增加摄像设备在学生答题时将脸部信息传送到数据库与考生档案中照片进行对比。
3.系统的智能化与多媒体方面
日益发展的多媒体方面的技术,本考试系统未运用到对声音信息的处理,在试题中不能嵌入声音,使得英语听力、口语等考试未能在计算机上实现。
在论文的完成过程中,由于水平有限,文中的错处与不当之处在所难免,本人今后一定不断努力学习新的技术,提高研究问题、分析问题、解决问题的能力,完善系统的不足之处,不断完善考试需求。
参考文献
[1] blog. Struts体系结构与工作原理[EB/OL/]。
http://hi.baidu.com/gaterking/blog/item/7289b507b70bc2ca7a8947ff.html,2008-11-15
[2] 陈源,张新林、计算机应用基础课程无纸化考试系统研究[J].电脑开发与应用,208,209.
[3] 刘娜,基于AJAX技术的网上考试系统的改进[J].计算机教育2008(3):58,59.
[4] 孙卫琴 精通Struts2:基于MVC的Java Web设计与开发 电子工业出版社
2004年 P114-P148
[5] 林信良 Spring技术手册 电子工业出版社 2006年 P98-P156
[6]Christina Buaer, Gavin King. Hibernate In Action. Manning Publications, 2005,
11(8): 63-64
[7] 刘晓华 J2EE企业级应用开发 电子工业出版社 2003年 P123 - P125
致 谢
在此毕业设计为时两个月,由于时间和能力的限制,难免出现许多不足之处,感谢我的导师杨林根老师,在我的学习和生活上给予了我无私的指导和帮助。杨老师广博的学识、敏锐的思维令我钦佩,严谨求实的治学态度,孜孜以求的钻研精神使我深受感动,他的严格要求和悉心指导将使我终身受益。在论文撰写的过程中,从最初的选题、资料收集、开题,到深入研究和具体撰写的每一个环节,都得到杨老师的悉心指导,在此对恩师致以崇高的敬意和诚挚的感谢!
感谢广东白云学院电气信息工程学院,为我提供了良好的学习环境,锻炼了我的动手能力和科研素质。
感谢大学期间和我一起学习生活的同学们,这四年来大家相处融洽、诚恳相待、互助共勉,度过了一段美好难忘的时光。
我还要感谢我的父母和亲朋好友,他们给与我无私的关爱和物质支持,成为我努力学习、拼搏上进的巨大动力。
感谢理解、关心和帮助我的所有人!
应用程序客户端
动态HTML页面
JSP页面
Enterprise Beans
Enterprise Beans
数据库
数据库
J2EE
应用程序1
J2EE
应用程序2
客户层
Web层
业务层
EIS层
客户端
机器
J2EE
服务器
数据库
服务器
模型(Beans)




事件转发
浏览器
视图(JSP)




控制器(Servlet)
请求
请求
Dao类
提交
表示层
业务层
Structs2-MVC
Structs2 Action
ActionForm
JSP
Structs2-config.xml等
Spring
Hibernate
Transections
Hibernate Secsion
Management
BusinessService
Classes
DataSource
/Connection
Pool
Query language

持久层
域模块业务对象
浏览器
数据库
浏 览 器
Web
服务器
Structs2
Config.xml
控制器
ActionServlet
视图
JSP
Action
Action
Action
模型
JavaBean
EJB
Spring AOP
Spring ORM
Spring DAO
Spring Web
Spring Context
Spring Web
MVC
Spring Core
Application
Hibernate
Properties
XML Mapping
Persistent
Objects
DataBase
在线考试系统前台
考生登陆系统
考生修改密码
考生修改信息
参加考试项目
考生结果查询
考生退出系统
考试试卷列表
考生参加考试
考试查询成绩
查询标准答案
在线考试系统后台
管理员登陆系统
考生管理
题库管理
考卷管理
考务管理
辅助管理
浏览考卷
增加考卷
在线监考
考卷评分
增加考生
考生列表
考试记录
浏览题目
增加题目
启动考试
考卷评分
修改考生
删除考生
修改题目
删除题目
修改考卷
删除考卷
分发考卷
开始考试
考生登陆系统
考生登陆
在线考试系统前台主页
修改密码
考生修改密码
考生修改信息
修改信息
点击参加考试连接
考试试卷列表
提交试卷
考试结束
考试结果查询
考生查询成绩
查询试卷标准答案
查询标准答案
退出系统
退出系统
管理员登陆系统
登陆
在线考试系统后台主页5个主页菜单
考生管理
题库管理
试卷管理
考务管理
退出系统
点击
点击
点击
点击
出现2个菜单
出现5个菜单
出现2个菜单
出现2个菜单
增加考生
考生列表
新增单选题
新增多选题
新增填空题
新增简答题
浏览题目
浏览试卷
增加试卷
考卷管理
考卷评分
点击
点击
点击
点击
出现4个菜单
出现4个菜单
分发试卷
考试分析
点击
分配考生
点击
考试考试
点击
在线监考
恢复初始密码
修改考生信息
历次考试记录
删除考生信息
修改题目
删除题目
修改考试
删除考试
浏览器
Web服务器
数据库服务器
依赖关系增强
依赖关系递减
视图层(View)
JSP
控制层(controller)
Action文件
模型层(Module)
数据访问对象(DAO)
持久层(Hibernate)
Hibernate数据库持久化
Spring管理对象
Struts2 MVC配置文件
获取
调用Action中的对应方法
用户请求
*.do
Web
用户界面
Web
容器
(Tomcat)
编码转换过滤器EncodingFilter(/*)
安全校验过滤器SecureFilter(*.do)
N
安全验证通过
Action
Servlet
Struts2配置文件
Struts2-config.xml
ActionMapping
DelegatingRequestProcessor
(获取Struts Action实例)
Spring配置文件
applicationContext.xml
Manager接口业务逻辑对象
调用业务逻辑
Spring封装的
HibernateDaoSupport
继承BaseDao的具体Dao(UserDao,RoleDao等)
Hibernate
ORM映射文件
Sql Server
Y
PAGE

基于web的在线考试系统的设计与开发相关推荐

  1. 基于Web的在线考试系统

    基于Web的在线考试系统     二十一世纪的今天,随着社会的迅猛发展,科技也越来越发达,互联网已经遍布于家家户户,深入到人们的日常生活中.网络技术给我们当今的教育方式的带来了一次历史性的变革,在线考 ...

  2. pop客户机程序流程图_基于.NET的在线考试系统的设计与实现

    基于.NET的在线考试系统的设计与实现(包含任务书,开题报告,毕业论文19000字,程序代码,数据库) 摘  要 随着互联网的发展,人们已经进入了信息时代.在这种环境下,学生希望得到个性化的满足,这使 ...

  3. php考试系统毕业论文,基于PHP的在线考试系统的设计与实现

    摘 要 本文讲述基于PHP的在线考试系统的设计与实现.首先将题目从题库中抽取出来保存在数组中,然后再对题目数组进行随机抽题,将抽取的题目保存在每个考生的信息中.在做题的过程中还要将考生的答题情况也保存 ...

  4. 基于php的在线考试系统论文,基于php的在线考试系统的设计与实现 论文.docx

    郑州轻工业学院本科生毕业设计(论文)题 目:基于PHP的在线考试系统的设计与实现学生姓名:XXX专业班级:计算机科学与技术X班学 号: XXXXXXXX院 (系):国际教育学院指导教师(职称):XX( ...

  5. 考试 mysql 数据库设计_基于MySQL的在线考试系统数据库设计

    2017年第8期信息通信2017 (总第176 期)INFORMATION & COMMUNICATIONS (Sum. No 176) 基于M ySQL的在线考试系统数据库设计 陈松楠,侯丽 ...

  6. 基于JavaWeb的在线考试系统的设计与实现

    目 录 摘 要 Ⅰ Abstract Ⅱ 1 绪 论 1 1.1 背景 1 1.2 国内外现状 2 1.3 系统开发的目标与意义 2 1.3.1 系统开发目标 2 1.3.2 意义 2 2 开发技术背 ...

  7. 基于springboot的在线考试系统的设计与实现 毕业设计毕设参考

    后台功能 (1)网站初始化:设置网站名称.关键字.描述等 (2)系统设置:设置关于我们.联系我们.加入我们.法律声明 (3)资讯录入:选择资讯分类.录入资讯标题.简介.内容等 (4)资讯管理:查看所有 ...

  8. 基于java web的在线考试系统(源码+论文)

    今天介绍的一个项目是, 基于java web的在线考试系统 1 设计内容及要求 1.1 在线考试系统概述 基于Java web开发的在线考试系统不仅可以充分利用校园内各种资源,对学校的各种教学资源进行 ...

  9. 基于Java Web的在线考试系统的实现

    摘  要 随着互联网的发展,教育的方式逐渐步入信息化.智能化,网络教育逐渐成为教育未来发展的重要趋势,在线考试系统成为教育成果考察的主流方向.在线考试充分利用现代信息化技术的优势,使考试更方便.更高效 ...

最新文章

  1. Apache Flink 1.10.0 发布 | 云原生生态周报 Vol. 38
  2. 百练OJ:2943:小白鼠排队
  3. mysql 数据库学习(触发器)
  4. 【git】.gitignore文件
  5. django 转发_教你搭建Django环境,就是这么简单
  6. dovecot mysql_dovecot+mysql
  7. (3)FPGA面试技能提升篇(TCL脚本)
  8. 【Java数据结构与算法】第十四章 红黑树
  9. Vue中Three.js的天空盒
  10. Happy Week
  11. JAVA回合制pk游戏
  12. 企业数字化转型,运营人员如何构建数字化运营能力?
  13. matlab中kesi是什么意思,matlab作业简要分析
  14. 打印纸张尺寸换算_纸张的尺寸规格对照
  15. 关于瑞星杀毒软件无法完全卸载、自动重装的无奈,与相应的解决办法
  16. 求最小公倍数的三种方法(C语言)
  17. python实训day8
  18. h5 移动开发 html页面跳转,iosh5混合开发项目仿app页面跳转优化
  19. kubernetes的DevOps业务(七):Jenkins,GitLab,Harbor,Tekton,GitOps
  20. 德州仪器TI芯片实时监控自动抢购

热门文章

  1. 自动化工业机器人涂胶程序
  2. Loosely Coupled: The Missing Pieces of Web Services
  3. 区块链培训中的Golang为什么这么重要?怎么学?
  4. android轻音乐,「睡眠周期时钟」搭配轻音乐,让你好好睡又舒服醒(Android)
  5. 什么是 Ubuntu?
  6. Linux_第1章 Linux入门
  7. java 立刻回收_如何实现Java程序自动回收垃圾
  8. 陳三甲网络笔记:赚钱路上,一些人生思考(连载四)
  9. 梦幻诛仙内充php怎么使用,新手教程 梦幻诛仙手游微信充值步骤分享
  10. 0927-1这张图可得记一辈子了