Java在线考试系统

摘要

随着教学的改革进一步深入和可测功能建设的逐步完善,对每门课程的考试必须规范化、系统化、科学化和智能化。目前,国内外已有许多考试系统,它们为提高教师工作质量和教学的现代化进程起到重要作用。但它们在功能上和性能上都存在着一些缺陷,尤其是实用性、网络化上。研究并开发新的实用性、智能化、网络化考试系统以帮助教师在工作和学生在学习中方便地使用它,是目前亟待解决的问题。

本系统由一个公共模块和两个主要功能模块组成:数据库连接公用模块、在线考试模块和系统管理模块。其中考试模块主要进行考生登录系统后,进行在线考试,提交试卷后自动判卷显示成绩;系统管理模块主要包括考生信息、分数和管理员添加等功能。

关键词: 组卷策略 网上测试 查询

Abstract

With the developments of the farther reform in education and with the developments gradually perfect in course,the students master and comprehend each examination of each course must be standardization,systematization science, intelligentize. Now ,there are the existent domestic and international examination system,they have important effects to enhance teacher’ working quantity and accelerate the modern teaching course. But there are some defects in the functions and performances,particularly on the practicability and the network.Researching the existent problems of the examination systems,developing the new intelligence and network of it in order to teachers and students during the working and studying expediently use the examination database,those need to solve the problems currently.

   This system is composed by a public module and two main functionsmodules:Database connection module,on-line test module and system administration module.After test module mainly carries on the examinee to land the system,Carries on the on-line test,after submits the examination paper automatically to sentence thevolume demonstration result;The system administration module mainly includes function and so onexaminee information,score and manager increase.

Keywords :Intelligence   Tactics of the test paper    Network test   Intelligent query

目录

Abstract

 

1 系统开发背景及意义

1.1  系统开发背景

1.2  系统开发意义

2章网上考试系统需求分析

2.1现状分析

2.2可行性分析

2.2.1经济可行性

2.2.2技术可行性

2.3设计目标

2.4功能要求

2.5系统开发环境配置

2.6系统开发工具

2.6.1开发语言—JSPJava Server Page

2.6.2数据库—MySQL5.1

3 网上考试系统设计

3.1数据库设计

3.1.1数据库需求分析

3.1.2数据库概念结构设计

3.1.3数据库逻辑结构设计

3.2系统结构设计

3.2.1页面模块化设计

