网上考试系统毕业论文1(最终版)

更新时间:2023-10-02 06:17:01 阅读量: 综合文库 文档下载

说明:文章内容仅供预览,部分内容可能不全。下载后的文档,内容与下面显示的完全一致。下载之前请确认下面内容是否您想要的,是否完整无缺。

本科毕业设计论文

题目:基于B/S的网上考试系统的设计

与实现

院、 系: 计算机科学与工程学院 学科专业: 软件工程 学 生: 黄 飞 学 号: 080606108 指导教师: 张永强

2012年 6月

本科毕业设计论文

题目:基于B/S的网上考试系统的设计

与实现

院、 系: 计算机科学与工程学院 学科专业: 软件工程 学 生: 黄 飞 学 号: 080606108 指导教师: 张永强

2012年 6月

西安工业大学毕业设计(论文)任务书

院(系)计算机学院 专业 计算机科学与技术 班 080606 姓名 黄飞 学号 080606108 1.毕业设计(论文)题目: 基于B/S架构的网上考试系统 2.题目背景和意义:随着计算机技术、网络技术迅速发展和高校校园网功能的日益完善,很多高校建立了基于校园网的网络信息管理平台,为提高教学管理水平提供了先进的管理手段。目前,基于网络的在线考试系统己经成为现代考试方式的有力补充和发展。相对于传统的笔试,网络在线考试不仅减轻了在组织考试、评卷、成绩统计等方面所花费的人力和物力,并且突破了时间与空间的限制,不仅节省了资源,而且提高了评分的客观性、公正性和准确度,大大改善了考试工作的效率。

3.设计(论文)的主要内容(理工科含技术指标): (1)数据库表的设计、类的设计、UML图、ER图;

(2)JSP技术、数据库技术、系统分析、系统设计; (3)功能模块的关系; (4)实现效果截图; 4.设计的基本要求及进度安排(含起始时间、设计地点): 地点:西安工业大学 1) 基于Window平台Java技术开发; 2) 开发环境: MyEclipse 3) 数 据 库: Oracle10g 4) 时间:进度按照学校统一要求,完成开题报告,中期检查(相关英文翻译一篇,汉字3000字),程序开发和论文撰写,参加毕业答辩。 5.毕业设计(论文)的工作量要求 毕业论文字数1.5万以上

*

① 实验(时数)或实习(天数): 上机实验600学时以上

*

② 图纸(幅面和张数): ③ 其他要求: 参考文献篇数:15篇以上

指导教师签名: 年 月 日

学生签名: 年 月 日 系(教研室)主任审批: 年 月 日 说明:1本表一式二份,一份由学生装订入附件册,一份教师自留。

2 带*项可根据学科特点选填。

毕I-2

基于B/S的网上考试系统

摘 要

随着信息技术的广泛使用,网络技术逐渐渗入社会生活各个层面,互联网在国际上得到了迅猛的发展,基于互联网的各种应用也日益受到人们的重视。B/S结构的考试系统正是在这种形势下应运而生的。B/S结构的在线考试系统与传统的考试方式相比,网上考试对教学质量有很大的提高,实现教考分离,大范围地实现教学资源共享,对教学有极大的促进作用。B/S结构的在线考试系统可以动态地管理各种考试信息,自动组卷,考试结束后计算机在一定程度上自动阅卷与判分,几乎屏蔽了所有人工直接干预考试活动的可能性,不但能够节约大量的时间、人力、物力与财力,而且还可以大幅度提高考试成绩的客观性和公正性。

本论文采用软件工程、网络编程、网页制作、数据库等原理技术,设计了一个在线考试的网上考试系统。系统使用方便、操作简单,具有试卷添加、题目添加、成绩查询、在线考试等重要功能,该系统考试时考生进入考试界面,选择相应的科目和试卷进行考试。在考试过程中,考生不能刷新,且必须做完全部的考试题才可以交卷。考完后对客观题的自动评分、存档。教师登录后进入教师管理界面,添加和修改题目和试卷进行成绩查询。管理员进入管理员界面,管理员可以添加试卷,添加题目,成绩查询,添加学生,老师,科目等功能。本文提出了在线考试系统的设计方案,重点讨论了系统的功能结构、系统的设计方法和系统的实现等关键技术。

关键词:在线考试;用户管理,B/S

I

BASED ON B/S ONLINE EXAMINRALN SYSTEM

ABSTRACT

