目录
一、需求分析
在线考试系统功能强大,对于整个考试流程而言,该系统是将考试组织、试题传输、阅卷审批、分析评价等功能一体化,避免了人工干预的可能,最大程度地保证考试的公平性、透明性。同时也节省了纸张资源,更符合可持续发展的绿色理念。随着网络的发展,在线考试系统应用越来越广泛,在国内外的许多大型考试中逐步被推广使用,凭借其便捷性和高效性深受师生们的喜爱。
本系统基于B/S系统架构,结合主流框架技术进行开发的在线考试系统。该系统拥有出题组卷、线上考试、题库练习、反作弊系统、阅卷批改、答题分析的全流程覆盖的功能,真正实现了无纸化考试,确保完整化的考务工作,减轻教师的负担,提升教学效果。同时,系统为学生提供了线上考试模式、题库练习模式两种做题模式。通过练习模式,查看解析及时巩固知识点。目前使用的高校考试系统,存在普遍的问题,缺乏对答题情况以及错题知识点的归纳,学生难以及时查漏补缺,学习效果并不显著。综合分析学生的答题情况,为学生展示错误题目的树状知识点清单,分析答题正确率,为学生提供一个在线考试、答题分析的考试系统,实现在线做题、分析总结一体化。
二、系统设计
1、系统技术架构图
【前端】vue2.0 + ElementUI
【后端】SpringBoot + Mybatis + MySQL
2、功能架构
三、业务设计
1、在线考试流程
如图5所示,学生在考试页面选择参加的考试,服务器根据用户密钥进行权限判断,主要包括是否符合专业要求、允许参加次数等,通过判断则将试卷必要信息传输到浏览器。浏览器再次进行逻辑判断,是否属于当前考试时间段,是则进入考试,全称监控切屏次数,超额将自动交卷。
2、查看考试成绩
如图6所示,学生通过个人成绩界面,可以查看到已经批改的试卷的题型分析雷达图、错题知识点思维导图。
3、试卷管理
如图7所示,教师根据题库试题在线组卷,选择题型类型,根据题目内容以及类型,搜索添加对应试题,可通过移动题目来自定义题目位置,最后确认考试科目完成组卷。
4、考试管理
如图8所示,考试管理主要流程为添加考试流程。教师选择已经存在的试卷,选择参加考试的学生专业,设置考试时间、允许参加次数、考试类型(口令考试或者开放考试),确认信息完成添加考试的操作。
四、数据字典设计
如表2所示,数据库中需要存储用户的个人信息,如学号或工号、加密后密码、姓名,登录用户名等信息。
表2 用户表user
列名 | 数据类型 | 主键 | 描述 |
id | varchar(36) | 是 | 用户编号 |
u_id | varchar(20) | 用户工号 | |
name | varchar(10) | 用户姓名 | |
username | varchar(20) | 用户登录名 | |
password | varchar(20) | 登录密码 | |
createtime | datetime(0) | 创建时间 | |
last_logintime | datetime(0) | 最后登录时间 | |
departmentid | varchar(36) | 所属专业编号 |
如表3所示,系统角色表保存角色名以及权限描述。
表3 系统角色表role
列名 | 数据类型 | 主键 | 描述 |
id | varchar(36) | 是 | 角色编号 |
name | varchar(20) | 角色名称 | |
description | varchar(100) | 拥有功能介绍 | |
createtime | datetime(0) | 创建时间 |
如表4所示,角色表作用是存储该系统用户的角色,同时每个角色都拥有描述信息,介绍该角色拥有的功能。
表4 系统用户的当前角色表user_role
列名 | 数据类型 | 主键 | 描述 |
id | varchar(36) | 是 | 数据编号 |
userid | varchar(36) | 关联用户编号 | |
roleid | varchar(36) | 关联角色编号 | |
createtime | datetime(0) | 创建时间 |
如表5所示,系统角色权限表,存储角色编号,以及菜单编号,建立其两者的联系。根据这种联系,代表角色拥有的系统权限,通过这个表维护角色权限。
表5 系统角色权限表role_menu
列名 | 数据类型 | 主键 | 描述 |
id | varchar(36) | 是 | 权限编号 |
roleid | varchar(36) | 菜单名称 | |
masterid | varchar(36) | 关联父菜单 | |
status | int(11) | 是否隐藏菜单 | |
createtime | datetime(0) | 创建时间 |
如表6所示,对于用户专业表,重要的还是存储其关联的父类专业,维持各类专业之间的包含关系。
表6 用户专业表department
列名 | 数据类型 | 主键 | 描述 |
id | varchar(36) | 是 | 专业编号 |
name | varchar(20) | 专业名称 | |
sort | int(11) | 专业顺序 | |
masterid | varchar(36) | 关联父专业 | |
createtime | datetime(0) | 创建时间 |
如表7所示,系统需要借助数据库管理系统菜单栏,表中主要保存菜单名称、菜单图标、菜单路由地址,同时维护菜单的父子级关系结构。
表7 系统菜单表menu
列名 | 数据类型 | 主键 | 描述 |
id | varchar(36) | 是 | 菜单编号 |
name | varchar(20) | 菜单名称 | |
sort | int(11) | 菜单顺序 | |
masterid | varchar(36) | 关联父菜单 | |
icon | varchar(50) | 菜单图标 | |
hidden | int(11) | 是否隐藏菜单 | |
route | varchar(50) | 菜单路由连接 | |
createtime | datetime(0) | 创建时间 |
如表8、9所示,表8为学生参加某场考试记录表,记录关联用户编号、关联试卷编号、关联考试编号,维护它们之间的一对一关系;表9为学生参加某场考试的每道试题德答题情况表,保存关联学生参加某场考试记录表的数据编号、关联的试题编号、学生的实际作答结果、题目得分等。
表8 用户参加考试记录表user_join
列名 | 数据类型 | 主键 | 描述 |
id | varchar(36) | 是 | 记录编号 |
userid | varchar(36) | 关联用户编号 | |
examination | varchar(36) | 关联考试编号 | |
testpaper | varchar(36) | 关联试卷编号 | |
starttime | datetime(0) | 考试开始时间 | |
endtime | datetime(0) | 考试结束时间 | |
type | int(11) | 考试状态 | |
score | int(11) | 考试分数 |
表9 考试记录试题表user_join_info
列名 | 数据类型 | 主键 | 描述 |
id | varchar(36) | 是 | 记录编号 |
masterid | varchar(36) | 关联考试记录编号 | |
question | varchar(36) | 关联试题编号 | |
reply | varchar(1000) | 试题回答内容 | |
correctScore | int(11) | 当前题目实际得分 |
如表10所示,试题表是系统最重要的数据表之一,主要保存试题信息,包括试题内容、试题类型、选择题选项内容、题目解析、涉及的知识点编号。
表10 试题表question
列名 | 数据类型 | 主键 | 描述 |
id | varchar(36) | 是 | 试题编号 |
content | varchar(1000) | 试题内容 | |
type | varchar(20) | 试题类型 | |
subject | varchar(36) | 所属科目编号 | |
opt_a | varchar(200) | 选项A | |
opt_b | varchar(200) | 选项B | |
opt_c | varchar(200) | 选项C | |
opt_d | varchar(200) | 选项D | |
score | int(10) | 试题分数 | |
imgurl | varchar(200) | 试题图片 | |
analysis | varchar(1000) | 试题解析 | |
answer | varchar(1000) | 试题答案 | |
kid | varchar(36) | 关联知识点编号 | |
createtime | datetime(0) | 创建时间 |
如表11所示,试卷表也是系统最重要的数据表之一,主要保存试卷的名称、所属科目、统计保存各类题型的数量。
表11 试卷表testpaper
列名 | 数据类型 | 主键 | 描述 |
id | varchar(36) | 是 | 试卷编号 |
name | varchar(20) | 试卷名称 | |
subject | varchar(36) | 所属科目编号 | |
xznum | int(11) | 选择题数量 | |
pdnum | int(11) | 判断题数量 | |
jdnum | int(11) | 简答题数量 | |
fillnum | int(11) | 填空题数量 | |
score | int(11) | 试卷总分 | |
time | int(11) | 试卷用时 | |
createtime | datetime(0) | 创建时间 |
如表12所示,公告表保存着日常的系统或者教学公告。
表12 公告表notice
列名 | 数据类型 | 主键 | 描述 |
id | varchar(36) | 是 | 公告编号 |
title | varchar(255) | 公告题目 | |
content | longtext(0) | 公告详情 | |
type | varchar(20) | 公告类型 | |
updatetime | datetime(0) | 更新时间 | |
createtime | datetime(0) | 创建时间 |
如表13所示,考试表也是系统最重要的数据表之一,主要考试信息、关联的试卷编号、允许参加次数的限制。
表13 考试表examination
列名 | 数据类型 | 主键 | 描述 |
id | varchar(36) | 是 | 考试编号 |
name | varchar(20) | 考试名称 | |
testpaper | varchar(36) | 关联试卷编号 | |
qualifiedscore | int(11) | 考试满分 | |
type | int(11) | 考试状态 | |
password | varchar(20) | 考试口令 | |
joinnum | int(20) | 允许参加的次数 | |
starttime | datetime(0) | 开始时间 | |
endtime | datetime(0) | 结束时间 | |
createtime | datetime(0) | 创建时间 |
如表14所示,数据库需存储考试科目。如表15所示,试题需要关联到知识点,同时答题分析需要用到知识点的树状结构。
表14 科目表subject
列名 | 数据类型 | 主键 | 描述 |
id | varchar(36) | 是 | 科目编号 |
name | varchar(20) | 科目名称 |
表15 知识点表knowledge_point
列名 | 数据类型 | 主键 | 描述 |
id | varchar(36) | 是 | 知识点编号 |
name | varchar(20) | 知识点名称 | |
masterid | varchar(36) | 关联父知识点 | |
createtime | datetime(0) | 创建时间 |
五、界面展示