您好,欢迎来到好走旅游网。
搜索
您的当前位置:首页基于Java的在线考试系统

基于Java的在线考试系统

来源:好走旅游网
存档日期: 存档编号:

本科生毕业设计(论文)

论 文 题 目: 基于Java的在线考试系统

Java-Based Online Examination System 姓 名: 系 别: 专 业: 年 级 、 学 号: 指 导 教 师:

××大学印制

××大 学毕 业 设 计 论 文

基于Java的在线考试系统

摘 要:为了帮助学生更好地掌握所学的知识。本人设计了一套在线考试系统。 本系统所设计的用户有管理员教师,参加练习或考试的学生和对考试进行打分的评分老师这三种身份。本系统可以根据管理员教师的意愿进行科目,试题以及试卷的管理。本系统的开发模式为B/S模式。开发平台为MyEclipse8.5,所用的数据库是MySQL数据库,服务器是Tomcat6.0。所用到的主要开发语言是Java,HTMl,与JavaScript。本系统的主要特点是:操作容易,结构简单。学生利用本系统,能够更加及时的进行练习和考试。教师利用本系统可免去统计成绩,录入考试分数等繁琐的工作提高了工作效率。 关键词:在线考试 B/S MyEclipse8.5 MySQL Tomcat6.0 Java

Java-Based Online Examination System

Abstract:In order to help students to better understand what they have learned. I designed a set of online examination system.. This system is designed for users with three roles include administrators; students who want to participate in exercises or join in examinations and the rating teachers. The system can edit the curriculums,tests and papers according to the administrators wishes. This system uses the B / S development model.And the development platform is MyEclipse8.5, the database is MySQL and the server uses Tomcat6.0. The main development language used by the Java, HTMl, and JavaScript. Easy to operate and simple structure are the main feature of this system Students can do exercises and exam more timely with this system. This system can improve the efficiency of teachers and they do not have to worry about statistical results, entry test scores anymore.

Keywords: Online exam B/S MyEclipse MySQL Tomcat6.0 Java

I

××大 学毕 业 设 计 论 文

目 录

1 绪论 ............................................................. 1 1.1引言 ............................................................ 1 1.2选题背景 ........................................................ 1 1.3国内外发展情况 .................................................. 1 1.4系统开发方法 .................................................... 2 2 系统开发相关技术与工具简介 ....................................... 3 2.1 JSP技术简介 .................................................... 3 2.2 JSP工作原理 .................................................... 3 2.3 MYSQL数据库简介 ................................................ 4 2.4 JDBC技术与系统数据库的连接 ..................................... 4 2.5 NAVICAT FOR MYSQL简介 .......................................... 6 2.6 WEB服务器与超文本标记语言 ...................................... 6 3 系统分析及其基本功能 ............................................. 7 3.1 可行性分析 ..................................................... 7 3.2 系统需要解决的主要问题 ......................................... 7 3.3 系统基本功能 ................................................... 8 3.4 系统总体结构设计 ............................................... 8 4 系统主要模块详细设计 ............................................ 10 4.1 系统数据结构设计 .............................................. 10 4.2 系统登录模块的设计 ............................................ 11 4.3 管理员教师模块的设计 .......................................... 13 4.4 考生模块的设计 ................................................ 23 4.5 评分教师模块的设计 ............................................ 27 5 系统功能测试 .................................................... 30 6 总结 ............................................................ 33 致 谢 ................................................... 34 参 考 文 献 .................................................... 35 附录1 本设计所包含的其他数据表 ................................... 36 附录2 本设计所提到的代码 ........................................ 38

××大 学毕 业 设 计 论 文

1 绪论

1.1引言

考试在教学中是必不可少的,可以检验学生对知识的掌握程度和学习能力的高低。对学生来讲,适当的测试压力有助于巩固所学的知识,训练基本技能,开发智力,发散思维,提升学生分析问题解决问题的能力。然而考试的形式有很多种除了我们传统的纸质习题外,我们也应该顺应时代的发展开发出一种更加方便快捷和容易操作的系统——在线考试系统。这个设计不仅学生和老师的学习和工作带来了方便还能够节省教学资源,节约了传统考试所需纸张的问题也能为环保事业做出一些贡献。本设计需要对网络编程和相关数据库的技术有所了解。还需会使用一些相关的应用软件和开发工具。

1.2选题背景

新世纪的到来和科学技术的快速发展将我们带入了信息时代,在当今这个高速发展的时代里计算机日趋成为我们生产生活中必不可少的工具。然而对于学生来说计算机技术的发展将给我们的学习方式和教育方法带来翻天覆地的变化。因此计算机网络技术的发展对教学和考试的方式方法起到了导向性的作用。这些技术可以极大的推动教育的发展,创新教学模式推进教学改革。为教育的升级创造必要的条件。本设计主要为了探索一种基于计算机网络技术的教学模式。在本次设计中学生用户可以突破纸质学习资料的局限性使用计算机进行在线测试与考试,能够更加及时的巩固新知识从而增强学习效果提高教学的质量。

1.3国内外发展情况

网络技术的发展使得考试的形式发生了革命性的变化。因特网强大的计算能力与其开放性,分布性的特点将考试的工作变的方便而有效率,解放了部分人力和物力。因此基于网络的考试系统越来越受国内外教育机构的重视。在一些发达国家基于网络的教育已进入更加深入的阶段。教育机构将网络技术与课程的巧妙结合使得网络技术在教学中的作用更加明显也让学生们的学习变的轻松快乐。一些发达国家电脑已普及,远程教育的参加人数正日益递增。在中国,网络的教育

1

××大 学毕 业 设 计 论 文

刚刚兴起,还在摸索着前进。能够将计算机网络技术与教学结合很好的教育机构还比较少。我们平时在学校中接触最多的是基于小型局域网的教学教室。相比于有一些发达国家我国在网络教学方面相对落后,还处于较为初级的阶段。

