完整的在线考试系统论文

更新时间:2024-06-20 23:00:01 阅读量: 综合文库 文档下载

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

重庆科技学院

毕业设计(论文)

题 目 基于java的在线考试系统设计

院 (系) 电子信息工程学院 专业班级 计科应2006-01 学生姓名 学号 指导教师 职称 评阅教师___ _ 职称___

年 月 日

重庆科技学院本科生毕业设计(论文)

基于java的在线考试系统设计

院(系) 电子信息工程学院 专业班级 计科应2006-01 学生姓名 指导教师 助理指导教师

2010年 6 月 10 日

注 意 事 项

1. 设计(论文)的内容包括:

1) 封面(按教务处制定的标准封面格式制作) 2) 题名页

3) 中文摘要(300字左右)、关键词 4) 外文摘要、关键词 5) 目次页(附件不统一编入)

6) 论文主体部分:引言(或绪论)、正文、结论、参考文献 7) 附录(对论文支持必要时)

2. 论文字数要求:理工类设计(论文)正文字数不少于1万字(不包括图纸、程序清单等),

文科类论文正文字数不少于1.2万字。

3. 附件包括:任务书、文献综述、开题报告、外文译文、译文原文(复印件)。 4. 文字、图表要求:

1) 文字通顺,语言流畅,书写字迹工整,打印字体及大小符合要求,无错别字,不准

请他人代写

2) 工程设计类题目的图纸,要求部分用尺规绘制,部分用计算机绘制,所有图纸应符

合国家技术标准规范。图表整洁,布局合理,文字注释必须使用工程字书写,不准用徒手画

3) 毕业论文须用A4单面打印,论文50页以上的双面打印 4) 图表应绘制于无格子的页面上

5) 软件工程类课题应有程序清单,并提供电子文档 5. 装订顺序

1) 设计(论文)

2) 附件:按照任务书、文献综述、开题报告、外文译文、译文原文(复印件)次序装

订 3) 其它

学生毕业设计(论文)原创性声明

本人以信誉声明:所呈交的毕业设计(论文)是在导师的指导下进行的设计(研究)工作及取得的成果,设计(论文)中引用他(她)人的文献、数据、图件、资料均已明确标注出,论文中的结论和结果为本人独立完成,不包含他人成果及为获得重庆科技学院或其它教育机构的学位或证书而使用其材料。与我一同工作的同志对本设计(研究)所做的任何贡献均已在论文中作了明确的说明并表示了谢意。

毕业设计(论文)作者(签字):

年 月 日

重庆科技学院本科毕业设计 中文摘要

摘 要

本系统是一个基于java的在线考试系统。它的用户由学生、教师和系统管理员组成。学生登陆系统可以进行在线测试和成绩查询。当学生登陆时,系统会随机地为学生选取试题组成考卷。当学生提交考卷后,系统会自动批改客观题,并将试卷提供给教师查看和提醒教师对试卷主观题进行修改。待教师修改完试卷后,系统会自动生成考生成绩和分数段统计信息。学生可以查询自己的成绩信息和试卷,以便更好地了解自己的学习情况。教师也可以通过分数段统计信息更好地了解学生的学生情况。后台管理员可以对考题,考试设置信息,用户信息进行维护。学生,教师,管理员都可以对个人信息进行维护。

本系统采用B/S模式设计,一切操作均在浏览器上进行。系统所用到的技术有HTML,CSS,javascript,jsp/servlet等。数据库选用SQLServer2005,web服务器选用TomCat。前台设计主要在DreamWeaver上设计完成的,后台开发主要在Eclipse上完成的。

本文首先对本次没计的背景、设计的意义、设计的可行性等作了一个简单的介绍。其次介绍了此次设计的设计过程,包括需求分析,总体设计,数据库设计,详细设计等内容。最后介绍了系统的功能测试过程和结果分析。 关键词:在线考试 随机抽题 SQLServer JSP/servlet