As information technology is widely used, network technology gradually infiltrated all aspects of social life, Internet gains rapid development in the international arena. Various applications based on internet are increasingly attracting people’s attention. The examination system in form of B/S structure emerged under such a situation. Compared with the traditional methods of examination, the quality of online examination system with B/S structure is greatly improved. The system realizes the separation of teaching and testing, and makes sharing teaching resources on large scale come true. Meantime, it can save a lot of time, human resources, material and financial resources. So, it can greatly improve the objectivity and impartiality of the examination results significantly.

In this paper, I use software engineering, network programming, web page design, database technology and so on, then I give a presentation of online examination system with powerful function. The system is divided into three modules, named administrators module, teachers module, students module. The paper also discusses some key technologies, for example, the structure of the system function, the method of designing and the implementation of system.

Keywords: On-line test; user management; B/S

II

西安工业大学毕业设计(论文) 端的浏览器。Java Servlet是JSP的技术基础,而且大型的Web应用程序的开发需要Java Servlet和JSP配合才能完成。JSP具备了Java技术的简单易用,完全的面向对象,具有平台无关性且安全可靠,主要面向因特网的所有特点。

自JSP推出后,众多大公司都支持JSP技术的服务器,如IBM、Oracle、Bea公司等,所以JSP迅速成为商业应用的服务器端语言。

JSP可用一种简单易懂的等式表示为:HTML+Java=JSP。 Jsp的优势:

a.一次编写,到处运行。除了系统之外,代码不用做任何更改。

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

c.强大的可伸缩性。从只有一个小的Jar文件就可以运行Servlet/JSP,到由多台服务器进行集群和负载均衡,到多台Application进行事务处理,消息处理,一台服务器到无数台服务器,Java显示了一个巨大的生命力。

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

e.支持服务器端组件。web应用需要强大的服务器端组件来支持,开发人员需要利用其他工具设计实现复杂功能的组件供web页面调用,以增强系统性能。JSP可以使用成熟的JAVA BEANS 组件来实现复杂商务功能。 2.2.2 JavaScript 技术介绍

Javascript是一种由Netscape的LiveScript发展而来的原型化继承的面向对象的动态类型的区分大小写的客户端脚本语言,主要目的是为了解决服务器端语言,比如Perl,遗留的速度问题,为客户提供更流畅的浏览效果。当时服务端需要对数据进行验证,由于网络速度相当缓慢,只有28.8kbps,验证步骤浪费的时间太多。于是Netscape的浏览器Navigator加入了Javascript,提供了数据验证的基本功能。本程序中JS主要实现页面特效。 2.2.3 Struts(MVC) 技术介绍

struts是开源软件。使用Struts的目的是为了帮助我们减少在运用MVC设计模型来开发Web应用的时间。如果我们想混合使用Servlets和JSP的优点来建立可扩展的应用,struts是一个不错的选择。

Struts最早是作为Apache Jakarta项目的组成部分,项目的创立者希望通过对该项目的研究,改进和提高JavaServer Pages 、Servlet、标签库以及面向对象的技术水准。

早期Smalltalk 程序语言便采用了MVC(Model-View -Controller) 模式( Patterns ) 以增加程序代码弹性,MVC模式将程序代码整理切割为三部分,

4

西安工业大学毕业设计(论文) Model 部分是业务与应用领域( Business domain) 相关逻辑、管理状态之对象,Controller 部分接收来自View 所输入的资料并与Model 部分互动,是业务流程控制( Flow Control) 之处,View 部分则负责展现资料、接收使用者输入资料。在Java 应用中,JFC/Swing、AWT、JSP 皆是可用作View 的技术规格,而JavaBean 与Enterprise JavaBean 规格则可用于Model 程序代码,一旦应用程序以MVC 模式加以适当的分割,Model 部分程序代码可在不同使用者接口外观的应用程序中重复使用。

随着JSP 与Servlet 技术大量应用于以Web 为基础的应用程序,Java 开发人员群体认为应以较佳的模式以提升Web 应用程序的可维护性与重复使用性。早期JSP 规格书中曾列举两种可行之JSP 应用架构,分别为Model1 与Model

在Model 1 架构中,JSP 直接处理Web 浏览器送来的请求( Request ),并辅以JavaBean 处理应用相关逻辑。Model 1 架构单纯编写比较容易,但在Model 1 中JSP 可能同时肩负View 与Controller 角色,两类程序代码有可能混杂而不易维护。而Model 2 中将Servlet 纳入架构中扮演前端Controller 角色,将Web 浏览器送出的请求集中送至Servlet ,Servlet 可集中管理使用者登入、权限控制、多国语言转换等前置处理,再视需求转向给对应的JSP 处理。Model 2 中采用了较佳的MVC 模式,但增加了编写复杂度。