1.4系统开发方法

目前 C/S模式(客户端/服务器模式)和B/S模式(浏览器/服务器模式)是应用软件运行的主要的模式。C/S模式的响应速度快处理事务的能力强但兼容性差开发成本较高。而B/S模式是伴随因特网迅速发展而兴起的一种技术,它的客户端是一个标准的浏览器,服务器端方面是WebServer ,然而B/S模式能被广泛应用是因为WebSever与应用服务器和数据库的紧密结合。B/S模式的主要优点就是方便扩充应用和升级维护。因此,本系统采用B/S模式进行设计。

本次设计结合当前计算机的价格走势,应用JSP技术,基于B/S模式开发了在线考试系统。它使用简单、容易操作,界面友好,非常实用。虽然现阶段还有许多不成熟的地方,但是已具有用户管理、科目管理、试卷管理、试题管理、在线考试等功能。基本实现了真正的无纸化习题练习与考试的作用。能够满足任何经过授权的考生随时随地练习并迅速获得成绩。

2

××大 学毕 业 设 计 论 文

2 系统开发相关技术与工具简介

2.1 JSP技术简介

在互联网普及和发展的最初阶段,Web应用全部是静态的HTML页面。这种静态页面不具有有用户交互的能力和动态显示功能。Rasmus Lerdorf在1994年发明了专门用于WEB服务器端编程的PHP语言。PHP语言将HTML和PHP指相结合成为完整的服务器端动态页面,从而使开发者更加简便快捷的方式实现动态交互技术。直到1996年,微软公司参照PHP的思想开发出了ASP(Active Server Page,意为“动态服务器页面”)成为新一代WEB交互技术。当ASP技术作为动态网络开发技术快速成为Windows系统下的WEB服务端的主流开发技术时,由SUN公司带领的Java团队1997年发布Servlet技术;1998年,SUN公司发布JSP标准。JSP和ASP两者都是动态WEB编程技术,都可以嵌入HTML中,但是他们的运行机制不同,这主要是因为ASP使用VBScript作为脚本语言,无需编译;而JSP则使用Java作为脚本语言,JSP必须编译成Servlet,才可以执行JSP页面。JSP和Servlet,JavaBean技术的组合,大大提高了编译运行的执行效率,并逐渐发展成为J2EE平台的核心技术之一。

2.2 JSP工作原理

JSP页面是由HTML代码和嵌入其中的Java所组成的。当页面被客户端请求访问,则服务器就开始处理这些Java代码然后将生成的HTML页面返回给客户端浏览器。JSP不仅具备了Java技术的方便快捷和完全面向对象等特点,而且具有平台无关性和安全可靠性。JSP是服务器端技术,在服务器端,JSP引擎解释并执行JSP页面的代码,然后将执行结果以HTML或XML页面的形式发送给客户端,而在客户端却看不到JSP页面本身的代码,只能看到JSP页面执行后的输出结果。

3

××大 学毕 业 设 计 论 文

2.3 MySQL数据库简介

MySQL是一个多用户、多线程的SQL数据库服务器。SQL即结构化查询语言是当今使用广泛的和标准化的数据库语言。MySQL通过一个C/S结构来实现并由一个服务器守护程序mysql与一些不同的客户程序和库组成。

MySQL的开发者是来自瑞典的MySQLAB公司。如今互联网上有很多中小型网站在使用MySQL数据库。MySQL吸引开发者的原因有很多。第一, MySQL运行速度很快。据开发者声称MySQL数据库的运算速度可能是在目前数据库中最快的。第二,使用方便。MySQL性能很强大而又相对简单,相比于其他更大系统的设置与管理,其复杂程度较低。第三,经济实惠。MySQL对于一般的内部使用通常是免费的。第四,支持查询语言。MySQL 可以利用所有现代数据库系统都选用的语言即SQL语言。也可以利用支持 ODBC(开放式数据库连接)的应用程序。第五,功能强大。服务器可以被多个客户及同时连接还能同时使用多个数据库。第六,连接性和安全性较高。MySQL数据库是完全网络化的,它能在互联网上的任何地方进行访问,可以同任意地方的任何人共享数据库。而且 MySQL 还能进行访问控制,可以有选择的规定访问人员有效的保护隐私。第七,可移植性。MySQL 能够在各种版本的UNIX和其他非UNIX的系统上运行。

2.4 JDBC技术与系统数据库的连接

JDBC(Java DataBase Connectivity)是Java数据库连接技术的简称,是Java与一些数据库之间连接的一种标准,此种连接独立于数据库。一组Java类与接口可以组成JDBC。JDBC是Java程序和数据库系统通信的标准API,通过调用这些Java类和接口所提供的方法,能够连接不同的数据库,并且对数据库进行操作。使用JDBC一般可以完成一下事情。

1,加载JDBC驱动程序;2,建立一个数据库连接;3,向数据库发送SQL语句; 4,处理数据库返回的结果;5,关闭相关链接。

一般来讲,使用JDBC开发数据库应用可以分为:装载JDBC驱动程序,建立与数据库的连接,执行SQL语句,处理结果和关闭数据库连接这几步。下面进行详细介绍:

对于数据库操作首先要加载所需数据库的驱动程序然而这些驱动程序的装载

4

××大 学毕 业 设 计 论 文

操作是非常简单的,只需要代码即可完成即调用Class类中的静态方法forName()方法,其格式为:

Class.forName(“DriverName”);

其中,DriverName为要加载的数据库名称。如果该方法不能够找出指定的驱动程序类名,则会弹出ClassNotFoundException异常,这就需要我们捕获这个异常。如加载JDBC-MySQL数据库驱动程序代码如下: try{

Class.forName(“org.gjt.mm.mysql.Driver”); }catch(ClassNotFoundException e){ e.printStackTrace(); }