I

重庆科技学院本科毕业设计 2 系统分析

2 系统分析

2.1背景分析

网络化教育代表了教育改革的一个发展方向,已经成为现代教育的一个特征,并对教育的发展形成新的推动力。随着Internet/Intranet的迅速发展和广泛普及,建立在其上的远程教育成为现代教育技术未来发展方向之一,考试测试作为远程教育的一个子系统也成为一个重要的研究领域。现代远程教育作为一种新的教学手段已经开始进入我们的生活,正在给传统教育模式带来新的变革,并对教育的发展形成新的推动力。

相比传统的考试方式,在线考试系统的主要好处是一方面可以动态地管理各种考试信息,只要准备好足够大的题库,从该题库中抽取一定数量的考题生成考试试卷,从而有效地避免了考试作弊,相互抄袭的避端;另一方面,考试时间灵活, 可以在规定的时间段内的任意时间参加考试;另外计算机化的考试的最大特点是阅卷快,系统可以在考试结束时当场给考生成绩,计算机阅卷给了考生最大的公平感。

2.2可行性分析

2.2.1技术可行性分析

系统开发将要用到JSP/Servlet、JavaBean、SQLServer数据库技术。另外,硬件只需要一台pc机,装上软件Eclipse,DreamWeaver等开发工具 ,利用SQLserver作为后台的数据库,利用Tomcat作为Web服务器,所以在这方面来说是可行的。已经掌握了开发考试系统方法和开发工具,并且在调查过程中,已经了解和熟悉了在线考试系统的业务流程。综上所述本系统开发从技术上是可行的

2.2.2经济可行性

从经济效益来分析,软件的开发成本不大,而其它的投入也只是电脑。电脑的普及也带来了低成本投入。由于系统运行的基础环境均已具备,无需重新开发建设,所以系统开发、运行所需的费用是比较低的。而系统的效益很高可以提高管理效率实现计算机化、系统化、规范化操作,效率大于投入,可行性很高。

2.2.3方案可行性

根据系统的分析,本系统充分从适用性出发,全面为不同的使用用户考虑。使系统的许多功能与规则都可根据用户的习惯进行定制,包括软件界面、操作方式、录入方式等。本系统的设计充分从使用用户和教务教学任务考虑。

3

重庆科技学院本科毕业设计 3 系统设计

3 系统设计

3.1 需求分析

本考试系统用户主要分为三类:学生,教师,管理员。 1.学生需求

学生登陆系统主要进行两类操作:在线考试,成绩查询与个人信息管理. (1)在线考试

系统能自动给考生选题,考题必须是随机分配的,以保证考试的公平性。学生在考试过程中页面将提供考试时间倒计时功能,使考生随时了解考试剩余时间。在考试时间到时,系统将自动地将学生考试试卷提交,将提醒考生离开考场。当考试试卷提交时,系统自动为选择题、判断题等客观题评分,主观题由教师评分。

(2)成绩查询与个人信息维护

学生可以登陆系统查询各科成绩,其中成绩信息包括每种题型的得分,如单选题,简答题等。别外学生还可以查询自己的考卷,了解自己的考试情况。

除此之外,学生登陆系统可以查看和修改个人的基本信息,如修改密码等。 2.教师需求

教师登陆系统主要有三类操作:查看和修改学生试卷,查看各分数段统计,个人信息的维护

(1)查看/修改学生试卷

系统会将学生试卷从数据库中读出供给老师查看和修改,系统已经对选择题和判断题评了分,所以这些信息对于教师是只读的。而对于主观题,系统将参考答案读出供给老师参考,再将考生答案读出供给教师评分。

(2)查看分数统计

教师修改好试卷之后,系统将成绩汇总,生成各分数段统计信息,并提供给老师查看,以便教师能了解学生的学习情况。

(3)个人信息维护

教师登陆系统之后也可以对个人信息进行查看和修改。 3.管理员

