毕业设计(论文)网络在线考试系统.doc
毕 业 设 计(论文)题 目:网络在线考试系统英文题目:Network Online Examination System学生姓名: 专 业:计算机网络技术班 级:指导老师: 东华理工大学国际教育学院二 零 壹 零 年 五 月摘 要随着计算机技术越来越深入而广泛的应用,无纸化考试实施在技术上已逐步成熟。无纸化考试系统是一个不断发展的新型学科,任何一个单位要生存要发展,要高效率地把内部考试有机地组织起来,就必须建立与自身特点相适应的考试系统。本次所开发的基于J2EE的网络在线考试系统,主要采用jsp和struts1,打破了原有的考试模式,利用现有的网络资源构架出一种新的考试平台。简化了原有考试中一系列复杂的操作,使得学生能够便捷的参加各种考试,不再受到任何时空、地域的限制。结合本文毕业设计的具体开发实践,较深入的剖析了网站的设计、开发与部署等整个流程,对以后的工作有了很好的指导和借鉴作用。论文结构由以下部分组成:首先,分析了在线考试系统的现状及发展趋势,探讨了在线考试系统的开发模式和实现技术;其次,从技术可行性、软件开发的概要设计、结构设计及详细设计的几大模块等方面进行了全面地介绍;最后,初步地完成了在线考试系统的开发。 关键字:J2EE;在线考试;jspAbstractWith more and more computer technology and extensive application of the technical implementation of paperless examinations has gradually matured. Paperless examination system is an evolving new discipline, any unit to survive is to develop high efficiency of the internal examination organized organically, it must establish its own characteristics compatible with the examination system.The second is the development of network-based J2EE online examination system, mainly jsp and struts1, breaking the original test model, using the framework of existing network resources, a new kind of test platform. Simplify a complex examination of the original operation, it allows students to participate in various examinations and convenient, is no longer any space-time, geographical boundaries. Combining examination of the design of specific development practices graduation, more in-depth analysis of the site's design, development and deployment of the entire process, for later the work has good guidance and reference.Paper structure consists of the following components: First, the analysis of the online examination system status and development trend of the online examination system development model and implementation techniques; Secondly, technical feasibility, develop the outline design software, structural design and detailed design several major modules such as a comprehensive introduction; Finally, the initial completion of the online examination system development.Keywords: J2EE; online exam; 目 录绪论11网络在线考试系统可行性分析21.1经济可行性分析21.2技术可行性分析21.3运行可行性22.网络在线考试需求分析32.1系统需求分析32.2系统功能需求33.开发技术基础43.1 JSP技术简介43.2 JAVA BEAN技术53.3 JDBC技术53.4 MVC设计模式63.5 struts1.x技术73.6 ajax技术74.网络在线考试系统总体设计84.1系统概要设计84.2系统结构设计94.3系统数据库设计105.网络在线考试系统详细设计与实现125.1数据库连接公用模块125.2 前台首页界面135.3 考生信息模块135.3.1 考生注册145.3.2 找回密码155.3.3修改个人资料165.4 在线考试模块175.4.1 在线考试175.4.2 我的错题本205.4.3 成绩查询215.5 后台首页界面215.5.1管理员信息管理225.5.2考试题目管理235.5.3批量添加试题255.5.4课程信息管理255.5.5套题信息管理265.5.6考生信息管理265.5.7考生成绩管理276测 试287结 论29致 谢30参考文献31绪论 在计算机技术、Internet技术迅猛发展形式的推动下,给传统的办学提供了新的模式。传统的考试时间长、效率低;同时人工批卷等主观因素也影响到考试的公正性。随着网络技术在教育领域的普及,应用现代信息技术的网络在线考试系统展现出了越来越多的优势,使教学朝着信息化、现代化的目标迈进。在教育领域中深层次的应用,正逐步实现传统教育教学思想与理念的重大变革,也创新了教育教学过程的很多方法与行为模式,网络在线考试系统正是这一背景下的产物,这种无纸化网络考试模式使考务管理突破时空限制,使学校管理者、教师和学生可以在任何时候、任何地点通过网络进行考试,从而提高考试工作效率。同时,网络在线考试系统的整个设计与开发流程,对提高软件技术专业学生综合运用所学的知识去解决实现问题具有重要的意义。网络在线考试系统已经成为教育技术发展与研究的方向。本课题的目标是通过在基于J2EE的开发环境中编写代码、用tomcat服务器进行项目的布署与运行等过程,使学生更加牢固的掌握专业知识并灵活运用,为以后从事WEB开发奠定了基础,并对以后的工作有了很好的指导和借鉴作用。1 网络在线考试系统可行性分析可行性分析的目的就是要用最小的代价在尽可能短的时间内确定问题是否能够解决。通过分析解决的利弊,来判定系统目标和规模是否现实,系统完成后所能带来的效益是否达到值得去投资开发系统的程度。网络在线考试系统的可行性包括以下几方面的内容。1.1经济可行性分析长期的组织考试是各个院校及时掌握学生学习成绩的有效方式,利用网络在线考试系统,一方面节省人力资源,降低考试成本;另一方面,在线考试系统能够快速的进行考试和评分,体现出考试的公正性。1.2技术可行性分析开发一个网络在线考试系统,涉及到的核心的技术问题就是如何实现在不刷新页面的情况下实现考试时间及剩余时间,并做到到达考试结束时自动提交试卷的功能。如果在Ajax技术出现之前要实现这些功能会比较麻烦,但现在通过Ajax技术可以轻松实现这些功能,这为网络在线考试系统开发提供了技术保障。1.3运行可行性分析本网络在线考试系统经过设计、开发、测试,具体要求如下:运行环境:Microsoft Windows XP所需浏览器:IE 6.0开发工具:MyEclipse 5.5.1 GA, Dreamweaver 8.0数据库:SQL Server 2000服务器: tomcat 6.0辅助工具:Adobe Photoshop CS2 网络在线考试系统需求分析2.1在线考试系统的需求分析许多学校或考试机构使用了网络在线考试系统来降低管理成本和减少人力物力的投入,同时,为考生提供更全面、更灵活的使考生希望对自己的学习情况进行客观、科学的评价;教务人员希望有效地改进现有的考试模式和考试效率。为了满足考生和教务人员的需求,网络在线考试系统应该包含在线考试、成绩查询等功能满足用户的需求。2.2在线考试系统的功能需求(1)考生模块可以实现以下几方面的内容:a、考生注册、修改个人资料及找回密码b、考生进入系统后可以进行在线考试c、考生查询自己及所在班级的各科目成绩d、我的错题本,记录你在考试中的错误试题(2)管理员模块可以实现以下几方面的内容:a、对考生的删除b、考试题目的添加与删除c、课程信息与套题的添加与删除c、管理员的添加d、考生成绩查询,支持模糊查询3 开发技术基础3.1 JSP技术简介JSP(JavaServer Pages)是一种基于Java的脚本技术。在JSP 的众多优点之中,其中之一是它能将 HTML 编码从 Web 页面的业务逻辑中有效地分离出来。用 JSP 访问可重用的组件,如 Servlet、JavaBean 和基于 Java 的 Web 应用程序。JSP 还支持在 Web 页面中直接嵌入 Java 代码。可用两种方法访问 JSP 文件:浏览器发送 JSP 文件请求、发送至 Servlet 的请求。 JSP 文件访问 Bean 或其它能将生成的动态内容发送到浏览器的组件。图2-1说明了该 JSP 访问模型。当 Web 服务器接收到一个 JSP 文件请求时,服务器将请求发送至 WebSphere应用服务器。WebSphere应用服务器 对 JSP 文件进行语法分析并生成 Java 源文件(被编译和执行为 Servlet)。Java 源文件的生成和编译仅在初次调用 Servlet 时发生,除非已经更新了原始的 JSP 文件。在这种情况下,WebSphere应用服务器将检测所做的更新,并在执行它之前重新生成和编译 Servlet。浏览器发送 JSP 文件请求如图3.1所示: 图3.1 浏览器发送JSP文件请求 发送至 Servlet 的请求生成动态内容,并调用 JSP 文件将内容发送到浏览器。图2-2说明了该访问模型。该访问模型使得将内容生成从内容显示中分离出来更为方便。WebSphere应用服务器 支持 HttpServiceRequest 对象和 HttpServiceResponse 对象的一套新方法。这些方法允许调用的 Servlet 将一个对象放入(通常是一个 Bean)请求对象中,并将该请求传递到另一个页面(通常是一个 JSP 文件)以供显示。调用的页面从请求对象中检索 Bean, 并用 JSP 来生成客户机端的 HTML。发送至 Servlet 的请求如图3.2所示:3.2 Java Bean技术JavaBean是描述Java的软件组件模型,有点类似于Microsoft的COM组件概念。在Java模型中,通过JavaBean可以无限扩充Java程序的功能,通过JavaBean的组合可以快速的生成新的应用程序。对于程序员来说,最好的一点就是JavaBean可以实现代码的重复利用,另外对于程序的易维护性等等也有很重大的意义。JavaBean通过Java虚拟机(Java Virtual Machine)可以得到正确的执行,运行JavaBean最小的需求是JDK1.1或者以上的版本。JavaBean传统的应用在于可视化的领域,如AWT下的应用。自从Jsp诞生后,JavaBean更多的应用在了非可视化领域,在服务器端应用方面表现出来了越来越强的生命力。使用JavaBean的原因程序中往往有重复使用的段落,JavaBean就是为了能够重复使用而设计的程序段落,而且这些段落并不只服务于某一个程序,而且每个JavaBean都具有特定功能,当需要这个功能的时候就可以调用相应的JavaBean。从这个意义上来讲,JavaBean大大简化了程序的设计过程,也方便了其他程序的重复使用。3.3 JDBC技术JDBC API用于连接Java应用程序与各种关系数据库。这使得人们在建立客户/服务器应用程序时,通常把Java作为编程语言,把任何一种浏览器作为应用程序的友好界面,把Internet或Intranet作为网络主干,把有关的数据库作为数据库后端。以下是使用JDBC的优缺点。 优点如下: JDBC API与ODBC十分相似,有利于用户理解。 JDBC使得编程人员从复杂的驱动器调用命令和函数中解脱出来,可以致力于应用程序中的关键地方。 JDBC支持不同的关系数据库,使得程序的可移植性大大加强。 用户可以使用JDBC-ODBC桥驱动器将JDBC函数调用转换为ODBC。 JDBC API是面向对象的,可以让用户把常用的方法封装为一个类,备后用。 缺点如下: 使用JDBC,访问数据记录的速度会受到一定程度的影响。JDBC结构中包含了不同厂家的产品,这就给更改数据源带来了很大的麻烦。3.4 MVC设计模式MVC是Model-View-Controller的简称,它是一种设计模式,它把应用程序分成三个核心模块:模型、视图、控制器,它们各自处理自己的任务。视图是用户看到并与之交互的界面,作用包括向用户显示相关的数据、接受用户的输入、向模型查询业务状态、接受模型发出的数据更新事件,从而对用户界面进行同步更新。模型表示业务数据和业务逻辑,是应用程序的主体部分。一个模型能为多个视图提供数据,因此提高了代码的可重用性。控制器接受用户的输入并调用模型和视图去完成用户的需求。当Web用户单击Web页面中的递交按钮来发送HTML表单时,控制器本身不输出任何东西和做任何处理。控制器接收请求并决定调用哪个模型组件去处理请求,然后决定调用哪个视图来显示模型处理返回的数据。MVC的优点表现在如下几个方面:首先,最重要的一点是多个视图能共享一个模型。同一个模型可以被不同的视图重用,大大提高了代码的可重用性。由于MVC的三个模块相互独立,改变其中一个不会影响其他两个,所以依据这种设计思想能构造良好的松偶合的构件。此外,控制器提高了应用程序的灵活性和可配置性。控制器可以用来联接不同的模型和视图去完成用户的需求,这样控制器可以为构造应用程序提供强有力的手段。MVC处理过程的结构图,见图3-3。图3-3 MVC处理过程3.5 struts1.x技术Struts 是目前Java Web MVC框架中不争的王者。Struts由一组相互协作的类(组件)、Serlvet以及jsp tag lib组成。由于Struts 实质上就是在JSP Model2的基础上实现的一个MVC框架,所以基于struts构架的web应用程序基本上符合JSP Model2即MVC的设计标准。其中的模型是JavaBean,控制器是ActionServlet、Action,视图是JSP、Struts客户化标签。Struts 控制器组件主要包括:充当Struts框架的中央控制器的ActionServlet组件、充当每个子应用模块的请求处理器的RequestProcessor组件、负责处理一项具体的业务的Action组件。其工作流程如图3-4。图3-4 struts1工作流程Struts 的另一特点是使用ActionForm Bean,ActionForm Bean也是一种JavaBean,除了具有一些JavaBean的常规方法,还包含一些特殊的方法,用于验证HTML表单数据以及将其属性重新设置为默认值。Struts框架利用ActionForm Bean来进行View组件和Controller组件之间表单数据的传递。JSP文件使用Struts标签读取修改后的ActionForm Bean的信息,重新设置HTML表单。3.6 ajax技术Ajax是Asynchronous JavaScript and XML的缩写,意思是异步的JavaScript与XML中。Ajax并不是一门新的语言或技术,它是JavaScript、XML、CSS、DOM等多种已有技术的组合,它可以实现客户端的异步请求操作。这样可以实现在不需要刷新页面的情况下与服务器进行通信的效果,从而减少了用户的等待时间。与传统的Web应用不同,Ajax在用户与服务器之间引入了一个中间媒介(Ajax 引擎),从而消除了网络交互过程中的处理-等待-处理-等待的缺点。使用Ajax的优点具体表现在以下几方面:减轻服务器的负担。Ajax的原则是“按需求获取数据”,这可以最大程度地减少冗余请求和响应对服务器造成的负担。可以把一部分以前由服务器负担的工作转移到客户端,利用客户端闲置的资源进行处理,减轻服务器和带宽的负担,节约空间和成本。无刷新更新页面,从而使用户不用再像以前一样在服务器处理数据时,只能在死板的白屏前面焦急的等待。Ajax使用XMLHttpRequest对象发送请求并得到服务器响应,在不需要重新载入整个页面的情况下,就可以通过DOM及时将更新的内容显示在页面上。可以调用XML等外部数据,进一步促进页面显示和数据的分离。基于标准化的并被广泛支持的技术,不需要下载插件或者小程序4 网络在线考试系统总体设计4.1 在线考试系统的概要设计本考试系统的开发主要包括:考试系统的总体结构如图4-1所示:网络在线考试系统的前台考生注册找回密码在线考试我的错题本修改个人资料成绩查询退出系统考试规则选择课程准备考试开始考试自动阅卷显示成绩个人成绩班级成绩网络在线考试系统的后台管理员信息考生信息管理考生成绩查询我的错题本课程信息管理套题信息管理批量添加试题退出后台管理图4.1 综合系统框架图4.2 在线考试系统的结构设计服务器响应客户端的工作过程,如图4.2所示:本系统属于跨平台的多层Web应用程序。在开发过程中采用了Java的跨平台解决方案作为程序的整体开发框架。从整体上采用了B/S结构,分成三层,即:视图层、服务器层、数据库层。其中数据库层采用了中型SQL数据库服务器SQL2000,检索速度快是它最大的优势,以完成对数据的存储和维护。在服务器层中采用了Java中的JavaBean技术作为中间层开发手段和strut、JSP技术用以完成对Java服务器页面的调用。在视图层中采用了Ajax、JavaScript等技术来实现复杂的动态界面展示。4.3 在线考试系统的数据库设计根据用户角色和系统实现的功能,本系统数据库设计了一个online_exam数据库。 采用的数据库是Microsoft SQL SERVER 2000,包含如下几个表文件:tb_StuResult表:用于实现对学生成绩的查询。tb_StuResult表的结构,如表1所示:表1 tb_StuResult的结构字段名称类型是否为空长度缺省值主键说明idbigintNo8是Id号(自动增长)stuIdvercharNo16考生idwhichLessonvarcharNo60选择的课程resSingleintNo4单选题分数resMoreintNo4多选题分数resTotalintYes4总分数joinTimedatetimeNo8getdate()添加时间tb_Student表:用于实现对学生信息的添加、修改和删除。tb_Student表的结构,如表2所示:表2 tb_Student的结构字段名称类型可否为空长度缺省值主键说明idvercharNo16是考生学号namevercharNo20考生姓名pwdvarcharNo20考生密码 sexvarcharNo2考生性别joinTimedatetimeNo8getdate()添加时间questionvarcharNo50提示问题answervarcharNo50问题答案professionvarcharYes30专业cardNovarcharNo18身份证号tb_manager表:用于管理员的管理。tb_manager表的结构,如表3所示:表3 tb_manager的结构字段名称类型是否为空长度缺省值主键说明IDbigintNo8是管理员id(自动增长)namevarcharNo30管理员用户名PWDvarcharNo30管理员密码tb_TaoTi表:用于实现对套题的添加、修改和删除操作。tb_TaoTi表的结构,如表4所示:表4 tb_TaoTi的结构字段名称类型可否为空长度缺省值主键说明IDbigintNo8是ID号(自动增长)NamevercharNo50套题名称LessonIDbigintNo8所属课程JoinTimedatetimeNo8getdate()添加时间tb_Lesson表:用于实现对课程信息的添加、修改和删除操作。tb_Lesson表的结构,如表5所示:表5 tb_Lesson的结构字段名称类型可否为空长度缺省值主键说明IDbigintNo8是ID号(自动增长)NamevercharNo60课程名称JoinTimedatetimeNo8getdate()添加时间tb_CuoTi表:用于实现对错题信息的添加操作。tb_CuoTi表的结构,如表6所示:表6 tb_CuoTi的结构字段名称类型可否为空长度缺省值主键说明idbigintNo8是问题Id(自动增长)subjectvarcharNo50试题answervarcharNo10答案notevarcharYes50备注stuIdvarcharNo16考生IDtb_Questions表:用于实现对试题的添加、修改和删除操作。tb_Questions表的结构,如表7所示:表7 tb_Questions的结构字段名称类型可否为空长度缺省值主键说明idbigintNo8是问题Id(自动增长)subjectvarcharNo50问题typecharNo6类型joinTimedatetimeNo8getdate()添加时间lessonIdintNo4所属课程IDtaoTiIdbigintNo8所属套题IDoptionAvarcharNo50选项AoptionBvarcharNo50选项BoptionCvarcharNo50选项CoptionDvarcharNo50选项DanswervarcharNo10答案notevarcharYes50备注5. 在线考试系统的详细设计与实现5.1 数据库连接公用模块在本考试系统中,我把数据库参数写入一个名为connDB.properies的配置文件中,这样在程序运行时如果环境发生了变化,可以方便地修改数据库配置。connDB.properies内容如下:DB_CLASS_NAME=com.microsoft.jdbc.sqlserver.SQLServerDriverDB_URL=jdbc:microsoft:sqlserver:/localhost:1433;DatabaseName=online_examDB_USER=saDB_PWD=通过输入输出流来加载资源文件获取数据库连接的信息,方便移植。实现代码如下:InputStream in = getClass().getResourceAsStream(propFileName);prop.load(in); / 通过输入流对象加载Properties文件dbClassName = prop.getProperty("DB_CLASS_NAME");dbUrl = prop.getProperty("DB_URL", dbUrl);dbUser = prop.getProperty("DB_USER", dbUser);dbPwd = prop.getProperty("DB_PWD", dbPwd);5.2 前台首页界面考生通过“考生登录”模块的验证后,可以登录到网络在线考试系统的前台首页,主要用于实现前台功能导航,在该页面中只包括在线考试、成绩查询、我的错题本、修改个人资料和退出系统等导航链接。图5-1 前台首页界面5.3 考生信息模块 考生信息模块主要包括考生注册、考生登录、修改个人资料以及找回密码等4个功能。考生首先要注册为网站用户,然后才被授权登录网站进行一系列操作的权限;登录后考生还可以修改个人的注册资料。如果考生忘记了登录密码,还可以通过网站提供的找回密码功能快速找回密码。考生信息模块的系统流程图如图5-2所示。5.3.1 考生注册模块运行网络在线考试系统,首先进入的是考生登录页面,在该页面中单击“注册”按钮,即可进入考生注册页面,在该页面中输入个人资料及密码,如图5-3所示,单击“保存”按钮,系统将根据您输入的身份证号进行验证是否已经注册,如果没有注册,将弹出如图5-4所示的提示框,否则将进入到如图5-5所示的页面。并且对各个域进行了javascipt验证,如考生姓名只能输入中文,身份证号只能是15位或18位等。图5-3 考生登录页面的运行结果 图5-4 注册成功对话框 图5-5 注册失败对相关代码:String sql1="SELECT * FROM tb_Student WHERE cardNo='"+s.getCardNo()+"'"ResultSet rs = conn.executeQuery(sql1);/执行SQL查询语句String sql = ""String flag = "miss"/用于记录返回信息的变量,默认为注册失败try if (rs.next() flag="re"/表示考生信息已经注册 else sql = "INSERT INTO tb_Student(ID,name,pwd,sex,question,answer,profession,cardNo) values('" +s.getID()+ "','" +s.getName()+"','"+s.getPwd()+"','"+s.getSex()+"','"+s.getQuestion()+ "','"+s.getAnswer()+"','"+s.getProfession()+"','"+s.getCardNo()+"')"int ret= conn.executeUpdate(sql);/保存考生注册信息 if(ret=0) flag="miss"/表示考生注册失败 else flag="恭喜您,注册成功!r请记住您的信息" conn.close(); catch (Exception e) flag="miss" System.out.println("添加考生信息时的错误信息:"+e.getMessage(); 5.3.2 找回密码模块运行网络在线考试系统时,首先进入的是考生登录页面,在页面中单击“找回密码”按钮,即可进入到找回密码第一步页面,用于输入准考证号,在该页面中输入准考证号,如图5-6所示。单击“下一步”按钮,即进入到找回密码第二步页面,用于输入密码提示问题答案,在该页面的“密码提示问题”文本框中将显示提示问题,在“密码提示答案”文本框中输入密码提示问题的答案,如图5-7所示。单击“下一步”按钮,进入到找回密码第三步页面,用于显示找回的密码,如图5-8所示。 图5-6 找回密码第一步 图5-7 找回密码第二步 图5-8 找回密码第三步相关代码:String sql="SELECT * FROM tb_Student WHERE ID='"+s.getID()+"'"ResultSet rs = conn.executeQuery(sql);try if (rs.next() s.setID(rs.getString(1); s.setQuestion(rs.getString(6); else s.setID("");catch(Exception e) System.out.println("找回密码(第一步)出现的错误信息:"+e.getMessage();5.3.3 修改个人资料模块当通过自己的学号和密码登录网站系统后,可以单击“修改个人资料”链接即可。如图5-9所示。图5-9 修改个人资料相关代码:String sql="UPDATE tb_Student SET pwd='"+s.getPwd()+"',sex='"+s.getSex()+"',question='"+s.getQuestion()+"',answer='"+s.getAnswer()+"',profession='"+s.getProfession()+"' where ID='"+s.getID()+"'"int ret=conn.executeUpdate(sql);System.out.println("修改考生资料时的SQL:"+sql);conn.close();return ret;5.4 在线考试模块在线考试模块的主要功能是允许考生在网站上针对指定的课程进行考试。在该模块中,考生首先需要阅读考试规则,在同意所列出的考试规则后,才能选择考试课程,在选择考试课程后,系统将承受机抽取试题,然后进入考试页面进行答题,当考生提交试卷或者到达考试结束时间时,系统将自动对考生提交的试卷进行评分,并给出最终考试成绩。在线考试模块的系统流程如图5-10所示。5.4.1 在线考试模块设计 选择考试课程的实现考生登录到网络在线考试的前台首页后,单击“在线考试”链接,将进入到考试规则页面,在页面中单击“同意”按钮,即可进入到选择考试课程页面,在该页面中将以下拉列表框的形式显示需要参加考试的课程,如图5-11所示。如果没有需要考试的课程,系统将给出提示对话框,并返回网络在线考试的前台首页。图5-11 选择考试课程的运行结果相关代码:List lessonList = new ArrayList();LessonForm lessonForm1 = null;String sql = "SELECT * FROM tb_Lesson WHERE ID in(SELECT distinct lessonID FROM "+ "(SELECT lessonId,taoTiId FROM tb_Questions GROUP BY taoTiId,lessonId,type)" + " as lessonTaoTi GROUP BY lessonId,taoTiId HAVING COUNT(taoTiId) >1) AND"+ " Name not in (SELECT distinct whichLesson FROM tb_StuResult WHERE stuId='"+ studentID + "')"ResultSet rs = conn.executeQuery(sql);try while (rs.next() lessonForm1 = new LessonForm();lessonForm1.setID(rs.getInt(1);lessonForm1.setName(rs.getString(2);lessonList.add(lessonForm1); catch (Exception ex) return l