版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
.z...基于JAVA的在线考试系统学生:*艳慧指导教师:*志强【内容提要】在线考试系统旨在实现考试的无纸化管理,对一些科目的考试可以通过互联网络或局域网进展,方便校方考务的管理,也方便了考生,尤其适合考生分布广,不易集中的远程教育。我主要开发系统的后台管理系统—JAVA在线考试管理子系统,它包括试题管理、考生管理、在线制作试卷、控制学生考试的设置、试卷审批等功能。本论文主要介绍了对JAVA在线考试管理子系统的分析、设计和开发的全部过程。运用ER图,程序流程图等对在线管理子系统的设计过程进展详细的说明。全文共分为开发方案、需求分析、系统设计、关键技术解决,结论五局部。开发方案中主要介绍开发在线考试系统得目的、开发方案的选择及开发框架的技术确实定;需求分析介绍了在线考试系统的总体需求及系统各模块的功能需求;系统设计介绍了系统设计的指导思想、数据库的设计、系统模块的设计;关键技术介绍了在具体实现时需解决的一些技术,如开发框架的整合技术、开发框架与数据库的连接及数据的备份与复原。【关键词】:JSP,JAVA,SQLServer2000数据库,B/S模式TOC\o"1-2"\h\z前言11、开发方案21.1问题分析21.2工程目的21.3方案选择21.4开发框架技术42、需求分析52.1任务概述52.2功能需求概述52.2运行环境73、系统设计73.1指导思想73.2系统构造图93.3数据库设计123.4系统模块局部设计174、关键技术解决244.1系统架构与数据库的连接244.2框架技术的整合264.3数据的备份与复原275、完毕语28参考文献29ABSTRACT30后记30前言现今,不管是国内还是国外的各大厂家,都在不断的推出一系列的考试、认证。如微软的MCSE、Cisco的CA等。我们国家的自考或是成考,以及各省市的各种考试,现在都在朝着信息化的道路前进在走。我们相信在今后这一系列的考试将会走向网络化考试的。这样才是符合信息开展的。所以我们考虑这是一个时机。我们要给不同的考试一个好的解决方案。这个方案在技术上来讲我们是采用B/S模式。在Windows/Linu*平台上,使用IE浏览器,完成抽题、考试、交卷等考试任务。各考点模块通过网络获取题库,考点模块按照题库中的抽题策略,自动给每个考生生成一份试卷,考生在线作答,考试结果数据通过网络回收,系统自动进展判分,生成考试成绩和统计数据。“在线考试系统〞是集合现代考试理论、方法和现代信息技术手段的智能化网上考试系统,为学生个性化学习提供“灵活、方便、科学、公平〞的“个别化考试效劳〞,是终结性评价系统。学生可以随时、随地进展课程结业考试。现阶段,学校与社会上的各种考试大都采用传统的考试方式,在此方式下,组织一次考试至少要经过五个步骤,即人工出卷,考生考试,人工阅卷,成绩评估和试卷分析。显然,随着考试类型的不断增加及考试要求的不断提高,教师的工作量将会越来越大,并且其工作将是一件十分烦琐和非常容易出错的事情,可以说传统的考试方式已经不能适应现代考试的需要。随着计算机应用的迅猛开展,网络应用不断扩大,如远程教育和虚拟大学的出现等等,且这些应用正逐步深入到千家万户。人们迫切要求利用这些技术来进展在线考试,以减轻教师的工作负担及提高工作效率,与此同时也提高了考试的质量,从而使考试更趋于公证、客观、更加激发学生的学习兴趣。例如目前许多国际著名的计算机公司所举办的各种认证考试绝大局部采用这种方式。为了适应新形势的开展,我们推出了这一系统,使其尽快在各类考试中发挥高效,便捷的作用,把教师从繁重的工作中解脱出来。1、开发方案1.1问题分析传统的学校教学中,进展一场考试,要求教师刻试卷、印试卷、安排考试、监考、收集试卷、评改试卷、讲评试卷和分析试卷,这是一个繁杂的过程,需要大量人力、物力与时间的投入,已经越来越不适应学校信息化建立与现代教学的需要。尤其在远程网络教学中,学生分布广,不易统一集中安排考试,给校方和学生带来了众多的不便。而在线考试系统,正是信息化建立的产物,它是传统考场的延伸。它可以利用互联网络和局域网,随时随地的对学生进展考试,加上数据库技术的利用,大大简化了传统考试的过程,因此在线考试是电子化教学的不可缺少的辅助手段。在当今信息时代,计算机技术与网络技术越来越广地应用于各个领域,改变着人们的学习、工作、生活乃至思维方式,也引起了教育领域的重大变革。将计算机与网络技术应用于现代高等教育中,是现代高等教育开展的需要,也是改革教育模式,提高学校教学效果和教学效率、提高科研和管理水平的必要手段。1.2工程目的在线考试系统的总体目标:在线考试系统可以帮助教师完成一个考试从题目设计,考试安排,考试实施,考卷批改到分数统计总结的所有工作。所有的考试数据和其它数据库需要一种主流的方式进展存储和管理,例如使用数据库技术。考试数据的存放和处理必须对考试**,需要一定的平安性保障。对考试的系统目标:这个软件是分布式的,这意味着只要有考试客户端可以连接到考试应用效劳器,任何考生在任何地方进展身份确认,都能完成考试。题目最好有一定的稳定性和随机性。稳定性可以保证每一次考试对每一个考生是公平的,随机性可以防止作弊的发生。考试的局部结果在考生考完之后就可以知道,同时提供一个时机让考生知道自己哪里做错了,并给出反应信息说明理由。对教师的系统目标:提供一个功能全面的考核管理客户端,可以进展考试设计和安排。通过管理客户端,教师可以进展考试的身份管理。考生的考试结果可以被保存下来,供教师进展分析统计和观察。1.3方案选择开发在线考试系统,提出以下解决方案:选择SQLServer2000作为后台的数据库,选择JAVA、JSP、JavaScript、Html作为应用程序开发工具,运用Tomcat效劳器技术,整个系统完全基于B/S(Browser/Server)模式进展设计。JAVA简介Java是Sun公司推出的新的一代面向对象程序设计语言,特别适合于Internet应用程序开发。Java的产生与流行是当今Internet开展的客观要求,Java是一门各方面性能都很好的编程语言,它的根本特点是简单、面向对象、分布式、解释的、强健的、平安的、构造中立的、可移植的、性能很优异的、多线程的、动态的,特别适合在Internet环境上开发的应用系统。Web应用程序开发环境—JSP技术JSP的全称是JavaServerPages,它是SUN推出的一种动态网页技术标准。它在传统的静态页面文件〔*.html,*.htm〕中参加JAVA程序片段和JSP标记,就构成了JSP页面。JSP具有以下的优点:将业务层与表示层别离:使用JSP技术,网络开发人员可充分使用HTML来设计页面显示局部〔如字体颜色等〕,并使用JSP指令或者JAVA程序片段来生成网页上的动态内容;能够跨平台:JSP支持绝大局部平台,包括现在非常流行的LINU*系统,应用非常广泛的Apache效劳器也提供了支持JSP的效劳;组件的开发和使用很方便:如ASP的组件是由C++,VB等语言开发的,并需要注册才能使用;而JSP的组件是用Java开发的,可以直接使用;一次编写,处处运行:作为JAVA开发平台的一局部,JSP具有JAVA的所有优点,包括Writeonce,Runeverywhere.Tomcat应用效劳器目前支持JSP的应用效劳器是较多的,Tomcat是其中较为流行的一个Web效劳器,被JavaWorld杂志的编辑选为2001年度最具创新的Java产品,可见其在业界的地位。Tomcat是一个免费的开源的Serlvet容器,在Tomcat中,应用程序的部署很简单,你只需将你的WAR放到Tomcat的webapp目录下,Tomcat会自动检测到这个文件,并将其解压。你在浏览器中这个应用的Jsp时,通常第一次会很慢,因为Tomcat要将Jsp转化为Servlet文件,然后编译。编译以后,将会很快。Tomcat也具有传统的Web效劳器的功能:处理Html页面。但是与Apache相比,它的处理静态Html的能力就不如Apache。我们可以将Tomcat和Apache集成到一块,让Apache处理静态Html,而Tomcat处理Jsp和Servlet。Tomcat是一个很好的工具,不仅仅因为其免费,功能强大,更因为其开放性,越来越受到人们的重视。SQLserver2000MicrosoftSQLServer2000是由Microsoft公司开发的,简称SQLServer,由一系列相互协作的组件构成,能满足最大的Web站点和企业数据处理系统存储和分析数据的需求。MicrosoftSQLServer2000具有如下特性:其数据库引擎提供完整的*ML支持一个数据库引擎可以在不同的平台上使用其关系数据库引擎支持当今苛刻的数据处理环境所需的功能。一系列管理和开发工具,是其系统容易安装、部署、管理和使用。有析取和分析汇总数据以进展联机分析处理(OLAP)的工具B/S开发模式伴随着Internet的迅速开展,计算机技术正在由基于C/S〔client/Server〕模式的应用系统转变为基于B/S模式的应用系统。过去,网络软件的开发都采用C/S〔client〕模式,在这种模式下,主要的业务逻辑都集中于客户端程序,因此,必然导致以下问题:系统安装、调试、维护和升级困难。由于客户端的硬件配置可能存在差异,软件环能各不一样,因此,在安装时,必须对每一个客户端分别进展配置,同样,在软件升级时也要对客户端分别处理。在整个系统中,业务逻辑和用户界面都集中到了客户端,必然会增加平安隐患。B/S模式带来了巨大的好处:开发本钱及维护本钱降低。由于B/S架构管理软件只安装在效劳器端〔Server〕上,即应用程序在部署、升级、维护时,只需要在效劳器端进展配置就可以了,网络管理人员只需要管理效劳器就行了,用户界面主要事务逻辑在效劳器〔Server〕端完全通过浏览器实现,极少局部事务逻辑在前端〔Browser〕实现,所有的客户端只有浏览器,网络管理人员只需要做硬件维护。良好的平安性能,防火墙技术可以保证后台数据库的平安性。所有的配置工作都集中在效劳器端且所有客户端请求都是通过DBMS来数据库,从而大大减少了数据直接暴露的风险。1.4开发框架技术对于框架技术,我们采用Struts+Spring+Hibernate的整合,其实任何一种框架都可以完成我们的工程,但我们选择三种框架的组合是因为三种框架各有好处,我们利用它们的优点,来防止它们的缺点,充分利用Java技术在web的应用。Struts是应用比拟广泛的一种表现层框架Struts是一个为开发基于模型(Model)-视图(View)-控制器(Controller)(MVC)模式的应用架构的开源框架,是利用Servlet,JSP和customtaglibrary构建Web应用的一项非常有用的技术。由于Struts能充分满足应用开发的需求,简单易用,敏捷迅速。它使用效劳层框架可以将JavaBeans从Jsp/Servlet中别离出来,而使用表现层框架则可以将Jsp中剩余的JavaBeans完全别离,这局部JavaBeans主要负责显示相关信息,一般是通过标签库〔Taglib〕实现,不同框架有不同自己的标签库,Struts是应用比拟广泛的一种表现层框架。Spring效劳层框架它也是一个开源框架,它由RodJohnson创立。它是为了解决企业应用开发的复杂性而创立的。Spring使用根本的JavaBean来完成以前只可能由E完成的事情。然而,Spring的用途不仅限于效劳器端的开发。从简单性、可测试性和松耦合的角度而言,任何Java应用都可以从Spring中受益。•目的:解决企业应用开发的复杂性•功能:使用根本的JavaBean代替E,并提供了更多的企业应用功能•*围:任何Java应用简单来说,Spring是一个轻量级的控制反转(IoC)和面向切面(AOP)的容器框架。Hibernate通过持久层的框架将数据库存储从效劳层中别离出来它是O/RMapping的一种实现是目前在JAVA界使用非常广泛的O/RMapping的一种实现,可以实现关系型数据库和对象之间的映射。用来开发数据库系统非常方便,可以将数据库和程序的设计融合在一起。表现层和效劳层的别离是通过两种框架到达目的的,剩余的就是持久层框架了,通过持久层的框架将数据库存储从效劳层中别离出来就是其目的,持久层框架有两种方向:直接自己编写JDBC等SQL语句〔如Ibatis〕;使用O/RMapping技术实现的Hibernate和JDO技术;当然还有E中的实体Bean技术。Hibernate的工作原理是通过文件把值对象和数据库表之间建立起一个映射关系,这样,我们只需要通过操作这些值对象和Hibernate提供的一些根本类,就可以到达使用数据库的目的。例如,使用Hibernate的查询,可以直接返回包含*个值对象的列表〔List〕,而不必向传统的JDBC方式一样把结果集的数据逐个装载到一个值对象中,为我们的编码工作节省了大量的劳动。Hibernate提供的HQL是一种类SQL语言,是提供对象化的数据库查询方式,但HQL在功能和使用方式上都非常接近于标准的SQL2、需求分析2.1任务概述在线考试管理子系统主要实现题库管理、在线制作试卷、在线控制考试、自动评分〔客观题局部〕、自动交卷、考生管理、成绩查询、试卷管理等功能,充分利用计算机科学与技术,改变传统的考试操作方式,实现无纸化考试的模式。2.2功能需求概述系统需要解决的主要问题我主要开发的是后台管理子系统,在此系统中我们主要对前台考试系统的显示信息进展管理和设置。我将子系统分为以下功能模块:在线考试管理子系统在线考试管理子系统信息管理评卷管理试卷管理题库管理成绩管理考试管理用户管理权限管理信息管理评卷管理试卷管理题库管理成绩管理考试管理用户管理权限管理题库管理:用于对单个试题的增、删、改、查等根本维护,还可对题库进展数据备份和数据复原。我们针对不同题型、不同应用*围及不同科目对试题进展维护。试卷管理:可进展三种组卷方式的维护:随机组卷、人工组卷、综合组卷。还可对考生的根本信息进展维护。考试管理:对考试分配试卷,并对考试的根本信息进展维护。相当于人工安排考试的过程评卷管理:对试卷的客观题分配评卷人,并对评卷人根本信息进展管理。成绩管理:对每次考试的学生成绩的根本信息进展维护,并提供学生成绩的统计管理。用户管理:对使用本系统的用户根本信息进展维护,用户多数为:系统管理员、教师、教务处人员、其他权限管理:对系统的权限进展管理,并对用户可进展权限的分配。系统应该具备的根本功能各模块需完成以下功能:题库管理试卷管理题库管理试卷管理试卷其他维护试卷信息维护其它维护试题试卷其他维护试卷信息维护其它维护试题维护根本维护综合组卷人工组卷随机组卷题型维护科目维护*围维护综合组卷人工组卷随机组卷题型维护科目维护*围维护题型维护:对试题的题型进展增、删、改、查操作。在操作之后会自动刷新主页,以使信息更新。*围维护:对试题的应用*围进展增、删、改、查操作。在操作之后会自动刷新主页,以使信息更新。科目维护:对试题的科目进展增、删、改、查操作。在操作之后会自动刷新主页,以使信息更新。试题维护:对试题的根本信息进展增、删、改、查操作。在操作之后会自动刷新主页,以使信息更新。其他维护:对试题信息的批量查询,并可进展数据导出、数据备份、数据恢复。随机组卷:用户只需对试卷题型进展设置就可组卷的方式。人工组卷:可使用户选择试卷的题型中的试题的组卷方式。综合组卷:是随机组卷与人工组卷的混合组卷方式,即用户对*一类型的试题可进展选择,也可对试题不进展选择。试卷其他维护:对试卷信息的批量查询,对试题的数据备份与复原。考试管理考试管理考试信息维护分配评卷人评卷管理成绩管理评卷人评卷考生信息维护考生成绩维护成绩其他维护考试信息维护:对考试的时间、地点、监考人、考试用的试卷、试卷总分数及答卷总时间等考试的根本要素进展设置。考生信息维护:对考试的学生的根本信息进展增、删、改、查操作,在操作之后会自动刷新主页,以使信息更新。分配评卷人:对考试所用试卷的客观题分配评卷人,并对评卷的根本信息进展维护。评卷人评卷:对分配试卷的评卷人可以在此进展评卷。考生成绩维护:对考试的考生成绩信息进展统计与汇总,对有权限的人可进展成绩的增、删、改、查操作。成绩其他维护:对考生成绩信息的批量查询,并可进展数据导出、数据备份、数据恢复。用户管理用户管理权限管理信息管理权限信息维护用户根本信息信息根本维护用户分配权限用户根本信息维护:对使用本系统的用户进展维护,而用户的权限由权限管理进展维护,并分配给用户,使用户只能自己拥有的权限内。权限信息维护:对根本的权限进展维护,用户可自定义维护权限。用户分配权限:对未分配权限的用户进展权限的分配,即对分配权限的增、删、改、查操作。信息根本维护:我们的信息除了有关考试的信息外,还有公告、新闻、留言信息需要我们维护,其中公告、新闻由后台有权限的人进展增、删、改、查操作,而留言是由前台的用户〔学生〕或游客录入的,我们要防止垃圾数据显示,即对留言有权更改等操作。2.2运行环境硬件需求:PIII/256M/10G及以上配置,要求为考试系统分配足够的数据库磁盘空间推荐配置:PIV2G/512M/40G操作系统需求:Windows2000及以上操作系统(推荐),也可以使用SunSolaris等Linu*操作系统数据库软件需求:SQLServer2000中文版数据库(推荐),也可以使用Oracle8i/Oracle9i数据库中间件软件需求:tomcat系列效劳器3、系统设计3.1指导思想eq\o\ac(○,1)、B/S构造开发思想B/S〔Browser/Server〕构造即浏览器和效劳器构造。它是随着Internet技术的兴起,对C/S构造的一种变化或者改良的构造。在这种构造下,用户工作界面是通过浏览器来实现,极少局部事务逻辑在前端〔Browser〕实现,但是主要事务逻辑在效劳器端〔Server〕实现,形成所谓三层〔3-tier〕构造。一个三层架构的应用程序由三局部组成,这三局部各自分布在网络中的不同地方。这三个局部分别是:工作站或表示层接口、事务逻辑、数据库以及与其相关的程序设计。在一个典型的三层架构应用程序中,应用程序的用户工作站包括提供图形用户界面〔GUI〕的程序设计和具体的应用程序入口表格或交互式窗口。事务逻辑处在局域网〔LAN〕效劳器或其他共享主机上,它作为响应工作站所发出客户请求的效劳器,而相对于处于大型机的第三层它是作为客户端,并且决定需要什么数据以及数据存储在哪里。第三层包括数据库以及处理读写以及数据库的程序。然而应用程序的设计可能比这个架构要复杂,对于大型程序来说,这个三层模式是一种比拟简便的考虑方法。这种应用程序的设计使用客户/效劳器模式,各层可以同时开发,并且可以由不同的成员组用不同的语言来开发。因为各个层次的开发不会影响其他层次,所以这种模型对于进一步开发软件是很方便的。这样就大大简化了客户端电脑载荷,减轻了系统维护与升级的本钱和工作量,降低了用户的总体本钱〔TCO〕。以目前的技术看,局域网建立B/S构造的网络应用,并通过Internet/Intranet模式下数据库应用,相对易于把握、本钱也是较低的。它是一次性到位的开发,能实现不同的人员,从不同的地点,以不同的接入方式〔比方LAN,WAN,Internet/Intranet等〕和操作共同的数据库;它能有效地保护数据平台和管理权限,效劳器数据库也很平安。特别是在JAVA这样的跨平台语言出现之后,B/S架构管理软件更是方便、快捷、高效。eq\o\ac(○,2)、系统工程的流程思想我们在系统开发过程中,采用软件工程的开发管理,在开发的过程中也遵循软件工程的思想,软件工程的主要环节有:人员管理〔自己模拟〕、工程管理〔我的小组模拟〕、可行性与需求分析、系统设计、程序设计、测试、维护等,如图1.1所示。eq\o\ac(○,3)、面向对象机制的设计思想所有计算机均由两种元素组成:代码和数据。准确的说,有些程序是围绕着"什么正在发生"而编写,有些则是围绕"谁正在受影响"而编写的。第一种编程方式叫做"面向过程的模型",按这种模型编写的程序以一系列的线性步骤(代码)为特征,可被理解为作用于数据的代码。如C等过程化语言。第二种编程方式叫做"面向对象的模型",按这种模型编写的程序围绕着程序的数据(对象)和针对该对象而严格定义的接口来组织程序,它的特点是数据控制代码的.通过把控制权转移到数据上,面向对象的模型在组织方式上有:抽象、封装、继承和多态的好处。eq\o\ac(○,4)、代码分层思想由于采用B/S设计模式分层思想,同时根据软件工程的管理思想及系统分析的设计与分析的思想进展系统的开发,利用Java语言开发Web应用程序,提供String+Hibernate+Spring框架对系统的程序代码构造进展分层。分层的策略如下:serviceLocatorserviceLocator表示层StrutsStrutsAction,ActionForm,Jsp,Struts-config.*ml,etc.DAOClasses业务层SpringHibernatesessionManagement持久层HibernateDataSource/ConnectionPoolTransactionsBusinessServiceClassesQueryLanguageSupportandotherHibernateServicesDomainModelBusinessObjectsStruts-Spring-Hibernate架构3.2系统构造图eq\o\ac(○,1)、本系统分为学生前台子系统和考试管理子系统,整个系统的构造图如下:在线考试系统在线考试系统考生前台后台管理题库管理评卷管理考试管理试卷管理成绩管理用户管理权限管理学生登陆eq\o\ac(○,2)、系统的用例图如下:eq\o\ac(○,3)、系统局部模块类图:用户管理模块类图如下所示:信息管理模块类图如下所示:系统局部功能序列图用户登录序列图:系统操作序列图:3.3数据库设计eq\o\ac(○,1)、主要数据库表的介绍根据系统需要和考试需要,设立了如下数据库表:试题类型表(questionType_table):其中包括了试题的类型的根本信息,如类型名称、答题方式、说明信息等字段;录入时,我们将答题方式确定为大概几种类型:填空方式,选择方式,问答方式,判断方式,综合方式。试题*围表(questionBound_table):用于控制试题应用的*围,如同样的科目语文,在小学、初中、高中、大学都有,由此我们设定了此表,此表中有*围名称、*围说明等根本信息;所属科目表(questionSubject_table):用于录入试题相关的科目应用,它可以有不同的应用*围。如上所述,我们只需录入一次的科目,就可方便我们在录入试题时每次都录。各种题库表:我们采用一种类型的题存储在一个表中,由此我们会有填空题表〔question_blanc_table〕、单项选择题表〔question_selectone_table〕、多项选择题表〔question_selectMany_tabel〕一题多问表(question_askone_table)、一题多问表(question_askMany_table)、判断题表〔question_judge_table〕等试题表试卷表(e*am_table):用于报存考试中试卷的根本信息,如出卷方式〔有随机出卷、人工出卷、综合出卷〕、试卷名称、试卷应用*围〔与试题*围相对应〕、试卷所属科目〔与试题科目相对应〕、试题标题级别、试题标题内容、试题总类型、试题个数、试题总ID等根本信息。学生表(student_table):用于保存学生的考试的用户名及登陆密码。成绩表(grade_table):用于存储学生的考试成绩。评题表(appraiser_question_table):对于主观题的答案我们须要评卷人〔有权限的用户〕进展手工评卷,本表用来存储评卷人评卷的一些信息。答案表(student_answer_table):用于存储学生问答题的答案,如试卷ID,学生ID及各种试题类型的答案字段。用户表(user_table):用于保存用户的登陆的根本信息及分配的权限。权限表(purview_table):用于存储用户组织的的权限,通过分配操作模块的权限组织权限。信息表(info_table):用于保存除了试卷以外的信息,主要是为了学生与教师更好的沟通。有信息类型〔有公告、新闻、留言〕、信息名称、信息内容等根本字段。游客表(testuser_table):用于保存游客登陆或注册的根本信息。eq\o\ac(○,2)、数据库ER图数据库设计的逻辑实体关系图表示如下:〔这里表示的只是局部表的逻辑实体关系。〕eq\o\ac(○,3)、主要数据库表的构造定义〔数据词典〕:eq\o\ac(○,A)、数据库表名的定义使用:重点字_table;重点字可以是多个英文单词的组合,从组合的第二单词起首字母大写,字段命名是能表达字段内容的英文单词的组合,组合方式同表名重点字一样。eq\o\ac(○,B)、NN表示notnull不填表可为空。eq\o\ac(○,C)、数据类型不使用固定数据库的类型,标识群众类型,如字符串、字符、数字等。这样在更改数据库时需求的数据是可移植的eq\o\ac(○,D)、输写数据表在数据库中的物理名称,可用自己熟悉的语言再定义表名称,方便沟通。eq\o\ac(○,E)、长度定义又数据类型决定:如字符串可选8000以下,数字可在50位之间,字符只允许一位。eq\o\ac(○,F)、输入方式表示数据的来源:生成表由程序或数据库的索引自动生成,而不需人工录入;输入表示通过文本框等输入的数据;选择表单项选择框、复选框、下拉列表等通过选择输入的数据;自定获取是为外码的输入设定的,它由程序自动获取。主要表构造如下:物理名称:questionType_table表名称主要字段数据类型长度属性输入方式描述备注试题类型表questionTypeID字符串50NN生成试题类型标识符(主键)由系统自动生成questionTypeName字符串50NN输入试题类型名称answerManner字符串50NN选择此种试题的答复方式系统定义了6种常见的固定的答题方式,如:单项选择方式、多项选择方式、填空方式、判断方式、问答题方式。questionTypeE*plain字符串5000输入试题类型的说明questionOpenFlag字符串50NN选择是否公开标志表示是自己使用的类型还是每个用户都可使用的公共类型userID字符串50NN自动获取用户ID外码备注用于定义试题的类型,可以使用户以不同的数据类型名称来表达自己的试题物理名称:questionBound_table表名称主要字段数据类型长度属性输入方式描述备注试题*围表questionBoundID字符串50NN生成试题*围标识符(主键)由系统自动生成questionBoundName字符串50NN输入试题*围名称questionBoundE*plain字符串5000输入试题*围的说明questionBoundOpenFlag字符串50NN选择是否公开标志表示是自己使用的*围还是每个用户都可使用的公共类型userID字符串50NN自动获取用户ID外码备注用于定义试题的*围,可以使用户以不同的试题*围名称来定义自己的试题物理名称:questionSubject_table表名称主要字段数据类型长度属性输入方式描述备注试题科目表questionSubjectID字符串50NN生成试题科目标识符(主键)由系统自动生成questionSubjectName字符串50NN输入试题科目名称questionSubjectE*plain字符串5000输入试题类型的说明questionSubjectOpenFlag字符串50NN选择是否公开标志表示是自己使用的类型还是每个用户都可使用的公共类型questionBoundID字符串50NN选择试题*围ID外码1userID字符串50NN自动获取用户ID外码2备注用于定义试题的科目,可以使用户以不同的试题科目名称来定义自己的试题物理名称:question_table表名称主要字段数据类型长度属性输入方式描述备注试题表questionID字符串50NN生成试题标识符(主键)由系统自动生成content字符串50NN输入试题内容根据不同类型的答题方式进展输入试题e*plain字符串5000输入试题说明difficultyDegree字符串50NN选择试题深度系统模认6种试题深度:根底、简单、中等、中级、中难、难级、极难。answerContent字符串50NN选择试题答案内容answerE*plain字符串5000输入试题答案说明userID字符串50NN自动获取用户ID外码1questionTypeID字符串NN选择试题类型ID外码2questionSubjectID字符串NN选择试题科目ID外码3备注本试题表只是模拟了试题表的公共局部,实际是一种试题一*表,可由不同用户录入。物理名称:testPaper_table表名称主要字段数据类型长度属性输入方式描述备注试卷表testPaperID字符串50NN生成试卷标识符(主键)由系统自动生成testPaperMakeMode字符串50NN输入试卷出题方式系统设定有三种出题方式:随机组卷、人工组卷、综合组卷。testPaperName字符串50NN输入试卷名称testPaperE*plain字符串5000选择试卷说明userID字符串50NN自动获取用户ID外码1questionID字符串50NN试题ID外码2questionBoundID字符串50NN试卷*围ID外码3questionTypeID字符串50NN选择试题类型ID外码4questionSubjectID字符串50NN选择试题科目ID外码5备注本试卷表模拟了试卷的主要局部,其中很多字段是组合的,如试题ID就是多试题的ID物理名称:e*am_table表名称主要字段数据类型长度属性输入方式描述备注考试表e*amID字符串50NN生成考试标识符(主键)由系统自动生成e*amName字符串50NN输入考试名称answerPaperTotalTime字符串50NN输入答卷总时间answerMakeTime字符串50NN输入允许参加次数e*amBeginTime时间/日期50NN输入答卷开场时间e*amE*plain字符串50NN考试说明考试过程中的要点e*amPosition字符串50NN输入考试位置testPaperID字符串50NN选择试卷ID外码备注可设定*次考试的根本信息,并选择考卷。3.4系统模块局部设计A、用户登录:eq\o\ac(○,1)对于已注册的用户根据用户名和密码进展登陆,登录界面如下:eq\o\ac(○,2)填写您的用户名、密码和验证码;eq\o\ac(○,3)击“登陆〞按钮;eq\o\ac(○,4)用户名、密码和验证码都正确,登陆成功,进入系统主界面;eq\o\ac(○,5)主要代码:if(this.session().getAttribute("rand")!=null){//检验随机数是否为空if(this.checkCode.equals(this.session().getAttribute("rand").toString())){//比拟随机数 uservo=userbo.queryUserByINfo(uservo);//检验用户信息并将信息返回if(uservo!=null){//看用户是否存在this.setUserpurview(uservo.getPurviewId());//设置用户权限this.session().setAttribute("user",uservo);//将用户信息放在session中returnSUCCESS;//返回用户主界面页面 }else{returnERROR;返回到失败页面}}else{returnERROR;}}else{ returnERROR;}B、用户主界面:eq\o\ac(○,1)因为每个用户被分配了不同的权限,在这里我们选用的拥有所有的权限的超级管理员,用户主界面是用户的管理界面。主界面如下所示:eq\o\ac(○,2)点击左测具体的模块并进展具体的操作;用户根据自己的权限进展选择,没有被分配权限的模块是不能操作的;eq\o\ac(○,3)选择login按钮可重新登陆,选择帮助是本系统的介绍和操作介绍,点击退出即可退出本系统;eq\o\ac(○,4)主要代码:<!--用户登录的配置信息--><actionname="login"class=".view.struts.LoginAction"method="loginUser"><resultname="success">/main.jsp</result><!--假设登录成功返回SUCCESS时转向主页面--><resultname="error">/login.jsp</result>//<!--登录不成功转回登录页面--></action>C、操作的主要模块:eq\o\ac(○,1)题库管理模块的试题维护:eq\o\ac(○,A)试题维护主界面:选择题库管理中试题维护是试题维护的主界面,展示了试题维护的主要信息;可进展试题的录入、编辑、删除〔单条删除和批量删除〕、批量查询等操作;主要代码如下:try{UserTableuser=(UserTable)this.session().getAttribute("user");//获取当前用户信息 QuestionTypeTabletypevo=newQuestionTypeTable(); typevo.setUserId(user.getUserId()); typelist=typebo.findQuestionTypeList(typevo);//获取试题类型列表 QuestionSubjectTablesubjectvo=newQuestionSubjectTable(); subjectvo.setUserId(user.getUserId());subjectlist=subjectbo.findSubjectByCondition(subjectvo);//获取试题科目列表 QuestionBoundTableboundvo=newQuestionBoundTable(); boundvo.setUserId(user.getUserId()); boundlist=boundbo.queryBoundList(boundvo);//获取试题*围列表 questionvo.setUserId(user.getUserId()); Stringtype=questionvo.getQuestionType();if(type!=null&&!type.equals(")){ questionvo.setE*tend1("0");returnlist=questionbo.findQuestionList(questionvo);//获取*种试题类型列表 }else{ Stringmanagers="0,1,2,3,4,5,6,7"; questionvo.setE*tend1("2"); questionvo.setAnswerManner(managers);//设置试题类型的答题方式 returnlist=questionbo.findQuestionList(questionvo);//获取所有试题列表if(returnlist!=null&&returnlist.size()>0){for(inti=0;i<returnlist.size();i++){ QuestionVOtempvo=(QuestionVO)returnlist.get(i);if(boundlist!=null&&boundlist.size()>0){for(intj=0;j<boundlist.size();j++){ QuestionBoundTabletempbound=(QuestionBoundTable)boundlist.get(j);if(tempbound.getQuestionBoundId().equals(tempvo.getQuestionBoundId())){tempvo.setQuestionBoundId(tempbound.getQuestionBoundName());//获取试题*围名称 }}}if(subjectlist!=null&&subjectlist.size()>0){for(intj=0;j<subjectlist.size();j++){QuestionSubjectTabletempsubject=(QuestionSubjectTable)subjectlist.get(j);if(tempsubject.getQuestionSubjectId().equals(tempvo.getQuestionSubjectId())){tempvo.setQuestionSubjectId(tempsubject.getQuestionSubjectName());//获取试题科目*围名称}}}if(typelist!=null&&typelist.size()>0){for(intj=0;j<typelist.size();j++){ QuestionTypeTabletemptype=(QuestionTypeTable)typelist.get(j); if(temptype.getQuestionTypeId().equals(tempvo.getQuestionTypeId())){tempvo.setQuestionTypeId(temptype.getQuestionTypeName());//获取试题类型名称 }}}}}}}catch(E*ceptione){e.printStackTrace();}returnSUCCESS;eq\o\ac(○,B)试题的录入:可进展多种试题的录入,每一种试题被录入到每一个试题库中,如填空方式会填到填空表中、多项选择方式会填到多项选择题库中;点击主界面中录入,可弹出试题录入界面,输入试题的信息后,点击提交即可,界面如下:主要代码如下:try{intflag=0; UserTableuser=(UserTable)this.session().getAttribute("user");//获取当前用户信息 questionvo.setUserId(user.getUserId()); flag=questionbo.addQuestion(questionvo);//添加试题信息if(flag>0){returnSUCCESS;//录入成功 }else{returnERROR;//录入失败} }catch(E*ceptione){e.printStackTrace();returnERROR;}eq\o\ac(○,c)试题的编辑:点击主页面的每条信息的编辑,可进展每条信息的修改,在修改正后点击确定即可,假设修改成功修改的页面会自动关闭并刷新主页面;需要注意的一点是,对于不是此用户录入的试题,即公开的试题,当前的用户是不能修改的;编辑界面如下:主要代码如下:try{intflag=0; UserTableuser=(UserTable)this.session().getAttribute("user"); Stringtype_id[]=questionvo.getQuestionId().split("_"); questionvo.setQuestionId(type_id[1]);//设置试题ID questionvo.setQuestionTypeId(type_id[0]);//设置类型ID flag=questionbo.modifyQuestion(questionvo);//修改试题信息if(flag>0){returnSUCCESS;//修改成功}else{returnERROR;//修改失败} }catch(E*ceptione){e.printStackTrace();returnERROR;}eq\o\ac(○,D)试题的删除:删除有两种,批量删除〔删除按钮〕和单条删除〔每条记录后的删除〕;无论哪种删除,在点击删除后会提示是否真的删除,假设点击确定则执行删除操作;假设操作成功返回主页面,否则返回到错误页面;假设点击取消则不执行任何操作;删除界面如下:主要代码如下:intflag=0;try{flag=questionbo.deleteQuestion(questionvo);//删除试题信息if(flag>0){returnSUCCESS;//删除成功 }else{returnERROR;//删除失败} }catch(E*ceptione){e.printStackTrace();returnERROR;}eq\o\ac(○,2)试卷管理的试卷根本信息维护:eq\o\ac(○,A)试卷根本信息主界面:选择试卷管理中试卷根本信息维护,主要展示了试卷维护的主要信息,可进展试卷的组卷:随机组卷、人工组卷、综合组卷;随机组卷只是选择试题类型也可设定试题的个数,然后根据试题的数量进展抽取相应数量和相应类型的试题;人工组卷是用户可直接对试题进展选取,对试题的信息一目了然;综合组卷即使随机组卷和人工组卷的混合,对*类型的试题用户可进展随机抽取〔必需设定数量〕,也可人工选择;对每种组卷方式我们都提供了试卷的增、删、改、查操作;试卷根本信息如下:主要代码如下:try{ UserTableuser=(UserTable)this.session().getAttribute("user"); QuestionSubjectTablesubjectvo=newQuestionSubjectTable(); subjectvo.setUserId(user.getUserId()); subjectlist=subjectbo.findSubjectByCondition(subjectvo);//获取应用科目 QuestionBoundTableboundvo=newQuestionBoundTable();boundvo.setUserId(user.getUserId()); boundlist=boundbo.queryBoundList(boundvo); papervo.setUserId(user.getUserId()); returnlist=paperbo.findPaperByCondition(papervo);if(returnlist!=null&&returnlist.size()>0){for(inti=0;i<returnlist.size();i++){ TestPaperTabletemppaper=(TestPaperTable)returnlist.get(i);if(boundlist!=null&&boundlist.size()>0){for(intm=0;m<boundlist.size();m++){ QuestionBoundTabletempbound=(QuestionBoundTable)boundlist.get(m);if(tempbound.getQuestionBoundId().equals(temppaper.getQuestionBoundId())){ temppaper.setQuestionBoundId(tempbound.getQuestionBoundName());}}}if(subjectlist!=null&&subjectlist.size()>0){for(intn=0;n<subjectlist.size();n++){QuestionBoundTabletempbound=(QuestionBoundTable)boundlist.get(n);if(tempbound.getQuestionBoundId().equals(temppaper.getQuestionBoundId())){ temppaper.setQuestionBoundId(tempbound.getQuestionBoundName());}}}}}}catch(E*ceptione){ e.printStackTrace();}returnSUCCESS;eq\o\ac(○,B)试卷的录入:不同的组卷方式录入的信息也不同,在随机的录入中只需设置试卷中每个题的类型即可,假设是完全随机则不需要录入试题个数,而局部随机要录入个数;人工组卷需选择*类型的试题;综合组卷的录入比拟随便,可随机设置也可人工选择;三种试题录入的界面如下:图1随机组卷录入图2人工组卷录入图3综合组卷录入主要代码如下:try{intflag=0; UserTableuser=(UserTable)this.session().getAttribute("user"); papervo.setUserId(user.getUserId());//设置试卷是哪个用户录入的 flag=paperbo.savePaper(papervo);//录入试卷信息if(flag>0){returnSUCCESS;录入成功}else{returnERROR;//录入失败} }catch(E*ceptione){ e.printStackTrace();returnERROR;}4、关键技术解决4.1系统架构与数据库的连接对于数据库的连接,我们的数据接口采用JDBC-ODBC桥数据驱动程序,以纯Java的方式来连接数据库,为不同的数据库提供统一的接口。JDBC数据库驱动程序是把JDBC调用翻译成厂商专用API的调用。开放数据连接〔ODBC〕最初是为微软操作系统上的SQL提供API标准,后来也在其他的平台上提供了支持。ODBC为直接数据定义了一组函数,而不是在客户应用程序中嵌入SQL。JDBC-ODBC桥在JDBCAPI和ODBCAPI之间提供了一个桥梁,这个桥把标准的JDBC调用翻译成对应的ODBC调用,然后通过ODBCAPI把它们发送到ODBC数据源。在选择了数据接口后,开场利用这个原理进展具体的连接了。由于我们开发时是利用MVC的设计模式,所以在此我们的数据库连接是封存在M中的,即只要我们和M层连接上,就已经连接上数据库了。在M上我们采用Hibernate框架技术,以下是一个非常简要的Hibernate体系构造的概要图:从这个图可以看出,Hibernate使用数据库和配置信息来为应用程序提供持久化效劳〔以及持久的对象〕。我们只需在hibernate.cfg.*ml中配置以下语句即可:<!DOCTYPEhibernate-configurationPUBLIC"-//Hibernate/HibernateConfigurationDTD3.0//EN""/hibernate-configuration-3.0.dtd"><hibernate-configuration><session-factory><propertyname="connection.username">sa</property><propertyname="connection.url">jdbc:microsoft:sqlserver://localhost:1035;DatabaseName=webe*amine</property><propertyname="dialect">org.hibernate.dialect.SQLServerDialect</property><propertyname="file">sqlserver2000</property><propertyname="connection.password">aaaaaaaa</property><propertyname="connection.driver_class">.microsoft.jdbc.sqlserver.SQLServerDriver</property> <propertyname="hibernate.dialect">org.hibernate.dialect.HSQLDialect</property> <propertyname="show_sql">true</property> <mappingresource="//perdure/hibernate/info/InfoTable.hbm.*ml"/> <mappingresource="//perdure/hibernate/user/UserTable.hbm.*ml"/> </session-factory></hibernate-configuration>其实我们在这里配置了一个数据连接,以保证系统的正常运行,我们需要使用pro*ool连接池,我们经测试,分别用pro*ool、tomcatJNDI、Hibernate自带的连接池进展配置之后分别执行以上的10000条数据插入和读取,结果显示pro*ool的性能要优于tomcatJNDI,而Hibernate自带的就更不用提了,差很远。依次为:39265毫秒/10000条、26013毫秒/10000条、50029毫秒/10000条。4.2框架技术的整合首先我们要建立web应用程序名字为webe*amine的工程,其根本内容及构造如下的形式:先将工程中所需要的根底类库及各框架的类库放到lib文件夹子下面,所需要的主要类库如下:struts2-core-.jar*work-.jarspring-core.jarspring-orm.jarhibernate3.jarmons-beanutils.jarmons-lang.jarmssqlserver.jar然后在classes中建立各框架的默认使用的文件:struts.*mlSpertiesapplicationConte*t.*ml到此,Struts+hibernate+spring初步配置完成。我们还需要具体的更改web.*ml(效劳器配置文件)、conte*tApplication.*ml(spring1.2框架配置文件),配置文件,才能到达真正的整合。web.*ml文件中的配置:<web-appversion="2.4" *mlns="java.sun./*ml/ns/j2ee" *mlns:*si="./2001/*MLSchema-instance" *si:schemaLocation="java.sun./*ml/ns/j2ee java.sun./*ml/ns/j2ee/web-app_2_4.*sd"> <!--加载spring配置信息--> <conte*t-param> <param-name>conte*tConfigLocation</param-name> <param-value>/WEB-INF/classes/applicationConte*t.*ml</param-value></conte*t-param><!--加载display标签库--><filter><filter-name>e*portFilter</filter-name><filter-class>org.displaytag.filter.ResponseOverrideFilter</filter-class></filter><!--加载struts框架效劳信息--><filter><filter-name>struts2</filter-name></filter-class></filter><filter-mapping><filter-name>struts2</filter-name><url-pattern>/*</url-pattern></filter-mapping><!--加载spring监听类,用于控制struts与hibernate的联接--><listener></listener-class></listener></web-app>conte*tApplication.*ml文件中最根本的配置如下:<beans><!--加载spring再个模块反转控制的配置文件--><importresource="/businesslayer/spring/config/applicationConte*t-info.*ml"/> <!—加载数据库配置信息,在hibernate3的配置文件配置,所以要加载--><beanid="sessionFactory"class="org.springframework.orm.hibernate3.LocalSessionFactoryBean"> <propertyname="configLocation"> <value>/WEB-INF/classes/hibernate.cfg.*ml</value> </property> </bean><!—设定事务处理--> <beanid="transactionManager"class="org.springframework.orm.hibernate3.HibernateTransactionManager"> <propertyname="sessionFactory"> <reflocal="sessionFactory"/> </property> </bean></beans>这样我么的配置就算整合完成了,之后就是具体开发中参加的代码了,在此不表达。上面是采用spring框架座桥梁进展控制,由web.*ml告诉效劳器:将struts托管给spring,由spring监听;之后再conte*tApplication.*ml中将hibernate也参加到spring的管理中,假设要struts连接hibernate,必须通过spring。4.3数据的备份与复原我们根据mssqlserver数据库提供的backup(备份)命令及restore(恢复)命令,进展数据库的备份与复原,在连接数据库后,我们在需要备份和复原的地方参加以下语句:backupdatabase<yourdatabasename>todisk='备份文件名'restoredatabase<yourdatabasename>fromdisk='备份文件名'然后发送给数据库的管理对象进展数据复原与备份。在知道了数据库备份与复原的接口后,用JAVA进展具体的连接,这里采用JAVA直连的方法,部分代码如下:try{Stringuser="sa";//连接sqlserver2000数据库登陆名Stringpassword="aaaaaaaa";//连接sqlserver2000数据库密码StringsDBDriver=".microsoft.jdbc.sqlserver.SQLServerDriver";//连接数据库的驱动字符串StringconnStr="jdbc:microsoft:sqlserver://localhost:1433;DatabaseName=webe*amine";//注册连接字符串Connectioncon=null;Class.forName(sDBDriver);//注册数据库驱动con=DriverManager.getConnection(connStr,user,password);//获取数据库连接Stringsql="backupdatabase*ncsimstodisk='d:\\*ncback.dat'";//备份数据库,复原数据库和着类似,只是将这句变为复原的语句st=con.createStatement();//创立发送对象rs=st.e*ecuteQuery(sql);//这里就是把你的SQL语句发到数据库执行}catch(SQLE*ceptione){System.out.println(e.toString());}catch(E*ceptione){System.out.println(e.toString());}5、完毕语当今许多高校都非常关注无纸化网络考试的开发与应用,本文是通过考试方面进展的尝试,实践证明,该方法是可行的;本人结合企业的开发技术及在校所学理论知识〔软件工程,操作系统,数据构造等学科〕,利用毕业设计的时机,开发一套在线考试系统,根本上实现了在线考试及考试管理等功能。由于时间仓促,一些技术和设备所限,该系统存在一些缺乏之处,有待进一步改良和完善,具体说来有:(1)对后台数据库中数据的日常维护,包括自动清理过时数据。(2)程序中错误处理和输入控制不够全面,可能导致输入无效引发错误。参考文献[1]洪维恩,何嘉.Java2面向对象程序设计[M]..中国铁道.2005.1:50-200[2]*孝祥IT课堂系统Java就业培训教程〔网上课堂〕.[3]java.sun.〔java官方〕.[4].-java.〔中国java〕.[5]耿祥义.Java根底教程[M]..清华大学.2004.9:10-50[6]BruceEckel.Java编程
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 2024年版城市公共服务设施建设项目外包合同
- 2024年土地治理坑塘项目建筑工程质量保险承保协议3篇
- 2024年版工业厂房及设备全面转让协议版B版
- 2024年度城市综合体造价咨询合同补充协议范本3篇
- 2024年度科技研发担保合同补充协议范文3篇
- 2024年版健身房入驻协议2篇
- 2024年版协议修订:双方权益保障补充版B版
- 法律科技应用考核试卷
- 硬笔小篆课程设计
- 生态保护与生态环境损害赔偿制度考核试卷
- 食品安全与卫生智慧树知到期末考试答案2024年
- T-CPHA 9-2022 智慧港口等级评价指南集装箱码头
- 江苏省南京市秦淮外国语学校2023-2024学年八年级下学期英语3月月考试卷
- 建筑工程分部分项工程划分表(新版)
- 学生职业生涯规划指导方案
- 成人用品行业分析
- 血栓风险评估及个体化干预(遗传性易栓症风险基因检测)
- 投标人资格审查表(范本)
- b族链球菌孕妇的护理
- 生产工艺验证方案(药品)
- 广东省深圳市宝安、罗湖、福田、龙华四区2023-2024学年数学九年级第一学期期末联考试题含解析
评论
0/150
提交评论