装载JDBC驱动程序类后可建立数据库的连接。数据库的连接方法可通过调用驱动程序管理器DriverManager对象的getConnection()方法,返回Connection对象来完成数据库的连接。[1]代码如下所示:

Connection conn=DriverManager.getConnection(url);

其中,字符串url作为参数,为JDBC的url,如果可以建立连接,就能返回一个Connection对象,该对象表示与数据库的会话过程。

建立数据库连接后,可以通过JDBC提供的Statement接口向数据库传送SQL语句并执行。而Statement对象可以通过Connection接口中的createStatement()方法来创建,也可已使用Java.sql.PrepareStatement接口来实现上述的功能,此接口的功能包含了Java.Sql.Statement接口,并且效率要比Statement接口高。因为PrepareStatement类的对象将会传入的SQL命令事先编好并等待使用。因此使用PrepareStatement更好。创建Statement对象的代码如下: Statement sql;

sql=conn.createStatement();

可以通过Statement对象来调用相应的方法对数据库完成增,删,查,改等操作。

通过SQL语句返回从数据库中检索到的符合条件的记录,然后可以使用Statement接口executeQuery方法返回的结果集ResultSet接口类型的对象来获取并处理该结果。当访问完整数据库后,应关闭数据库连接,并释放与链接有

5

××大 学毕 业 设 计 论 文

关的资源,用户创建的ResultSet或Statement对象将自动关闭,只需调用Connection接口的close()方法即可。例如关闭结果集对象,关闭语句对象,关闭连接的代码如下:

rs.close(); stmt.close(); conn.close();

2.5 Navicat for MySQL简介

Navicat for MySQL是MySQL数据库的管理和开发工具它不仅为软件开发者提供了很多尖端的工具,而且对于初学者学习还是很容易的。此软件基于Window平台并为MySQL量身订做,提供类似于MySQL的用户管理工具。Navicat for MySQL的出现将节省程序员以及数据库设计人员的开发时间和精力,降低了软件开发的成本,大大提升软件开发的效率。此软件界面友好,实用性强,上手容易。

2.6 WEB服务器与超文本标记语言

在本次设计中,选择使用的是Tomcat6.0服务器。Tomcat是一个实现JAVAEE标准的最小WEB服务器。Tomcat服务器是Apache组织开发的能够从网络上直接下载。

超文本标记语言(HTML)是一种简单标记语言用来制作超文本文档,而HTML中的元素是HTML语言的基本部分。这些元素总是成对出现的,每一对元素一般都有一个开始的标记(如),也有一个结束的标记(如:)。元素的标记要用一对尖括号括起来,并且结束的标记总是在开始的标记前加上一个斜杠。

[1]

6

××大 学毕 业 设 计 论 文

3 系统分析及其基本功能

3.1 可行性分析

可行性分析主要是在系统调查的基础上对要开发的系统进行全面的评估。从开的技术、开发经费、系统的实用性等方面对新系统进行分析和研究。考察新系统的开发是否有意义和可能性,来避免投资失败,并保证新系统的开发能够成功。可行性研究的目的就是以尽可能小的代价和尽量短的时间内来分析将要开发的项目会遇到困难并评估这些困难能否被克服。本设计的可行性分析包括如下方面:

(1) 系统是否经济:作者认为本系统开发经费较小在经济上完全可以接受,而且本设计在投入使用以后可以节省一些人力物力,提高教学工作与学习的效率。所以本设计在经济上是可行的。

(2) 本系统技术上是否可行:本次设计使用的是B/S开发模式运用JSP开发技术和 MySql数据库。如今这些技术的发展已经比较成熟因此能够大大的增加本设计开发成功的几率。可以说本次设计在技术上也是可行的。

通过以上分析,本次设计已经有了明确的开发目标而且在技术和经济等方面都是切实可行的,投入少、见效快。因此在线考试系统完全可行。

3.2 系统需要解决的主要问题

首先,因为在线考试是面向特定的某些对象的,所以本次设计的用户角色会分为管理员教师,考生,以及评分教师这三种。不同角色的使用权限也会有所不同。本设计需要解决管理员教师对人员,课程,题目还有试卷的管理问题;考生能够进行自我测验,在线考试并且查询考试的成绩;评分教师完成对考生提交过的试卷进行评分等问题。

7

××大 学毕 业 设 计 论 文

3.3 系统基本功能

一,管理员教师的功能:

1,对管理员的管理:修改管理员的密码,录入新的管理员,删除已存在的管理员。

2,管理学习的课程:能够决定在系统中应用的课程。 3,管理所有题目:在相应的课程下添加或删除题目。 4,出试卷:决定试卷中包含的试题,以及考试时间。

5,管理学生:录入能使用本系统的学生和删除过了期限的学生。 6,管理评分教师:录入有资格打分的教师,删除离职教师。 7,查看所有考试成绩:对本系统的所有考试成绩一览。 二,考生的功能:

1,单选题的自我检测:考生进行自测并快速得到答案。 2,在线考试:参与在线考试。

3,查看考试成绩:作答并交卷后查看老师给的评分。 三,评分老师的功能:主要对已成功上交的试卷打分。

除了实现上述功能以外,本设计还具有清爽、简洁的界面和稳定性强的特点。

3.4 系统总体结构设计

本设计是专门对于已授权的用户使用本系统进行在线考试的应用WEB程序具有开放性、便捷性和可变通性的特点。管理员教师可根据教学需要向添加课程修改和删除题库中的试题。考生们也可有秩序的进行考试和自我练习。为了使本系统运行的效率更加可靠,更有保障系统的服务器端要具备较高的软硬件配置,在客户端对配置的要求可以降低。本设计不仅可以在内部的局域网上流畅运行,也广泛适用因特网。