系统管理员登陆系统后主要进行四类操作:考题维护,考试信息维护,用户维护和个人信息维护

(1)考题的维护

4

重庆科技学院本科毕业设计 3 系统设计

管理员可以往题中添加考题,修改错误试题和删除无用试题。 (2)考试信息的维护

考试信息的维护主要是对于考试设置信息进行维护,这些信息主要是考试总时间,试题数量,各试题分值的分布等。

(3)用户维护

系统管理员可以对用户信息(包括学生信息,教师信息等)进行增,删,改查操作。

(4)个人信息维护

管理员也可以对自己的基本信息的维护

3.2总体设计

3.2.1系统数据流图

据分析系统数据流图如图3.1所示

分数段统计信息更新个人信息8用户管理用户管理请求更新用户4批改学生试卷3个人信息维护教师查看请f求5分数段统计添加用户用户信息批改试卷指令成绩信息成绩信息成绩信息成绩信息个人信息更新考试设置试卷信息管理员维护请求7考试设置维护添加考试设置考试设置信息试卷信息试卷信息考生信息2成绩查询考题维护请求考试设置信息1在线考试学生成绩信息6考题维护 添加考试信息考题信息考题信息学生信息更新考试信息图3.1系统数据流图

3.2.2 系统的功能模块图

根据3.1所述需求,设计出系统功能模块如图3.2所示

5

重庆科技学院本科毕业设计 3 系统设计

在线考试系统学生教师管理员个查批个考在成人看改分线绩信学试数人考试用考查息生卷段信题信户试询维试主统息维息管护卷观计维护维理题护护图3.2系统的功能模块图

3.2.3 系统功能模块

1、 在线考试

在线考试的流程如下:

首先系统按照一定的算法为登陆的考生随机选取一定的试题生成考试试卷,考生在系统生成好试卷后进行答题操作。答题必须在规定的时间内进行,此时间是由管理员事先设置好的,如在规定的时间内没有完成答题,系统将强制提交学生考试试卷进。考生在试卷提交后系统自动地为客观题进行评分,本系统的客观题主要是单选题,多选题和判断题。其数据流图如3.3所示。

考题信息考题信息学生信息1.11.2试卷1.3试卷1.4试卷生成试卷试卷信息在线考试信息试卷提交信息客观题评定信息试卷信息考试设置信息考试设置信息图3.3第2层在线考试数据流图

2、成绩查询

考生根据用户编号查询考试成绩信息。成绩信息包括单选题得分,多选题得分等详细信息。页面提供对相应科目试卷的链接,使得学生还可以查询自己的考卷,了解自己的考试情况。

6

个人信息维护

重庆科技学院本科毕业设计 3 系统设计

3、 查看/修改考生试卷

系统首先将考生的试卷读出,再提提醒老师对主观题进评分,等老师对主观题进行评分后系统生成考生的成绩信息,其数据流图如图3.4所示。

批改请求4.1读出考生试卷试卷信息4.2评定主观题试卷信息4.3信息提交试卷信息成绩信息试卷信息试卷信息 图3.4第2层修改学生试卷数据流图

4、分数段统计

当教师对考卷的主观题评定后,系统能自动生成分数段统计信息供给老师查看。此功能有助于老师了解学生的学生情况,以便更好的教学。 5、试题维护

试题维护是后台管理员的重要功能,它包括对试题的添加,修改,删除操作。为了使界面更友好,管理员在试题维护时系统会先将考试试题读出,再提供给管理中员操作。其数据流图如图3.5所示

考题信息考题信息考题信息考题维护请求6.1查看考题信息6.2添加考题信息考题信息考题信息考题信息6.2更新考题信息考题信息 图3.5 第2层考题维护数据流图

6、考试设置信息维护

考试设置信息维护是管理员对考试设置信息维护,它包括对考试设置信息的添加,修改,删除。这些考试信息包括考试时间,各题的数量和分值等。其数据流图如图3.6所示。