MVC即Model-View-Controller的缩写,是一种常用的设计模式。MVC 减弱了业务逻辑接口和数据接口之间的耦合,以及让视图层更富于变化。Struts 是MVC的一种实现,它将 Servlet和 JSP 标记(属于 J2EE 规范)用作实现的一部分。Struts继承了MVC的各项特性,并根据J2EE的特点,做了相应的变化与扩展。MVC结构如图2.1所示:

图2.1 MVC结构图

5

西安工业大学毕业设计(论文) Struts对Model,View和Controller都提供了对应的组件。

在上图中,ActionServlet,这个类是Struts的核心控制器,负责拦截来自用户的请求。Action,这个类通常由用户提供,该控制器负责接收来自ActionServlet的请求,并根据该请求调用模型的业务逻辑方法处理请求,并将处理结果返回给JSP页面显示。

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页面即为视图),由Servle确定哪个业务逻辑适用,应该用哪个JSP页面相应结果(Servlet就是控制器)。 2.2.4 tamcat 服务器介绍

Tomcat是Apache软件基金会(Apache Software Foundation)的Jakarta 项目中的一个核心项目,由Apache、Sun 和其他一些公司及个人共同开发而成。由于有了Sun 的参与和支持,最新的Servlet 和JSP 规范总是能在Tomcat 中得到体现。为Tomcat 技术先进、性能稳定,而且免费,因而深受Java 爱好者的喜爱并得到了部分软件开发商的认可,成为目前比较流行的Web 应用服务器。

Tomcat 很受广大程序员的喜欢,因为它运行时占用的系统资源小,扩展性好,支持负载平衡与邮件服务等开发应用系统常用的功能;而且它还在不断的改进和完善中,任何一个感兴趣的程序员都可以更改它或在其中加入新的功能。

Tomcat 是一个轻量级应用服务器,在中小型系统和并发访问用户不是很多的场合下被普遍使用,是开发和调试JSP 程序的首选。对于一个初学者来说,

6

西安工业大学毕业设计(论文) 可以这样认为,当在一台机器上配置好Apache 服务器,可利用它响应对HTML页面的访问请求。实际上Tomcat 部分是Apache 服务器的扩展,但它是独立运行的,所以当你运行tomcat 时,它实际上作为一个与Apache 独立的进程单独运行的。

2.2.5 Oracle10g技术介绍

Oracle 是以高级结构化查询语言(SQL)为基础的大型关系数据库,通俗地讲它是用方便逻辑管理的语言操纵大量有规律数据的集合。是目前最流行的客户/服务器(CLIENT/SERVER)体系结构的数据库之一。其特点:

a、CLE7.X以来引入了共享SQL和多线索服务器体系结构。这减少了ORACLE的资源占用,并增强了ORACLE的能力,使之在低档软硬件平台上用较少的资源就可以支持更多的用户,而在高档平台上可以支持成百上千用户。 b、提供了基于角色(ROLE)分工的安全保密管理。在数据库管理功能、完整性检查、安全性、一致性方面都有良好的表现。 c、支持大量多媒体数据,如二进制图形、声音、动画以及多维数据结构等。 d、提供了与第三代高级语言的接口软件PRO*系列,能在C,C++等主语言中嵌入SQL语句及过程化(PL/SQL)语句,对数据库中的数据进行操纵。加上它有许多优秀的前台开发工具如 POWER BUILD、SQL*FORMS、VISIA BASIC 等,可以快速开发生成基于客户端PC 平台的应用程序,并具有良好的移植性。 e、提供了新的分布式数据库能力。可通过网络较方便地读写远端数据库里的数据,并有对称复制的技术。 2.2.6 B/S介绍

伴随着Internet的迅速发展,计算机技术正在由基于C/S(client/ Server)模式的应用系统转变为基于B/S模式的应用系统。

过去,网络软件的开发都采用C/S(client)模式,在这种模式下,主要的业务逻辑都集中于客户端程序,因此,必然导致以下问题:

系统安装、调试、维护和升级困难。由于客户端的硬件配置可能存在差异,软件环能各不相同,因此,在安装时,必须对每一个客户端分别进行配置,同样,在软件升级时也要对客户端分别处理。

在整个系统中,业务逻辑和用户界面都集中到了客户端,必然会增加安全隐患。

B/S模式带来了巨大的好处:

