一、考试系统开源版项目介绍
云帆考试系统采用全新的技术栈来开发,后端采用Java17+SpringBoot3.0,前端使用Vue3.0+TypeScript+ElementPlus。项目实现了前后端的完整考试流程,基础功能组件完整可用。
二、技术栈
|----|---------------------------------------------------------|
| 后端 | Java17 + SpringBoot3.0 + Shiro + MyBatisPlus + Swagger3 |
| 前端 | Vue3.0 + TypeScript + ElementPlus + Vite |
三、运行环境
|-------|---------------------|
| JDK版本 | JDK17 |
| 数据库 | MySQL5.7 或 MySQL8.0 |
| Redis | 4.x及以上 |
| Nginx | 可选,用于做前后端分离部署,无版本要求 |
四、在线体验
|--------|---------|---------|
| 在线体验地址 | https://be2.yfhl.net ||
| 平台 | 账号 | 密码 |
| 管理端 | admin | admin |
| 用户端 | student | student |
五、数据库设计
表名:el_cfg_base
说明:系统设置引擎:InnoDB
| 参数 | 类型 | 描述 | 非空 |
|---|---|---|---|
| id | varchar(32) | ID | 否 |
| site_name | varchar(255) | 系统名称 | 是 |
| login_logo | varchar(255) | 登录LOGO | 是 |
| login_bg | varchar(255) | 登录背景 | 是 |
| back_logo | varchar(255) | 后台LOGO | 是 |
| copy_right | varchar(255) | 版权信息 | 是 |
表名:el_cfg_switch
说明:功能配置引擎:InnoDB
| 参数 | 类型 | 描述 | 非空 |
|---|---|---|---|
| id | varchar(32) | 功能名称 | 否 |
| val | varchar(32) | 开关或值 | 是 |
表名:el_exam
说明:课程引擎:InnoDB
| 参数 | 类型 | 描述 | 非空 |
|---|---|---|---|
| id | varchar(64) | ID | 否 |
| title | varchar(500) | 考试名称 | 否 |
| content | varchar(2000) | 考试描述 | 是 |
| open_type | int | 1公开2部门3定员 | 否 |
| state | int | 考试状态 | 否 |
| start_time | datetime | 开始时间 | 否 |
| end_time | datetime | 结束时间 | 否 |
| total_score | decimal(10,2) | 总分数 | 否 |
| total_time | int | 总时长(分钟) | 否 |
| qualify_score | decimal(10,2) | 及格分数 | 否 |
| chance | int | 考试机会 | 否 |
| hand_min | int | 最低交卷分钟 | 否 |
| late_max | int | 允许迟到分钟 | 否 |
| thanks | varchar(2000) | 感谢文字 | 是 |
| repo_id | varchar(64) | 组卷题库ID | 是 |
| create_time | datetime | 创建时间 | 否 |
| update_time | datetime | 更新时间 | 否 |
| create_by | varchar(255) | 创建人 | 是 |
| update_by | varchar(255) | 修改人 | 是 |
表名:el_exam_record
说明:考试记录引擎:InnoDB
| 参数 | 类型 | 描述 | 非空 |
|---|---|---|---|
| id | varchar(64) | ID | 否 |
| user_id | varchar(64) | 用户ID | 否 |
| exam_id | varchar(64) | 考试ID | 否 |
| paper_id | varchar(255) | 结算的试卷ID | 是 |
| try_count | int | 考试次数 | 否 |
| max_score | decimal(10,2) | 最高分数 | 否 |
| last_score | decimal(10,2) | 最近分数 | 否 |
| passed | tinyint | 是否通过 | 否 |
表名:el_exam_rule
说明:考试规则引擎:InnoDB
| 参数 | 类型 | 描述 | 非空 |
|---|---|---|---|
| id | varchar(64) | ID | 否 |
| exam_id | varchar(64) | 考试ID | 否 |
| repo_id | varchar(64) | 题库ID | 是 |
| qu_type | varchar(64) | 题型 | 否 |
| qu_count | int | 出题数量 | 是 |
| qu_score | decimal(10,0) | 每题分数 | 否 |
表名:el_paper
说明:试卷引擎:InnoDB
| 参数 | 类型 | 描述 | 非空 |
|---|---|---|---|
| id | varchar(64) | ID | 否 |
| user_id | varchar(64) | 用户ID | 否 |
| exam_id | varchar(64) | 考试ID | 否 |
| title | varchar(500) | 考试标题 | 否 |
| total_time | int | 考试时长 | 否 |
| user_time | int | 用户时长 | 否 |
| total_score | decimal(10,2) | 试卷总分 | 否 |
| qualify_score | decimal(10,2) | 试卷及格分 | 否 |
| user_score | decimal(10,2) | 用户总得分 | 否 |
| limit_time | datetime | 最后截止时间 | 否 |
| hand_time | datetime | 实际交卷时间 | 是 |
| hand_state | int | 交卷状态,0未交卷,1已交卷,2强制交卷 | 否 |
| passed | tinyint | 成绩是否合格 | 否 |
| create_time | datetime | 创建时间 | 否 |
| update_time | datetime | 更新时间 | 否 |
| create_by | varchar(255) | 创建人 | 是 |
| update_by | varchar(255) | 修改人 | 是 |
表名:el_paper_qu
说明:试卷考题引擎:InnoDB
| 参数 | 类型 | 描述 | 非空 |
|---|---|---|---|
| id | varchar(64) | ID | 否 |
| paper_id | varchar(64) | 试卷ID | 否 |
| qu_id | varchar(64) | 题目ID | 否 |
| qu_type | varchar(32) | 题目类型 | 否 |
| answered | tinyint | 是否已答 | 否 |
| mark | tinyint | 是否标记 | 否 |
| sort | int | 问题排序 | 否 |
| score | decimal(10,2) | 单题分分值 | 否 |
| actual_score | decimal(10,2) | 实际得分(主观题) | 否 |
| is_right | tinyint | 是否答对 | 否 |
表名:el_paper_qu_answer
说明:试卷考题备选答案引擎:InnoDB
| 参数 | 类型 | 描述 | 非空 |
|---|---|---|---|
| id | varchar(64) | ID | 否 |
| paper_id | varchar(64) | 试卷ID | 否 |
| answer_id | varchar(32) | 回答项ID | 否 |
| qu_id | varchar(32) | 题目ID | 否 |
| is_right | tinyint | 是否正确项 | 否 |
| answer | varchar(2000) | 填空题 | 是 |
| checked | tinyint | 是否选中 | 否 |
| sort | int | 排序 | 否 |
| abc | varchar(64) | 选项标签 | 是 |
表名:el_repo
说明:题库引擎:InnoDB
| 参数 | 类型 | 描述 | 非空 |
|---|---|---|---|
| id | varchar(64) | ID | 否 |
| title | varchar(255) | 题库名称 | 否 |
| cat_id | varchar(32) | 分类ID | 是 |
| remark | varchar(255) | 题库备注 | 是 |
| create_time | datetime | 创建时间 | 否 |
| update_time | datetime | 更新时间 | 否 |
| create_by | varchar(255) | 创建人 | 是 |
| update_by | varchar(255) | 修改人 | 是 |
表名:el_repo_qu
说明:问题题目引擎:InnoDB
| 参数 | 类型 | 描述 | 非空 |
|---|---|---|---|
| id | varchar(64) | ID | 否 |
| repo_id | varchar(64) | 所属题库 | 否 |
| chapter_id | varchar(64) | 所属章节 | 是 |
| qu_type | varchar(32) | 题目类型 | 否 |
| difficulty_level | varchar(32) | 难度等级 | 否 |
| content | text | 题目内容 | 否 |
| analysis | text | 整题解析 | 是 |
| create_time | datetime | 创建时间 | 否 |
| update_time | datetime | 更新时间 | 否 |
| create_by | varchar(255) | 创建人 | 是 |
| update_by | varchar(255) | 修改人 | 是 |
表名:el_repo_qu_answer
说明:候选答案引擎:InnoDB
| 参数 | 类型 | 描述 | 非空 |
|---|---|---|---|
| id | varchar(64) | ID | 否 |
| qu_id | varchar(64) | 问题ID | 否 |
| is_right | tinyint | 是否正确 | 否 |
| content | varchar(5000) | 答案内容 | 否 |
| image | varchar(500) | 图片地址 | 是 |
| tag | varchar(255) | ABCD标签 | 是 |
表名:el_sys_depart
说明:部门信息引擎:InnoDB
| 参数 | 类型 | 描述 | 非空 |
|---|---|---|---|
| id | varchar(32) | ID | 否 |
| dept_type | int | 1公司2部门 | 否 |
| parent_id | varchar(32) | 所属上级 | 否 |
| dept_name | varchar(255) | 部门名称 | 否 |
| dept_code | varchar(255) | 部门编码 | 否 |
| dept_level | int | 部门层级 | 否 |
| sort | int | 排序 | 否 |
| create_time | datetime | 创建时间 | 否 |
| update_time | datetime | 更新时间 | 否 |
| create_by | varchar(255) | 创建人 | 否 |
| update_by | varchar(255) | 修改人 | 否 |
表名:el_sys_dic
说明:分类字典引擎:InnoDB
| 参数 | 类型 | 描述 | 非空 |
|---|---|---|---|
| id | varchar(32) | ID | 否 |
| dic_code | varchar(255) | 字典编码 | 是 |
| type | int | 1分类字典,2数据字典 | 是 |
| title | varchar(255) | 字典名称 | 是 |
| remark | varchar(255) | 字典描述 | 是 |
| create_time | datetime | 创建时间 | 否 |
| update_time | datetime | 更新时间 | 否 |
| create_by | varchar(255) | 创建人 | 否 |
| update_by | varchar(255) | 修改人 | 否 |
表名:el_sys_dic_value
说明:分类字典值引擎:InnoDB
| 参数 | 类型 | 描述 | 非空 |
|---|---|---|---|
| id | varchar(32) | ID/字典编码 | 否 |
| dic_code | varchar(255) | 归属字典 | 是 |
| dic_value | varchar(255) | 子项编码 | 是 |
| title | varchar(255) | 分类名称 | 是 |
| parent_id | varchar(32) | 上级ID | 是 |
| remark | varchar(255) | 描述 | 是 |
| create_time | datetime | 创建时间 | 否 |
| update_time | datetime | 更新时间 | 否 |
| create_by | varchar(255) | 创建人 | 否 |
| update_by | varchar(255) | 修改人 | 否 |
表名:el_sys_menu
说明:系统菜单引擎:InnoDB
| 参数 | 类型 | 描述 | 非空 |
|---|---|---|---|
| id | varchar(32) | ID | 否 |
| parent_id | varchar(32) | 上级菜单 | 是 |
| menu_type | int | 1菜单2功能 | 否 |
| permission_tag | varchar(255) | 权限标识 | 是 |
| path | varchar(255) | 访问路径 | 是 |
| component | varchar(255) | 视图或Layout | 是 |
| redirect | varchar(255) | 跳转地址 | 是 |
| name | varchar(255) | 名称 | 是 |
| meta_title | varchar(255) | 路由标题 | 是 |
| meta_icon | varchar(255) | 路由标题 | 是 |
| meta_active_menu | varchar(255) | 高亮菜单 | 是 |
| meta_no_cache | tinyint | 是否缓存 | 是 |
| hidden | tinyint | 是否隐藏 | 是 |
| sort | int | 越小越前 | 是 |
| create_time | datetime | 创建时间 | 否 |
| update_time | datetime | 更新时间 | 否 |
| create_by | varchar(255) | 创建人 | 否 |
| update_by | varchar(255) | 修改人 | 否 |
表名:el_sys_role
说明:角色引擎:InnoDB
| 参数 | 类型 | 描述 | 非空 |
|---|---|---|---|
| id | varchar(32) | 角色ID | 否 |
| role_name | varchar(255) | 角色名称 | 否 |
| data_scope | int | 数据权限 | 否 |
| role_level | int | 越大越高 | 否 |
| remark | varchar(255) | 备注信息 | 是 |
| create_time | datetime | 创建时间 | 否 |
| create_by | varchar(255) | 创建人 | 否 |
| update_time | datetime | 更新时间 | 否 |
| update_by | varchar(255) | 修改人 | 否 |
表名:el_sys_role_menu
说明:角色菜单授权引擎:InnoDB
| 参数 | 类型 | 描述 | 非空 |
|---|---|---|---|
| id | varchar(32) | ID | 否 |
| role_id | varchar(32) | 角色ID | 否 |
| menu_id | varchar(32) | 菜单ID | 否 |
| create_time | datetime | 创建时间 | 否 |
| update_time | datetime | 更新时间 | 否 |
| create_by | varchar(255) | 创建人 | 否 |
| update_by | varchar(255) | 修改人 | 否 |
| data_flag | int | 数据标识 | 否 |
表名:el_sys_user
说明:管理用户引擎:InnoDB
| 参数 | 类型 | 描述 | 非空 |
|---|---|---|---|
| id | varchar(32) | ID | 否 |
| user_name | varchar(255) | 用户名 | 否 |
| real_name | varchar(255) | 真实姓名 | 否 |
| avatar | varchar(255) | 头像 | 否 |
| password | varchar(255) | 密码 | 否 |
| salt | varchar(255) | 密码盐 | 否 |
| state | int | 状态 | 否 |
| id_card | varchar(255) | 身份证号码 | 是 |
| mobile | varchar(255) | 手机号 | 是 |
| varchar(255) | 邮箱 | 是 | |
| dept_code | varchar(32) | 部门编码 | 是 |
| create_time | datetime | 创建时间 | 否 |
| create_by | varchar(255) | 创建人 | 否 |
| update_time | datetime | 更新时间 | 否 |
| update_by | varchar(255) | 修改人 | 否 |
表名:el_sys_user_role
说明:用户角色引擎:InnoDB
| 参数 | 类型 | 描述 | 非空 |
|---|---|---|---|
| id | varchar(32) | ID | 否 |
| user_id | varchar(32) | 用户ID | 否 |
| role_id | varchar(32) | 角色ID | 否 |
表名:pl_plugin_data
说明:插件信息引擎:InnoDB
| 参数 | 类型 | 描述 | 非空 |
|---|---|---|---|
| id | varchar(255) | ID | 否 |
| code | varchar(255) | 唯一识别码 | 否 |
| title | varchar(255) | 插件名称 | 否 |
| schema_id | varchar(255) | 元数据ID | 否 |
| group_id | varchar(255) | 分组ID | 否 |
| config_data | varchar(5000) | 配置数据 | 是 |
| service_clazz | varchar(2000) | 后端服务类 | 是 |
| component | varchar(255) | 前端页面 | 否 |
| in_use | tinyint | 是否使用 | 否 |
| state | varchar(255) | 插件状态 | 否 |
表名:pl_plugin_group
说明:插件分组引擎:InnoDB
| 参数 | 类型 | 描述 | 非空 |
|---|---|---|---|
| id | varchar(255) | ID | 否 |
| title | varchar(255) | 分组名称 | 是 |
| single | tinyint | 独立排斥 | 是 |
表名:pl_plugin_schema
说明:插件元数据引擎:InnoDB
| 参数 | 类型 | 描述 | 非空 |
|---|---|---|---|
| id | varchar(255) | ID | 否 |
| schema_data | varchar(5000) | 元数据 | 是 |
| group_id | varchar(255) | 分组 | 是 |
表名:qrtz_blob_triggers
| 参数 | 类型 | 描述 | 非空 |
|---|---|---|---|
| SCHED_NAME | varchar(120) | 无 | 否 |
| TRIGGER_NAME | varchar(200) | 无 | 否 |
| TRIGGER_GROUP | varchar(200) | 无 | 否 |
| BLOB_DATA | blob, | 无 | 是 |
| -- | Records | 无 | 是 |
表名:qrtz_calendars
| 参数 | 类型 | 描述 | 非空 |
|---|---|---|---|
| SCHED_NAME | varchar(120) | 无 | 否 |
| CALENDAR_NAME | varchar(200) | 无 | 否 |
| CALENDAR | blob | 无 | 否 |
表名:qrtz_cron_triggers
| 参数 | 类型 | 描述 | 非空 |
|---|---|---|---|
| SCHED_NAME | varchar(120) | 无 | 否 |
| TRIGGER_NAME | varchar(200) | 无 | 否 |
| TRIGGER_GROUP | varchar(200) | 无 | 否 |
| CRON_EXPRESSION | varchar(120) | 无 | 否 |
| TIME_ZONE_ID | varchar(80) | 无 | 是 |
表名:qrtz_fired_triggers
| 参数 | 类型 | 描述 | 非空 |
|---|---|---|---|
| SCHED_NAME | varchar(120) | 无 | 否 |
| ENTRY_ID | varchar(95) | 无 | 否 |
| TRIGGER_NAME | varchar(200) | 无 | 否 |
| TRIGGER_GROUP | varchar(200) | 无 | 否 |
| INSTANCE_NAME | varchar(200) | 无 | 否 |
| FIRED_TIME | bigint | 无 | 否 |
| SCHED_TIME | bigint | 无 | 否 |
| PRIORITY | int | 无 | 否 |
| STATE | varchar(16) | 无 | 否 |
| JOB_NAME | varchar(200) | 无 | 是 |
| JOB_GROUP | varchar(200) | 无 | 是 |
| IS_NONCONCURRENT | varchar(1) | 无 | 是 |
| REQUESTS_RECOVERY | varchar(1) | 无 | 是 |
表名:qrtz_job_details
| 参数 | 类型 | 描述 | 非空 |
|---|---|---|---|
| SCHED_NAME | varchar(120) | 无 | 否 |
| JOB_NAME | varchar(200) | 无 | 否 |
| JOB_GROUP | varchar(200) | 无 | 否 |
| DESCRIPTION | varchar(250) | 无 | 是 |
| JOB_CLASS_NAME | varchar(250) | 无 | 否 |
| IS_DURABLE | varchar(1) | 无 | 否 |
| IS_NONCONCURRENT | varchar(1) | 无 | 否 |
| IS_UPDATE_DATA | varchar(1) | 无 | 否 |
| REQUESTS_RECOVERY | varchar(1) | 无 | 否 |
| JOB_DATA | blob, | 无 | 是 |
表名:qrtz_locks
| 参数 | 类型 | 描述 | 非空 |
|---|---|---|---|
| SCHED_NAME | varchar(120) | 无 | 否 |
| LOCK_NAME | varchar(40) | 无 | 否 |
表名:qrtz_paused_trigger_grps
| 参数 | 类型 | 描述 | 非空 |
|---|---|---|---|
| SCHED_NAME | varchar(120) | 无 | 否 |
| TRIGGER_GROUP | varchar(200) | 无 | 否 |
表名:qrtz_scheduler_state
| 参数 | 类型 | 描述 | 非空 |
|---|---|---|---|
| SCHED_NAME | varchar(120) | 无 | 否 |
| INSTANCE_NAME | varchar(200) | 无 | 否 |
| LAST_CHECKIN_TIME | bigint | 无 | 否 |
| CHECKIN_INTERVAL | bigint | 无 | 否 |
表名:qrtz_simple_triggers
| 参数 | 类型 | 描述 | 非空 |
|---|---|---|---|
| SCHED_NAME | varchar(120) | 无 | 否 |
| TRIGGER_NAME | varchar(200) | 无 | 否 |
| TRIGGER_GROUP | varchar(200) | 无 | 否 |
| REPEAT_COUNT | bigint | 无 | 否 |
| REPEAT_INTERVAL | bigint | 无 | 否 |
| TIMES_TRIGGERED | bigint | 无 | 否 |
表名:qrtz_simprop_triggers
| 参数 | 类型 | 描述 | 非空 |
|---|---|---|---|
| SCHED_NAME | varchar(120) | 无 | 否 |
| TRIGGER_NAME | varchar(200) | 无 | 否 |
| TRIGGER_GROUP | varchar(200) | 无 | 否 |
| STR_PROP_1 | varchar(512) | 无 | 是 |
| STR_PROP_2 | varchar(512) | 无 | 是 |
| STR_PROP_3 | varchar(512) | 无 | 是 |
| INT_PROP_1 | int | 无 | 是 |
| INT_PROP_2 | int | 无 | 是 |
| LONG_PROP_1 | bigint | 无 | 是 |
| LONG_PROP_2 | bigint | 无 | 是 |
| DEC_PROP_1 | decimal(13,4) | 无 | 是 |
| DEC_PROP_2 | decimal(13,4) | 无 | 是 |
| BOOL_PROP_1 | varchar(1) | 无 | 是 |
| BOOL_PROP_2 | varchar(1) | 无 | 是 |
表名:qrtz_triggers
| 参数 | 类型 | 描述 | 非空 |
|---|---|---|---|
| SCHED_NAME | varchar(120) | 无 | 否 |
| TRIGGER_NAME | varchar(200) | 无 | 否 |
| TRIGGER_GROUP | varchar(200) | 无 | 否 |
| JOB_NAME | varchar(200) | 无 | 否 |
| JOB_GROUP | varchar(200) | 无 | 否 |
| DESCRIPTION | varchar(250) | 无 | 是 |
| NEXT_FIRE_TIME | bigint | 无 | 是 |
| PREV_FIRE_TIME | bigint | 无 | 是 |
| PRIORITY | int | 无 | 是 |
| TRIGGER_STATE | varchar(16) | 无 | 否 |
| TRIGGER_TYPE | varchar(8) | 无 | 否 |
| START_TIME | bigint | 无 | 否 |
| END_TIME | bigint | 无 | 是 |
| CALENDAR_NAME | varchar(200) | 无 | 是 |
| MISFIRE_INSTR | smallint | 无 | 是 |
| JOB_DATA | blob, | 无 | 是 |
六、系统功能介绍
登录&注册
登录:使用账号+密码登录到系统,由系统判定角色,用户角色查看用户端功能,管理端角色管理考试系统
注册:(1)用户主动注册,填写用户名、姓名、密码,(2)管理端创建用户,包含用户名、姓名、密码、部门、角色、头像、身份证号、手机号码。
用户端
在线考试:(1)在线考试,交卷后系统自动出分,(2)支持单选题、多选题、判断题,(3)查看考试成绩,列出用户所有参与的考试记录,列出考试名称、考试次数、最高分数、最近分数、是否通过,取分逻辑为取成绩的最高分,(4)考试错题归类,考试错题自动归到错题集中,支持错题训练。
管理端
考试管理:(1)考试基本配置:考试名称、考试时间、总分、及格分、考试时长、考试机会、允许迟到时长、最低交卷时长、考试说明,(2)考试结果,显示分数,(3)考试权限:完全公开,(4)组卷方式:随机组卷,设置抽题的规则,保存的是规则不是真正的试题,而是系统抽题的规则。
题库管理:(1)题库名称,(2)自定义题库分类。(3)试题类型:单选题、多选题、判断题,(4)试题属性:自定义试题难度等级、试题题干、试题选项(干扰选项、答案选项、答案标识)、试题解析,(5)搜索试题。
组织架构:(1)管理部门组织结构,(2)管理系统用户:创建新用户、修改用户信息、启用用户、禁用用户。
系统配置:(1)管理系统菜单,(2)系统角色管理:分为学员和超级管理员,可以创建子管理员,(3)数据字典:试题难度、题库分类、用户状态等定义,(4)系统个性设置:系统名称、登录页背景图、后台图标、底部信息、用户注册开启与关闭。
如果开源版无法满足您的需求,商业版支持更加丰富的考试内容,周边课程学习、企业培训计划、发放证书、问卷答题等。
考试系统开源版
考试系统开源版设计
考试系统开源版在线体验