【2】简单考试系统开发-技术选型及数据结构
技术选型
因为本人长期从事JAVA开发,技术选型肯定是用JAVA方向的,使用当前比较流行的SpringBoot+MyBatisPlus+Redis+MySQL,因为比较简单,就做成单项目,方便演示部署。
后续如果大家有需要,可以进行模块划分、做成微服务、添加服务治理、增加接口网关、负载等等,以满足较大规模的并发访问。
后端技术
- SpringBoot 整体框架/接口通讯等
- MyBatisPlus 使用代码生成器轻松实现CRUD,只写业务逻辑即可
- Redis 简单使用保存用户会话
- MySQL 数据库
前端技术
- Vue / vue-element-admin
题主前端不怎么好,简单使用vue-element-admin作为前端框架,也封装了比较多的可用组件,基本能满足需求了。
系统功能
数据库设计
设计思想
数据库的设计、主要是考虑如何去生成试卷、考试完成后如何判卷并实时展示考试结果,并且要考虑性到能问题;
考试开始,通过考试规则从题库中复制题目到试卷中(其中包含了主要信息、是否正确项等),考试完成后直接比对用户答案并写入结果,计算分数时累计正确项的分数即可。
此设计会导致试卷产生比较多的数据,占用数据库容量较大;但是优点是阅卷性能较高、答案随机排列、考试过程中不受题库中试卷变化的影响等等!
数据字典
表名:el_course
说明:课程
参数 | 类型 | 描述 | 非空 |
---|---|---|---|
id | varchar(64) | ID | 否 |
code | varchar(255) | 课程编码 | 否 |
name | varchar(255) | 课程名称 | 否 |
content | varchar(255) | 课程描述 | 否 |
state | int(11) | 课程状态 | 否 |
rule_id | varchar(64) | 考试规则ID | 否 |
create_time | datetime | 创建时间 | 否 |
update_time | datetime | 更新时间 | 否 |
表名:el_course_ware
说明:课件
参数 | 类型 | 描述 | 非空 |
---|---|---|---|
id | varchar(64) | ID | 否 |
course_id | varchar(64) | 课程ID | 否 |
ori_file_name | varchar(255) | 显示文件名 | 否 |
ext | varchar(255) | 文件后缀 | 否 |
full_path | varchar(255) | 文件完整路径 | 否 |
need_learn | int(11) | 要求学习时长 | 否 |
create_time | datetime | 创建时间 | 否 |
update_time | datetime | 更新时间 | 否 |
表名:el_paper
说明:试卷
参数 | 类型 | 描述 | 非空 |
---|---|---|---|
id | varchar(64) | 试卷ID | 否 |
user_id | varchar(64) | 用户ID | 否 |
rule_id | varchar(64) | 规则ID | 否 |
course_id | varchar(32) | 课程ID | 否 |
title | varchar(64) | 试卷标题 | 否 |
total_time | int(11) | 考试时长 | 否 |
user_time | int(11) | 用户时长 | 否 |
total_score | int(11) | 试卷总分 | 否 |
qualify_score | int(11) | 及格线 | 否 |
user_score | int(11) | 用户得分 | 否 |
state | int(11) | 试卷状态 | 否 |
create_time | datetime | 创建时间 | 否 |
update_time | datetime | 更新时间 | 否 |
表名:el_paper_qu
说明:试卷考题
参数 | 类型 | 描述 | 非空 |
---|---|---|---|
id | varchar(64) | ID | 否 |
paper_id | varchar(64) | 试卷ID | 否 |
qu_id | varchar(64) | 题目ID | 否 |
qu_type | int(11) | 题目类型 | 否 |
answered | tinyint(3) | 是否已答 | 否 |
sort | int(11) | 问题排序 | 否 |
score | int(11) | 单题分分值 | 否 |
is_right | tinyint(3) | 是否答对 | 否 |
表名:el_paper_qu_ansr
说明:试卷考题备选答案
参数 | 类型 | 描述 | 非空 |
---|---|---|---|
id | varchar(64) | 自增ID | 否 |
paper_id | varchar(64) | 试卷ID | 否 |
ansr_id | varchar(32) | 回答项ID | 否 |
qu_id | varchar(32) | 题目ID | 否 |
is_right | tinyint(11) | 是否正确项 | 否 |
checked | tinyint(11) | 是否选中 | 否 |
sort | int(11) | 排序 | 否 |
abc | varchar(64) | 选项标签 | 否 |
表名:el_paper_rule
说明:试卷规则
参数 | 类型 | 描述 | 非空 |
---|---|---|---|
id | varchar(64) | 规则编号 | 否 |
title | varchar(255) | 规则名称 | 否 |
total_score | int(11) | 总分 | 否 |
total_time | int(65) | 时长(分钟) | 否 |
remark | varchar(255) | 备注信息 | 否 |
code | varchar(64) | 规则编号 | 否 |
state | int(11) | 状态 | 否 |
qualify_score | int(11) | 合格分数线 | 否 |
表名:el_paper_rule_repo
说明:规则题库
参数 | 类型 | 描述 | 非空 |
---|---|---|---|
id | varchar(64) | ID | 否 |
rule_id | varchar(64) | 规则ID | 否 |
repo_id | varchar(64) | 题库ID | 否 |
radio_count | int(11) | 单选题数量 | 否 |
radio_score | int(11) | 单选题分数 | 否 |
multi_count | int(11) | 多选题数量 | 否 |
multi_score | int(11) | 多选题分数 | 否 |
表名:el_qu
说明:问题题目
参数 | 类型 | 描述 | 非空 |
---|---|---|---|
id | varchar(64) | 题目ID | 否 |
qu_type | int(11) | 题目类型 | 否 |
content | varchar(2000) | 题目内容 | 否 |
create_time | datetime | 创建时间 | 否 |
update_time | datetime | 更新时间 | 否 |
remark | varchar(255) | 题目备注 | 是 |
analysis | varchar(2000) | 整题解析 | 是 |
表名:el_qu_ansr
说明:候选答案
参数 | 类型 | 描述 | 非空 |
---|---|---|---|
id | varchar(64) | 答案ID | 否 |
qu_id | varchar(64) | 问题ID | 否 |
is_right | tinyint(3) | 是否正确 | 否 |
content | varchar(5000) | 答案内容 | 否 |
analysis | varchar(5000) | 答案分析 | 否 |
表名:el_qu_repo
说明:题库
参数 | 类型 | 描述 | 非空 |
---|---|---|---|
id | varchar(64) | 题库ID | 否 |
code | varchar(255) | 题库编号 | 否 |
title | varchar(255) | 题库名称 | 否 |
remark | varchar(255) | 题库备注 | 否 |
create_time | datetime | 创建时间 | 否 |
update_time | datetime | 更新时间 | 否 |
表名:el_qu_repo_ref
说明:试题题库
参数 | 类型 | 描述 | 非空 |
---|---|---|---|
id | varchar(64) | 无 | 否 |
qu_id | varchar(64) | 试题 | 否 |
repo_id | varchar(64) | 归属题库 | 否 |
表名:el_qu_tag
说明:标签
参数 | 类型 | 描述 | 非空 |
---|---|---|---|
id | varchar(64) | ID | 否 |
tag_type | int(11) | 标签类型 | 是 |
tag_name | varchar(255) | 标签名称 | 否 |
表名:el_qu_tag_ref
说明:题目标签
参数 | 类型 | 描述 | 非空 |
---|---|---|---|
id | varchar(64) | ID | 否 |
qu_id | varchar(64) | 问题 | 否 |
tag_id | varchar(64) | 标签 | 否 |
表名:el_user_course
说明:用户课程状态
参数 | 类型 | 描述 | 非空 |
---|---|---|---|
id | varchar(32) | 自然ID | 否 |
user_id | varchar(32) | 用户ID | 否 |
course_id | varchar(32) | 课程ID | 否 |
study_state | int(11) | 学习状态 | 否 |
exam_state | int(11) | 考试状态 | 否 |
exam_result | int(11) | 考试结果 | 否 |
exam_score | int(11) | 最高分数 | 否 |
create_time | datetime | 创建时间 | 否 |
update_time | datetime | 更新时间 | 否 |
表名:el_user_ware
说明:课件阅读记录
参数 | 类型 | 描述 | 非空 |
---|---|---|---|
id | varchar(64) | ID | 否 |
user_id | varchar(64) | 用户ID | 否 |
course_id | varchar(64) | 课程ID | 否 |
ware_id | varchar(64) | 课件ID | 否 |
need_min | int(11) | 需要分钟 | 否 |
learn_sec | int(11) | 已读秒数 | 否 |
create_time | datetime | 创建时间 | 否 |
update_time | datetime | 更新时间 | 否 |
表名:el_user_wrong_book
说明:错题本
参数 | 类型 | 描述 | 非空 |
---|---|---|---|
id | varchar(64) | ID | 否 |
user_id | varchar(64) | 用户ID | 否 |
qu_id | varchar(64) | 题目ID | 否 |
create_time | datetime | 加入时间 | 否 |
update_time | datetime | 最近错误时间 | 否 |
wrong_count | int(11) | 错误时间 | 否 |
title | varchar(255) | 题目标题 | 否 |
sort | int(11) | 错题序号 | 否 |
表名:sys_config
说明:通用配置
参数 | 类型 | 描述 | 非空 |
---|---|---|---|
id | varchar(32) | ID | 否 |
prepare | int(11) | 预热时长 | 否 |
rest_start | time | 休市开始时间 | 否 |
rest_end | time | 休市结束时间 | 否 |
表名:sys_log
说明:系统日志
参数 | 类型 | 描述 | 非空 |
---|---|---|---|
id | varchar(32) | ID | 否 |
title | varchar(255) | 日志名称 | 否 |
user_id | varchar(32) | 用户ID | 否 |
user_name | varchar(32) | 用户名称 | 否 |
ip | varchar(255) | IP地址 | 否 |
ip_region | varchar(255) | IP归属地 | 否 |
create_time | datetime | 创建时间 | 否 |
data | text | 日志明细 | 否 |
表名:sys_role
说明:角色
参数 | 类型 | 描述 | 非空 |
---|---|---|---|
id | varchar(32) | 角色ID | 否 |
role_name | varchar(255) | 角色名称 | 否 |
表名:sys_user
说明:管理用户
参数 | 类型 | 描述 | 非空 |
---|---|---|---|
id | varchar(32) | ID | 否 |
user_name | varchar(255) | 用户名 | 否 |
avatar | varchar(255) | 头像 | 否 |
real_name | varchar(255) | 真实姓名 | 否 |
password | varchar(255) | 密码 | 否 |
salt | varchar(255) | 密码盐 | 否 |
role_ids | varchar(500) | 角色列表 | 否 |
create_time | datetime | 创建时间 | 否 |
update_time | datetime | 更新时间 | 否 |
state | int(11) | 状态 | 否 |
表名:sys_user_role
说明:用户角色
参数 | 类型 | 描述 | 非空 |
---|---|---|---|
id | varchar(32) | ID | 否 |
user_id | varchar(32) | 用户ID | 否 |
role_id | varchar(32) | 角色ID | 否 |
项目地址:https://gitee.com/davz/bool-exam
演示地址:http://exam.jeegen.com
QQ号:18365918
微信:a18365918
邮箱:[email protected]