开发成本及维护成本降低。由于B/S架构管理软件只安装在服务器端(Server)上,即应用程序在部署、升级、维护时,只需要在服务器端进行配置就可以了,网络管理人员只需要管理服务器就行了,用户界面主要事务逻辑在服务器(Server)端完全通过WWW浏览器实现,极少部分事务逻辑在前端(Browser)实现,所有的客户端只有浏览器,网络管理人员只需要做硬件维护。

7

西安工业大学毕业设计(论文) 良好的安全性能,防火墙技术可以保证后台数据库的安全性。所有的配置工作都集中在服务器端且所有客户端请求都是通过DBMS来访问数据库,从而大大减少了数据直接暴露的风险。 2.2.7 JDBC技术介绍

JDBC(Java DataBase Connectivity):

JDBC是为在Java Applet和应用程序中访问关系数据库而设计的API类。 面向应用程序开发人员的API Java.sql.*,数据库驱动程序开发人员的API JDBC Driver API ,JDBC独立于平台和数据库。在JDBC规范中,成功地提供了SQL数据库访问的Java方法。

JDBC的主要的类: Java.sql.DriverManager ,加载不同的JDBC驱动程序并且为创建的新的数据库连接提供支持,Java.sql.Connection 完成对某一指定数据库的连接,

Java.sql.Statement 执行SQL语句,Java.sql.Result SQL语句执行后的数据库结果集。通过JDBC实现数据库查找,插入操作。确定JDBC驱动方式,此处设为JDBC-ODBC。通过Connection类设置数据库连接。数据库连接上创建

Statement对象。通过executeQuery函数执行查询语句,并返回结果集。通过结果集操作函数对结果集进行操作。

8

3网上考试系统需求分析 3网上考试系统需求分析

3.1现状分析

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

编辑考题

印刷大量试卷 安排考场,时间,监考人员

学生集体考试

图3.1 传统考试模式

阅卷,统计成绩

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

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

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

考场的安排:监考人员的培训与管理。对于大规模的考试,尤其是到了考试密集期(如期末,期中)。诸多学科的考试都要陆续开始的时候,对于教室资源和教师数量相对紧张的学校,如何安排考场,调配监考人员,是一件相对繁琐而又复杂的事情。

9

西安工业大学毕业设计(论文) 3.2可行性分析

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

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

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

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

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

3.3功能需求概括

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

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

权限管理:系统需要经过有效的身份验证可以登录。用户的身份不同,使用的系统资源也不同。考生只可以参加在线考试;普通教师可以在线制作试卷,成绩查询、添加试题等。管理员可添加学生、教师、题目信息、题目难度、查询修改管理员信息及查询考生成绩。

在线考试功能:考生输入学号密码登陆系统后,选择对应的试卷可进行考试。答题中,系统将自动对客观题进行评分。

在线制作试卷:教师、管理员可在线制作试卷,可设定试题的类型、分值。

10

西安工业大学毕业设计(论文) 考生管理功能:可注册新增学生用户,同时查看考生及班级考生的信息。 考生成绩查询功能:提供考生各科目成绩的详细查询。

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

3.4 总体设计思想概述

本系统是基于B/S架构下的多层结构应用系统。B/S(Browser/Server)结

构即浏览器和服务器结构。它是随着Internet技术的兴起,对C/S结构的一种变化或者改进的结构。在这种结构下,用户工作界面是通过WWW浏览器来实现,极少部分事务逻辑在前端(Browser)实现,但是主要事务逻辑在服务器端(Server)实现,形成所谓三层3-tier结构。这样就大大简化了用户端电脑载荷,减轻了系统维护与升级的成本和工作量,降低了用户的总体成本(TCO)。

在软件体系架构设计中,分层式结构是最常见,也是最重要的一种结构。推荐的分层式结构一般分为三层,从下至上分别为:数据访问(持久)层、业务逻辑层(或称为领域层)、表示层。

总的来说,采用分层结构的设计思想,可以让每个层由一组相关的类或组件构成,共同完成特定的功能。层与层之间存在自上而下的依赖关系,上层组件会依赖下层组件的API,而下层组件则不依赖于上层组件。例如:表述层依赖于业务逻辑层,而业务逻辑层依赖于数据库层。并且每个层对对上层公开API,但具体的实现细节对外透明。当某一层发生变化,只要API不变,不会影响其他层的实现。

在本系统中,使用开源的oracle数据库,持久层用到单例模式技术,业务逻辑层用普通javabean实现,表述层运用基于struts的MVC设计模式。

11

4网上考试系统系统设计 4网上考试系统设计

4.1数据库设计

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

