基于Java的在线考试系统毕业设计论文.docx
存档日期: 存档编号: 本科生毕业设计(论文)论 文 题 目: 基于Java的在线考试系统 Java-Based Online Examination System姓 名: 系 别: 专 业: 年 级 、 学 号: 指 导 教 师: ××大学印制××大 学毕 业 设 计 论 文基于Java的在线考试系统摘 要:为了帮助学生更好地掌握所学的知识。本人设计了一套在线考试系统。 本系统所设计的用户有管理员教师,参加练习或考试的学生和对考试进行打分的评分老师这三种身份。本系统可以根据管理员教师的意愿进行科目,试题以及试卷的管理。本系统的开发模式为B/S模式。开发平台为MyEclipse8.5,所用的数据库是MySQL数据库,服务器是Tomcat6.0。所用到的主要开发语言是Java,HTMl,与JavaScript。本系统的主要特点是:操作容易,结构简单。学生利用本系统,能够更加及时的进行练习和考试。教师利用本系统可免去统计成绩,录入考试分数等繁琐的工作提高了工作效率。关键词:在线考试 B/S MyEclipse8.5 MySQL Tomcat6.0 JavaJava-Based Online Examination SystemAbstract: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 JavaI目 录1 绪论11.1引言11.2选题背景11.3国内外发展情况11.4系统开发方法22 系统开发相关技术与工具简介32.1 JSP技术简介32.2 JSP工作原理32.3 MYSQL数据库简介42.4 JDBC技术与系统数据库的连接42.5 NAVICAT FOR MYSQL简介62.6 WEB服务器与超文本标记语言63 系统分析及其基本功能73.1 可行性分析73.2 系统需要解决的主要问题73.3 系统基本功能83.4 系统总体结构设计84 系统主要模块详细设计104.1 系统数据结构设计104.2 系统登录模块的设计114.3 管理员教师模块的设计134.4 考生模块的设计234.5 评分教师模块的设计275 系统功能测试306 总结33致 谢34参 考 文 献35附录1 本设计所包含的其他数据表36附录2 本设计所提到的代码381 绪论1.1引言考试在教学中是必不可少的,可以检验学生对知识的掌握程度和学习能力的高低。对学生来讲,适当的测试压力有助于巩固所学的知识,训练基本技能,开发智力,发散思维,提升学生分析问题解决问题的能力。然而考试的形式有很多种除了我们传统的纸质习题外,我们也应该顺应时代的发展开发出一种更加方便快捷和容易操作的系统在线考试系统。这个设计不仅学生和老师的学习和工作带来了方便还能够节省教学资源,节约了传统考试所需纸张的问题也能为环保事业做出一些贡献。本设计需要对网络编程和相关数据库的技术有所了解。还需会使用一些相关的应用软件和开发工具。1.2选题背景新世纪的到来和科学技术的快速发展将我们带入了信息时代,在当今这个高速发展的时代里计算机日趋成为我们生产生活中必不可少的工具。然而对于学生来说计算机技术的发展将给我们的学习方式和教育方法带来翻天覆地的变化。因此计算机网络技术的发展对教学和考试的方式方法起到了导向性的作用。这些技术可以极大的推动教育的发展,创新教学模式推进教学改革。为教育的升级创造必要的条件。本设计主要为了探索一种基于计算机网络技术的教学模式。在本次设计中学生用户可以突破纸质学习资料的局限性使用计算机进行在线测试与考试,能够更加及时的巩固新知识从而增强学习效果提高教学的质量。1.3国内外发展情况网络技术的发展使得考试的形式发生了革命性的变化。因特网强大的计算能力与其开放性,分布性的特点将考试的工作变的方便而有效率,解放了部分人力和物力。因此基于网络的考试系统越来越受国内外教育机构的重视。在一些发达国家基于网络的教育已进入更加深入的阶段。教育机构将网络技术与课程的巧妙结合使得网络技术在教学中的作用更加明显也让学生们的学习变的轻松快乐。一些发达国家电脑已普及,远程教育的参加人数正日益递增。在中国,网络的教育刚刚兴起,还在摸索着前进。能够将计算机网络技术与教学结合很好的教育机构还比较少。我们平时在学校中接触最多的是基于小型局域网的教学教室。相比于有一些发达国家我国在网络教学方面相对落后,还处于较为初级的阶段。1.4系统开发方法目前 C/S模式(客户端/服务器模式)和B/S模式(浏览器/服务器模式)是应用软件运行的主要的模式。C/S模式的响应速度快处理事务的能力强但兼容性差开发成本较高。而B/S模式是伴随因特网迅速发展而兴起的一种技术,它的客户端是一个标准的浏览器,服务器端方面是WebServer ,然而B/S模式能被广泛应用是因为WebSever与应用服务器和数据库的紧密结合。B/S模式的主要优点就是方便扩充应用和升级维护。因此,本系统采用B/S模式进行设计。本次设计结合当前计算机的价格走势,应用JSP技术,基于B/S模式开发了在线考试系统。它使用简单、容易操作,界面友好,非常实用。虽然现阶段还有许多不成熟的地方,但是已具有用户管理、科目管理、试卷管理、试题管理、在线考试等功能。基本实现了真正的无纸化习题练习与考试的作用。能够满足任何经过授权的考生随时随地练习并迅速获得成绩。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页面执行后的输出结果。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语句,处理结果和关闭数据库连接这几步。下面进行详细介绍:对于数据库操作首先要加载所需数据库的驱动程序然而这些驱动程序的装载操作是非常简单的,只需要代码即可完成即调用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接口类型的对象来获取并处理该结果。当访问完整数据库后,应关闭数据库连接,并释放与链接有关的资源,用户创建的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语言的基本部分。这些元素总是成对出现的,每一对元素一般都有一个开始的标记(如<head>),也有一个结束的标记(如:</head>)。元素的标记要用一对尖括号括起来,并且结束的标记总是在开始的标记前加上一个斜杠。13 系统分析及其基本功能3.1 可行性分析可行性分析主要是在系统调查的基础上对要开发的系统进行全面的评估。从开的技术、开发经费、系统的实用性等方面对新系统进行分析和研究。考察新系统的开发是否有意义和可能性,来避免投资失败,并保证新系统的开发能够成功。可行性研究的目的就是以尽可能小的代价和尽量短的时间内来分析将要开发的项目会遇到困难并评估这些困难能否被克服。本设计的可行性分析包括如下方面:(1) 系统是否经济:作者认为本系统开发经费较小在经济上完全可以接受,而且本设计在投入使用以后可以节省一些人力物力,提高教学工作与学习的效率。所以本设计在经济上是可行的。(2) 本系统技术上是否可行:本次设计使用的是B/S开发模式运用JSP开发技术和 MySql数据库。如今这些技术的发展已经比较成熟因此能够大大的增加本设计开发成功的几率。可以说本次设计在技术上也是可行的。通过以上分析,本次设计已经有了明确的开发目标而且在技术和经济等方面都是切实可行的,投入少、见效快。因此在线考试系统完全可行。3.2 系统需要解决的主要问题首先,因为在线考试是面向特定的某些对象的,所以本次设计的用户角色会分为管理员教师,考生,以及评分教师这三种。不同角色的使用权限也会有所不同。本设计需要解决管理员教师对人员,课程,题目还有试卷的管理问题;考生能够进行自我测验,在线考试并且查询考试的成绩;评分教师完成对考生提交过的试卷进行评分等问题。3.3 系统基本功能一,管理员教师的功能:1,对管理员的管理:修改管理员的密码,录入新的管理员,删除已存在的管理员。2,管理学习的课程:能够决定在系统中应用的课程。 3,管理所有题目:在相应的课程下添加或删除题目。 4,出试卷:决定试卷中包含的试题,以及考试时间。 5,管理学生:录入能使用本系统的学生和删除过了期限的学生。 6,管理评分教师:录入有资格打分的教师,删除离职教师。 7,查看所有考试成绩:对本系统的所有考试成绩一览。二,考生的功能:1,单选题的自我检测:考生进行自测并快速得到答案。2,在线考试:参与在线考试。3,查看考试成绩:作答并交卷后查看老师给的评分。三,评分老师的功能:主要对已成功上交的试卷打分。除了实现上述功能以外,本设计还具有清爽、简洁的界面和稳定性强的特点。3.4 系统总体结构设计本设计是专门对于已授权的用户使用本系统进行在线考试的应用WEB程序具有开放性、便捷性和可变通性的特点。管理员教师可根据教学需要向添加课程修改和删除题库中的试题。考生们也可有秩序的进行考试和自我练习。为了使本系统运行的效率更加可靠,更有保障系统的服务器端要具备较高的软硬件配置,在客户端对配置的要求可以降低。本设计不仅可以在内部的局域网上流畅运行,也广泛适用因特网。在线考试系统各模块的结构图如下:图3.1 管理员系统结构图图3.2 考生系统结构图评分老师只有对已作答且成功提交的试卷评分的功能。4 系统主要模块详细设计分以下几个部分进行详细设计。4.1 系统数据结构设计 本系统采用的是MySql数据库,数据库的名称为db_exam,数据表的设计由Navicate for MySQL来完成。用户信息表格如下:表4.1 t_admin管理员老师信息表ID字段名称字段类型字段长度主键 备注1userIdInt12主键2userNamevarchar50用户名3userPwvarchar50密码表4.2 t_stu学生信息表ID字段名称字段类型字段长度主键备注1stu_idint12主键2stu_xuehaovarchar49学生编号3stu_realnamevarchar49真实姓名4stu_sexvarchar49性别5stu_agevarchar49年龄6login_namevarchar49登录名7login_pwvarchar49登录密码8delvarchar49是否被删除表4.3 t_tea评分教师信息表ID字段名称字段类型字段长度主键 备注1tea_idint12主键2tea_bianhaovarchar49教师编号3tea_realnamevarchar49真实姓名4tea_sexvarchar49性别5tea_agevarchar49年龄6login_namevarchar49登录名7login_pwvarchar49登录密码8delvarchar49是否被删除本设计还包括考试分数表,交卷情况表,录入课程表,考试试题表以及所有试题表,在这里不一一列出,详情见附录1。4.2 系统登录模块的设计登录模块界面展示如图4.1 图4.1 登陆界面用户可在此模块输入自己的登录名和密码,系统会验证用户所输入的登录名与密码,如果输入的登录名或密码有误或漏填,系统将提示用户输入的登陆名或密码不正确。除此之外还有角色的选择:管理员教师、评分老师、学生。如果选择的角色与登录名不符则系统报错登录失败需要重新登陆。用户登录的流程图如图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" 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 管理员教师模块界面在此模块中用户可以以管理员教师的身份使用此系统。用户能够查看系统的基本信息,可以修改管理员教师的密码也可以添加或删除管理员教师和评分教师以及考生。在课程方面可以添加需要的课程或删除已淘汰的课程。试题方面可以在题库中添加和删除试题。管理员教师可根据实际需要需要考试的课程添加创建试卷,在题库中选择需要的试题出试卷还可以在评分老师打分后查看考生的考试成绩。部分核心代码如下: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();%><b><%=osmb.getTotalPhysicalMemorySize()/1024/1024%></b>MB / <b><%=osmb.getFreePhysicalMemorySize() / 1024/1024 %></b>MB3.对管理员教师的添加与删除:图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。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");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所示。 图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");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 ti