8

××大 学毕 业 设 计 论 文

在线考试系统各模块的结构图如下:

图3.1 管理员系统结构图

图3.2 考生系统结构图

评分老师只有对已作答且成功提交的试卷评分的功能。

9

××大 学毕 业 设 计 论 文

4 系统主要模块详细设计

分以下几个部分进行详细设计。

4.1 系统数据结构设计

本系统采用的是MySql数据库,数据库的名称为db_exam,数据表的设计由Navicate for MySQL来完成。用户信息表格如下:

表4.1 t_admin管理员老师信息表

ID 1 2 3 字段名称 userId userName userPw 字段类型 Int varchar varchar

字段长度 12 50 50 主键 主键 备注 用户名 密码

表4.2 t_stu学生信息表

ID 1 2 3 4 5 6 7 8 字段名称 stu_id stu_xuehao stu_realname stu_sex stu_age login_name login_pw del 字段类型 int varchar varchar varchar varchar varchar varchar varchar

字段长度 12 49 49 49 49 49 49 49 主键 主键 备注 学生编号 真实姓名 性别 年龄 登录名 登录密码 是否被删除 10

××大 学毕 业 设 计 论 文

表4.3 t_tea评分教师信息表

ID 1 2 3 4 5 6 7 8 字段名称 tea_id tea_bianhao tea_realname tea_sex tea_age login_name login_pw del 字段类型 int varchar varchar varchar varchar varchar varchar varchar 字段长度 12 49 49 49 49 49 49 49 主键 主键 备注 教师编号 真实姓名 性别 年龄 登录名 登录密码 是否被删除 本设计还包括考试分数表,交卷情况表,录入课程表,考试试题表以及所有试题表,在这里不一一列出,详情见附录1。

4.2 系统登录模块的设计

登录模块界面展示如图4.1

图4.1 登陆界面

用户可在此模块输入自己的登录名和密码,系统会验证用户所输入的登录名与密码,如果输入的登录名或密码有误或漏填,系统将提示用户输入的登陆名或密码不正确。除此之外还有角色的选择:管理员教师、评分老师、学生。如果选择的角色与登录名不符则系统报错登录失败需要重新登陆。

11

××大 学毕 业 设 计 论 文

用户登录的流程图如图4.2所示

图4.2 用户登录系统流程图

登录模块部分核心代码如下: //用户名,密码,登录身份的验证 function check1()