需求分析是设计数据库的起点,需求分析的结果是否准确地反映了用户的实际要求,将直接影响到后面各个阶段的设计,并影响到设计结果是否合理和实用。综合以上分析,要实现上面的所有功能模块,数据库共要设计十多个表,它们分别是:题目范围、班级表、题目难度表、答案、试卷信息表、学生表、学生成绩表、用户表、题库表、用户类型表等。

根据所要实现的功能和用户权限的设置。系统总体的层次图如图4.1:

图4.1系统层次图

12

西安工业大学毕业设计(论文) 4.1.2数据库概念结构设计

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

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

班级学号班主任密码姓名学生登录账号考试用户名登录密码性别管理试卷出卷老师选题题库出题管理员管理用户密码用户名用户帐号 图4.2系统E-R图

13

西安工业大学毕业设计(论文) 3)学生模块:该模块主要是学生通过登录该系统能够修改个人信息(只能修改密码),进行考试等。

学生在线考试程序流程图,学生登陆后,主要功能就是进入选择考试界面后,可选择考试范围及考试难度在选择试卷进行考试,还有成绩查询及修改密码的功能。

其具体流程图如图4.5所示: 修改个人信息 修改密码

图4.5学生流程图

学生登陆 成绩查询 成绩查询 参加考试 考试系统 成绩显示 19

5网上考试系统实现 5网上考试系统实现

5.1系统功能模块的实现

从系统功能模块划分中可以看出,系统总体上有两个功能模块组成,一个是学生模块也就是前台,一个是管理员界面包括老师。各模块虽然是独立的,但又统一于同一数据库中,便于管理员管理维护数据库,同时也便于教师和学生的操作。

5.1.1 项目程序的具体结构

网上考试系统代码主要分为3个部分,如下图所示,SRC包主要放的是java类,封装了Action和数据库操作、业务逻辑、数据库连接及实体类等重要代码,JRE System library下面四个包全是架包,java,struts及数据库连接等重要的封装类都在这些jar包中。Webroot包中则主要是JSP页面,还有就是图片,和javascript代码,全都是处理JSP页面及特效。完全遵循了MVC结构的思想,每个模块处理不同的需求。

项目结构如图5.1所示:

图5.1项目结构图

20

西安工业大学毕业设计(论文) a.WebRoot包

WebRoot包中写的都是JSP页面也就是MVC结构中的View。

在本系统中主要有题目管理,试卷管理,用户管理,班级管理和登陆等功能。为了使逻辑更加清晰,理解简单,我把每个功能页面都细分为不同的包,每个包中就放不同的功能的JSP页面。

如Class中为班级和学生添加及查询如图5.2所示:

图5.2 Class包

其他功能的JSP页面类似,都放在此包中。 b.SRC包

Src包为代码包,所有的功能实现,和页面跳转,实体类等都在此包中。 (1)com.cissst.Action包中就是MVC结构中的C,调用业务逻辑层中的方法,获得页面数据,跳转页面。IndexMangerAction.java为首页(登陆)Action。ExampaperManagerAction.jav为题目管理Action。AchievementMangerAction.java为成绩查询的Action。ClassMangerAction.java为班级管理和学生管理页面的Action。ExamSchemeMangerAction.java为试卷管理页面的Action。SysMangerAction为系统管理页面的Action。它们分别是处理相应页面的跳转。

如图5.3所示:

图5.3 Action包

(2)com.cissst.dao包中放的是数据访问层的接口(其中只有方法,但是没有

实现类),com.cissst.idao为此接口的实现类。这个包的主要作用是操作数据库,通过调用util包中的BaseConnection方法,其中写有连接数据库和操作数据库的增删改查等重要功能,如果有其他功能只需在包中添加方法即可。此包和

21

西安工业大学毕业设计(论文) Action包相同,每个包都管理着不同的功能管理(其他包都是一样。)

(3)com.cissst.entity包中放的都是实体类,简单的说了就是将数据库中的

表实体化,表中的每个属性都是这个实体类中的一个变量,而主外键关系则就将外键的实体类当成这个类的一个变量,每个变量都有get()和set()方法。每一个表就有一个实体类。以便将数据库中的数据取出。 如图5.4所示:

图5.4 实体类

具体代码拿User.java(用户表myuser表),下面可以看出,表myuser的每条属性都是user实体类中的一个变量。这样在数据库取数据时就可以将数据的每条数据存到这个实例中,以便使用。

/**用户ID*/ private int userId; /**用户姓名*/

private String userName; /**用户账号*/

private String userNum; /**性别*/

private String sex; /**录入日期*/

