基于Java的在线考试系统课程设计说明书含源程序Word格式.docx
《基于Java的在线考试系统课程设计说明书含源程序Word格式.docx》由会员分享,可在线阅读,更多相关《基于Java的在线考试系统课程设计说明书含源程序Word格式.docx(29页珍藏版)》请在冰豆网上搜索。
窗口名称为“XXX在线测试系统”。
用户点击“注册”或“登录”按钮可弹出注册窗口或登录窗口,供用户注册或登录。
窗口中间部分内容为关于系统的介绍性文字。
用户点击“立即进入”按钮后进入“题目列表”窗口(“题目列表”窗口设计见后面内容)。
图已注册用户欢迎界面
已注册用户欢迎界面与未注册用户欢迎界面基本相同,不同之处在于没有“注册”、“登录”按钮,而添加了用户菜单,菜单起初仅显示用户名,当鼠标指向时,显示二级菜单,分别为“账户管理”、“个人资料”、“退出登录”。
菜单功能如下:
账户管理:
进入用户账户管理界面,比如用户可在此修改登录密码、查看历史测试成绩等。
详细设计参见后面内容。
个人资料:
用户可在此完善个人资料。
退出登录:
退出登录状态,以未登录状态在线。
3、题目列表
题目列表界面分两种形式:
图未注册用户题目列表界面
未登录用户(包括未注册用户和已注册但未登录用户)进入题目列表界面后,首先陈列的是题目类型,即题目所属的相关领域。
当用户点击某一题目类型后,向下弹出所有此类型的题目列表。
每条题目包括标题、上传人、上传时间。
图已注册用户题目列表界面
已登录用户的题目列表界面与未登录用户的相似,不同之处除了显示用户名外,在每个题目类型的后面有一个“上传”按钮,用户可点击此按钮添加此类型的题目。
4、在线测试界面
在线测试界面有多个,包括题目部分和测试结果部分。
每一套题目都由10个单项选择题组成,用户必须按顺序答题,答完全部题目后方可提交。
用户在答题过程中可自行取消本次答题。
若由于某些客观原因程序异常退出,系统可对用户答题情况进行备份,下次登录时用户可继续上次答题记录进行答题(此项功能对未登录用户无效)。
下面是详细设计:
图第一题界面
图中内容区左上角为题目类型,此处为“Photoshop”类,内容区右上角为当前题号,中间部分为题目和选项。
内容区左下角为“上一题”按钮,因为此处为第一题,所以此按钮为不可用状态。
内容区右下角为“下一题”按钮,点击跳转到下一个题目,只有用户对当前题目做出选择后,此按钮才显示为可用状态。
窗口右上角为用户菜单,点击“返回”可取消本次答题。
若为已登录用户,则显示用户名。
图中间题目界面
此界面与第一题界面几乎相同,不同之处在于“上一题”按钮变为可用状态。
图最后一题界面
此界面与前面两个界面几乎相同。
不同之处在于已经没有“下一题”按钮,用户可点击“完成”按钮进行提交。
图测试结果界面
此界面显示用户答题结果,包括正确率和每个题的对错情况。
当鼠标点击题目时,可弹出窗口显示原题供用户回顾。
显示原题窗口如下所示:
图原题显示窗口
其中,正确答案应加粗显示。
若为用户打错的题目,则选错的选项应特别标出。
二、已登录用户权限界面设计
1、用户账户管理
图用户账户管理界面
用户对账户的管理功能主要有三项:
修改密码、查看题库、查看历史成绩。
用户点击三个按钮其中之一,就会进入各项管理界面。
详细设计如下:
图用户修改密码界面
此处为用户提供修改登录密码功能,而且必须在用户登录的前提下。
如果用户忘记了登录密码,可点击“忘记当前密码?
”寻回。
图题库查看界面
用户可在此查看自己上传过的所有题目,并可对其进行修改或删除。
用户还可以通过“上传”按钮进行新题目上传。
图题目上传界面
题目标题可自行填写,题目类型可以从已有列表中选择,也可自行添加。
问题、选项内容自行填写,正确答案只能为A、B、C、D其中之一。
上传时间系统自动设置。
点击“保存”按钮可将题目提交到系统数据库,并能在题目列表中显示,供其他用户进行测试。
图历史成绩界面
用户可在此查看自己所获得的所有成绩,可根据需求对部分记录进行删除。
2、个人资料
图用户个人资料界面
用户可以在此修改用户名、邮箱、性别,并添加简单的个人介绍,以便其他用户查看。
图个人资料显示界面
当某用户查看其他用户资料时,显示内容如图。
三、系统管理员权限界面设计
1、管理员登录界面设计
图管理员登录界面
管理员登录界面如上图所示,同用户一样,通过邮箱寻回密码。
2、管理系统首页设计
图系统管理首页
管理员登录后的首页,仅是一个内容显示界面,没有功能。
3、用户管理界面设计
图用户管理界面
系统管理员可在此处对用户进行管理。
可管理的用户信息包括用户名、邮箱、密码、性别、个人简介,管理员操作的最小单位为一条记录,且只能对用户进行删除操作,无权限修改用户的个人信息。
4、题型管理界面设计
图题型管理界面
管理员在此处对题型进行管理,题型包括名称和数量两项属性,管理员可以定期删除题目数量为0的题型。
5、题目管理界面设计
图题目管理界面
管理员可在此处对题目进行管理,题目属性包括名称、上传人、上传时间、所属类型。
管理员操作的最小单位为每一套题目,且只能进行删除操作。
6、管理员个人资料管理界面设计
图管理员个人资料管理界面
管理员在此对自己的个人信息进行管理。
用户名不可变,昵称可针对不同的系统管理员而改变,邮箱必填,以接收系统消息,如找回密码等。
如要修改登录密码,可通过框内两项修改,否则此两项留空。
四、设计总结
在本次课程设计中,我负责整个系统的流程、界面设计。
设计时,我将重点放在系统功能上,只想着怎样将系统的功能完全的、有条理的表现出来,忽视了用户体验这一方面的考虑。
直到我们做测试时,我才发现存在很多问题。
比如,用户在进入测试之后,就只能一路走到底,不能返回,这是一个非常严重的错误。
如果在加一个返回按钮的话,那么整个系统的流程控制要有非常大的变动,由于时间紧张,最终还是没能做出修改。
而且,我们用了Java原带的界面控件,没有加自己的素材,这使我们的真个系统看起来只是一个练习,而不是一个产品。
虽然缺陷非常多,但在设计的过程中还是有很多的收获。
整个系统从最初的一个想法,到简单的模型,再到详细的设计,置身在这个过程中,有过迷茫与困惑,但最终都坚持过来了,心中有一些小小的成就感。
在这个过程中,我始终都以积极的姿态投入,并不是以一个“旁观者”的姿态来应付一个课程设计。
期间,有人向我们提出质疑:
从无到有的搭起一个系统框架并不容易,更何况还要加好多功能。
而且,我们三个的编码能力并不是很强,当初我也怀疑过,我们到底能做到什么程度。
虽然心中非常没底,但还是表现出乐观的态度,因为情绪是会感染人的,积极的态度会使旁边的人也变得积极。
只要我们真的想做、认真做,就一定能学到自己想要的东西,与结果相比,过程更重要。
怀着积极的心态,我们三个齐心协力,最终实现了最主要的功能。
我想,我之所以能坚持下来,最重要的是老师和同学的帮助。
老师在整个过程中的细心指导,使我们始终保持向前的姿态;
其他两名同学的积极态度,使我能保持一份必胜的信心。
我知道,我还差的很远,需要继续更加努力的学习、实践。
我会奋力向前,总有一天做到心中的那个自己。
.
数据库设计
在对数据库进行分析设计时,应按照数据规范化理论的设计,尽量减少冗余数据,以确保数据完整性,统一性。
在数据库基本设计原则的指导下,数据库设计重点应考虑下列因素:
1.数据库表设计必须布局合理,层次分明。
2.数据库必须高度结构化,保证数据的结构化,规范化和标准化,这是建立数据库和进行信息交换的基础。
数据结构的设计应该遵循国家标准和行业标准,尤其要重视编码的应用。
3.数据库设计的时候,一方面要尽可能地减小数据冗余,减小存储空间降低数据一致性问题发生的可能性,另一方面,还要考虑适当的数据冗余,以降低程序开发难度。
4.数据库设计时应保持数据库中数据的准确性和统一性。
在系统中,多个用户同时操作数据库中的共享数据,就会可能影响到数据库数据的一致性产生错误,因此必须使用“锁”等方法来确保数据库中数据的一致性。
5.数据库设计的时候,对于数据库中的保密数据还必须设计一些安全机制来确保数据苦的安全。
在数据库设计实际的过程中,确定数据库的结构设计是否合理的,主要是依据数据库中是否有以下特点:
1.数据库是否具有一定的灵活性、适应性和可移植性;
2.数据库是否具有与其系统的兼容性;
3.数据库是否具有对新环境的可改变性;
4.数据库的存储成本是否够低;
5.数据库的设计是否有利于系统的实现;
6.是否具有良好的数据库结构,易于维护,易于理解,效率较高。
作为一个具有一定应用价值的在线考试系统的数据库,就要求数据库设计人员设计出一个好的结构,减少数据库数据的冗余的产生。
下面就介绍在线考试系统的数据库是如何设计的。
该系统选用数据库—MySQL
MySQL是一种开放源代码的关系型数据库管理系统,它与其他大型的数据库例如SQLServer、Oracle相比,MySQL有着其自身的一些缺点,例如功能相对简单、数据库规模较小等,但这却一点都没有影响到它受中小型企业和一般的个人使用者欢迎的程度,因为MySQL提供的功能已经对他们来说已经够用了,同时因为MySQL是一个开源数据库,所以可以大大减少系统成本。
MySQL数据库的主要功能只在组织和管理很庞大或复杂的信息和基于WEB的库存查询请求不仅仅为客户提供信息,而且还可以为您自己使用数据库可以提供如下功能:
(1)减少记录编档的时间
(2)减小记录检索时间
(3)灵活的查找序列
(4)灵活的输出格式
(5)多个用户同时访问记录
1、数据库需求分析
需求分析是设计数据库的起点,需求分析的结果是否准确地反映了用户的实际要求,将直接影响到后面各个阶段的设计,并影响到设计结果是否合理和实用。
根据分析,该系统主要涉及到几种信息的存储,管理员信息的存储,用户信息的存储,试卷信息的存储。
所以该系统需要建立管理员信息表,用户信息表,题库信息表,试卷类型表、试卷表,成绩表。
2、数据库概要设计
概念设计阶段主要是将需求分析阶段得到的用户需求抽象为信息结构(概念模型)的过程,它是整个数据库设计的关键。
根据数据库需求给出该系统的E-R图
3、数据库逻辑结构设计
数据库的概念结构设计完毕以后,现在可以将上面的数据库概念结构转化为某种数据库系统所支持的实际数据模型,也就是数据库的逻辑结构。
下面就要设计在线考试系统数据库的逻辑结构。
以概念结构设计中的E-R图为主要依据使用powerdesign设计出该系统的关系模式,该系统的数据库逻辑概念关系模型图如下
图4.7逻辑概念关系模型图
4、数据库表设计
下面列出了设计过程中所用到的数据库表及其结构
表格名
元素
用户信息表
用户名、邮箱(主键)、密码、性别、简介
管理员信息表
用户名、邮箱、密码
试卷类型表
类型名(如操作系统、软件工程等)、试卷量
题库表
类型名、试卷名(***第一套模拟试题)、上传人、上传时间
试卷表
类型名、试卷名、题号、内容、A|、B、C、D、答案
成绩表
邮箱(主键)、类型名、试卷名、成绩
表1.1user表
t_user
列名
类型
长度
描述
username
varchar
10
用户名字
useremail
20
用户邮箱
userpassword
用户密码
usersex
enum
(男、女)
用户性别
userintroduce
100
用户简介
表1.2manager表
t_manager
managername
管理员名字
email
管理员邮箱
password
管理员密码
表1.3question_subject表
t_question_subject
subjectname
类型名(如操作系统、软件工程等)
paperSum
int
试卷数量
表1.4questionsBase表
t_questionsBase
subjectname
试题类型
paperName
30
试卷名(***第一套模拟试题)
useremail
joinTime
datetime
8
加入时间
表1.5Question表
t_Question
sujectname
Questionno
题号
Content
100
试题内容
A
50
A选项内容
B
B选项内容
C
C选项内容
D
D选项内容
answer
答案
表1.6degree表
Tb_degree
30
试卷名
degree
成绩
5、主要代码
publicDATABASE()throwsSQLException,IOException{
try{
Class.forName("
com.mysql.jdbc.Driver"
);
}catch(ClassNotFoundExceptione){
e.printStackTrace();
}
conn=DriverManager.getConnection(
"
jdbc:
mysql:
//localhost:
3306/testsystems"
"
root"
}
publicjava.sql.Connectionconn;
publicvoidclose()throwsSQLException,IOException{
conn.close();
}
以上为链接数据库代码。
以下为个函数说明:
1、用户注册函数:
publicStringuserRegister(Stringusername,Stringemail,Stringpassword,Stringsex,Stringintroduce)
2、用户检测函数
publicStringuserDetection(Stringuseremail,Stringpassword)
3、查看所有用户信息函数:
publicStringgetalluser()
4、用户修改信息函数:
publicvoiduserupdate(Stringuseremail,Stringpassword,Stringpassword1)
5、管理员检测函数:
publicintmanagerDetection(Stringmanageremail,Stringmanagerpassword)
6、杀出用户函数:
publicvoiddeleteuser(Stringemail)
7、请求试题函数:
publicStringgetquestion_subject()
8、请求试卷函数:
publicStringgetpapername(String)
9、请求试卷数目函数:
publicintgetpape_sum(Strings)
10、增加试卷数目函数:
publicvoidaddsetpape_sum()
11、增加科目:
publicvoidaddsubject(Stringa1)
12、上传题目:
publicvoidaddpaper(Stringsubject,Stringpapername,intno,Stringcon,Stringa,Stringb,Stringc,Stringd,Stringanswer)
13、请求每套试卷的10道题:
Publicvoidgettest(Stringsupjectname,Stringpapername,String[]s1)
14、请求答案:
publicStringgetanswer(Stringsupjectname,Stringpapername)
15、设置分数:
publicvoidsetdegree(Stringuseremail,Stringsubjectname,Stringpapername,intdegree)
16、请求分数:
publicintgetdegree(Stringuseremail,Stringsubjectname,Stringpapername)
17、减少试卷数量:
publicintdelsetpape_sum(Strings)
18、删除科目:
publicvoiddelsubject(Strings)
19、删除试卷:
publicvoiddeletetest(Stringuseremail,Stringsubjectname,Stringpapername)
7、感悟
通过这次毕业设计,对很多东西有了新的认识和新的见解,认识问题的和思考解决办法有了本质上的进步,特别是对一个系统开发的模式有了更深的认识,对专业技能的运用更熟练。
在线考试系统服务器模块详细设计
服务器模块负责人;
高秀洋。
主要负责功能,客户端、服务器端socket程序设计,客户端与服务器的通信及请求处理。
系统简介
在线考试系统是一款可以为某类知识群体提供知识技能测评的软件。
用户只要下载了客户端软件,就可以注册、登陆选择某一类题目进行答题,答题结束后系统保存用户成绩并返回用户成绩。
服务器模块介绍
服务器端应用ServerSocket类设定9084端口为监听端口,为每一个发出请求的用户创建一个服务线程。
服务线程根据客户端的请求消息做相应的处理。
客户端应用Socket连接服务器IP和9084端口,与服务器建立连接,客户端发送带有约定标识的请求消息,服务器程序根据此特定标识做出相应处理。
服务器功能介绍
1、用户注册
客户端用户输入个人信息及密码,客户端Socket程序将此信息发送至服务器。
此用户的服务线程继而将用户注册信息写入数据库。
用户登录
用户在登陆界面输入邮箱与密码,客户端Socket程序将邮箱与密码发送到服务器,服务器线程继而查询数据库,确认此用户是否已注册,若注册则允许登陆,否则拒绝登陆。
修改密码
用户登录后,修改密码。
服务器的用户线程接收到此请求后将客户端传来的新密码写入数据库代替原来的密码。
传送试题
服务器线程接收到用户请求试题的信息后,开始访问数据库取出题目发送到客户端。
客户端接收试题并将题目写入临时只读文件里,以备客户端读文件并将试题写入界面。
试卷批阅
客户端将用户答案传送至服务器,服务器查询数据库得到正确答案并判断用户答案。
统计在线用户数量
服务器维护一个全局变量NUM,用来保存在线用户数量。
每当一个用登陆成功,ClientNum就加一,当用户退出,ClientNum就减一。
对于多线程的服务器,程序应互斥的访问ClientNum。
此处使用java同步方法如下。
publicsynchronizedstaticvoidaddClientNum()
{
intn=ClientNum;
n++;
ClientNum=n;
publicsynchronizedstaticvoidcutClientNum()
n--;
ClientNum=n;
7、客户端socket程序主要代码:
publicclassSocketClient{
privateSockets;
privatestaticInputStreaminstream;
privatestaticOutputStreamoutStream;
privatestaticScannerin;
privatestaticPrintWriterout;
publicSocketClient()throwsUnknownHostException,IOException
{
s=newSocket("
127.0.0.1"
9084);
instream=s.getInputStream();
outStream=s.getOutputStream();
in=newScanner(instream);
out=newPrintWriter(outStream,true);
}
8、服务器程序主要代码如下,每接收到一个客户端请求就新建一个用户线程,有此线程响应用户请求。
publicclassReceiveServer{
publicstaticintClientNum=0;
//在线用户数量
fina