资源描述:
《基于web的在线考试系统的设计与实现》由会员上传分享,免费在线阅读,更多相关内容在教育资源-天天文库。
重庆三峡学院毕业设计(论文)题目:基于WEB的在线考试系统的设计与实现专业:计算机科学与技术年级:2006级学号:200606020162作者:指导老师:鄢沛(实验师)完成时间:2010年5月 说明本系统设计的是在线考试系统,主要采用Java编写,是基于B/S的一个JAVA/WEB项目,旨在实现在线考试以及后台管理,采用的相关技术大致有HTML,JSP,CSS,Servlets,Hibernate,Struts等等。本系统采用的是三层架构(表示层—业务层—持久层)来进行开发,使用了目前较流行的Web应用开发框架Struts+POJO+Hibernate,以适应业务逻辑比较复杂的系统。序号学号姓名专业、班级任务分配1200606020162徐晨2006级计算机科学与技术一班组长,1、对拟要实现的系统进行需求分析,难点是怎样从用户的模糊描述中抽象出用户的实际需求,构建出用例模型;2、考生能够实时在线考试,模拟考试;3、老师能够及时在线阅卷;4、组卷根据难度随机出题2200606010104蒋文利2006级计算机科学与技术一班1、对拟要实现的系统进行需求分析,难点是怎样从用户的模糊描述中抽象出用户的实际需求,构建出用例模型;2、采用UML统一建模语言对抽象出来的用户需求进行系统原型的抽象;3、界面实时访问;4、安全策略问题3200606020147聂飞2006级计算机科学与技术一班1、对拟要实现的系统进行需求分析,难点是怎样从用户的模糊描述中抽象出用户的实际需求,构建出用例模型;2、数据持久层规划;3、使用UML统一建模语言进行模块的抽象,并建立实体关联 目录摘要IABSTRACT.II1引言12在线考试系统的需求分析12.1用户需求分析12.1.1考生用户主要需要22.1.2教师主要需要22.2在线考试系统的数据流图23在线考试系统分析与设计33.1系统设计总体思想、目标33.2在线考试系统的ER模型33.3在线考试系统结构、功能设计43.3.1系统结构设计43.3.2系统功能模块设计43.4在线考试系统面向对象的分析与设计53.4.1面向对象方法的基本思想53.4.2UML概述63.4.3用UML建模63.5在线考试系统的用例分析设计63.5.1前台用例63.5.2后台用例73.6在线考试系统的类图分析设计84系统平台、计算模式及技术94.1系统平台94.1.1系统的硬件平台:94.1.2系统的软件平台:94.2开发框架技术94.2.1Struts是应用比较广泛的一种表现层框架104.2.2HibernateO/RMapping104.2.3Brower/Server模式应用114.2.4Hibernate技术通过持久层的框架将数据库存储从服务层中分离出来124.2.5工厂模型的使用124.3Oracle数据库134.3.1Oracle概述134.3.2Oracle具有以下优势135系统实现155.1在线考试系统的时序分析设计155.1.1教师操作时序图155.1.2教师操作时序图165.1.3管理员操作时序图165.2系统详细设计175.2.1登陆界面18 5.2.2监考老师模块205.2.3学生考试模块205.2.4教师分析模块225.2.5后台管理模块246在线考试系统设计的技术关键276.1事务的提交276.2Session线程安全277系统试运行结果与评288结束语29致谢29参考文献29 2010届计算科学与技术专业毕业设计(论文)基于WEB的在线考试系统的设计与实现徐晨(重庆三峡学院数学与计算机科学学院计算机科学与技术专业2006级重庆万州404000)摘要:随着计算机技术的飞速发展,利用计算机来获取和处理信息是当今信息管理的一大特点。基于B/S架构的系统作为最普遍最实用的系统,其管理现代化、信息化,对整个社会起着巨大的推动作用。网上在线考试系统是典型的B/S架构的系统,其开发主要包括应用程序的开发,数据库的建立和维护两个方面。在应用程序的开发方面,设计中使用IBM公司的MyEclipse进行编程设计。它引入了面向对象编程的思想,使系统界面友好,功能完善,操作灵活,使用方便。同时,在数据库的建立和维护方面,采用Oracle公司的Oracle作为数据库的开发工具。它适用于Unix/Windows操作平台,是大中型系统使用较广的数据库开发平台。网上在线考试系统开发的总体目的是在实现INTERNET和局域网内的在线考试。我主要负责对业务逻辑层的设计以及具体实现。业务逻辑层是系统架构中体现核心价值的部分。业务逻辑层在体系架构中的位置很关键,它处于数据访问层与表示层中间,起到了数据交换中承上启下的作用。首先是对数据访问层提供的接口进行封装调用,其次是要提供表示层相应接口,用于控制表示层相关请求信息。关键词:JAVA,oracle,B/S模式,Struts,Hibernate 2010届计算科学与技术专业毕业设计(论文)DevelopingandRealityofOn-lineexaminationsystemBasedonWebXuChen(Grade2006,ComputerScienceandtechnology,CollegeofMathematicsandComputerScience,ChongqingThreeGorgesUniversity,Wanzhou,Chongqing404000)ABSTRACT:Alongwithcomputertechnology'sswiftdevelopment,gainsandtheprocessinformationusingthecomputerisnowainformationmanagementmajorcharacteristic.TakesmostgenerallythemostpracticalsystembasedontheB/Sconstruction'ssystem,itsmanagementmodernization,theinformationization,areplayingthehugepromotioneffecttotheentiresociety.On-lineonlinetestsystemisthetypicalB/Sconstructionsystem,itsdevelopmentmainlyincludestheapplicationprocedurethedevelopment,thedatabaseestablishmentandmaintainstwoaspects.Intheapplicationprocedure'sdevelopmentaspect,inthedesignusesIBMCorporation'sMyEclipsetocarryontheprogrammingdesign.Ithasintroducedtheobject-orientedprogrammingthoughtthatcausesthesystemcontactsurfacetobefriendly,thefunctionisperfect,theoperationisflexible,easytooperate.Atthesametime,inthedatabaseestablishmentandthemaintenanceaspect,usesOracleCorporation'sOracle(10g)totakethedatabasethedevelopmentkit.ItissuitablefortheUnix/Windowsserviceplatform,isthelargeandmiddlescalesystemusebroaddatabasedevelopstheplatform.On-lineonlinetestsystemdevelopment'soverallgoalisinrealizesinINTERNETandlocalareanetwork'sonlinetest.Iammainlyresponsibleforthedesignofbusinesslogicandimplementation.Businesslogiclayeristhesystemarchitectureinpartreflectthecorevalues.Businesslogiclayerinthearchitecture,thepositioniscritical,itisinthedataaccesslayerandthemiddlelayer,playingtheroleofdataexchangeintheconnectinglink.First,thedataaccesslayerprovidestheinterfaceandcalled,followedbythepresentationlayertoprovidetheappropriateinterfaceforcontroloflayer-relatedrequestsforinformation.Keywords:JAVA,Oracle10g,B/Smode,Struts,Hibernate 2010届计算科学与技术专业毕业设计(论文)1引言当今社会,考试已经是我们必不可少的东西了,从小到大我们已经考过无数次了,以后还要考,不管是国内还是国外的各大厂家,都在不断的推出一系列的考试、认证。又是要我们去考试。我们国家的自考或是成考,以及各省市的各种考试,现在都在朝着信息化的道路前进在走。我们相信在今后这一系列的考试将会走向网络化考试的。这样才是符合信息技术发展的方向。我们要给不同的考试同一个好的解决方案。这个方案在技术上来讲我们是采用B/S模式。在windows/Linux平台上,使用IE浏览器,完成抽题、考试、交卷等考试任务。方便,简单的完成各种考试,这也是我们的目的所在。考点模块通过网络获取题库,按照题库中的抽题策略,自动给每个考生生成一份试卷,考生在线作答,考试结果数据通过网络回收,系统自动进行判分,生成考试成绩和统计数据。“在线考试系统”是集合现代考试理论、方法和现代信息技术手段的智能化网上考试系统,为学生个性化学习提供“灵活、方便、科学、公平”的“个别化考试服务”,是终结性评价系统。学生可以随时、随地进行课程结业考试。学校与社会上的各种考试大都采用传统的考试方式,在此方式下,组织一次考试至少要经过五个步骤,即人工出卷,考生考试,人工阅卷,成绩评估和试卷分析。显然,随着考试类型的不断增加及考试要求的不断提高,教师的工作量将会越来越大,并且其工作将是一件十分烦琐和非常容易出错的事情,可以说传统的考试方式已经不能适应现代考试的需要。随着计算机应用的迅猛发展,网络应用不断扩大,如远程教育和虚拟大学的出现等等,且这些应用正逐步深入到千家万户。人们迫切要求利用这些技术来进行在线考试,以减轻教师的工作负担及提高工作效率,与此同时也提高了考试的质量,从而使考试更趋于公证、客观、更加激发学生的学习兴趣。例如目前许多国际著名的计算机公司所举办的各种认证考试绝大部分采用这种方式。为了适应新形势的发展,我们推出了这一系统,使其尽快在各类考试中发挥高效,便捷的作用,把老师从繁重的工作中解脱出来。在这里不得不说“老师们,你们辛苦了”。2在线考试系统的需求分析本系统主要根据重庆三峡学院的教材管理工作进行的需求分析:2.1用户需求分析随着网络技术的飞速发展,现在很多国外的大学和社会其他部门都已经开设了远程教育,通过计算机网络实现异地教育和培训。现在,计算机硬件技术的发展已经达到了相当高的水平。但是,远程教育软件的开发目前还处于起步阶段,随着这项技术的不断深入发展,就要求有更好、更完善的软件系统应用到远程教育当中去,这就给软件设计人员提出了更高的设计要求。远程教育包括很多环节,例如教学系统、答疑系统和考试系统等等。其中很重要的一个环节就是在线考试系统,同时它也是最难实现的环节。通过实地调研之后,对网上在线考试系统的设计开发做了一个详细的概述。第29页共29页 2010届计算科学与技术专业毕业设计(论文)2.1.1考生用户主要需要(1)分布式的系统,这意味着只要有考试客户端可以连接到考试应用服务器,任何考生在任何地方进行身份确认,都能完成考试。(2)题目最好有一定的稳定性和随机性。稳定性可以保证每一次考试对每一个考生是公平的,随机性可以避免作弊的发生。(3)考试的部分结果在考生考完之后就可以知道,提高考试批改效率。2.1.2教师主要需要(1)提供一个功能全面的考核管理客户端,可以进行考试设计和安排。(2)通过管理客户端,教师可以进行考试的身份管理。(3)考生的考试结果可以被保存下来,供教师进行分析统计和察看。2.2在线考试系统的数据流图数据流图(DFD)是从“数据”和“对数据的加工”两方面表达数据处理系统工作过程的一种图形表示法,具有直观、易于被用户和软件人员双方都能理解的一种表达系统功能的描述方式。下面简要介绍部分需求的数据流图:2.2.1在线考试系统查询的数据流图(DFD)通过分析,设计出本系统查询的数据流图,如下图:图2-1在线考试的数据流第29页共29页 2010届计算科学与技术专业毕业设计(论文)3在线考试系统分析与设计3.1系统设计总体思想、目标在线考试系统的总体目标:(1)在线考试系统可以帮助教师完成一个考试从题目设计,考试安排,考试实施,考卷批改到分数统计总结的所有工作。(2)所有的考试数据和其它数据库需要一种主流的方式进行存储和管理,例如使用数据库技术。(3)考试数据的存放和处理必须对考试保密,需要一定的安全性保障。3.2在线考试系统的ER模型经过对学生查询系统的分析,我们将系统划分出了User(用户),Role(角色),考卷,考卷类别等几个实体,其各个实体的属性如下:姓名ID号RoleIDUser考试/制定N联系电话N考卷试卷编号作者科目考试日期登记日期日期入库数量权限年龄Role1角色名称N属于班级试题数量题目试卷类别属于1试卷号号科目名称N性别图3-1学生查询实体联系图第29页共29页 2010届计算科学与技术专业毕业设计(论文)依据数据库的原理,并结合以上E-R图,经过转换,可以导出各个关系。其转换规则为:首先每个实体就转化为一个关系,有属性的联系也应转化为一个关系,然后需要给出每个关系的关键字。根据以上规则直接给出所有关系。User信息(ID号、姓名、性别、电话、班级、年龄、成绩、角色ID)Role信息(角色ID、权限ID)试卷类别(试卷编号、科目名称)。试卷(试卷编号、试题数量、试卷题目、出题教师、试卷数量、试卷科目)。权限(权限ID,权限)。3.3在线考试系统结构、功能设计3.3.1系统结构设计本系统分为学生前台子系统和考试管理子系统,整个系统的结构图如下:在线考试系统考生前台后台管理题库管理班级管理考试管理试卷管理成绩管理用户管理权限管理学生登陆图3-2系统结构图3.3.2系统功能模块设计根据前面的分析,本文把网上在线考试系统划分为四大模块,分别为系统管理模块、监考教师管理模块、教师管理模块、考生考试模块。其中考生管理模块主要是进行实时考试以及对考试成绩的查询;教师管理模块主要是对考试情况和试题讲解两方面的管理;监考教师管理模块主要是具体考试活动进行管理;系统管理模块主要是教学管理、教师管理、题库管理和自我管理四个方面。系统功能结构图如图3-3所示:第29页共29页 2010届计算科学与技术专业毕业设计(论文)网上在线考试系统考生管理监考教师管理系统管理教师管理试卷讲评考试信息管理开始考试考试成绩查询考试管理考试信息修改用户密码教师管理题库管理教学管理查看考生信息添加试题删除试题查询考试信息图3-3系统功能结构图图3-4本系统架构图3.4在线考试系统面向对象的分析与设计3.4.1面向对象方法的基本思想第29页共29页 2010届计算科学与技术专业毕业设计(论文)对问题域进行自然分割,以接近人类思维的方式建立问题域模型,从而使设计出的软件尽可能地描述现实世界,构造出模块化的、可重用的、可维护性好的软件,并能控制软件的复杂性和降低开发维护费用。3.4.2UML概述UML(统一建模语言):是一种可视化的建模语言,它能让系统构造者用标准的,易于理解的方式建立起能够表达出他们想象的系统蓝图,并且提供一种机制,以便于不同的人之间有效地共享和交流设计结果.3.4.3用UML建模UML为广泛的应用而设计,因此,它为较大范围的系统和活动提供结构(例如:实时系统、分布式系统、分析、系统设计、配置)。系统开发集中于系统的3个不同模型:功能模型在UML中由用例图表示,从用户观点描述系统功能。对象模型在UML中由类图表示,以对象、属性、关系和操作形式描述系统结构。动态模型在UML中由顺序图、状态图和活动图表示,描述系统的内部行为。顺序图把行为描述为一组对象间的信息交换序列。而状态图根据单个对象的状态及状态间可能的转换描述行为。3.5在线考试系统的用例分析设计用例在需求提出和分析中用来表示系统的功能。用例从外部的角度关注系统的行为。一个用例描述系统提供的一个功能,而系统对执行者产生一个可见的结果。这里所说的执行者代表的是与系统交互的任意实体(例如,用户、其他系统、系统的物理环境)。用例和执行者的识别产生了系统界限的定义,也就是说,区分了系统完成的任务及其环境完成的任务。执行者处在系统界限的外围,而用例处在系统界限的内部。3.5.1前台用例前台成员由监考老师,考生以及任课老师组成。由监考老师负责开始考试,然后考生才能登陆考试系统,开始实习在线考试,考试结束后,由任课老师在线阅卷,并及时公布考分,方便考生及时查询分数。前台用例图如图3-5所示:第29页共29页 2010届计算科学与技术专业毕业设计(论文)图3-5前台考试用例图3.5.2后台用例后台主要成员为管理员。管理员可以通过教学管理(包括学生管理,班级管理),教师管理,考试管理(包括题库管理,考试科目管理),以及管理员自管理,来对其他成员以及考试题库进行数据库相应增删改查处理。后台用例图如图3-6所示:图3-6管理员用例第29页共29页 2010届计算科学与技术专业毕业设计(论文)3.6在线考试系统的类图分析设计类图描述系统的结构。类是用来指定一组对象共有的结构和行为的抽象。对象是类的实例,而实例则在系统执行过程中被创建、修改并撤销。对象具有包括其属性值及其与其他对象的关系的状态。通过对用例图的分析,抽象各成员,得到所需的属性和方法。以考生类和教师类表现,图如下:图3-7管理员类图图3-8学生类图第29页共29页 2010届计算科学与技术专业毕业设计(论文)4系统平台、计算模式及技术4.1系统平台4.1.1系统的硬件平台:硬件需求:PIII/256M/10G及以上配置,要求为考试系统分配足够的数据库磁盘空间推荐配置:PIV2G/512M/40G4.1.2系统的软件平台:操作系统需求:Windows2000及以上操作系统(推荐),也可以使用SunSolaris以及Linux各版本操作系统数据库软件需求:Oracle9i/Oracle10g数据库,同时也支持mysql服务器软件需求:Tomcat5.0/6.0及类似服务器4.2开发框架技术对于框架技术,我们采用Servlet+Struts+Hibernate(SSH)的整合,其实任何一种框架都可以完成我们的项目,但我们选择三种框架的组合是因为三种框架各有好处,我们利用它们的优点,来避免它们的缺点,充分利用Java技术在web的应用。图4-1MVC的设计模式示意图第29页共29页 2010届计算科学与技术专业毕业设计(论文)图4-2MVC组件的关系和功能其中通知改变和用户请求属于事件,其他都是方法调用4.2.1Struts是应用比较广泛的一种表现层框架Struts是一个为开发基于模型(Model)-视图(View)-控制器(Controller)(MVC)模式的应用架构的开源框架,是利用Servlet,JSP和Customtaglibrary构建Web应用的一项非常有用的技术,尤其表现在视图层和控制层。由于Struts能充分满足应用开发的需求,简单易用,敏捷迅速。Struts不光实现了view层的自动填充,同时通过struts-config.xml很好的将控制单元和业务单元分离,非常符合RUP思想,适合团队开发。其具体工作原理图如下:图4-3struts工作原理4.2.2HibernateO/RMappingHibernate是采用ORM模式实现数据持久层的一个优秀的Java组件,它提供了强大、高效的将Java对象进行持久化操作的服务。利用Hibernate,开发人员可以方便地按照Java对象的结构进行持久层的开发,并可以使用Hibernate所提供的HQL(HibernateQueryLanguage,Hibernate查询语言)完成Java对象和关系型数据库之间的转换和操作。其体系结构为:(1)第29页共29页 2010届计算科学与技术专业毕业设计(论文)Hibernate的作用就是实现持久化对象和数据库之间的映射。所以,它在应用程序的位置也必然是处于程序和数据库之间,形成持久化对象和数据库表中数据的一个转换平台。Hibernate应用程序的结构如下:图4-4Hibernate应用程序结构通过图可以看出,Hibernate是通过一系列的配置文件和数据库来实现持久化对象的持久化操作。为了使用Hibernate,需要创建与数据库中的表相对应的持久化对象,然后再通过映射文件将持久化对象中的属性与数据库中的字段对应起来。这样,才能通过这些持久化对象完成对数据表中数据的增加、修改、查询和删除操作。(1)由于Hibernate非常灵活,而且同了多种运行时的结构组成方案。在这里介绍的是一个“最全面”的体系结构,它最大程度的完成了对持久层功能的封装,也就使得在开发中所要完成的工作量最少,是在开发中最经常使用的一种方式。在这种方式分中,将JDBC/JTA都交给了Hibernate去完成,而不需要对这一部分进行任何处理。4.2.3Brower/Server模式应用B/S(Browser/Server)结构即浏览器和服务器结构。它是随着Internet技术的兴起,对C/S结构的一种变化或者改进的结构。在这种结构下,用户工作界面是通过WWW浏览器来实现,极少部分事务逻辑在前端(Browser)实现,但是主要事务逻辑在服务器端(Server)实现,形成所谓三层(3-tier)结构。一个三层架构的应用程序由三部分组成,这三部分各自分布在网络中的不同地方。这三个部分分别是:工作站或表示层接口、事务逻辑、数据库以及与其相关的程序设计。在一个典型的三层架构应用程序中,应用程序的用户工作站包括提供图形用户界面(GUI)的程序设计和具体的应用程序入口表格或交互式窗口。事务逻辑处在局域网(LAN)服务器或其他共享主机上,它作为响应工作站所发出客户请求的服务器,而相对于处于大型机的第三层它是作为客户端,并且决定需要什么数据以及数据存储在哪里。第三层包括数据库以及处理读写以及访问数据库的程序。然而应用程序的设计可能比这个架构要复杂,对于大型程序来说,这个三层模式是一种比较简便的考虑方法。第29页共29页 2010届计算科学与技术专业毕业设计(论文)这种应用程序的设计使用客户/服务器模式,各层可以同时开发,并且可以由不同的成员组用不同的语言来开发。因为各个层次的开发不会影响其他层次,所以这种模型对于进一步开发软件是很方便的。这样就大大简化了客户端电脑载荷,减轻了系统维护与升级的成本和工作量,降低了用户的总体成本(TCO)。以目前的技术看,局域网建立B/S结构的网络应用,并通过Internet/Intranet模式下数据库应用,相对易于把握、成本也是较低的。它是一次性到位的开发,能实现不同的人员,从不同的地点,以不同的接入方式(比如LAN,WAN,Internet/Intranet等)访问和操作共同的数据库;它能有效地保护数据平台和管理访问权限,服务器数据库也很安全。特别是在JAVA这样的跨平台语言出现之后,B/S架构管理软件更是方便、快捷、高效。4.2.4Hibernate技术通过持久层的框架将数据库存储从服务层中分离出来它是O/RMapping的一种实现是目前在JAVA界使用非常广泛的O/RMapping的一种实现,可以实现关系型数据库和对象之间的映射。用来开发数据库系统非常方便,可以将数据库和程序的设计融合在一起。表现层和服务层的分离是通过两种框架达到目的的,剩余的就是持久层框架了,通过持久层的框架将数据库存储从服务层中分离出来就是其目的,持久层框架有两种方向:直接自己编写JDBC等SQL语句;使用O/RMapping技术实现的Hibernate和JDO技术;当然还有EJB中的实体Bean技术。Hibernate的工作原理是通过文件把值对象和数据库表之间建立起一个映射关系,这样,我们只需要通过操作这些值对象和Hibernate提供的一些基本类,就可以达到使用数据库的目的。例如,使用Hibernate的查询,可以直接返回包含某个值对象的列表(List),而不必向传统的JDBC访问方式一样把结果集的数据逐个装载到一个值对象中,为我们的编码工作节省了大量的劳动。Hibernate提供的HQL是一种类SQL语言,是提供对象化的数据库查询方式,但HQL在功能和使用方式上都非常接近于标准的SQL。4.2.5工厂模型的使用工厂模式是我们最常用的模式了,著名的Jive论坛,就大量使用了工厂模式,工厂模式在Java程序系统可以说是随处可见(见图4-5)。图4-5工厂模式类图为什么工厂模式是如此常用?因为工厂模式就相当于创建实例对象的new,我们经常要根据类Class生成实例对象,如Aa=newA()工厂模式也是用来创建实例对象的,虽然这样做,可能多做一些工作,但会给系统带来更大的可扩展性和尽量少的修改量。第29页共29页 2010届计算科学与技术专业毕业设计(论文)4.3Oracle数据库4.3.1Oracle概述Oracle具有如下特性:(1)其数据库引擎提供完整的XML支持(2)一个数据库引擎可以在不同的平台上使用(3)其关系数据库引擎支持当今苛刻的数据处理环境所需的功能。(4)一系列管理和开发工具,是其系统容易安装、部署、管理和使用。(5)有析取和分析汇总数据以进行联机分析处理(OLAP)的工具4.3.2Oracle具有以下优势(1)Oracle数据库高可用性通过扩大各个组织和团体中数据库应用的范围,数据库和互联网使得能够实现全球性的合作和信息共享。小公司和全球性大企业一样,在全世界范围内都有用户需要每天24小时地访问数据。如果不能保证这种数据访问,就会损失收入和客户并受到惩罚,而且负面的新闻报道将对客户和公司的声誉有持续的影响。构建一个具有高可用性的IT基础架构对于希望在当今瞬息万变的经济环境立于不败之地并取得成功的企业而言至关重要。设计高可用性解决方案的挑战之一是查明并解决造成宕机机的所有可能缘由。在设计容错和灵活IT基础架构时,很重要的一点就要考虑意外停机和计划停机时间。意外停机主要是由于计算机故障或数据故障引起的。计划停机主要是由于生产系统的数据改变或系统改变而引起的。故障保护:配置和验证Windows集群,并通过与微软集群服务器集成的高可用性软件快速准确地自动恢复Oracle数据库和应用系统。回闪查询:无需复杂、耗时的操作即可恢复更早版本的数据。回闪表、数据库和事务查询:诊断和撤销错误操作,包括对单独一行所做的修改、由杂乱的事务导致的变化、对单个或多个表所做的修改(包括表的删除)以及对整个数据库所做的所有修改。数据卫士:自动维护生产数据库的多个远程备份副本;恢复从生产环境到备份数据库的处理;极大地缩短了灾难情况下的宕机时间。(2)可伸缩性真正应用集群:跨多个相互连接或"集群的"服务器运行任意未做更改的打包或定制的应用系统。集成的集群件:利用一组通用、内置的集群服务创建和运行数据库集群。自动工作负载管理:将服务连接请求发送给拥有最低负载的适当服务器;一旦发生故障,自动将幸存的服务器重新分配以用于服务。Java和PL/SQL的本地编译:Java和PL/SQL语言编写部署在数据库中的程序。(3)安全性密码管理:利用单一用户名和密码连接整个企业内的多个数据库。加密工具包:借助PL/SQL包加密和解密存储的数据。虚拟专用数据库:编写行级安全性程序;确保应用程序上下文的安全。细粒度审计:定义特定的审计策略,包括对错误数据的访问发出警告。(4)应用软件开发第29页共29页 2010届计算科学与技术专业毕业设计(论文)Java支持:更快地执行Java应用程序,集成现有的软件资产,将Java/J2EE应用程序连接到支持网格的数据库,通过Web服务支持非连接的客户,并将本地数据与远程和动态数据结合起来。HTMLDB:借助快速Web应用系统开发工具,开发和部署快速、安全的应用系统。全面的XML支持:通过对W3CXML数据模型提供支持,使存储和检索XML本地化;使用标准访问方法导航和查询XML。PL/SQL和JSP:用服务器端Java和存储的程序语言;使用SQL确保安全、方便和无缝。COM自动化、微软事务服务器/COM+集成、ODBC和OLEDB:支持多种Windows数据访问方法。(1)可管理性企业管理器:通过单一集成的控制台,基于Oracle产品系列管理和监控所有应用程序和系统。自动内存管理:自动管理Oracle数据库实例使用的共享内存。自动存储管理:跨所有可用资源分配I/O负载,并通过垂直集成的文件系统和卷管理器优化性能;消除人工I/O调优。自动撤消管理:监控所有Oracle系统的参数设置、安全设置、存储和文件空间条件的配置。服务器管理的备份和恢复:借助Oracle恢复管理器(RMAN)简化、自动化并提高备份及恢复性能。(2)数据仓储数据压缩:在不影响查询时间的情况下压缩保存在关系表中的数据;降低磁盘系统成本。Oracle分析函数:使用面向在线分析处理(OLAP)的内置分析工作空间。可移动的表空间,包括跨平台:将一组表空间从一个数据库转移到另一个数据库,或者从一个数据库转移到自身的其他位置。星形查询优化:加入一个事实表和大量维度表。汇总管理--物化视图查询改写:当一个物化视图用来响应一个请求时,通过自动识别提高查询性能;透明地改写请求以使用物化视图。(3)集成Oracle流:在一个数据库内或从一个数据库到另一个数据库的数据流中实现数据、事务和事件的传播与管理。高级队列:通过基于队列的发布-订阅功能,使数据库队列能够充当持久的消息存储器。工作流:支持与完整的工作流管理系统基于业务流程的集成。分布式查询/事务处理:在分布式数据库的两个或更多个不同节点上查询或更新数据。(4)内容管理超级搜索:跨多个信息库搜索和定位数据,包括:Oracle数据库、遵循ODBC的数据库、IMAP邮件服务器、HTML文档、磁盘文件等。媒介物:开发、部署和管理包含具有最流行格式的富媒体内容的传统、Web和无线应用系统。文本:构建文本查询应用系统和文档分类应用系统。定位器:管理地理空间数据来利用地域商业价值。使用企业版的空间选项,你还能够支持最复杂的GIS部署以下内容由本人独立完成第29页共29页 2010届计算科学与技术专业毕业设计(论文)5系统实现5.1在线考试系统的时序分析设计系统时序图是一种交互图,既用来形式化系统的行为,也用来可视化对象间的通信。主要用于描述对象之间的动态交互关系,着重体现对象间消息传递的时间顺序,其适用场合一般特征为:(1)描述对象之间的动态协作关系以及协作过程中的行为次序。(2)常常用来描述一个用例的行为,显示该用例中所涉及的对象以及这些对象之间的消息传递情况。各成员角色通过界面点击事件,激发后台调用action类,来实现模块功能之间转化,达到界面实时的交互。5.1.1教师操作时序图图5-1教师操作时序图第29页共29页 2010届计算科学与技术专业毕业设计(论文)5.1.2监考教师操作时序图图5-2监考老师操作时序图5.1.3管理员操作时序图第29页共29页 2010届计算科学与技术专业毕业设计(论文)图5-3管理员操作时序图5.2系统详细设计在本系统中业务逻辑层中分别完成了对各种分类信息、用户信息等类型的对象的保存和处理,根据系统分析所得的需求,业务逻辑层还包括借助MyEclipse开发工具、Struts数据库连接池完成数据库连接,及数据库查询等工作的相关的业务逻辑的实际。对于他们之间的分布如下图所示:图5-3类分布图第29页共29页 2010届计算科学与技术专业毕业设计(论文)5.2.1登陆界面图5-4登陆界面如果用户需要访问本系统,必须经过登录。首先先选择相应角色,然后需要输入用户名、密码,点击登录按钮,后台就会调用LoginAction,(参见以上图5-3)如果这些信息,那么显示登录相应主界面,否则,返回到登录界面,并提示相关错误信息。以下为LoginAction关键代码,publicActionForwardexecute(ActionMappingmapping,ActionFormform,HttpServletRequestrequest,HttpServletResponseresponse){LoginFormloginForm=(LoginForm)form;//登录表单AdminServiceadminiServie=(AdminService)BeanFactory.getBean(BeanFactory.FadminService);StudentDaostudentDao=(StudentDao)BeanFactory.getBean(BeanFactory.FstudentDao);StudentServicestudentService=(StudentService)BeanFactory.getBean(BeanFactory.FstudentService);Integeradmin=Integer.parseInt(request.getParameter("ss"));//从界面获取登录权限等级//通过权限等级定义不同登录界面if(null!=admin&&admin.equals(3)){returnadminLogin(mapping,form,request);}if(null!=admin&&admin.equals(1)){returnteacherLogin(mapping,form,request);}if(null!=admin&&admin.equals(2)){returnjteacherLogin(mapping,form,request);}try{第29页共29页 2010届计算科学与技术专业毕业设计(论文)student=studentService.Login(loginForm.getLoginName());if(null==student){request.setAttribute("message","该考生不存在!");thrownewServiceException();}if(!loginForm.getLoginPassword().equals(student.getPassword())){request.setAttribute("message","密码不正确!");thrownewServiceException();}request.getSession().setAttribute("student",student);System.out.println("studentinlogin:"+student);Examstatestate=adminiServie.getExamState();if(state.getState()==0){returnmapping.findForward("chengji");}student.setState(1);student.setScore(0);studentService.update(student);}catch(ServiceExceptione){e.printStackTrace();returnmapping.findForward("false");}}第29页共29页 2010届计算科学与技术专业毕业设计(论文)5.2.2监考老师模块图5-5监考老师界面图监考老师登陆系统后,在指定时间选择考试班级,点击开始考试按钮,调用后台StartExamAction(参见图5-2),该action主要作用是将学生考试状态置“1”,该班学生才能登陆进行考试。考试时间一到,监考老师做好本场考试备注,再点击结束考试,调用后台EndExamAction(参见图5-2),系统对学生强行收卷。5.2.3学生考试模块第29页共29页 2010届计算科学与技术专业毕业设计(论文)图5-6学生考试界面图考试开始后,学生就能点击开始考试按钮登陆进行考试,学生在复选框中选好答案,然后点击下一题按钮,后台调用NextAction,考试结束后学生点击交卷按钮提交考试退出系统,并自动计算本次考试分数。以下为考试关键的NextAction部分代码:publicclassNextActionextendsMappingDispatchAction{publicstaticintTIHAO=0;//题号privateStudentServicestudentService=(StudentService)BeanFactory.getBean(BeanFactory.FstudentService);publicActionForwardnext(ActionMappingmapping,ActionFormform,HttpServletRequestrequest,HttpServletResponseresponse){Listlist=(List)request.getSession().getAttribute("allshiti");//所有试题存放在Session中的“allshiti”中intsize=list.size();TIHAO=(Integer)request.getSession().getAttribute("haoma");System.out.println("TIHAOinnext:"+TIHAO);if(TIHAO>=size-1){request.setAttribute("message","现在已经是最后一道题了");}else{Mobanmb=(Moban)list.get(TIHAO+1);Mobanmb1=(Moban)list.get(TIHAO);Studentstudent=(Student)request.getSession().getAttribute("student");//学生对象从session中获取第29页共29页 2010届计算科学与技术专业毕业设计(论文)Stringstringopt=request.getParameter("opt");Shitikaoti=newShiti();kaoti.setWenti(mb.getQuestion());kaoti.setId(mb.getId());kaoti.setOpt(mb.getOpt().split("#"));if(stringopt!=null&&!stringopt.equals("")){try{Studentstudent1=studentService.selectStudentById(student.getId());daan.put(TIHAO,stringopt);//记录答案System.out.println("daaninnext"+mb1.getAnswer());if(mb1.getAnswer().equals(stringopt)){//判断该题答对后,设定该考生考分加一System.out.println("答对了");map.put(TIHAO,1);//记录分数setScore(getScore()+1);}else{map.put(TIHAO,0);}student1.setScore(getScore());studentService.update(student1);}catch(ServiceExceptione){request.setAttribute("message","网络延时请稍等");e.printStackTrace();returnmapping.findForward("false");}}request.setAttribute("kaoshi",kaoti);//设定下一考题到request中synchronized(this){//同步代码块,防止多考生异步答题,打乱题号TIHAO++;}request.setAttribute("nowtihao",TIHAO+1);//设定当前题号到request中}}5.2.4教师分析模块第29页共29页 2010届计算科学与技术专业毕业设计(论文)图5-7教师分析界面图教师登陆后,可通过点击查看考试情况按钮查看考试情况查看已考科目,后台调用ShowPhAction(参见图5-1),界面用条形图清晰表现本次考试各分数段分布比例。其条形图实习关键代码:publicvoidcreateChart(OutputStreamos,ListbarValues,Stringtitle,StringxTitle,StringyTitle,intwidth,intheight)throwsIOException{CategoryDatasetdataset=getDataSet(barValues);JFreeChartchart=ChartFactory.createBarChart3D(title,//图表标题xTitle,//目录轴的显示标签yTitle,//数值轴的显示标签dataset,//数据集PlotOrientation.VERTICAL,//图表方向:水平、垂直true,//是否显示图例(对于简单的柱状图必须是false)true,//是否生成工具true//是否生成URL链接);ChartUtilities.writeChartAsJPEG(os,1.0f,chart,width,height,null);}privateCategoryDatasetgetDataSet(ListbarValues){DefaultCategoryDatasetdataset=newDefaultCategoryDataset();Iteratoriter=barValues.iterator();while(iter.hasNext()){BarValuebarValue=(BarValue)iter.next();dataset.addValue(barValue.getBarValue(),barValue.getRowKey(),barValue.getColumnKey());}returndataset;}第29页共29页 2010届计算科学与技术专业毕业设计(论文)5.2.5后台管理模块(1)添加考题界面图5-8管理员增加考题界面管理员增加考题界面,输入考试题目,然后一一输入选项(通过点击添加下一个选项),再输入答案,第一个选项答案输“1”,然后选择对应科目,点击出题完毕保存,后台调用AddoptAction(参见图5-3)其关键代码:publicActionForwardadd(ActionMappingmapping,ActionFormform,HttpServletRequestrequest,HttpServletResponseresponse){StringBufferstring=(StringBuffer)request.getSession().getAttribute("opt");//选项存入Session中“opt”,后台用StringBuffer存放,各选项之间用“#”连接Stringopt=request.getParameter("opt").trim();Stringtimu=request.getParameter("timu").trim();if(timu.equals("")){request.setAttribute("message","试题题目没有设置!");returnmapping.findForward("true");}if(opt.equals("")){request.setAttribute("message","试题选项没有设置!");returnmapping.findForward("true");}if(null==string){第29页共29页 2010届计算科学与技术专业毕业设计(论文)string=newStringBuffer();string.append(chang(opt));string.append("#");request.setAttribute("timu",timu);request.getSession().setAttribute("opt",string);request.setAttribute("success","<<----------选项设置成功!点我继续设置选项----------->>");returnmapping.findForward("true");}(1)考试科目选图5-9管理员考试管理界面管理员可设定勾选考试科目,并通过下拉框从该科目题库中选择相应的考题数量,后台调用ChoiceExamAction(参见图5-3),将选定科目试题存入服务器下***.dat(*为该科目)。其关键代码如下:publicActionForwardexecute(ActionMappingmapping,ActionFormform,HttpServletRequestrequest,HttpServletResponseresponse){AdminDaoadminDao=(AdminDao)BeanFactory.getBean(BeanFactory.FadminDao);Listlist=null;Listlist1=newArrayList();String[]kecheng=request.getParameterValues("kecheng");StringBufferstring=newStringBuffer();if(null!=kecheng){for(Strings:kecheng){intnum=Integer.parseInt(request.getParameter(s));string.append(s+":");第29页共29页 2010届计算科学与技术专业毕业设计(论文)if(num==0){request.setAttribute("message","课程"+s+"题目数量不能是0");returnmapping.findForward("true");}try{list=adminDao.selectKecheng(s,num);fileInput(list,s);}catch(DataAccessExceptione){e.printStackTrace();}list1.add(list);}request.getSession().getServletContext().setAttribute("kecheng",list1);Iteratorit=list1.iterator();if(it.hasNext()){System.out.println("kecheng:"+it.next());}string.deleteCharAt(string.lastIndexOf(":"));request.getSession().getServletContext().setAttribute("kaoshikc",string.toString());kecheng(string.toString());request.setAttribute("message","设置的考试科目是:"+string.toString());returnmapping.findForward("true");}else{request.setAttribute("message","你还没有设置任何考试科目!");returnmapping.findForward("true");}}//写入试题privatevoidfileInput(Listlist,Stringname){Stringdir=servlet.getServletContext().getRealPath("/dat/"+name);Filefile=newFile(dir);if(!file.exists()){file.mkdir();}FileOutputStreamfout;try{fout=newFileOutputStream(dir+"/"+name+".dat");ObjectOutputStreamoout=newObjectOutputStream(fout);oout.writeObject(list);Iteratorit=list.iterator();第29页共29页 2010届计算科学与技术专业毕业设计(论文)if(it.hasNext()){System.out.println("dat:"+it.next());}oout.flush();fout.close();}catch(Exceptione){e.printStackTrace();}}6在线考试系统设计的技术关键6.1事务的提交开发中我发现将事务的提交放在DAO层,由于事务是一个原子操作,一个或多个操作将作为一个事务。由于DAO层是与数据库交互的层,各个DAO的实现类都提供有对数据库中的表进行操作的方法,如果对组成事务的每一个操作,每执行完一次就马上提交,就很有可能违反所有操作要同时成功或失败的原则。之所以会违反上述的原则,是因为,如果在Dao层提交事务,无法保证所有的操作都成功执行,这样将操作分开提交,破坏了它们之间的依赖性,将有可能出现其中一个或多个操作失败,而另一些操作执行成功,并提交事务的情况,结果将导致数据的不一致性。我采用将事务放在业务层提交,即当所有的操作都执行成功后,才提交事务,否则将事务回滚,记录回到初始状态。这样才能保证数据的一致性。具体代码:publicclassHibernateTransactionimplementsTransaction{privateorg.hibernate.Transactiontransaction;publicvoidbeginTransaction(){Sessionsession=HibernateSessionFactory.getSession();transaction=session.beginTransaction();}publicvoidcommit(){transaction.commit();}publicvoidrollback(){transaction.rollback();}}6.2Session线程安全因为Session是单线程的,故它是线程不安全的对象,当多个线程访问同一个Session时,会出现数据存取逻辑的混乱。当Session在service层与dao层之间进行传递的时候,难免会出现传递的Session并不是对应于当前线程的Session,这样将可能对还未提交的事务提前提交,而应该提交的事务并没有得到及时的提交,从而无法最终将对象持久化到数据库中,并且提交别的Session事务也没有意义。第29页共29页 2010届计算科学与技术专业毕业设计(论文)将Session与当前线程绑定,以保证一线程一Session,最终正确提交事务。在本系统中,我通过调用HibernateUtil工具类的getCurrentSession()方法获得当前线程的Session,而该Session实际是通过ThreadLocal类中的get()方法获得。同时将Session与它开启的事务通过一个TransactionManagerMapImpl类中的一个Map类型的集合进行关联。系统的实现代码如下:HibernateUtil类中的getCurrentSession()方法:privatestaticThreadLocallocal=newThreadLocal();publicstaticSessiongetCurrentSession(){Sessions=(Session)local.get();if(s==null){//如果不存在该Session,则创建一个并与该线程绑定s=sf.openSession();local.set(s);}returns;}service层service类的部分代码:PrivateCustomerDaodao=(CustomerDao)DaoFactory.getDao(CustomerDao.class);privateTransactionManagerMapImpltm=newTransactionManagerMapImpl();session=tm.begin();//调用dao层的实现类中的insert方法将数据插入数据库中dao.insert(c,session);tm.commit(session);提交事务TransactionManagerMapImpl类中的两个重要方法begin(),commit(Sessionsession)publicSessionbegin(){Sessionsession=HibernateUtil.getCurrentSession();Transactiontransaction=session.beginTransaction();map.put(session,transaction);returnsession;}publicSessioncommit(Sessionsession){Transactiontransaction=map.get(session);transaction.commit();returnsession;}7系统试运行结果与评本文用当前比较成熟的web开发框架Struts和Hibernate技术实现了一个比较使用的在线考试系统的设计与开发。实现时主要用到了MVC模型。本系统作为一个教学管理系统的子系统,具有相当的实用性。由于使用了MVC开发模型,使得各模块具有相当的独立性,因此系统的可重用性也比较高。使用Java语言作为开发语言,使得程序具有很强的可移植性。程序中注释写得尽量规范,因此可读性与可维护性也比较好。第29页共29页 2010届计算科学与技术专业毕业设计(论文)在本系统开发过程中不可避免地遇到不少困难,加之本小组水平有限并对web的应用开发还不是太熟练,系统的一些功能做得还不很完善,有些功能也没有实现。由于时间关系,我分配任务中学生按难度随机组卷,学生查分排名功能都没能实现。通过本次毕业设计我学到了不少新东西,更进一步熟悉了Struts的web开发框架和MVC模型。但是也发现了自身的诸多不足,相信通过以后的不断学习与实践,一定会有更多的收获的。8结束语当今许多高校都非常关注无纸化网络考试的开发与应用,本文是通过考试方面进行的尝试,实践证明,该方法是可行的;我们结合企业的开发技术及在校所学理论知识(软件工程,操作系统,数据结构等学科),利用毕业设计的机会,开发一套在线考试系统,基本上实现了在线考试及考试管理等功能。致谢经过4个多月的奋战,毕业设计及论文部分终于出炉了,首先要感谢鄢沛老师全面、具体指导和监督。鄢老师渊博的学识、民主而严谨的作风,还有负责任的态度使我受益非浅,并终生难忘,特别是在论文书写过程中给与了我很大的帮助,这一次论文的书写让我的文档书写水平有了很大的提高,改掉了过去很多的书写不规范的毛病。同时还要感谢我的学友和朋友对我的关心和帮助,开发工作永远是一个需要团结合作才能做好的工作,虽然毕业设计是自己独立完成的,但在设计过程中很多问题都是通过大家的帮助解决的,他们的帮助让我少走了不少弯路,一起研究程序的经历让人终生难忘。参考文献[1]李书杰,李志刚.B/S三层体系结构模式[J].河北工学院院报,2002[2]耿祥义.Java基础教程[M].北京.清华大学出版社,2004.9:10-50[3]BruceEckel.Java编程思想[M].北京.机械工业出版社,2002.9:30-280[4](美)舒尔第.Java2-Thecompletereference[M].北京.电子工业出版社,2003.1:20-100[5](美)MartyHall.Servlet与JSP权威指南[M].北京v机械工业出版社,2002.10:30-350[6](美)MartyHall.JavaScript高级程序设计[M].北京.人民邮电出版社,2006.11:50-200[7](美)DavidFlanagan.JavaScript权威指南[M].北京.机械工业出版社,2003.1:10-200[8]梁立新.项目实践精解:基于struts-spring-hibernate的Java应用开发[M].北京.电子工业出版社,2006.8:10-300[9]邱哲等.StrutsWeb设计与开发大全[M].北京.清华大学出版社,2006.8:10-208[10]张洪伟.TomcatWeb开发及整合应用[M].北京.清华大学出版社,2006.8:10-230[11]郭锋等.Spring从入门到精通[M].北京.清华大学出版社,2006.8:10-250[12]蔡雪焘.Hibernate开发及整合应用大全[M].北京.清华大学出版社,2006.8:10-200[13]高寅.系统分析之路[M].北京.电子工业出版社,2005.5:30-200[14]范云之.基于Web数据库在线考试系统的设计与实现研究[J].商丘师范学院学报第22卷第5期2006.10:1-20[15]张海藩.软件工程导论[M].北京:清华大学出版社,1998第29页共29页