private String loginDate; /**用户类型*/

private UserType userType; /**用户密码*/

private String userPass;

22

西安工业大学毕业设计(论文) (4)com.cissst.Service包中为业务逻辑层的接口,cao.cissst.iService为其实现包。主要是调用数据访问成处理数据对象拼写sql语句处理对象,这个模块是本系统最重要的代码实现,所有的业务处理都在这里,通过这个包中的方法可以取到想要的数据库信息传到页面中及所用的业务逻辑都在此包中。主要的方法实现就是,拼写sql语句,然后调用dao中包的数据库处理方法得到结果集,再封装到相应的实体类中就可以得到数据库的实例,然后通过Action传到相应的JSP页面。

如:IndexMangerService.java中的具体方法有,

(5) com.cissst.utils包中时连接数据库,分页,乱码处理的方法。图5.5所示

* 根据学生学号得到用户信息 public Stu stuinfo(String stunum); * 根据用户账号得到用户信息

public User userinfo(String usernum); * 判断管理员账号密码是否正确

public boolean isexist(String usernum,String password); * 判断学生账号密码是否正确

public boolean stuisexist(String stunum, String password); * 获取题目难度和题目范围 public List queslevelname(); public List quesscopename(); * 根据题目难度和题目范围查出所有的考试试卷 public List gettest(int num1,int num2); * 根据试卷编号查出题目

public List getscheme_ques(int testid); * 根据试卷编号查出试卷答案 public List getanswer(int testid); * 比较试卷答案表和学生的答案表 计算出分数 public int getscope(List list1,List list2,int quesscope); * 往数据库中插入成绩

public void insertscore(int stuid,int testid,int score);

图5.5 公用包

23

西安工业大学毕业设计(论文) 主要方法有JDBC连接数据库BaseConnection.java,为了更好地提高代码的重用性,其中采取了单例模式,所有的Dao和service都是单例模式,就是这些方法都只能创建一次。乱码处理EncodingFilter.java,这个类中写了一个过滤器将编码格式改为项目的编码格式,分页是pager.java。 c.JAR包

.其他的都是jar包如图5.6所示。有JDK 、JavaEE、struts2、JDBC等的jar包。要想运行程序,这些jar包是必不可缺的重要包,里面存放了框架及重要技术的核心代码和方法,没了此包其他功能也就不能实现了。

图5.6 jar包

24

西安工业大学毕业设计(论文) 5.2系统主要功能界面实现

由于系统的界面比较多,在此只展示系统功能模块中部分主要功能的截图。 主要功能有试卷添加,题目添加,成绩查询,用户管理和修改密码等。 5.2.1 登陆界面

用户选择学生和管理员(包括老师)登陆,不同用户会进入不同页面。用户登录页面比较简单,为防止用户登录的操作错误,应设置错误处理页面,在登录操作过程中,一般发生的错误有:用户输入了错误的用户名或密码、用户直接单击了登录按钮,对上述情况的判断就要在service(业务逻辑层)文件来实现。如图5.7所示:

图5.7 登陆界面

在登录页面时,当用户提交了登录资料后,就由“IndexMangerAction.java”这个 Action进行验证,它的工作主要是先根据单选按钮的信息判断是学生还是管理员,然后判断用户登录的帐号和密码是否一致。如果是管理员并且判断用户的用户类型,不同的用户进入不同的页面,完成这些工作就必须连接存 储用户数据库取出相关信息记录。在跳转时也会附带上必要的信息,主要是将用户信息存入session,并携带下个页面所需要的数据。

25

西安工业大学毕业设计(论文) 下面就是登陆界面的主要方法login:

用户填写账号密码以后,点击登录,进入IndexMangerAction.java的login方法,然后用request.getParameter(“”)的方法得到页面的数据,账号和密码及身份,然后先判断身份是什么若是学生,判断其账号密码是否正确,是进入学生页面,不是弹出“账号密码不正确,请重新输入”,若身份是管理员,在判断账号密码是否正确,而后判断他的用户类型是老师还是管理员,根据身份进入页面,并将主要信息带到下一个页面。 public String login(){

String usernum=request.getParameter(\); String password=request.getParameter(\); String usertype=request.getParameter(\);

if (\.equals(usertype)) {

Stu stu=indexMangerService.stuinfo(usernum); boolean bool2 = indexMangerService.stuisexist(usernum, password);

if (bool2 == false) {

JOptionPane.showMessageDialog(null, \账号密码不符合,请重新输入!\); return \; } else request.setAttribute(\, list); request.setAttribute(\, list1);

request.getSession().setAttribute(\, stu); return \; } else {

User user=indexMangerService.userinfo(usernum);

boolean bool1 = indexMangerService.isexist(usernum, password); if (bool1 == false) { JOptionPane.showMessageDialog(null, \账号密码不符合,请重新输入!\); return \; } else if(user.getUserType().getUserTypeId()==1) }

26

{request.getSession().setAttribute(\, user); return \; } else {request.getSession().setAttribute(\, user); return \; }

}