7

重庆科技学院本科毕业设计 3 系统设计

connectionconn = DriverManager.getConnection(\//获得数据库连接

}catch(Exception e)

{

e.printStackTrace(); out.print(e.toString()); }

return conn; }

//关闭数据库连接

public void CloseDB(Connection conn,Statement sm,ResultSet rs) {

try {

if(rs!=null) {

rs.close(); }

}catch (Exception e) {

e.printStackTrace();

out.print(\数据库关闭失败!\ }finally {

try{

if(sm!=null) {

sm.close(); }

}catch(Exception e) {

e.printStackTrace();

out.print(\数据库关闭失败!\ }finally {

try{

if(conn!=null) {

conn.close(); }

}catch(Exception e) {

e.printStackTrace();

out.print(\数据库关闭失败!\

13

重庆科技学院本科毕业设计 3 系统设计

} } } }

3.4 详细设计

3.4.1公共类设计

1.Domain类设计

由于数据库使用的类系统模型,而java数据为对象模型,使得其模型不匹配。为了方便关系模型和对象模型间的转换,建应的Domain类,即数据库中每个表对应一个类,表中类属性对应表的各属性,再为各个属性设计一个读方法(get)和一个写方法(set)如用户类:

public class User {

private String id=\ private String name=\ private int type=1;

private String password=\ private String sex = \ public String getSex();

public void setSex(String sex) ; public String getPassword();

public void setPassword(String password); public String getId();

public void setId(String id); public String getName();

public void setName(String name); public int getType();

public void setType(int type); }

表和类的对应关系如下:

用户表(UserInfo)——用户类(User) 用户标记表(userflag)——用户标记类(UserFlag) 考题表(Question)——考题类(Question) 试卷表(test)——试卷类(Test)

试卷设置表(test_set)——试卷设置类(Test) 成绩表(record)——成绩类(Record)

试卷考题类(TestQuestion)——试卷表和考题表联合查询视图

2.公具类设计

14

重庆科技学院本科毕业设计 3 系统设计

根据系统设计需求,设计如下工具类:

数据库连接工具类,主要提供连接数据操作等相关方法

public class DBAccess { //得到数据库连接

public Connection getConnection() //并闭数据库连接

public void CloseDB(Connection conn,Statement sm,ResultSet rs) }

用户操作相关类,主要提供对用户表操作的相关类

public class UserUtil {

//根据用户编号得到用户信息

public User getUser(String Uid)

//验证登陆信息,根据用户名、密码和用户类型

public boolean checkUser(String userName,String password,int type) 用户信息

public boolean motifyUser(User user) //添加用户信息

public boolean insertUser(User user) //修改密码

public boolean motifyPassword(String Uid,String password) //得到指定页的用户

public ArrayList getAllUser(int pageSize,int current) //得到用户数量

public int getCount() //删除用户信息

public boolean deleteUser(String Uid) }

用户标记工具类,主要提供对用户标记表的相关操作方法

public class UserFlagUtil { //得到交卷信息

public int getFlag(String Uid,String course) //设置交卷信息

public boolean setFlag(String Uid,String course) }

考题工具类,主要提供对考题表的相关操作方法

Public class QuestionUtil{ ///得到选择题的方法

public ArrayList getQuestion(String course,int count,int type) //得到数据库中题目数量

public int getCount(int type,String course) //得到数据库中题目数量 public int getCount() //通过考题编号得到考题

public Question getQuestionById(int Qid)

15

//修改

重庆科技学院本科毕业设计 3 系统设计 //得到指定页的试题目信息

public ArrayList getAllQuestion(int pageSize,int current) //添加试题信息

public boolean insertQuestioin(Question ques) //修改试题信息

public boolean updateQuestion(Question ques) //删除试题信息

public boolean deleteTest(int Qid) //获取科目

public ArrayList getCourse() }

试卷工具类,主要提供对试卷表的相关操作方法

public class TestUtil { //添加试卷信息

public boolean insertTest(ArrayList al) //考生的名字和学号

public ArrayList getStudent(String course) //获得试卷库中相应题型的题

public ArrayList getTest(String Uid,String course,int type) //修改试卷库中相应试题的分数

public boolean updateTest(String Uid,int Qid,float score) }

考试设置工具类,主要提供对考试设置表的相关操作方法

public class TestSetUtil {

//根据课程名称得到考试设置信息

public TestSet getTestSet(String course) //计算考题总分

public int getTotalScore(TestSet ts) //获得总记录

public int getCount() //得到指定页的考试信息

public ArrayList getAllTestSet(int pageSize,int current) //添加或修改考试设置,flag=0为添加,flag=1为修改

public boolean insertOrUpdate(TestSet ts,int flag) //删除考试设置信息

public boolean deleteTest(String course) }

成绩工具类,主要提供对成绩表的相关操作方法

public class RecordUtil {

public DBAccess db = new DBAccess(); //获取考生指定课程的得分信息

public Record getRecord(String Uid,String course) //判断学生成绩是否存在

public boolean getUser(String Uid,String course)

16

重庆科技学院本科毕业设计 3 系统设计 //获取及格人数

public int getPass(String course) //获取该课程总考试人数

public int getCount(String course) //获分数段人数

public int getCountByScore(String course,int score) //得到学生的全部成绩

public ArrayList getAll(String Uid) } }

试卷考题工具类,主要提供对试卷表考题表联合查询视图的相关操作方法 public class TestQuestionUtil { //获得试卷库中相应题型的题

public ArrayList getTest(String Uid,String course,int type) }

3.4.2在线考试模块设计

在线考试流程为:首先系统将考试信息和考生个人信息提供给考生,并要求考生核对个人信息。在考试开始时系统按照一定的算法为登陆的考生随机选取一定的试题生成考试试卷,考生在系统生成好试卷后进行答题操作。答题必须在规定的时间内进行,此时间是由管理员事先设置好的,如在规定的时间内没有完成答题,系统将强制提交学生考试试卷进。考生在试卷提交后系统自动地为客观题进行评分,并将试卷保存,供给老师查看或修改。在线考试流程图如图3.10所示。

随机抽题算法:产生一个随机整数,这个数在0和相应题型总考题数之间。从这个随机数开始抽取取试题,抽取数量为试卷设置中相应题型的个数(此数小于总题数),若取到最后一道还不满足取题数量,再从第一题开始选取,其抽题流程如图3.11如示。

17

重庆科技学院本科毕业设计 3 系统设计

开始读取考生考卷等待教师对主观题评定接受教师的评定信息保存评定信息否保存成功是计算成绩保存成绩信息否保存成功是结束 图3.12查看/修改学生试卷流程

教师提交评定的关键代码设计及说明如下: //获取学生学号

String Uid = request.getParameter(\ //获取session中的课程名称

String course = (String)session.getAttribute(\ TestUtil tu = new TestUtil();

TestSetUtil tsu = new TestSetUtil(); Record record = new Record(); RecordUtil ru = new RecordUtil(); //获取试卷设置信息

TestSet ts = tsu.getTestSet(course); float singleTotal = 0;//单选题总分 float multiplyTotal = 0;//多选题总分 float judgeTotal = 0;//判断题总分 float jdTotal = 0;//简答题总分 float programTotal=0;//编程题总分 float total=0;

for(int i=0;i

Float.parseFloat(request.getParameter(\

singleTotal+=score;

23

重庆科技学院本科毕业设计 3 系统设计

}

for(int i=0;i

float score =

Float.parseFloat(request.getParameter(\ multiplyTotal+=score; }

for(int i=0;i

float score =

Float.parseFloat(request.getParameter(\ judgeTotal+=score; }

for(int i=0;i

float score =

Float.parseFloat(request.getParameter(\ jdTotal+=score;

int Qid = Integer.parseInt(request.getParameter(\ tu.updateTest(Uid, Qid, score);//修改试卷库中相应简答题的分数 }

for(int i=0;i

Float.parseFloat(request.getParameter(\ programTotal+=score;

int Qid = Integer.parseInt(request.getParameter(\ tu.updateTest(Uid, Qid, score); }

total = singleTotal+multiplyTotal+judgeTotal+jdTotal+programTotal; record.setUid(Uid);

record.setCourse(course); record.setScore(total);

record.setSingle(singleTotal); record.setMultiply(multiplyTotal); record.setJudge(judgeTotal); record.setJd(jdTotal);

record.setProgram(programTotal);

//System.out.print(record.getUid()+record.getCourse()); if(ru.updateRecord(record)) {

response.sendRedirect(request.getContextPath()

24

重庆科技学院本科毕业设计 3 系统设计

+\}else {

response.sendRedirect(request.getContextPath()

+\}

3.4.5分数段统计模块设计

当教师对考卷的主观题评定后,系统能自动生成分数段统计信息供给老师查看。统计分数段包括及格率、60-69分、70-79、80-89和90分以上,在统计数量的同时并计算出占数考人数量的比例。

其统计功能的关键代码及说明如下: //获取要统计的分数段

String scoreString = request.getParameter(\

//获取要统计的课程名称

String course = (String)session.getAttribute(\ RecordUtil ru = new RecordUtil(); //得到考生总数

int count = ru.getCount(course); int pass = 0;//要统计的分数段人数

if(\如果统计的是及格率 {

pass = ru.getPass(course); }else {

int score = Integer.parseInt(scoreString); pass = ru.getCountByScore(course,score); }

//计算比例,由于要用count作为除数,所以必须排出count为0的情况

String percent =

count==0?\float)pass)/((float)count)*100+\

3.4.6试题维护模块设计

试题维护是后台管理员的重要功能,它包括对试题的添加,修改,删除操作。在进行此操作时系统会先将考试试题读出,再提供给管理中员操作。试题维护流程图如图3.13所示。

25

重庆科技学院本科毕业设计 3 系统设计

开始读取考题信息选择操作添加考题信息修改考题信息册除考试信息等待管理员输入信息等待管理员输入信息确认删除?是获取输入信息否添加考题信息获取输入信息否修改考题信息删除考题信息否 删除成功添加成功?是重新绑定数据修改成功?是是否重新绑定数据重新绑定数据结束 图3.13考题维护流程

关键代码如下:

添加考题关键代码及说明如下:

//获取课程名称,由于课程名称可能包含有汉字,所以要对其进行编码,这里我们用gbk进行编码

String kemu = request.getParameter(\ String ch_course = \ String course =

new String(request.getParameter(ch_course).getBytes(\ //获取题目类型

int type = Integer.parseInt(request.getParameter(\ String ques = new

String(request.getParameter(\

//选项A

String keyA = null; //选项B

String keyB = null; //选项C

String keyC = null; //选项D

String keyD = null; //参考答案

26

重庆科技学院本科毕业设计 3 系统设计

String answer = \

QuestionUtil qu = new QuestionUtil(); Question question = new Question(); if(type==1)//单选题 {

keyA = new

String(request.getParameter(\im();

keyB = new

String(request.getParameter(\im();

keyC = new

String(request.getParameter(\im();

keyD = new

String(request.getParameter(\im();

answer = request.getParameter(\}else if(type==2)//多选题 {

keyA = new

String(request.getParameter(\im();

keyB = new

String(request.getParameter(\im();

keyC = new

String(request.getParameter(\im();

keyD = new

String(request.getParameter(\im();

String[] str_answer =

request.getParameterValues(\ for(int i = 0;i < str_answer.length;i++) {

answer = answer + str_answer[i]; }

}else if(type==3)//判断题 {

answer = request.getParameter(\}else//简答题,设计题 {

27

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

Top