3.2.2 MVC模式设计(Jsp+Servlet+JavaBean

4 网上考试系统实现

4.1系统架构介绍

4.1.1  数据库的链接,创建数据源

4.1.2访问数据库的JavaBean

4.1.3 核心代码实现(框架的引入)

4.1.4用户及管理员登录模块页面

4.1.4系统主要模块页面

4.1.5学生考试模块的实现页面

4.1.6教师添加试题制作试卷模块的实现

结束语

参考文献

绪 论

考试是检验教学效果的重要手段,也是促进学生学习的重要手段,是教学过程中的一个重要环节。学生考试成绩的优劣,不但反映其对教学内容和应掌握知识的分析、理解、吸收、运用的能力,更反映教师对教学内容的把握和熟练程度。

传统的学校教学中,进行一场考试,要求老师编写试卷、印试卷、安排考试、监考、收集试卷、评改试卷、讲评试卷和分析试卷,这是一个繁杂的过程,需要大量人力、物力与时间的投入,已经越来越不适应学校信息化建设与现代教学的需要。尤其在远程网络教学中,学生分布广,不易统一集中安排考试,给校方和学生带来了众多的不便。

而网上考试系统不仅减轻了在组织考试、评卷、成绩统计等方面所花费的人力和物力,并且突破了时间与空间的限制,不仅节省了资源,而且提高了评分的客观性、公正性和准确度,大大改善了考试工作的效率。加上数据库技术的利用,大大简化了传统考试的过程,因此在线考试是电子化教学的不可缺少的辅助手段。在当今信息时代,计算机技术与网络技术越来越广地应用于各个领域,改变着人们的学习、工作、生活乃至思维方式,也引起了教育领域的重大变革。将计算机与网络技术应用于现代高等教育中,是现代高等教育发展的需要,也是改革教育模式,提高学校教学效果和教学效率、提高科研和管理水平的必要手段。

第1章 系统开发背景及意义

1.1  系统开发背景

随着计算机技术、网络技术迅速发展和高校校园网功能的日益完善,很多高校建立了基于校园网的网络信息管理平台,为提高教学管理水平提供了先进的管理手段。目前,基于网络的在线考试系统己经成为现代考试方式的有力补充和发展。相对于传统的笔试,网络在线考试不仅减轻了在组织考试、评卷、成绩统计等方面所花费的人力和物力,并且突破了时间与空间的限制,不仅节省了资源,而且提高了评分的客观性、公正性和准确度,大大改善了考试工作的效率。

1.2  系统开发意义

很多学校学生的期末考试仍采用任课教师(个人或集体)考前出题的方式。为解决学生压题,考前漏题,补(缓)考试题与正式考试试题题量及难度差异问题,教务管理部门通常要求教师同时出多套试卷,其题量与难度要求相同,并且要同时给出答案和评分标准。这样做虽能解决一些问题,但给教师增加了很大的工作负担,若上下届学生的同一门课程由同一教师承担,则难免几届学生用相同几套试卷;若由不同教师任课出题,则上下届学生的成绩之间又不具有可比性。

若建立题库,每次考试前由题库中题目随机生成试卷,则可较好地解决考教分离的问题,也可将广大教师从每学期末繁重的命题工作中解放出来。近年来,部分学校陆续开发了一些基于微机的题库系统,并作为成果向其它学校推广,但这些题库一般都是结合本校具体情况,针对单一课程的小型题库,甚至某些学校购得的题库系统中的题目本身是不可维护的,即使题目已不适合自己的学生考试使用,也无法更新题库中的题目。

为解决题库系统中存在的这些问题, 作者经过研究几种不同的网上系统,经充分的考虑,最后给出了一个较为理想的题库系统解决方案,并结合当前比较使用的B/S结构开发一个功能完备的网上考试系统。


第2章网上考试系统需求分析

2.1现状分析

传统的考试方法要求组织者提前命题试卷,然后约定一个统一时间,让所有考生到考场里进行考试。这种模式如图2-1 所示:

Java在线考试系统_第1张图片

Java在线考试系统_第2张图片

       编辑考题

Java在线考试系统_第3张图片

印刷大量试卷

Java在线考试系统_第4张图片

安排考场,时间,监考人员

Java在线考试系统_第5张图片

学生集体考试

Java在线考试系统_第6张图片

         阅卷,统计成绩

图2-1 传统考试模式

这种模式存在有较多的问题:

命题:由于考试要求统一进行,所有考生都考同样的一份试卷,所以试卷的命题工作便一定得非常谨慎小心,试题太难或太容易,都达不到考试目的,尤其是对于一个大规模的考试,(比如计算机等级考试,英语四,六级考试等),如何正确把握试卷的难度,一直都是让命题教师最为头痛的问题之一。而如何不在考试之前使命好的试题泄漏出去,也是组织者费尽心思。

试卷印刷:对于大规模的考试,试卷印刷费工费时,成本高,对纸张资源也是一种浪费。对于涉及地域范围较广的考试(如英语四,六级考试),还要考虑试卷大的长途运送费用。在考试的印刷和运输过程中同样有试题泄漏出去的问题,任何一个环节出了问题,都可能使前面有的工作付诸流水。

考场的安排:监考人员的培训与管理。对于大规模的考试,尤其是到了考试密集期(如期末,期中)。诸多学科的考试都要陆续开始的时候,对于教室资源和教师数量相对紧张的学校,如何安排考场,调配监考人员,是一件相对繁琐而又复杂的事情。如果考试再涉及到不同地域之间的同步,如英语四,六级的考试,还要考虑更多的问题。

进行考试:由于同一次考试的试卷相同,要杜绝考生作弊是一个普遍的难题,因此,历届组织考试的人动了很多脑筋,如分AB卷,加强监考,加重对作弊者的惩罚程度等,但这些都没能从根本上杜绝作弊。不同地域监考的严格程度,考试时问控制的严格程度,也很难达到统一。过多人为因素的加入,也使得考试的公正性下降。

判卷:考试结束后,采用人工判卷比较容易出错,并可能出现人为造成的不公正现象。

2.2可行性分析

可行性分析也称为可行性研究,即是在系统调查的基础上,针对新系统的开发是否具备必要性和可能性,对新系统的开发从技术、经济、管理的方面进行分析和研究,以避免投资失误,保证新系统的开发成功。可行性研究的目的就是用最小的代价在尽可能短的时间内确定问题是否能够解决。该系统的可行性分析包括以下几个方面的内容。

2.2.1经济可行性

主要是对项目的经济效益进行评价,利用计算机来实现网上考试以成为适应当今教学管理的方式。开发一套能满足网上考试系统的软件是十分必要的,实现试卷管理和试卷生成自动化,在减少由于认为失误而早成损失的同时,也可以使教师减少工作量。本系统在经济上是可以接受的,并且本系统实施后可以显著提高考试效率,有助于学院完全实现网络化管理。所以本系统在经济上是可行的。

2.2.2技术可行性

技术上的可行性分析主要分析技术条件是否能顺利完成开发工作,硬、软件能否满足开发者的需要等。

软件方面,网络化考试需要的各种软件环境都已具备,数据库服务器方面则有MySQL,均能够处理大量数据,同时保持数据的完整性并提供许多高级管理功能。其灵活性、安全性和易用性为数据库编程提供了良好的条件。因此,系统的软件开发平台已成熟可行。

硬件方面,科技飞速发展的今天,硬件更新的速度越来越快,容量越来越大,可靠性越来越高,价格越来越低,其硬件平台完全能满足此系统的需要。

2.3设计目标

在线考试系统的总体目标:

  1. 在线考试系统可以帮助教师完成一个考试从题目设计,考试安排,考试实施,考卷批改到分数计算总结的所有工作。
  2. 所有的考试数据和其它数据库需要一种主流的方式进行存储和管理,例如使用数据库技术。
  3. 考试数据的存放和处理必须对考试保密,需要一定的安全性保障。
  4. 题目最好有一定的稳定性和随机性。稳定性可以保证每一次考试对每一个考生是公平的,随机性可以避免作弊的发生。
  5. 考试的部分客观题在考生考完之后系统就能自动评分,并保存考生的主观题答案。

2.4功能要求

系统应该具备的基本功能:

用户类别:登录系统的身份定为三种,一是管理员,二是普通老师,三是学生,只有被授权的用户才可以使用本系统的资源。

权限管理:系统需要经过有效的身份验证可以登录。用户的身份不同,使用的系统资源也不同。考生可以参加在线考试, 查询考生成绩;普通教师可以阅卷等。管理员可以在线制作试卷,控制考试、成绩查询、添加试题、科目信息、查询考生成绩, 批量删除学生信息(按照年级)。

在线考试功能:考生输入学号密码和验证码登陆系统后,选择对应的试卷可进行考试。答题中,有倒计时的功能,考试结束时还没提交就自动交卷,系统将自动对客观题进行评分。

在线制作试卷:管理员可在线制作试卷,可将特定的考题添加到相应的考卷中

控制考试功能:可设定每次的考试时间。

考生管理功能:可新增学生用户,修改考生信息,删除考生信息,同时查看考生的信息。

考生成绩查询功能:提供考生详细查询。

试卷审批功能:只有考题添加满的考卷才可设定时间,只有设定过时间的考卷才可以用于考试.

除了实现上述功能以外,在线考试系统还应该具有友好、简洁的界面,安全性要高,稳定性要强。

2.5系统开发环境配置

选择微软平台作为主导,一方面考虑目前微软的飞速发展,越来越多的企业在规划内部网络时,将微软平台作为首选方案;令一方面从技术角度来讲,微软平台上的应用无论是在开发上,还是在软件的部署上都是非常容易,而且性能优越。具体如下:

  1. 开发工具:Eclipse
  2. 辅助开发工具: Dreamweaver 8
  3. 数据库:MySQL5.0
  4. 服务器 :Apache Tomcat6.0
  5. 运行环境 :安装JDK1.6支持Java运行。
  6. 技术:前台网页的设计采用JSP技术制作。负责响应用户对业务逻辑的请求并根据用户的请求行为,决定将哪个JSP页面发送给客户由Action处理,JavaBean则负责数据的处理。

2.6系统开发工具

本系统是基于JSP+MySQL5.1数据库技术实现的,现对JSP技术和SQL Server 2005数据库作简要的介绍。

2.6.1开发语言—JSP(Java Server Page)

JSP页面由HTML代码和嵌入其中的Java代码所组成。Java Servlet是JSP的技术基础,而且大型的Web应用程序的开发需要Java Servlet和JSP配合才能完成。JSP具备了Java技术的简单易用,完全的面向对象,具有平台无关性且安全可靠,主要面向因特网的等特点。JSP的技术的优势:

一次编写,到处运行。在这一点上Java比PHP更出色,除了系统之外,代码不需要做任何更改。

系统的多平台支持。基本上可以在所有平台上的任意环境中开发,在任意环境中进行系统部署,在任意环境中扩展。相比ASP/PHP的局限性是显而易见的。

JSP技术是用Java语言作为脚本语言的。Java语言是成熟的、强大的、易扩充的编程语言。

高效性与安全性。JSP在执行前先被编译成字节码,字节码由Java虚拟机解释执行,比源码解释效率高。

可维护性。由于JSP技术是一种开放的、跨平台的结构,因此Web服务器、平台及其他组件能很容易升级或切换,且不会影响JSP基本的应用程序。

多样化和功能强大的开发工具支持。Java已经有了许多非常优秀的开发工具,而且许多可以免费得到,并且其中许多已经可以顺利的运行于多种平台之下。

2.6.2数据库—MySQL5.1

MySQL是一个精巧的SQL数据库管理系统,虽然它不是开放源代码的产品,但在某些情况下你可以自由使用。由于它的强大功能、灵活性、丰富的应用编程接口(API)以及精巧的系统结构,受到了广大自由软件爱好者甚至是商业软件用户的青睐,特别是与Apache和PHP/PERL结合,为建立基于数据库的动态网站提供了强大动力。

SQL是一种标准化的语言,它使得存储、更新和存取信息更容易。例如,你能用SQL语言为一个网站检索产品信息及存储顾客信息,同时MySQL也足够快和灵活以允许你存储记录文件和图像。

第3章 网上考试系统设计

3.1数据库设计

在对网上考试系统数据库部分进行设计的过程中,通过对系统功能进行需求分析得到系统的基本信息表,绘制系统业务流程图和系统数据流程图,分析得到数据字典;在概率结构设计阶段通过对需求阶段得到的用户需求抽象得到数据库关系模型的E-R图;在逻辑结构设计阶段得到数据库的关系模式并绘制信息表。详细设计过程如下介绍。

3.1.1数据库需求分析

需求分析是设计数据库的起点,需求分析的结果是否准确地反映了用户的实际要求,将直接影响到后面各个阶段的设计,并影响到设计结果是否合理和实用。

3.1.1.1系统基本信息

综合以上分析,要实现上面的所有功能模块,数据库共要设计十一个表,它们分别是:科目表、考卷表、考卷考题表、考题答案表、考题表、选项表、考题类型表、考生作答表,成绩表,序列表,用户表。

3.1.1.2系统层次图

系统总体的层次图如下图3-1所示:

Java在线考试系统_第7张图片

Java在线考试系统_第8张图片

Java在线考试系统_第9张图片

Java在线考试系统_第10张图片

Java在线考试系统_第11张图片

Java在线考试系统_第12张图片

Java在线考试系统_第13张图片

Java在线考试系统_第14张图片

Java在线考试系统_第15张图片

Java在线考试系统_第16张图片

Java在线考试系统_第17张图片

Java在线考试系统_第18张图片

Java在线考试系统_第19张图片

Java在线考试系统_第20张图片

Java在线考试系统_第21张图片

Java在线考试系统_第22张图片

Java在线考试系统_第23张图片

Java在线考试系统_第24张图片

Java在线考试系统_第25张图片

Java在线考试系统_第26张图片

Java在线考试系统_第27张图片

Java在线考试系统_第28张图片

Java在线考试系统_第29张图片

Java在线考试系统_第30张图片

Java在线考试系统_第31张图片

Java在线考试系统_第32张图片

Java在线考试系统_第33张图片

Java在线考试系统_第34张图片

Java在线考试系统_第35张图片

Java在线考试系统_第36张图片

Java在线考试系统_第37张图片

Java在线考试系统_第38张图片

Java在线考试系统_第39张图片

Java在线考试系统_第40张图片

Java在线考试系统_第41张图片

Java在线考试系统_第42张图片

Java在线考试系统_第43张图片

Java在线考试系统_第44张图片

Java在线考试系统_第45张图片

Java在线考试系统_第46张图片

Java在线考试系统_第47张图片

Java在线考试系统_第48张图片

Java在线考试系统_第49张图片

Java在线考试系统_第50张图片

Java在线考试系统_第51张图片

Java在线考试系统_第52张图片

Java在线考试系统_第53张图片

Java在线考试系统_第54张图片

Java在线考试系统_第55张图片

Java在线考试系统_第56张图片

Java在线考试系统_第57张图片

Java在线考试系统_第58张图片

Java在线考试系统_第59张图片

Java在线考试系统_第60张图片

Java在线考试系统_第61张图片

Java在线考试系统_第62张图片

Java在线考试系统_第63张图片

Java在线考试系统_第64张图片

Java在线考试系统_第65张图片

Java在线考试系统_第66张图片

Java在线考试系统_第67张图片

Java在线考试系统_第68张图片

Java在线考试系统_第69张图片

Java在线考试系统_第70张图片

Java在线考试系统_第71张图片

图3-1系

统层次图

1.1.3系统数据流程图

系统数据流程图如下图3-2所示

Java在线考试系统_第72张图片

图3-2数据流程图

3.1.2数据库概念结构设计

概念设计阶段主要是将需求分析阶段得到的用户需求抽象为信息结构(概念模型)的过程,它是整个数据库设计的关键,包括概念模型设计和新系统流程两个阶段。在需求分析阶段所得到的应用需求应该首先抽象为信息世界的结构,才能更好地、更准确地用某一DBMS实现这些需求。

概念数据模型独立于具体的数据处理的细节和数据库管理系统。这次设计仍采用传统的实体联系图作为概念设计的工具。再进行优化后,尽量满足结构清晰、关联简洁、实体个数适中、属性分配合理、没有低级冗余。系统E-R图如下图3-3所示:

Java在线考试系统_第73张图片

图3-3 系统E-R图

3.1.3数据库逻辑结构设计

对于关系型数据库,数据库的概念结构设计完毕后,要把E-R图描述的概念数据模型转换为等价的关系模式极其约束。逻辑设计的基本工作主要包括如下的3个步骤。

3.1.3.1关系模式设计

该设计以概念结构设计中的E-R图为主要依据,这几出相关的整体逻辑结构。该系统的关系模式如下图3-4所示:

Java在线考试系统_第74张图片

图3-4 概念关系模型图

3.1.3.2完整性设计

完整性要求用于描述各种信息之间的制约关系,以及关联关系,各个数据项的取值范围以及各个数据项是否可以取值。根据实际需要,采取一定的手段来满足用户的完整性需求。域完整性约束要求属性值必须在域中。实体完整性约束要求主键必须唯一且不能为空。如用户信息表中的用户名设置为主键,并且要求唯一且不能为空。
3.1.4数据字典

数据字典如下表所示,将数据库中每个表中的字段进行了详细的描述。

表1  用户基本信息表 t_user

表名

t_user

字段名

数据类型(精度范围)

字段含义

其他

  user_id

Integer

用户 编号

PK

  user_no

VARCHAR(15)

用户登陆账号

not  null

user_pwd

VARCHAR(20)

用户登陆的口令

not  null

user_name

VARCHAR(20)

用户的姓名

 not  null

user_role

VARCHAR(4)

用户的角色

 not  null

user_is_login

VARCHAR(4)

用户是否登陆

not  null

user_sex

VARCHAR(4)

用户的性别

not  null

user_identification

VARCHAR(20)

用户的身份证号码

not  null

user_hometown

VARCHAR(50)

用户的籍贯

not  null

user_policyFace

VARCHAR(10)

用户政治面貌

null

user_isable

VARCHAR(4)

用户是否有效

not  null

user_email

VARCHAR(20)

用户邮箱

null

user_telephone

VARCHAR(20)

用户的联系方式

null

补充说明

用户是否登陆:Y 已经登陆,  N 还未登陆

用户的性别: F 表示男,  M 表示女

用户的角色: M, 管理员, S: 考生  T:教师

用户是否有效:删除用户的时候会置此字段为F,  默认为Y

表2  试题类型表 t_question_type

表名

t_question_type

字段名

数据类型(精度范围)

字段含义

其他

  type _id

Integer

试题类型的编号

PK

  type_name

VARCHAR(20)

  试题类型的名字

not  null

补充说明

试题类型为: 单选题, 多选题, 填空题, 判断题, 简答题, 论述题

表3  课程表 t_course

表名

t_course

字段名

数据类型(精度范围)

字段含义

其他

  course_id

Integer

课程序列号

PK

  course_no

VARCHAR(20)

课程编号

not  null

  course_name

VARCHAR(20)

课程名字

not  null

  course_isable

VARCHAR(4)

课程是否可用

not  null

补充说明

课程编号可作为用户查询的接口

当课程被删除的时候置isable为N, 默认为Y

表4  试题库 t_question_base

表名

t_question_base

字段名

数据类型(精度范围)

字段含义

其他

question_id

Integer

试题序列号

PK

question_type

Integer

试题对应的类型

not  null  FK1

question_course

Integer

试题对应的课程

not  null  FK2

question_isable

VARCHAR(4)

试题是否可用

not  null

question_text

VARCHAR(500)

试题题干

not  null

补充说明

Eg: 试题  为  地理课程  下面的  单选题

当删除试题的时候置question_isable为N, 默认的为Y


表5  试题选项 t_question_option

表名

t_question_option

字段名

数据类型(精度范围)

字段含义

其他

option_id

Integer

选项序列号

PK

option_question_id

Integer

选项对应的试题

not  null  FK1

option_value

VARCHAR(200)

选项的内容

not  null

补充说明

表6  试题答案 t_question_answer

表名

t_question_answer

字段名

数据类型(精度范围)

字段含义

其他

answer_id

Integer

答案序列号

PK

answer_question_id

Integer

答案对应的试题

not  null  FK1

answer_value

VARCHAR(300)

答案的内容

not  null

补充说明

单选内容: A

多选内容: ABC

填空题,简答题和论述题都为文本文字

判断题内容为. T或F

表7  试卷库 t_paper

表名

t_paper

字段名

数据类型(精度范围)

字段含义

其他

paper_id

Integer

试卷序列号

PK

paper_course_id

Integer

试卷对应的课程

not  null  FK1

paper_isavailable

VARCHAR(4)

试卷是否可用

not  null  

paper_statue

VARCHAR(4)

试卷状态

not  null

paper_isable

VARCHAR(4)

试卷是否有效

not  null

补充说明

如果试卷中的题目总分为100则试卷可用, 可用为Y 不可用为N, 默认为N

试卷状态O表示打开,C表示关闭,默认为C

paper_isable默认为Y, 当删除试卷的时候为N

表8 试卷试题表  t_paper_question

表名

t_paper_question

字段名

数据类型(精度范围)

字段含义

其他

pap_que_id

Integer

试卷试题序列号

PK

paper_id

Integer

试卷序列号

not  null  FK1

question_id

Integer

试题序列号

not  null  FK

补充说明

此表为  试卷和试题 之间的关系表

表9 考生作答表  t_response

表名

t_response

字段名

数据类型(精度范围)

字段含义

其他

response_id

Integer

考生作答序列号

PK

 user_id

Integer

考生序列号

not  null  FK1

pap_que_id

Integer

试卷试题序列号

not  null  FK

response_value

VARCHAR(1000)

考生作答

not  null

补充说明

表10考生成绩表  t_score

表名

t_score

字段名

数据类型(精度范围)

字段含义

其他

score_id

Integer

考生成绩序列号

PK

 user_id

Integer

考生序列号

not  null  FK1

teacher_id

Integer

阅卷人序列号

not  null  FK

course_id

Integer

课程序列号

not  null  FK

score_value

Float

考生 成绩

not  null

补充说明

表11    序列表t_sequence

表名

t_sequence

字段名

数据类型(精度范围)

字段含义

其他

seq_name

VARCHAR(20)

序列名字

PK

 current_value

Integer

序列当前值

not  null

Increment_value

Integer

序列的增加值

not  null

补充说明

 序列培训函数使用, 用来生成各种主键

CREATE  FUNCTION  nextval(seq_name VARCHAR(50))

 RETURNS int(11)

BEGIN

      UPDATE sequence

                SET          current_value = current_value + increment

            WHERE name = seq_name;

            RETURN currval(seq_name);

   END

CREATE  FUNCTION  currentval(seq_name VARCHAR(50))

 RETURNS  int(11)

BEGIN

        DECLARE value INTEGER;

       SET value = 0;

       SELECT current_value INTO value

       FROM sequence

       WHERE name = seq_name;

  RETURN value;

END

3.2系统结构设计

3.2.1页面模块化设计

模块化设计的要求不仅是为了提高代码的重用性,更重要的是为了提高代码的可维护性和稳定性。一个模块化程度高、结构清晰的应用程序,在程序维护时的便利性是可想而知的。最初设计方案时,就要规划好哪些模块是可以提出来多次使用,哪些模块虽只使用一次,但提出来之后能使代码更清晰等。

网上考试系统是一个典型的数据库开发应用程序,本系统主要用管理员、教师和学生三大模块组成,各模块功能如下:

管理员模块:该模块主要是对系部、专业、班级、课程进行管理,添加修改学生、教师、信息,添加试题、试卷和审核教师制作的试卷等。

教师模块:该模块主要是教师通过登录该系统能够修改个人信息,添加试题,在线制作试卷,阅卷等。

学生模块:该模块主要是学生通过登录该系统能够修改个人信息(只能修改密码),进行考试等。

3.2.2 MVC模式设计(Jsp+Servlet+JavaBean)

MVC(Model View Controller)是一个设计模式,它强制性的使应用程序的输入、处理和输出分开。使用MVC应用程序被分成三个核心部件:模型、视图、控制器。它们各自处理自己的任务。

  视图是用户看到并与之交互的界面。如何处理应用程序的界面变得越来越有挑战性。MVC一个大的好处是它能为你的应用程序处理很多不同的视图。JSP页面处于表现层,也就是视力(View即V)的角色。

模型表示企业数据和业务规则。在MVC的三个部件中,模型拥有最多的处理任务。由于应用于模型的代码只需写一次就可以被多个视图重用,所以减少了代码的重复性。JavaBean则负责数据的处理,也就是模型(Model即M)的角色。

控制器接受用户的输入并调用模型和视图去完成用户的需求。所以当单击Web页面中的超链接和发送HTML表单时,控制器本身不输出任何东西和做任何处理。它只是接收请求并决定调用哪个模型构件去处理请求,然后用确定用哪个视图来显示模型处理返回的数据。Servlet用来处理请求的事务,充当控制器(Controller即C)的角色,Servlet负责响应用户对业务逻辑的请求并根据用户的请求行为,决定将哪个JSP页面发送给客户。

初始的请求由Servlet来处理,Servlet调用商业逻辑和数据处理代码,并创建Bean来表示相应的结果(模型)。然后Servlet确定哪个页面适合于表达这些特定的结果,并将请求转发到相应的页面(JSP页面即为视图),由Servlet确定哪个业务逻辑适用,应该用哪个JSP页面相应结果(Servlet就是控制器)。

第4章 网上考试系统实现

4.1系统架构介绍 

本系统采用Struts2+Ibatis2.3+Spring2.5 做架构,其中Struts2主要做请求的管理,Spring 主要做后台业务类的组合(包括对象的创建和对象的组合),Ibatis持久层框架做数据库的访问,对外提供用户使用的接口(SqlMapClient). 为了使实现清晰可见将系统后台业务代码分了三层:Action层,Service层,Dao层.其中Action主要做请求的接受和请求的发送,由Struts2的核心配置文件struts.xml做控制,将相应的请求提交到Action的特定的方法中,处理完毕后做相应的跳转.  Service层会有一个Dao层类作为其属性, 通过Spring注入,Action层会有一个Service层的类作为其属性,通过Spring注入. Dao类通过继承SqlMapclientDaoSupport获取其sqlMapclient接口对数据库进行访问,被执行的sql语句放置在Ibatis的各个配置文件中,三个框架协调工作。

4.1.1  数据库的链接,创建数据源 

配置数据源创建连接池,再通过JavaBean连接到数据源再对数据库进行操作。

连接池是创建和管理一个连接的缓冲池的技术,这些连接准备好被任何需要它们的线程使用。连接池可以极大的改善用户的 Java 应用程序的性能,同时减少全部资源的使用。连接池主要的优点有:减少连接创建时间、简化的编程模式、受控的资源使用。连接池能够使性能最大化,同时还能将资源利用控制在一定的水平之下,不过如果超过该水平,应用程序将崩溃而不仅仅是变慢。

配置连接池:

1.首先要将mysql的驱动包放在tomcat/lib目录下

2.在应用服务器Tomcat 里的/conf下建立一个jdbc.properties文件,里面写入链接Mysql的各种属性,包括驱动,链接的url,数据库用户名,数据库密码等信息。

JDBC.Driver=org.gjt.mm.mysql.Driver

JDBC.ConnectionURL=jdbc:mysql://localhost:3306/online

JDBC.Username=root

JDBC.Password=root

3.在applicationContext.xml中将数据库属性文件引入:

<bean id="propertyConfigurer" class="org.springframework.beans.factory.config.PropertyPlaceholderConfigurer">

      

        

           

              /WEB-INF/conf/jdbc.properties

           

        

      

    bean>

   4. 配置数据源, 通过前面引入的属性文件创建id为dataSourse的数据源

     

class="org.apache.commons.dbcp.BasicDataSource" destroy-method="close">

value="${JDBC.Driver}">

value="${JDBC.ConnectionURL}">

4.1.2访问数据库的JavaBean

JavaBean是一种Java语言写成的可重用组件。为写成JavaBean,类必须是具体的和公共的,并且具有无参数的构造器。JavaBean通过提供符合一致性设计模式的公共方法将内部域暴露成为属性。众所周知,属性名称符合这种模式,其他Java类可以通过自省机制发现和操作这些JavaBean属性。

用户可以使用JavaBean将功能、处理、值、数据库访问和其他任何可以用Java代码创造的对象进行打包,并且其他的开发者可以通过内部的JSP页面、Servlet、其他JavaBean、Applet程序或应用来使用这些对象。用户可以认为JavaBean提供了一种随时随地的复制和粘贴的功能,而不用关心任何改变。

JSP的一个重要特性就是可以用JavaBean实现功能的扩展。将大部分功能放在JavaBean中完成,以使JSP页面程序更干净简洁、利于维护。JavaBean可以很方便的用来捕获页面表单的输入并完成各种业务逻辑的处理。

连接数据库的JavaBean——Conn。通过JSP页面调用此JavaBean,可以实现对数据库的连接,数据表的添加、删除、更新等操作。

4.1.3 核心代码实现(框架的引入)

1,通过配置将Spring引入到系统中

  

    contextConfigLocation

    

         /WEB-INF/conf/applicationContext.xml

       

  

  

    

    org.springframework.web.context.ContextLoaderListener

  

2,通过拦截器将struts2进入到系统中

<filter>

    struts

    

    org.apache.struts2.dispatcher.FilterDispatcher

  

  filter>

<filter-mapping>

    struts

    /*

filter-mapping>

3,过滤器转码的实现

   Web.xml中的配置:

  

  encodingFilter

    

        com.line.test.common.EncodingFilter

   

  

  

    encodingFilter

    /*

转码实现类,将编码转换成GBK中文编码

public void doFilter(ServletRequest arg0, ServletResponse arg1,

FilterChain filter) throws IOException, ServletException {

HttpServletRequest request = (HttpServletRequest) arg0;

HttpServletResponse response = (HttpServletResponse) arg1;

response.setCharacterEncoding("GBK");

request.setCharacterEncoding("GBK");

response.setContentType("text/html;charset=GBK");

filter.doFilter(request, response);

}

4, 批量的从Excel中添加考生

public void addManyKaoshengService(File excelFile, HttpServletRequest request){

   

POIFSFileSystem   fs   =   null;

    HSSFWorkbook   wb   =   null;

    

      try {

fs   =   new   POIFSFileSystem(new   FileInputStream(excelFile));

wb   =   new   HSSFWorkbook(fs);

} catch (FileNotFoundException e) {

e.printStackTrace();

} catch (IOException e) {

e.printStackTrace();

}

HSSFSheet   sheet   =   wb.getSheetAt(0);

HSSFRow   row   =   null;

HSSFCell   cell   =   null;

String userName;

    String userNo;

    String userSex;

String user_identification;

String userPlocyface;

String user_hometown;

String user_telephone;

String user_email;

int rows = wb.getNumberOfSheets();

for(int i=1; i

row   =   sheet.getRow(i);

cell = row.getCell(0);

userName = cell.getStringCellValue();

cell = row.getCell(1);

userSex = cell.getStringCellValue();

cell = row.getCell(2);

userNo = cell.getNumericCellValue()+"";

cell = row.getCell(3);

userPlocyface = cell.getStringCellValue();

cell = row.getCell(4);

user_hometown = cell.getStringCellValue();

cell = row.getCell(5);

user_identification = cell.getNumericCellValue()+"";

cell = row.getCell(6);

user_telephone = cell.getNumericCellValue()+"";

cell = row.getCell(7);

user_email = cell.getStringCellValue();

this.getKaoshengDao().addManyKaosheng(userName, userNo, userSex, user_identification, userPlocyface, user_hometown, user_telephone, user_email);

}

request.setAttribute("addResult", "添加结束");

}

4.1.4用户及管理员登录模块页面

用户登录页面比较简单,为加强安全性,登录过程中设置有6位数的验证码在登录操作过程中,一般发生的错误有:用户名.密码或验证码为空,登录帐号内容不为数字,验证码输入错误,用户输入了错误的用户名或密码、用户直接单击了登录按钮,对上述情况的判断就要通过login_Dao.java,login_Service.java,Login_Action.java文件来实现。用户包括系统管理员,教师和考生,登录界面

如图4-1所示:

Java在线考试系统_第75张图片

图4-1 学生登录面

在登录页面时,当用户提交了登录资料后,就由“Login_Service.java”这个Action进行验证,它的工作主要是判断用户登录的帐号和密码是否一致。完成这些工作就必须连接存储用户数据库取出相关信息记录。如果用户输入了错误的用户名和密码,返回到登录界面并提示登录出错信息,如图4-3所示:

Java在线考试系统_第76张图片

图4-3登录错误提示页面

Java在线考试系统_第77张图片

若用户提交正确的用户和密码后,如果记录验证无误,Login_Action.java中的login()方法中会根据相应的角色跳转到相应的界面,如果登录成功会将用户的登录状态设置为Y,以防同一个用户登录多次以加强系统的安全性.

public String loginServices(String userNo, String userPwd, String userRole,

String logImg, HttpServletRequest request) {

HttpSession session = request.getSession();

String randPic = (String) session.getAttribute("randPic");

if (logImg != null && randPic != null && randPic.equals(logImg)) {

TUser user = this.getLoginDao().login(userNo, userPwd, userRole);

if (user != null) {

String userIsable = user.getUserIsable();

if (userIsable != null && userIsable.equals("Y")) { // 此用户是否已经被删除

String userIsLogin = user.getUserIsLogin();

if (userIsLogin != null && userIsLogin.equals("N")) { String userR = user.getUserRole();

if (userR != null && userR.equals("M")) {

request.setAttribute("managerWelcome", user);

session.setAttribute("user", user);

this.getLoginDao().setLogined(user.getUserId());

return "managerIndex";

} else if (userR != null && userR.equals("T")) {

request.setAttribute("teacherWelcome", user);

session.setAttribute("user", user);

this.getLoginDao().setLogined(user.getUserId());

return "teacherIndex";

} else if (userR != null && userR.equals("S")) {

// 登录的用户为考生

request.setAttribute("studentWelcome", user);

session.setAttribute("user", user);

this.getLoginDao().setLogined(user.getUserId());

return "studentIndex";

} else {

request.setAttribute("result", "系统忙,请您重试!");败

return "login";

}

} else {

request.setAttribute("result", "此用户已经进入本系统!");

return "login";

}

} else {

request.setAttribute("result", "此用户不存在!");

return "login";

}

} else {

request.setAttribute("result", "帐号密码或角色输入有误,请重试!"); return "login";

}

} else {

request.setAttribute("result", "验证码输入有误!");

return "login";

}

}

4.1.4系统主要模块页面

整个系统都采用JSP+JavaBean+Servlet模式实现。JSP+JavaBean+servlet模式的运用实现了代码的重复利用;是系统程序易编写、易维护、易使用;并且可以在任何安装了Java运行环境的平台上使用而不需要重新编译。

系统首页如图4-4(考生登录主页面)、4-5(系统管理员登录主页面)、4-6(教师登录主页面)所示。

Java在线考试系统_第78张图片

                      图4-4 考生登录成功主页

Java在线考试系统_第79张图片

4-5系统管理员

Java在线考试系统_第80张图片


教师登录系统进入教师主页面页面如图4-6所示:

Java在线考试系统_第81张图片

图4-6 教师登录首页

系统管理员考生添加页面: 其中对考生学号通过ajax做了合法性验证, 使用js对身份证号码,联系方式,电子邮箱等进行了合法性验证, 考生籍贯采用js三级联动进行选择. 考生的添加有两种方式,一种是直接通过页面做添加,一种是通过Excel文件进行批量插入, 使用后者大大的提高了系统的性能.

Java在线考试系统_第82张图片

图4-5 系统管理员添加考生页面

Java在线考试系统_第83张图片

图4-6 系统管理员教师添加页面

Java在线考试系统_第84张图片

 图4-7 系统管理员添加考题(单选题)页面

Java在线考试系统_第85张图片

图4-8 多选题添加成功后显示添加的内容

Java在线考试系统_第86张图片

图4-9 考卷管理页面,可添加删除考卷,查看考卷详细信息,点击查看按钮之后,可以对”可用来考试的考卷”进行考试时间的设置.

Java在线考试系统_第87张图片

不同用户登录系统后显示的界面都是简单都是一些功能的链接。外观是一个DIV+CSS的后台管理模版。

4.1.5学生考试模块的实现页面

考生可以通过首页登录进入选择考试页面,如上图所示。在该页面考生能查看考试科目和开考时间,可以修改个人的密码。修改密码成功后将自动注销重新登录。

如果到了开始考试的时间“是否考试”中就会由“等待考试”变成“开始考试”的连接了,考生可以点击此处进入到考试页面。考试页面有倒计时显示,如果时间到了系统会自动提交。

图4-10,对考卷进行时间的设置,使用js日历方便用户操作,提高了系统性能. 

Java在线考试系统_第88张图片

图4-11, 考生参加考试,当点击提交考卷的时候考卷将被提交并算出相应的主观题得分.当考试时间到了之后弹出警告框,考生点击确定之后提交考卷并且计算得出其主观题得分 

Java在线考试系统_第89张图片

学生考试界面如下图4-7所示。

Java在线考试系统_第90张图片

图4-7 考试页面

4.1.6教师添加试题制作试卷模块的实现

教师登录到系统后通过左边的管理菜单了解到自己拥有那些功能:题库信息查看、添加题库,试卷信息查看,添加试卷,阅卷管理等。题库添加:先选择所添加试题的科目和题型再进行添加。系统设置了选择题,填空题,问答题。

教师可以在线制作试卷,设置考试的科目、时间、考试时间段、题型分布、分值分布、考题数量等,考题数量必须根据系统提示题库总数量设置,不能把考题数量超出题库的总数量。

结束语

通过这次毕业设计,对很多东西有了新的认识和新的见解,认识问题的和思考解决办法有了本质上的进步,特别是对一个系统开发的模式有了更深的认识,对专业技能的运用更熟练。

网上考试系统的开发过程中也遇到了很多问题,开始做需求时不确定考试系统到底应该具备那些功能,只知道主要功能就是有试题能考试,但具体流程,怎样实现这些功能就很模糊,所以查看了很多资料才理清楚。数据库设计也是个难点,不明确要实现哪些功能就不能很好的把数据库设计好。设计数据库就是开发一个系统的核心。设计数据库一定要思路清晰,各个数据的流向各个表之间的关系一定要弄清楚,透彻。数据库设计出错了对以后整个系统的影响是最直接的。所以做需求时一定要做好需求分析,考虑完善,数据库设计要谨慎。总之需求分析时能做好就能降低需求变更,再加上设计时考虑到的技术可行性就可以大幅度的降低需求变更。

最终还是完成了预定的需求功能。看到自己独立完成并可以使用的系统给了我很大信心。在本系统的设计过程和论文编写过程中,很多老师、同学都给与了我许多无私的帮助,尤其是我的导师给我的论文提出了很多宝贵的修改意见,在这里我向这些无私帮助我的人表示衷心的感谢。


参考文献

[1]  赵韶平.Power Designer系统分析与建模. 清华大学出版社,2004.8

[2]  Bruce Eckel编.《Java编程思想第3版》.机械工业出版社, 2005.9

[3]  李芝兴. 杨瑞龙编.《Java程序设计之网络编程》.清华大学出版社,2006.3

 [4]  赵森. 中文SQL Server 2005 程序设计教程. 冶金工业出版社, 2006.7

[5]  杨学全.SQL Server实例教程.电子工业出版社,2007.9

[6]  郝玉龙.Java EE 编程技术.清华大学出版社,2008.6

[7] Liang Y.D.Java语言程序设计基础篇.机械工业出版社,2008.6

[8] 江开耀.软件工程与开发技术.西安电子科大出版社,2009.2

[9] 刘志成.UML建模实例教程.电子工业出版社,2009.11

你可能感兴趣的:(数据库,数据挖掘,数据仓库)