在线考试系统设计与开发课程设计.docx
《在线考试系统设计与开发课程设计.docx》由会员分享,可在线阅读,更多相关《在线考试系统设计与开发课程设计.docx(18页珍藏版)》请在冰点文库上搜索。
在线考试系统设计与开发课程设计
课程设计
题目:
在线考试系统设计与开发
简介:
目前国内基于B/S、C/S结构的在线考试系统产品已经有许多,本文首先介绍了这些考试系统的形成和发展过程,大致结构。
然后通过仔细分析,提出了目前的这些系统还存有系统更新和维护等种种弊端,仍不够成熟。
基于对现有产品的思考,结合J2EE的成熟技术,我们想到了是否可以将该技术运用在在线考试系统中,提出了一个基于J2EE架构的在线考试系统。
通过将该架构与已有结构的在线考试系统进行比较,分析了该架构的优势,重点介绍了该框架的整体构造以及相关的概念和技术。
并通过设计了一个基于J2EE架构的在线考试系统对该架构做了一个比较深入的剖析。
最后,对J2EE技术做了一个总结性的展望,认为该技术有着良好的发展空间和广阔的前景。
1引言
现阶段,学校与社会上的各种考试大都采用传统的考试方式,在此方式下,组织一次考试至少要经过五个步骤,即出卷、考生考试、阅卷、成绩评估和试卷分析。
显然,随着考试类型的不断增加及考试要求的不断提高,教师的工作量将会越来越大,并且其工作将是一件十分繁琐和非常容易出错的事情,可以说传统的考试方式已经不能适应现代考试的需要。
随着计算机应用的迅猛发展,网络应用不断扩大,如远程教育和虚拟大学的出现等等,且这些应用正逐步深入到千家万户。
人们迫切要求利用这些技术来进行在线考试,以减轻教师的工作负担及提高工作效率,从而提高了考试的质量,使考试更趋于公证、客观、激发学生的学习兴趣。
例如目前许多国际著名的计算机公司所举办的各种认证考试绝大部分采用这种方式。
为了适应新形势的发展,目前国内有很多公司团体研究开发了基于Web的考试系统。
而我们知道网络应用软件运行的模式主要有二类:
Client/Server模式、Browser/Server模式。
前者主要的缺点是维护、升级较麻烦,后者是近几年伴随Internet迅速发展而应运而生的一种技术,在这种模式下,客户端需要一个浏览器,服务器端是WebServer,而WebServer是与数据库和应用服务器的紧密结合,可见,这种模式是瘦客户端,即对客户端的要求不高.如今,很多部门的业务系统、企业的MIS系统纷纷采用这种模式,它的主要优点是便于扩充应用、升级维护简便。
然而,随着技术的发展,更先进的模式纷纷被提出并时兴起来,其中J2EE就是比较成熟的一种。
2在线考试系统构架
2.1在线考试系统一般需求分析
在线考试系统应具有以下要求:
1)由于考试对应的是特定的对象,所以系统需要经过有效的身份验证才可以登陆。
并且系统需要有可以管理会话的功能。
以便在考试过程中全程跟踪考试状态。
2)系统的权限一般分为两种:
管理员和学生。
不同的身份使用不同的权限和功能。
3)管理员需要对试题和考生进行有效的管理,负责试题的录入及更新和修改,对试题的分类,每次考试前,需要对试场环境和考生状态进行考前初始化工作。
要注意的是,鉴于考试环境一般为机房,考试者之间的距离很近,为了在线考试做到规范,对于每个应试者来说,试卷的试题和题量都应是相同的,但试题并不相同。
4)系统要有良好的试卷上传和回收功能,确保信息传送的正确性。
5)系统要有一个友善的界面,确保考生考试的顺利进行。
6)因为试卷中的主观题需要老师批改,可能需要一段时间才能查询到成绩。
但如果试卷是由客观题型组成的,考生就可以在考试结束后查询到自己的成绩了。
7)系统提供对考生成绩的统计和查询等管理功能。
8)系统应具有良好的安全性管理。
2.2当前在线考试系统现状分析
当前考试系统中,仍有许多是基于c/s模式的,每一次伴随着系统的升级,都要在每个客户端更新软件,耗时耗力。
可喜的是,随着技术的发展,基于b/s模式的在线考试系统越来越多,逐渐占据了主导地位。
它克服了c/s模式下的许多缺点,从传统的基于C/S模式的考试系统转变到基于B/S模式的考试系统,可以使用户在任何一台电脑上,只要可以上网,就可以使用该服务,大大简化了操作,为用户提供了方便。
另一方面,也为教师的管理和批阅工作提供了方便,提高了效率。
但是据我多方的观察和研究,发现大多数的在线考试系统都是采用基于页面的模式开发,每个页面中都包含了要用到的所有功能逻辑,导致代码重复率高,结构不够清晰,维护升级起来也很费时间和人力。
鉴于这种情况,所以我们将J2EE的概念加入到在线考试系统中来,使得该系统更易于升级和维护。
2.3基于J2EE的在线考试系统架构介绍及拥有的优势
2.3.1结构总体介绍
J2EE使用多层的分布式应用模型,应用逻辑按功能划分为组件,各个应用组件根据他们所在的层分布在不同的机器上。
事实上,sun设计J2EE的初衷正是为了解决两层模式(client/server)的弊端,在传统模式中,客户端担当了过多的角色而显得臃肿,在这种模式中,第一次部署的时候比较容易,但难于升级或改进,可伸展性也不理想,而且经常基于某种专有的协议――通常是某种数据库协议。
它使得重用业务逻辑和界面逻辑非常困难。
现在J2EE的多层企业级应用模型将两层化模型中的不同层面切分成许多层。
一个多层化应用能够为不同的每种服务提供一个独立的层,以下是J2EE典型的四层结构:
●运行在客户端机器上的客户层组件
●运行在J2EE服务器上的Web层组件
●运行在J2EE服务器上的业务逻辑层组件
●运行在EIS服务器上的企业信息系统(Enterpriseinformationsystem)层软件
图1J2EE典型的四层结构
2.3.2客户层组件
J2EE应用程序可以是基于web方式的,也可以是基于传统方式的。
J2EE规范中指出,客户层组件有两种,它们是应用客户端程序和applets客户端。
2.3.2.1Applets
从Web层接收的一个Web页面可以包含内嵌的applet。
一个applet是一个用Java编程语言编写的小的客户端应用程序,它在安装在Web浏览器中的Java虚拟机中运行。
然而,为了在Web浏览器中成功地运行applet,客户端系统很可能需要Java插作和安全策略文件。
Web组件是用来建立一个Web客户端程序的首选的API,因为这样在客户端系统中就不需要插件和安全策略文件。
同样的,使用Web组件可以有效地改善应用程序设计,因为它们提供了一个将应用程序设计和Web页面设计有效分离的途径。
Web页面的设计者可以不必关心Java编程语言的语法就能很好地完成自己的工作。
2.3.2.2应用程序客户端
一个J2EE应用程序客户端运行在客户端机器上,它使得用户可以处理需要比标记语言所能提供的更丰富的用户界面的任务。
具有代表性的是用Swing或抽象窗口工具包(AWT)API建立的图形用户界面(GUI),但是一个命令行界面也是当然可能的。
应用程序客户端直接访问运行在商业层的enterprisebean。
然而,如果应用程序需要授权,一个J2EE应用程序客户端可以打开一个HTTP连接来与一个运行在Web层的servlet建立通信。
2.3.3WEB层组件
J2EEweb层组件可以是JSP页面或Servlets.按照J2EE规范,静态的HTML页面和Applets不算是web层组件。
正如下图所示的客户层那样,web层可能包含某些JavaBean对象来处理用户输入,并把输入发送给运行在业务层上的enterprisebean来进行处理。
图2Web层组件
2.3.4业务层组件
业务层代码的逻辑用来满足银行,零售,金融等特殊商务领域的需要,由运行在业务层上的enterprisebean进行处理.下图表明了一个enterprisebean是如何从客户端程序接收数据,进行处理(如果必要的话),并发送到EIS层储存的,这个过程也可以逆向进行。
有三种企业级的bean:
会话(session)beans,实体(entity)beans,和消息驱动(message-driven)beans。
会话bean表示与客户端程序的临时交互.当客户端程序执行完后,会话bean和相关数据就会消失.相反,实体bean表示数据库的表中一行永久的记录。
当客户端程序中止或服务器关闭时,就会有潜在的服务保证实体bean的数据得以保存.消息驱动bean结合了会话bean和JMS的消息监听器的特性,允许一个业务层组件异步接收JMS消息。
图3业务层组件
2.3.5企业信息系统层
企业信息系统层处理企业信息系统软件包括企业基础建设系统例如企业资源计划(ERP),大型机事务处理,数据库系统,和其它的遗留信息系统.例如,J2EE应用组件可能为了数据库连接需要访问企业信息系统。
2.3.6J2EE架构的优势
J2EE为搭建具有可伸缩性、灵活性、易维护性的系统提供了良好的机制:
1)保留现存的IT资产:
由于技术需求的不断更新,在线考试系统必须可以适应新的要求,利用已有的对考试系统方面的投资,而不是重新制定全盘方案。
这样,一个以渐进的(而不是激进的,全盘否定的)方式建立在已有考试系统之上的服务器端平台机制是学校和单位所需求的。
J2EE架构可以充分利用用户原有的投资,这之所以成为可能是因为J2EE拥有广泛的业界支持和一些重要的'企业计算'领域供应商的参与。
每一个供应商都对现有的客户提供了不用废弃已有投资,进入可移植的J2EE领域的升级途径。
由于基于J2EE平台的产品几乎能够在任何操作系统和硬件配置上运行,现有的操作系统和硬件也能被保留使用。
2)高效的开发:
J2EE允许客户把一些通用的、很繁琐的服务端任务交给中间件供应商去完成。
这样开发人员可以集中精力在如何创建商业逻辑上,相应地缩短了开发时间。
高级中间件供应商提供以下这些复杂的中间件服务:
①状态管理服务--让开发人员写更少的代码,不用关心如何管理状态,这样能够更快地完成程序开发。
②持续性服务--让开发人员不用对数据访问逻辑进行编码就能编写应用程序,能生成更轻巧,与数据库无关的应用程序,这种应用程序更易于开发与维护。
③分布式共享数据对象服务--让开发人员编制高性能系统,极大提高整体部署的伸缩性。
3)支持异构环境:
J2EE能够开发部署在异构环境中的可移植程序。
基于J2EE的应用程序不依赖任何特定操作系统、中间件、硬件。
因此设计合理的基于J2EE的程序只需开发一次就可部署到各种平台。
由于考试系统很多时候需要提供给许多不同的学校和单位使用,这些学校和单位的软件硬件环境存在有较大的差异,所以能支持异构环境这点就十分关键。
同时J2EE标准也允许客户订购与J2EE兼容的第三方的现成的组件,把他们部署到异构环境中,节省了由自己制订整个方案所需的费用。
4)伸缩性:
学校和单位必须要选择一种服务器端平台,这种平台应能提供极佳的可伸缩性去满足可能不断增多的在他们系统上进行考试的大批新的考生。
基于J2EE平台的应用程序可被部署到各种操作系统上。
例如可被部署到高端UNIX与大型机系统,这种系统单机可支持64至256个处理器。
(这是NT服务器所望尘莫及的)J2EE领域的供应商提供了更为广泛的负载平衡策略。
能消除系统中的瓶颈,允许多台服务器集成部署。
这种部署可达数千个处理器,实现可高度伸缩的系统,满足未来系统升级和规模扩大的需要。
5)稳定的可用性:
虽然在线考试系统不象一般企业的服务器端平台必须能全天候运转以满足公司客户、合作伙伴的需要,但起码必须保证考生考试的这段时间内不发生意外停机等故障,从而影响到考生考试。
J2EE部署到可靠的操作环境中,他们支持长期的可用性。
一些J2EE部署在WINDOWS环境中,客户也可选择健壮性能更好的操作系统如SunSolaris、IBMOS/390。
最健壮的操作系统可达到99.999%的可用性或每年只需5分钟停机时间。
这是对在线考试系统,特别对于那些比较重要的考试的理想选择。
3测试系统具体设计
3.1基于J2EE的E-nettest在线考试系统构架概要
3.1.1E-nettest系统结构
我们的系统结构是针对了J2EE的四层架构进行设计的
图4系统结构
如图所示,客户层负责提供用户界面接口,包括试题的显示和考生答案的输入。
Web层负责将得到的考生登陆和题目上传的信息送交给业务层,同时,将从业务层处得到考试的相关信息输出到html页面为考生提供相关服务。
业务层负责系统的具体逻辑实现,主要是得到数据池中的数据源,向数据库中提交和获得数据等。
信息系统层主要采用了Microsoftsql2000数据库对数据进行存贮管理。
3.1.2E-nettest数据流程
考生首先进入登陆页面,输入用户名和密码,系统将该用户名和密码与数据库中考生表的用户名密码一一核对,如果存在该考生且未登陆,则弹出一个考试的主页面正常进入考试,并将该考生置为考试状态。
否则会跳到出错页面要求考生重新登陆。
进入考试页面后,有许多分类的试题要求考生分别完成,考生点击相应页面的超链接,进入做题,在每个分页面的顶部,都将会有对该部分试题的操作提示和注意事项,考生阅读完相关事项后进行做题,每做完该部分试题都必须保存,系统将收集到的考生做题信息上传到数据库中,考生则继续做其他部分试题。
完成所有考试后,考生点击交卷标记,系统保存考生所有的答题信息后正常他退出,并将考生置于离线状态。
具体流程见下图:
图5系统流程
3.2E-nettest考试系统环境设置
本系统运行环境如下:
服务器端:
软件环境:
win2000/ntTomcat,jsdk用以支持jsp网页,sqlserver数据库服务器
硬件环境:
p31.0以上cpu,256MRom
客户端:
软件环境:
win9x/2000/xp,ie5.0以上浏览器
硬件环境:
p2233以上cup,32M以上内存
3.3E-nettest总体功能介绍
客户端
登陆服务:
负责用户的登陆的输入,与服务器端的验证,如果是重登陆的,需重登陆密码。
题目下载:
负责从数据库中读取试题数据,下载到客户端。
用户答题:
负责在客户的浏览器中显示下载的题目,供用户做题。
题目上传:
负责将客户所答题目的答案上传到服务器端。
管理端
生成试题:
负责从试题源中生成当场考试的相应试题。
试题初始化:
负责在每场考试前清空试题回收信息。
考生监控:
负责在考试期间管理监控各考生的考试状态。
试卷回收:
负责在考试结束后,将考生提交的答案上传到数据库服务器中。
试卷批阅:
负责自动化批阅回收试卷(客观题)。
数据库连接服务:
负责从各共性服务层模块接收相关数据库连接,查询,修改等服务,并返回相关数据。
数据访问层异常管理:
负责数据库连接服务出现的异常。
3.4E-nettest模块设计
各模块的详细介绍:
1)考生登陆模块:
在客户层,考生通过主登陆页面输入用户名与密码。
在web层,将从用户输入处得到的用户名和密码与从业务层返回的相应用户名和密码作比较,如果用户存在密码正确且还未登陆就登陆考试主页面,否则跳到出错页面要求重新登陆。
在业务层,获得与mssql数据库的连接,并取出所有的用户名和密码信息。
将该信息传入web层。
在EIS层,对应的是mssql数据库中的students表格。
2)做题模块:
(1)选择题:
在客户层,浏览器中显示每个考生所对应的考试题目,要求考生输入考试答案。
并有一个提交按钮供考生做完题目后上传题目。
在Web层,jsp负责从业务层中获得题目,并将题目组织在一起向客户端显示。
在业务层,获得与数据库的连接,并且取出选择题题目。
在EIS层,对应的是数据库中choose表格。
(2)word题:
在客户层,在浏览器中applet的textarea区域显示word题的要求,并利用applett数字签名技术,突破访问本地文件系统的限制,打开word做题。
在Web层,利用servlet的文件上传下载技术,将读出的word文件下载到本地磁盘。
在业务层,获得数据库连接,并取出word题目,word题是以二进制流的方式将word文件存贮在数据库。
在EIS层,对应的是数据库中word表格。
3)答案上传模块:
在客户层,在浏览器中单击提交按钮将做完的答案提交制相应页面
在Web层,将用户提交的答案提交给相应的javabean组件,并在客户端显示提示信息。
在业务层,将提交上来的答案存入相应的数据库中。
在EIS层,数据库中students表格,有两个相应字段用来存放该用户所对应的提交答案。
图6系统模块
3.5E-nettest数据库设计
由于目前市场上存在有许多的数据库产品,较流行的有oracle,Mssql,Access,等,oracle数据库多用于大企业中,稳定性最好,但价格也较高,且系统要求也较高,而Access数据库不支持网络功能,一般只对个人或小型的系统适用,而对于本系统来说,采用Msssql则是一个较为合适的选择,Mssql是微软网络数据库的主打产品,支持网络功能,日志记录等多种方便的服务,并且有着较为稳定的性能和可靠的管理。
下面是数据库表的设计:
Studentstable:
id,char,10,notnull;
password,char,10,null;
number,char,10,notnull;
sex,char,1,null;(1=男,0=女)
chooseans,char,60,null;
wordans,image,16,null;
status,char,1,notnull;(1=在线,0=离线)
choosetable:
QNUM,INT,4,notnull;
QCON,TEXT,16,notnull;
QANSA,TEXT,50,notnull;
QANSB,TEXT,50,notnull;
QANSC,TEXT,50,notnull;
QANSD,TEXT,50,notnull;
QANSE,TEXT,50,notnull;
QANS,TEXT,1,notnull;
Wordtable:
Topic_Number,nvarchar,2,notnull;
Question_Title,text,16,notnull;
Question_Content,image,16,notnull;
4关键技术
4.1tomcat数据库连接池介绍与配置
数据库连接池概述:
数据库连接是一种关键的有限的昂贵的资源,这一点在多用户的网页应用程序中体现得尤为突出。
对数据库连接的管理能显著影响到整个应用程序的伸缩性和健壮性,影响到程序的性能指标。
数据库连接池正是针对这个问题提出来的。
数据库连接池负责分配、管理和释放数据库连接,它允许应用程序重复使用一个现有的数据库连接,而再不是重新建立一个;释放空闲时间超过最大空闲时间的数据库连接来避免因为没有释放数据库连接而引起的数据库连接遗漏。
这项技术能明显提高对数据库操作的性能。
数据库连接池在初始化时将创建一定数量的数据库连接放到连接池中,这些数据库连接的数量是由最小数据库连接数来设定的。
无论这些数据库连接是否被使用,连接池都将一直保证至少拥有这么多的连接数量。
连接池的最大数据库连接数量限定了这个连接池能占有的最大连接数,当应用程序向连接池请求的连接数超过最大连接数量时,这些请求将被加入到等待队列中。
数据库连接池的最小连接数和最大连接数的设置要考虑到下列几个因素:
1)最小连接数是连接池一直保持的数据库连接,所以如果应用程序对数据库连接的使用量不大,将会有大量的数据库连接资源被浪费;
2)最大连接数是连接池能申请的最大连接数,如果数据库连接请求超过此数,后面的数据库连接请求将被加入到等待队列中,这会影响之后的数据库操作。
3)如果最小连接数与最大连接数相差太大,那么最先的连接请求将会获利,之后超过最小连接数量的连接请求等价于建立一个新的数据库连接。
不过,这些大于最小连接数的数据库连接在使用完不会马上被释放,它将被放到连接池中等待重复使用或是空闲超时后被释放。
以下介绍一下连接池配置关键几个环节:
1)首先在$CATALINA_HOME/conf/server.xml中,配置应用程序的路径
debug="5"reloadable="true"crossContext="true">
2)然后配置资源名,用以在jndi中进行查询
auth="Container"
type="javax.sql.DataSource"/>
3)定义各连接参数,用户名,密码,数据库驱动以及数据源的查找路径
usernamejavauser
passwordjavadude
driverClassName
com.microsoft.jdbc.sqlserver.SQLServerDriver
url
jdbc:
mysql:
//localhost:
3306/javatest?
autoReconnect=true
4)由于系统是一个web应用程序,被布署在tomcat容器中,所以需要在$CATALINA_HOME/webapps/quality/WEB-INF/web.xml里设置被引用的资源:
下面是配置代码,必须放在和里。
--DatabaseConfigstart-->
connectDBtest
jdbc/connectDB
javax.sql.DataSource
Container
--DatabaseConfigend-->
5)最后,将第3方的驱动都保存在$CATALINA_HOME/common/lib/*.jar中,如我们这里连接的是mssql,则将mssql的驱动程序msbase.jar,mssqlserver.jar,msutil.jar放入其中。
4.2applet数字签名技术
实现applet数字签名,使得applet可以突破默认安全限制,读取本地文件系统。
在Java2的安全体系下,1个Applet开发和运行的过程如下:
在代码的分发端:
1)开发Java源程序并对其进行编译。
2)用JAR工具对类文件和资源文件进行封装。
3)用keytool创建公钥和密钥,生成X。
509V1签名证书,输出证书。
4)通过jarsigner工具用生成的密钥对JAR文件进行数字签名。
在代码的接收