西安工业大学毕业设计(论文) 5.2.2 学生考试界面

学生登陆后进入学生界面,此界面中包括考试,成绩查询,修改密码等功能。 考试需要三步,登陆后,显示出学生信息,然后可选择科目和难度,通过action处理得到所有的符合要求的试卷,然后学生选择试卷就进入试卷页面进行考试。 如图5.8及5.9所示:

图5.8 学生界面

做完试卷后通过所选的答案和数据库中答案进行对比,找出相同的个数乘以每题分数就可以得出成绩。考试页面比较简单,只能实现基本功能。

图5.9 考试界面

27

西安工业大学毕业设计(论文) 完成试卷后,是怎样将成绩存到数据库的?

这个方法名为gaijuan(),首先在考试上一步中,选的试卷信息传到这个页面,然后在选完考试试题的答案后一起传到Action中,同样用request方法得到,然后根据试卷id调用servic中的方法getanswer()得到这个试卷的答案表list1,然后在jsp页面中根据设置的点选按钮的Id能多得到每题的选定的答案,用for循环得到刚才答题的答案表list5,然后调用对比两个list的方法getscope()得到答对的正确个数并乘以这个试卷的题目分数便可得到成绩,最后得到试卷编号,学生编号,及成绩调用service的储存成绩的方法insertscore()便将数据存到数据库中去,下来答完后在用设置的全局变量上面方法得到的题目难度和题目范围跳转到考试界面的第一步,进入login_s.jsp学生首页;

