技术选型
因为本人长期从事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]