{ if(document.ThisForm.userName.value==\"\") { alert(\"请输入用户名\"); document.ThisForm.userName.focus(); return false; } if(document.ThisForm.userPw.value==\"\") { alert(\"请输入密码\"); document.ThisForm.userPw.focus(); return false; } if(document.ThisForm.userType.value==-1) { alert(\"请选择登陆身份\"); return false; } document.getElementById(\"indicator\").style.display=\"block\";

12

××大 学毕 业 设 计 论 文

loginService.login(document.ThisForm.userName.value,document.ThisForm.userPw.value,document.ThisForm.userType.value,callback); } //报错

function callback(data) {

document.getElementById(\"indicator\").style.display=\"none\"; if(data==\"no\") {

alert(\"用户名或密码错误\"); }

if(data==\"yes\") {

alert(\"通过验证,系统登录成功\");

window.location.href=\"<%=path %>/loginSuccess.jsp\"; } }

4.3 管理员教师模块的设计

管理员教师模块界面展示如图4.3

图4.3 管理员教师模块界面

在此模块中用户可以以管理员教师的身份使用此系统。用户能够查看系统的基本信息,可以修改管理员教师的密码也可以添加或删除管理员教师和评分教师以及考生。在课程方面可以添加需要的课程或删除已淘汰的课程。试题方面可以在题库中添加和删除试题。管理员教师可根据实际需要需要考试的课程添加创建

13

××大 学毕 业 设 计 论 文

试卷,在题库中选择需要的试题出试卷还可以在评分老师打分后查看考生的考试成绩。

部分核心代码如下: 1.界面跳转判断:

if(userType==0) {

String sql=\"from TAdmin where userName=? and userPw=?\"; Object[] con={userName,userPw};

List adminList=adminDAO.getHibernateTemplate().find(sql,con); if(adminList.size()==0) { result=\"no\"; } else { WebContext ctx = WebContextFactory.get(); HttpSession session=ctx.getSession(); TAdmin admin=(TAdmin)adminList.get(0); session.setAttribute(\"userType\", 0); session.setAttribute(\"admin\", admin); result=\"yes\"; } }

2.系统基本信息显示: 操作系统版本:

<%=System.getProperty(\"os.name\")%>  <%=System.getProperty(\"os.version\") %>

操作系统类型:<%=System.getProperty(\"os.arch\") %> 用户,目录,临时目录:<%=application.getRealPath(\"/\")%> JDK版本:<%=System.getProperty(\"java.version\") %>

JKD安装目录:<%=System.getProperty(\"java.home\") %> 总内存/剩余内存:

<%OperatingSystemMXBean osmb = (OperatingSystemMXBean) ManagementFactory.getOperatingSystemMXBean();%><%=osmb.getTotalPhysicalMemorySize()/1024/1024%>MB  /  <%=osmb.getFreePhysicalMemorySize() / 1024/1024 %>MB

14

××大 学毕 业 设 计 论 文

3.对管理员教师的添加与删除: 图4.4为管理员教师添加界面

图4.4 管理员添加界面

核心代码如下: //管理员教师的录入

public String adminAdd() { TAdmin admin=new TAdmin(); admin.setUserName(userName); admin.setUserPw(userPw); adminDAO.save(admin); this.setMessage(\"操作成功\"); this.setPath(\"adminManage.action\"); return \"succeed\";

}

管理员教师的删除代码: //已有管理员的除

public String adminDel() { adminDAO.delete(adminDAO.findById(userId)); this.setMessage(\"删除成功\"); this.setPath(\"adminManage.action\"); return \"succeed\";

}

管理员教师对评分教师以及学生的管理与上述代码类似,在此不一一列举详见附录2。

15

××大 学毕 业 设 计 论 文

4.管理员教师对课程的管理 课程管理界面如图4.5所示:

图4.5 管理员添加界面

此界面主要显示已有的课程信息以及可执行的操作。 课程管理代码如下:

public String kechengMana() { String sql=\"from TKecheng where del='no'\"; List kechengList=kechengDAO.getHibernateTemplate().find(sql); Map request=(Map)ServletActionContext.getContext().get(\"request\"); request.put(\"kechengList\", kechengList); return ActionSupport.SUCCESS;

}

课程的添加代码:

public String kechengAdd() { TKecheng kecheng=new TKecheng(); kecheng.setKechengName(kechengName); kecheng.setDel(\"no\");

16

××大 学毕 业 设 计 论 文

}

kechengDAO.save(kecheng); this.setMessage(\"添加成功!\"); this.setPath(\"kechengMana.action\"); return \"succeed\";

课程的删除代码:

public String kechengDel() { TKecheng kecheng=kechengDAO.findById(kechengId); kecheng.setDel(\"yes\"); kechengDAO.attachDirty(kecheng); this.setMessage(\"删除成功!\"); this.setPath(\"kechengMana.action\"); return \"succeed\"; }

5.管理员教师对题库的管理

管理员在对题库进行管理时要先选择题目所属的课程,然后该课程中所有的题目将被列出来,如图4.6所示

图4.6 题库管理界面

在此可以直接删除题目。若要添加题目则点击题目录入标签,在录入前要先选择题目所属课程和题目类型如图4.7所示。

17

××大 学毕 业 设 计 论 文

图4.7 题目添加界面

题库管理核心代码如下: 题目所属课程的选择:

public String timuByKecheng() { String sql=\"from TTimu where del='no' and kechengId=\"+kechengId+\" order by timuLeixing\"; List timuList=timuDAO.getHibernateTemplate().find(sql); Map request=(Map)ServletActionContext.getContext().get(\"request\"); request.put(\"timuList\", timuList); return ActionSupport.SUCCESS;

}

题目的添加:

public String timu_danxuan_Add() //单选题的添加 { TTimu timu=new TTimu(); timu.setTimuName(timuName); timu.setTimuXuanxianga(timuXuanxianga); timu.setTimuXuanxiangb(timuXuanxiangb); timu.setTimuXuanxiangc(timuXuanxiangc); timu.setTimuXuanxiangd(timuXuanxiangd); timu.setTimuDaan(timuDaan.trim()); timu.setTimuFenshu(timuFenshu); timu.setTimuLeixing(timuLeixing); timu.setKechengId(kechengId); timu.setDel(\"no\");

18

××大 学毕 业 设 计 论 文

timuDAO.save(timu); this.setMessage(\"操作成功\"); this.setPath(\"admin/timu/timuLeixing.jsp\"); return \"succeed\"; }

public String timu_duoxuan_Add() //多选题的添加 { TTimu timu=new TTimu(); timu.setTimuName(timuName); timu.setTimuXuanxianga(timuXuanxianga); timu.setTimuXuanxiangb(timuXuanxiangb); timu.setTimuXuanxiangc(timuXuanxiangc); timu.setTimuXuanxiangd(timuXuanxiangd); timu.setTimuDaan(timuDaan.trim()); timu.setTimuFenshu(timuFenshu); timu.setTimuLeixing(timuLeixing); timu.setKechengId(kechengId); timu.setDel(\"no\"); timuDAO.save(timu); this.setMessage(\"操作成功\"); this.setPath(\"admin/timu/timuLeixing.jsp\"); return \"succeed\"; }

public String timu_panduan_Add() // 判断题的添加 { TTimu timu=new TTimu(); timu.setTimuName(timuName); timu.setTimuXuanxianga(timuXuanxianga); timu.setTimuXuanxiangb(timuXuanxiangb); timu.setTimuDaan(timuDaan.trim()); timu.setTimuFenshu(timuFenshu); timu.setTimuLeixing(timuLeixing); timu.setKechengId(kechengId); timu.setDel(\"no\"); timuDAO.save(timu); this.setMessage(\"操作成功\"); this.setPath(\"admin/timu/timuLeixing.jsp\"); return \"succeed\"; }

public String timu_jianda_Add() 简答题的添加 { TTimu timu=new TTimu(); timu.setTimuName(timuName); timu.setTimuDaan(timuDaan.trim());

19

××大 学毕 业 设 计 论 文

}

timu.setTimuFenshu(timuFenshu); timu.setTimuLeixing(timuLeixing); timu.setKechengId(kechengId); timu.setDel(\"no\"); timuDAO.save(timu);

this.setMessage(\"操作成功\");

this.setPath(\"admin/timu/timuLeixing.jsp\"); return \"succeed\";

题目的删除:

public String timuDel() { TTimu timu=timuDAO.findById(timuId); timu.setDel(\"yes\"); timuDAO.attachDirty(timu); this.setMessage(\"操作成功\"); System.out.println(timu.getKechengId()+\"&&&\"); this.setPath(\"timuByKecheng.action?kechengId=\"+timu.getKechengId()); return \"succeed\";

}

6.管理员教师对试卷的管理

管理员教师可以录入新的试卷或删除已有试卷,可查看已有试卷的题目,也可向已有的试卷里添加新的题目。试卷管理界面如图4.8所示。

图4.8 试卷管理界面

核心代码如下:

public String shitiMana() { String sql=\"select t from TShiti t where t.del='no'\";

20

××大 学毕 业 设 计 论 文

List shitiList=shitiDAO.getHibernateTemplate().find(sql);

Map request=(Map)ServletActionContext.getContext().get(\"request\"); request.put(\"shitiList\", shitiList); return ActionSupport.SUCCESS;}

录入新的试卷需要注明试卷的名称考试的时间和此试卷的介绍。试卷的添加

界面如图4.9所示。

图4.9 试卷添加界面

//核心代码: //试卷的添加

public String shitiAdd() { TShiti shiti=new TShiti(); shiti.setShitiName(shitiName); shiti.setShitiJieshao(shitiJieshao); shiti.setShitiShijian(new Date().toLocaleString()); shiti.setShichang(shichang); shiti.setDel(\"no\"); shitiDAO.save(shiti); this.setMessage(\"操作成功\"); this.setPath(\"shitiMana.action\"); return \"succeed\";

}

//试卷的删除:

public String shitiDel() { TShiti shiti=shitiDAO.findById(shitiId); shiti.setDel(\"yes\"); shitiDAO.attachDirty(shiti);

21

××大 学毕 业 设 计 论 文

}

this.setMessage(\"删除成功\"); this.setPath(\"shitiMana.action\"); return \"succeed\";

向试卷中添加题目首先要选择题目所属的课程。 相关代码如下: //选择试题所属的课程

public String timuByKecheng1() { String sql=\"from TTimu where del='no' and kechengId=\"+kechengId+\" order by timuLeixing\"; List timuList=timuDAO.getHibernateTemplate().find(sql); Map request=(Map)ServletActionContext.getContext().get(\"request\"); request.put(\"timuList\", timuList); request.put(\"shitiId\", shitiId); return ActionSupport.SUCCESS;

}

//向试卷中添加题目

public String timuByShiti() { List timuList=new ArrayList(); Map request=(Map)ServletActionContext.getContext().get(\"request\"); String sql=\"from TTimuShiti where shitiId=?\"; Object con[]={shitiId}; List timuShitiList=timuShitiDAO.getHibernateTemplate().find(sql,con); for(int i=0;i}

22

××大 学毕 业 设 计 论 文

4.4 考生模块的设计

在此模块中用户可以以考生的身份使用此系统。用户能够查看系统的基本信息,能够在线参加考试。在评分老师打过分后可以查询自己的考试成绩。作为考生还可以进行客观题的自测,自测结果立刻产生。考生登陆后的界面如图4.10所示

图4.10 考生界面

考生单击在线考试标签可进行一次考试,原则上讲一个考生在一份试卷只能考一次。要先选择试题。考试界面如图4.11所示

图4.11 考试界面

23

××大 学毕 业 设 计 论 文

考试模块代码:

public String timuByShiti_kaoshi() { Map request=(Map)ServletActionContext.getContext().get(\"request\"); Map session= ServletActionContext.getContext().getSession(); TStu stu=(TStu)session.get(\"stu\"); String sqlk=\"from TJiaoyuan where stuId=? and shitiId=?\"; Object conk[]={stu.getStuId(),shitiId}; List list=jiaoyuanDAO.getHibernateTemplate().find(sqlk,conk); if(list.size()>0){ request.put(\"err\", \"你已经参加过此考试。请不要重复考试\"); return ActionSupport.ERROR; } List timuList=new ArrayList(); String sql=\"from TTimuShiti where shitiId=?\"; Object con[]={shitiId}; List timuShitiList=timuShitiDAO.getHibernateTemplate().find(sql,con); for(int i=0;i}

//交卷相关代码

public String jiaoyuanAdd() { HttpServletRequest request=ServletActionContext.getRequest(); Map session= ServletActionContext.getContext().getSession(); TStu stu=(TStu)session.get(\"stu\"); String sql=\"from TTimuShiti where shitiId=?\"; Object con[]={shitiId}; List timuShitiList=timuShitiDAO.getHibernateTemplate().find(sql,con); for(int i=0;itimu1Daan=request.getParameterValues(timuShiti.getTimuId().toString()); if(timu1Daan.length==1)//单选题 { jiaoyuan.setTimuDaan(timu1Daan[0]);

24

××大 学毕 业 设 计 论 文

} if(timu1Daan.length>1)//多选题 { String s=\"\"; for(int j=0;jpublic String ajaxSave() {

HttpServletRequest request=ServletActionContext.getRequest(); Map session= ServletActionContext.getContext().getSession(); TStu stu = (TStu) session.get(\"stu\");

Integer myshitiId = Integer.valueOf(request.getParameter(\"shitiId\")); Integer timuId = Integer.valueOf(request.getParameter(\"timuId\")); String timuDaan = request.getParameter(\"timuDaan\"); TJiaoyuan jyInstance = new TJiaoyuan(); jyInstance.setShitiId(myshitiId); jyInstance.setStuId(stu.getStuId()); jyInstance.setTimuId(timuId);

List list = jiaoyuanDAO.findByExample(jyInstance); if (list != null && list.size() > 0) { TJiaoyuan jiaoyuan = list.get(0); jiaoyuan.setTimuDaan(timuDaan); jiaoyuanDAO.merge(jiaoyuan); } else {

TJiaoyuan jiaoyuan = new TJiaoyuan(); jiaoyuan.setStuId(stu.getStuId()); jiaoyuan.setTimuId(timuId); jiaoyuan.setShitiId(myshitiId); jiaoyuan.setTimuDaan(timuDaan); jiaoyuanDAO.save(jiaoyuan); }

return ActionSupport.SUCCESS; }

25

××大 学毕 业 设 计 论 文

考生在评分教师给自己打分后可查看自己各科的成绩。界面如图4.12所示

图4.12 考生分数查询界面 相关代码:

public String fenshuMana() { String sql=\"from TFenshu where shitiId=?\"; Object[] cc={shitiId}; List fenshuList=fenshuDAO.getHibernateTemplate().find(sql,cc); for(int i=0;ifenshu.setStuRealName(stuDAO.findById(fenshu.getStuId()).getStuRealname());

fenshu.setShitiName(shitiDAO.findById(fenshu.getShitiId()).getShitiName()); } Map request=(Map)ServletActionContext.getContext().get(\"request\"); request.put(\"fenshuList\", fenshuList); return ActionSupport.SUCCESS; }

本系统可提供学生单选题的自测服务,可提升学生客观题的做题速度与准确性,方便可行。考生单击在线自测标签可进行自测,自测结果在交卷后立刻出来,无需等待。方便考生了解自己对知识的掌握程度。在线自测界面如图4.13所示。

26

××大 学毕 业 设 计 论 文

图4.13考生自测界面 //自测部分相关代码:

public String jiaoyuan_zice() { HttpServletRequest request=ServletActionContext.getRequest(); int fenshu111=0; String sql=\"from TTimu where del='no' and timuLeixing='danxuan'\"; List timuList=timuDAO.getHibernateTemplate().find(sql); for(int i=0;i4.5 评分教师模块的设计

因为考试存在客观题在本设计中评分老师负责人工阅卷,并给考生打分。评分教师登录主界面如图4.14所示:

27

××大 学毕 业 设 计 论 文

图4.14 评分教师主界面

评分教师单击开始阅卷标签选择考生和科目进行阅卷并根据参考答案进行打分,若考生没有作答则显示“该考生没参加考试”无法进行阅卷。阅卷界面如图4.15所示:

图4.15 评分教师阅卷界面 相关代码:

public String yuejuan() { List timuList=new ArrayList();

28

××大 学毕 业 设 计 论 文

}

String sql=\"from TJiaoyuan where shitiId=? and stuId=?\"; Object con[]={shitiId,stuId};

List jaoyuanList=jiaoyuanDAO.getHibernateTemplate().find(sql,con); for(int i=0;iMap request=(Map)ServletActionContext.getContext().get(\"request\"); request.put(\"timuList\", timuList); request.put(\"shitiId\", shitiId); request.put(\"stuId\", stuId); return ActionSupport.SUCCESS;

至此本次设计主要模块的功能与主要实现代码介绍完毕。

29

××大 学毕 业 设 计 论 文

5 系统功能测试

本系统要实现的功能有1,对三种身份的用户的管理即完成用户的添加与删除。2,对与教学内容的管理,主要包括对课程,题库,试卷的管理。3,帮助学生进行日常练习实现无纸化考试。4,评分老师在线评分等。根据上面介绍的功能,使用测试用例文档分别对系统进行测试。测试部分包括数据库的访问和更新测试;对学生成绩查询功能的测试和系统容错功能的测试。具体测试过程见以下几表。

表5.1 数据库的访问和更新测试用例

用例名称 用例ID 数据库的访问和更新 1 当修改管理员密码、添加学生、添加评用例描述 分老师添加试卷、添加试题等信息时。后台数据库是否有所更新。 管理员教师在后台添加一条信息,首先查看数据库中的数据是否有相应的变化,然测试方案 后看能否登入登录和前台中显示的信息是否会相应改变。 在添加学生模块中添加一条信息,数据如下:stu_xuehao: 输入数据 stu_realname: stu_sex: stu_age: login_name: login_pw:123 在添加的学生信息被提交后,打开预期结果 Navicat for MySQL,可以看到表中多了一行数据,其属性id、stu_xuehao、stu_realname、……的值分别为1、30

××大 学毕 业 设 计 论 文

108326235、、……说明管理员对数据库的访问和更新是成功的。使用此信息能成功登录。 表5.2 学生成绩查询模块测试

用例名称 用例ID 学生成绩查询功能的测试 1 学生做好习题后,评分老师阅卷完成用例描述 后,看是学生是否可以查看到自己的分数。 学生输入用户名和密码,然后查看自己测试方案 的分数,课程选综合知识。 数据1: 输入数据 数据2: 123 结果1:在查询结果显示页面中列出学预期结果 生参加的考试和老师的评分。

31

××大 学毕 业 设 计 论 文

表5.3 对系统容错功能的测试之对管理员修改密码的检测

对系统容错功能的测试之对管理员修用例名称 改密码的检测 用例ID 1 在系统设计时需要判定那些操作是合用例描述 法的而那些操作是不允许的。这个测试是检查管理员修改密码的容错功能。 管理员在修改密码时,如果新密码与确认密测试方案 码不一致的话,会给出提示密码不一致 输入数据 用户名:admin 新密码:1 确认密码:1 点击提交后,系统弹出提示框“修改成功!预期结果 “将信息添加进数据库中。用新密码可成功登录。

32

××大 学毕 业 设 计 论 文

6 总结

经过两个月的不懈努力终于实现了基于Java的在线考试系统。这次设计让我接触到了Java技术,同时也让我对有网络环境的软件设计有了深刻的认识,大大提高了我的编程水平将课本上的知识运用到实际。与老师的悉心指导是分不开的。本系统虽然能够实现基本的考试功能但还有很多不成熟的地方需要改进。例如自测部分只实现了单选题的自测功能,本系统不支持用户的注册一切使用权限交给后台管理员。因此只适合小规模的教育机构使用。在以后的学习中作者还要刻苦钻研争取完善此系统的不足之处,是这个设计更加人性化。

33

××大 学毕 业 设 计 论 文

致 谢

经过这段时间学习与努力本人的毕业设计已经基本完成了,作为没有项目开发经验的在校大学生,一定有一些考虑不周之处,如果没有××老师的指导,以及同学的支持和帮助,完成这个设计是几乎不可能的。 在此要衷心的感谢××老师在工作之余对我完成毕业设计的每个阶段的悉心指导。其次要感谢我的同学对我的技术帮助,尤其是JAVA的技术方面。还要感谢我的家人,我的母校给我提供良好的学习氛围。另外,感谢那些曾经教过我的每一位老师,是他们教会了我专业知识,没有他们就没有我的现在。谢谢大家!

34

××大 学毕 业 设 计 论 文

参 考 文 献

[1] 宋智军,邱仲潘 编著.《JSP从入门到精通》[M]. 北京:电子工业出版社,2012.7

[2] 卢翰,王国辉 编著.《JSP项目开发全程实录》[M]. 北京:清华大学出版社,2011.1

[3] 李兆锋,卜炟 编著.《JAVA WEB项目开发案例精粹》[M]. 北京:电子工业出版社,2010.6

[4] 李刚 编著《轻量级.J2EE企业应用实战》[M]. 北京:电子工业出版社,2007.4 [5] 张增科,吉吟东 编著.《计算机网络》[M]. 北京:清华大学出版社,2009.6 [6] 耿祥义,张跃平 编著.《JSP使用教程》[M]. 北京:清华大学出版社,2007.10 [7] 张增科,吉吟东 编著.《计算机网络》[M]. 北京:清华大学出版社,2009.6 [8] 石志国 编著.《JAVA精解案例教程》[M]. 北京:清华大学出版社,2009.8 [9] 周明德 编著.《微型计算机系统原理及应用》[M]. 北京:清华大学出版社,2007.1

[10] 任新见 编著.《Java动态网站快速开发实务》[M]. 北京:电子工业出版社,2007.1

35

××大 学毕 业 设 计 论 文

附录1 本设计所包含的其他数据表

表 附录1.1 t_fenshu分数表

ID 1 2 3 4 字段名称 fenshu_id shiti_id stu_id fenshu 字段类型 int int int int 字段长度 11 11 11 11 主键 主键 备注 分数号 试题号 学生号 分数

表 附录1.2 t_jiaoyuan交卷表

ID 1 2 3 4 5

字段名称 字段类型 字段长度 11 11 11 11 50 主键 主键 备注 交卷号 学生号 试卷号 题目号 答案号 jiaojuan_id int stu_id shiti_id timu_id timu_daan int int int varchar 表 附录1.3 t_kecheng课程表

ID 1 2 3 字段名称 kecheng_id kecheng_name del 字段类型 int varchar varchar 字段长度 11 50 50 主键 主键 备注 课程号 课程名 是否已删除

36

××大 学毕 业 设 计 论 文

表 附录1.4 t_shiti试题表

ID 1 2 3 4 5 6 字段名称 shiti_id shiti_name shiti_jieshao shiti_shijian shichang del 字段类型 int varchar varchar varchar varchar varchar 字段长度 11 50 500 255 500 50 主键 主键 备注 试卷号 试卷名 试卷介绍 创建时间 考试时间 是否删除 表 附录1.5 t_timu 题目表

ID 1 2 3 4 5 6 7 8 9 10 11

字段名称 timu_id timu_name timu_leixing 字段类型 int varchar varchar 字段长度 11 500 500 500 500 500 500 500 11 11 50 主键 主键 备注 题目号 题目 类型 选项A 选项B 选项C 选项D 答案 分值 课程号 是否已删除 timu_xuanxiangga varchar timu_xuanxianggb varchar timu_xuanxianggc varchar timu_xuanxianggd varchar timu_daan timu_fenshu kecheng_id del varchar int int varchar 37

××大 学毕 业 设 计 论 文

附录2 本设计所提到的代码

//评分教师管理

public String teaMana() { String sql=\"from TTea where del='no'\"; List teaList=teaDAO.getHibernateTemplate().find(sql); Map request=(Map)ServletActionContext.getContext().get(\"request\"); request.put(\"teaList\", teaList); return ActionSupport.SUCCESS;

}

//评分教师添加

public String teaAdd() { TTea tea=new TTea(); tea.setLoginName(loginName); tea.setLoginPw(loginPw); tea.setTeaRealname(teaRealname); tea.setTeaSex(teaSex); tea.setTeaAge(teaAge); tea.setDel(\"no\"); teaDAO.save(tea); this.setMessage(\"操作成功\"); this.setPath(\"teaMana.action\"); return \"succeed\";

}

//评分教师删除

public String teaDel() { TTea tea=teaDAO.findById(teaId); tea.setDel(\"yes\"); teaDAO.attachDirty(tea); this.setMessage(\"操作成功\"); this.setPath(\"teaMana.action\"); return \"succeed\";

38

}

××大 学毕 业 设 计 论 文

//考生管理

public String stuMana() { List stuList=stuDAO.getHibernateTemplate().find(\"from TStu where del='no'\"); Map request=(Map)ServletActionContext.getContext().get(\"request\"); request.put(\"stuList\", stuList); return ActionSupport.SUCCESS;

//考生添加

public String stuAdd() { TStu stu=new TStu(); stu.setStuXuehao(stuXuehao); stu.setStuRealname(stuRealname); stu.setStuSex(stuSex); stu.setStuAge(stuAge); stu.setLoginName(loginName); stu.setLoginPw(loginPw); stu.setDel(\"no\"); stuDAO.save(stu); this.setMessage(\"操作成功\"); this.setPath(\"stuMana.action\"); return \"succeed\";

//考生删除

public String stuDel() { TStu stu=stuDAO.findById(stuId); stu.setDel(\"yes\"); stuDAO.attachDirty(stu); this.setMessage(\"删除成功\"); this.setPath(\"stuMana.action\"); return \"succeed\";

}

}

}

39

因篇幅问题不能全部显示,请点此查看更多更全内容

Copyright © 2019- haog.cn 版权所有

违法及侵权请联系:TEL:199 1889 7713 E-MAIL:2724546146@qq.com

本站由北京市万商天勤律师事务所王兴未律师提供法律服务