此方法中主要就是多表查询并且业务逻辑比较难,开始不知道怎么对比List得到成绩,而且从页面中得到多个单选按钮的值开始也无从下水,最后在同学的帮助下,设置不同的id,就是将题目id家一个“answer”字符串当ID,在action提取时用getparameter(“answer”+题目ID)得到答案。 具体代码实现如下: public String gaijuan() {

int stuid =Integer.valueOf(request.getParameter(\ int testid=Integer.valueOf (request.getParameter(\ //list1试卷答案表 List list3=

indexMangerService.getanswer(testid);

//list2出题表主要题目信息 List list4= indexMangerService.getscheme_ques(testid); int quesscope=

Integer.valueOf(list4.get(1).getScheme().getQuesScore()); List list5=new ArrayList();

for (int i = 0; i < list4.size(); i++) { list5.add(request.getParameter

(\ } int score=indexMangerService.getscope(list3, list5, quesscope); indexMangerService.insertscore(testid, stuid, score); request.setAttribute(\ request.setAttribute(\ return \ }

28

西安工业大学毕业设计(论文) 5.2.3学生成绩查询界面

学生点击成绩查询是就通过成绩查询的action先得到session中的学生id,在根据id得到这个学生所有的成绩信息,实现页面跳转并将数据穿进去,得到下图所示的页面。通过方法可得到所有的关于这个学生的成绩单,你也可以根据试卷编号和试卷名称查出相应的课程成绩。如图5.10所示:

图 5.10 成绩查询界面

上图中下面的成绩显示表是怎样得到的了,这就是业务逻辑层的方法,主要就是拼写sql语句,select需要的字段 from表明where条件,然后调用dao中的方法查出上面sql要查出的数据,然后用entity中的实力表将这些数据存到实例中,最后放入List等着调用方法。 public List Score(int stuid) {

String sql=\

st.statusname,sc.score,t.meadmen from test t,student s,score sc,status st where t.testid=sc.testid and s.stuid=sc.stuid and st.statusid= t.status and s.stuid=\

ResultSet set=iAchievementMangerDao.findList(sql); List list= new ArrayList(); try { while(set.next()){

Score score=new Score(); Scheme scheme=new Scheme();

scheme.setSchemeId(set.getInt(1)); scheme.setSchemename(set.getString(2)); scheme.setAddtime(set.getString(3)); scheme.setQuesCount(set.getString(4)); Status status=new Status(); status.setStatusName(set.getString(5)); score.setScore(set.getString(6)); scheme.setMeadMen(set.getString(7)); scheme.setStatus(status); score.setScheme(scheme);

list.add(score); } }

catch (SQLException e) { e.printStackTrace(); } return list;}

29

西安工业大学毕业设计(论文) 5.2.4老师功能界面

教师登录到系统后通过左边的管理菜单了解到自己拥有那些功能:添加题库,添加试卷,成绩查询等。题库添加:先选择试题的科目和难度再进行添加。教师可以在线制作试卷,设置考试的科目、时间、分值分布、考题数量等,考题数量必须根据系统提示题库总数量设置,不能把考题数量超出题库的总数量。 a.添加题目页面

添加题目分2步,如图5.11,5.12所示。再点击题目新增时,程序就运行到题目管理的Action,先从数据库中经过处理得到所有的题目难度和题目范围,然后选择就会跳到如5.12所示的页面中,在页面中填写你要写的内容,点击提交后,又返回到题目管理Action,通过调用题目管理的业务逻辑层拼写sql语句就会将这次提交的题目保存到数据库中。提交后,页面就会自动跳回选择题目难度和题目范围页面,可继续添加。 (1)选择题目范围和题目难度。点击题目新增是action通过service从数据库取到题目范围和题目难度后传到题目新增页面来,然后通过jspl标签库中将这循环到下拉菜单中。然后经过选择,点击下一步,就进入了下个页面,并将题目难度和题目难度的数据传到下一页。

图5.11 选择题目难度和范围

(2)题目描述,进入这个页面会显示上一步的题目范围及难度,然后就可编辑题目了,其中包括题目描述,4个答案和正确答案,点击提交后,Action 先从页面取到这些数据,然后还是调用业务方法拼接sql语句将这个题目信息存到数据库中。具体效果图如图5.13所示:

30

西安工业大学毕业设计(论文)

图5.12 题目描述界面

所有的页面全是Jsp页面,下面就是题目描述界面的主要代码,因为要得

到页面中的数据并将这传到action中,所以就将这些文本框标签放到一个form中,form中的属性action就是将要跳转的action及方法名并可以再方法名的后面用?号传参数到action,method为跳转方式,下面的都是标准标签库,5个textarea(文本域标签),再有两个input标签分别是提交和返回两个按钮。提交的时候,Jsp页面就会根据action的路径找到其中的Action方法,然后做相应的处理,并返回数据。

具体的代码实现如下面所示:

31

西安工业大学毕业设计(论文) b.添加试卷页面

添加试卷和添加题目相似。添加试卷也是分两步,点击试卷新增后,得到试卷的范围和难度显示到跳转页面,然后先规定试卷的分数,题量,试卷名,试卷范围,难度等这一步是为了下一步选题做准备,进入选择题目页面,进行选题,先根据上一步选的题目难度和范围得到所有符合要求的题目,然后就可以根据显示的内容来就行选题,但是题目数量不能超过其规定不然就会报错。

图5.13 试卷添加页面(1)

在此页面中就是两个下拉菜单比较麻烦,必须先在action中得到数据库中的试卷难度和试卷范围,并将这两个封装到两个list中并将其传到这个页面上来,然后用select标签和EL表达式及forEach循环输出到页面上来,这些list中存的是考试难度和范围的实例对象,根据属性就可显示到页面上。 试卷范围:

试卷难度:

32

西安工业大学毕业设计(论文) 通过第一步,得到所有符合条件的题目,然后对题目进行选择,这里用的是复选框,可多选,但是由于限定了题目数量所以不能超过。这里我用了Javascript在JSP页面中先让其进行判断是否超过,如果超过会提示“题目数量为? ,已满不能再选”,并自动将最后一个题目取消。

图5.14 试卷选题页面(2)

当初在制作试卷的时候,就遇到了这样一个问题,我选题不可能一直向下选,必须按照上一步的题目数量来选题,但是在Jsp页面中不知道怎么处理当题目数量够了的时候怎样让他停下来后返回。在同学及百度的帮助下用javascript 处理解决了这一问题,就是讲单选按钮中设一个id属性,当选择一个就根据id属性加1,当到达max是就提示“试卷题量为max,已满不能再选”,并且将最后一个选题取消掉。

function chk(obj){

var obj = document.forms[0];

var max = document.getElementById(\var j = 0;

if (obj.answer3.length) {

for (i = 0; i < obj.answer3.length; i++) {

if (obj.answer3[i].checked) j++; if (j > max){

alert(\试卷题量为\。已满不能再选\obj.answer3[i].checked = false; break; } } } }

33

本文来源:https://www.bwwdw.com/article/h45d.html

Top