简介
原始数据:书目信息、章节信息、题目信息、系统菜单、系统角色、系统用户。
主要任务:系统主要采用spring boot作为后端框架,前端使用vue+elementUI,为408刷题小程序提供一个方面的管理和维护的任务,主要功能包括,对题目、章节、书目的添加、修改、删除、查询、启用等操作;对用户每日以及近七日内的数据进行可视化展示,方便进行分析等操作。
安全性:系统采用权限分级管理,根据不同的用户分配不同的权限,springsecurity框架采用了bycrpt加密方式,这是一种单向的hash加密方式,不可以反向生成明文,理论上不可破解。用户的密码采用这种加密方式,数据库存储的是加密后的密文。此外系统还设有接口级别的权限验证,访问接口必须携带token验证,验证完后还要验证该用户是否拥有访问接口的权限。Token每次的使用时限也仅有两个小时,更加进一步的保护了系统安全。
技术要求
数据库:MySQL数据库 ,redis数据库
前端方面:Vue 、ElementUI
后端方面:Springboot、mybatis、spring security、redis
名称定义
元素名 |
描述 |
定义 |
系统用户 |
系统的使用者 |
用户=ID号+用户名+密码+头像+邮箱+城市+创建时间+修改时间+最后一次登录+状态 |
系统角色 |
对该系统有不同操作权限的用户称为角色 |
角色=ID号+角色名+识别码+备注+创建时间+更新时间+状态 |
系统菜单 |
系统内功能 |
菜单=ID号+父菜单ID号+菜单名+菜单路由+权限码+组件+类型+图标+序列号+创建时间+更新时间+状态 |
书目 |
系统管理的一级对象 |
书目=ID号+名称+题目数量+激活状态+创建时间+修改时间 |
章节 |
系统管理的二级对象 |
章节=ID号+名称+所属书目ID号+题目数量+激活状态+创建时间+修改时间 |
题目 |
系统管理的三级对象 |
题目=ID号+所属书目ID号+所属章节ID号+选项+答案+分析+来源+是否属于强化题目+创建时间+修改时间 |
系统流程图
系统登录流程图
系统操作流程图
数据库表设计
系统菜单表
字段名称 |
数据类型 |
字段长度 |
主键 |
说明 |
id |
bigint |
20 |
是 |
ID值 |
parent_id |
bigint |
20 |
否 |
父节点ID值 |
name |
varchar |
64 |
否 |
名字 |
path |
varchar |
255 |
否 |
路径 |
perms |
varchar |
255 |
否 |
权限码 |
component |
varchar |
255 |
否 |
组件 |
type |
int |
5 |
否 |
类型 |
icon |
varchar |
32 |
否 |
图标 |
orderNum |
int |
11 |
否 |
排序 |
created |
datetime |
0 |
否 |
创建时间 |
updated |
datetime |
0 |
否 |
修改时间 |
statu |
int |
5 |
否 |
状态 |
系统角色表
字段名称 |
数据类型 |
字段长度 |
主键 |
说明 |
id |
bigint |
20 |
是 |
ID值 |
name |
varchar |
64 |
否 |
姓名 |
code |
varchar |
64 |
否 |
唯一编码 |
remark |
varchar |
64 |
否 |
备注 |
created |
datetime |
0 |
否 |
创建时间 |
updated |
datetime |
0 |
否 |
更新时间 |
statu |
int |
5 |
否 |
状态 |
角色菜单表
字段名称 |
数据类型 |
字段长度 |
主键 |
说明 |
id |
bigint |
20 |
是 |
ID值 |
RoleId |
bigint |
20 |
否 |
角色ID值 |
MenuId |
bigint |
20 |
否 |
菜单ID值 |
系统用户表
字段名称 |
数据类型 |
字段长度 |
主键 |
说明 |
id |
bigint |
20 |
是 |
ID值 |
username |
varchar |
64 |
否 |
用户名 |
password |
varchar |
64 |
否 |
密码 |
avatar |
varchar |
255 |
否 |
头像 |
varchar |
64 |
否 |
邮箱 |
|
city |
varchar |
64 |
否 |
城市 |
created |
datetime |
0 |
否 |
创建时间 |
updated |
datetime |
0 |
否 |
修改时间 |
lastlogin |
datetime |
0 |
否 |
上一次登录 |
statu |
int |
5 |
否 |
状态 |
用户角色表
字段名称 |
数据类型 |
字段长度 |
主键 |
说明 |
id |
bigint |
20 |
是 |
ID值 |
user_id |
bigint |
20 |
否 |
用户ID值 |
role_id |
bigint |
20 |
否 |
角色ID值 |
书目表
字段名称 |
数据类型 |
字段长度 |
主键 |
说明 |
id |
char |
50 |
是 |
序号 |
name |
varchar |
50 |
否 |
书名 |
quantity |
int |
50 |
否 |
题目数量 |
create_time |
datetime |
0 |
否 |
创建时间 |
modified_time |
datetime |
0 |
否 |
修改时间 |
章节表
字段名称 |
数据类型 |
字段长度 |
主键 |
说明 |
id |
char |
50 |
是 |
序号 |
name |
varchar |
50 |
否 |
章节名 |
book_id |
char |
50 |
否 |
对应书的序号 |
quantity |
int |
50 |
否 |
题目数量 |
create_time |
datetime |
0 |
否 |
创建时间 |
modified_time |
datetime |
0 |
否 |
修改时间 |
题目表
字段名称 |
数据类型 |
字段长度 |
主键 |
说明 |
id |
Int |
50 |
是 |
序号 |
question |
text |
80 |
否 |
题目信息 |
book_id |
tinyint |
4 |
否 |
对应书的序号 |
create_time |
datetime |
0 |
否 |
创建时间 |
modified_time |
datetime |
0 |
否 |
修改时间 |
chapter_id |
tinyint |
4 |
否 |
对应章节序号 |
option_A |
text |
80 |
否 |
A选项 |
option_B |
text |
80 |
否 |
B选项 |
option_C |
text |
80 |
否 |
C选项 |
option_D |
text |
80 |
否 |
D选项 |
answer |
int |
20 |
否 |
答案 |
analysis |
text |
80 |
否 |
解析 |
origin |
varchar |
100 |
否 |
来源 |
reinforce |
tinyint |
4 |
否 |
是否为真题 |
系统功能模块图
系统功能模块图
系统详细设计
登录验证模块
模块描述:用户登录系统进行验证,对用户输入的信息进行核检
主要功能:验证身份为合法用户
输入项:用户名 + 密码 + 验证码
输出项:
成功:登录成功
失败:验证码错误 / 用户名密码错误
算法描述:
使用spring security框架,对用户输入的信息就行核验,首先验证验证码是否正确,验证码正确后验证输入的用户信息是否合法,如果合法则登录成功并根据身份信息生成Token返回给前端,并写入redis,否则返回登录失败。
身份认证模块
模块描述:用户登录成功后,用户访问接口前会对该用户的角色所具有的权限进行认证,如果该用户拥有该权限这允许访问,否则返回权限不足。
主要功能:检验用户是否有权访问该接口
输出项:访问成功/权限不足
算法描述:
spring security框架将从缓存中获取该用户的身份信息对应的权限列表,如果缓存中没有则调用dao层函数查询该用户身份可以访问的权限,然后判断该用户当前访问的接口是否有权访问,如果有权访问则允许访问,否则将转到权限不足的拦截器中,将结果返回前端。
系统菜单管理模块
模块描述:管理菜单即权限
主要功能:添加、删除、修改、查找菜单
(1)添加菜单
输入项:父菜单+菜单名+菜单路由+权限码+组件+类型+图标+序列号+创建时间+更新时间+状态
输出项:添加成功/添加失败
算法描述:
调用controller层添加菜单接口,将用户输入信息进行封装后,调用service进而调用dao层,将数据写入到数据库,完成添加。
(2)删除菜单
输出项:删除成功/删除失败
算法描述:
调用controller层删除菜单接口,获取当前所要删除菜单的id值,调用service进而调用dao层,将数据在数据库中删除。
(3)修改菜单
输入项:修改的字段
输出项:修改成功/修改失败
算法描述:
获取当前行的id值,将修改后的数据封装成实体类后,调用controller层更新菜单接口,调用service进而调用dao层,将该条数据在数据库中更新。
(4)查找菜单
输出项:菜单的全部查询结果
算法描述:
点击菜单管理后,系统直接调用菜单全部查询的接口,调用service进而调用dao层,将全部查询的结构封装后返回给前端。
系统用户管理模块
模块描述:用户的增加,修改,删除,查找,以及用户角色的分配。
主要功能:添加、删除、修改、查找用户,为用户分配角色
(1)添加用户
输入项:用户名+密码+头像+邮箱+城市+状态
输出项:添加成功/添加失败
算法描述:
调用controller层添加用户接口,将用户输入信息进行封装后,调用service进而调用dao层,将数据写入到数据库,完成添加。
(2)删除用户
输出项:删除成功/删除失败
算法描述:
调用controller层删除学生接口,将前端传过来的ID号传入函数,调用service进而调用dao层,将该ID号对应的用户进行删除。
(3)修改用户
输入项:修改的字段
输出项:删除成功/删除失败
算法描述:
将修改的字段封装后,调用controller层修改用户信息的接口,将封装后的实体类传入,调用service层进而调用dao层,根据id值对数据库进行操作,将该id值对应的数据进行修改,并返回前端结果。
(4)查找用户
输入项:用户姓名
输出项:返回查找后的数据
算法描述:
将用户输入的用户姓名传入controller层,调用根据用户姓名查询用户的接口,将姓名传入函数,调用service层进而调用dao层,对数据库操作后,将结果返回。
(5)为用户分配角色
输入项:选择用户勾选的角色
输出项:操作成功/未作出有效操作
算法描述:
调用controller层函数将角色列表展示给前端,同时保存当前勾选的角色id,将用户的id和保存的角色id进行封装传入controller层,调用调用DAO层函数,查询该用户id之前所具有的角色,将两个角色列表进行对比,如果结果大于零则说明增加了角色,调用增加角色的函数,为该用户添加角色,返回操作成功,如果结果小于零,则说明该用户减少了角色,调用删除用户角色的函数,删除用户角色,返回操作成功,否则返回未作出有效操作,最后将结果返回前端。
(6)重置密码
输出项:重置成功
算法描述:
获取该用户的id,调用controller层重置密码函数,将系统内置密码进行加密后,和id值一起封装传入service层进而调用dao层对数据库中当前id的password进行修改,将修改后的结果返回前端。
系统角色管理模块
模块描述:用户的增加,修改,删除,查找,以及用户角色的分配。
主要功能:添加、删除、修改、查找用户,为用户分配角色
(1)添加角色
输入项:角色名+识别码+备注+状态
输出项:添加成功/添加失败
算法描述:
调用controller层添加角色接口,将用户输入信息进行封装后,调用service进而调用dao层,将数据写入到数据库,完成添加。
(2)删除角色
输出项:删除成功/删除失败
算法描述:
调用controller层删除角色接口,将前端传过来的ID号传入函数,调用service进而调用dao层,将该ID号对应的角色进行删除。
(3)修改角色
输入项:修改的字段
输出项:删除成功/删除失败
算法描述:
将修改的字段封装后,调用controller层修改角色信息的接口,将封装后的实体类传入,调用service层进而调用dao层,根据id值对数据库进行操作,将该id值对应的数据进行修改,并返回前端结果。
(4)查找角色
输入项:角色名
输出项:返回查找后的数据
算法描述:
将用户输入的角色名传入controller层,调用根据角色名查询角色的接口,将角色名传入函数,调用service层进而调用dao层,对数据库进行查找操作后,将结果返回。
(5)为角色分配权限
输出项:操作成功/未作出有效操作
算法描述:
调用controller层函数将菜单列表展示给前端,同时保存当前勾选的菜单id,将角色的id和保存的菜单id进行封装传入controller层,调用调用DAO层函数,查询该角色id之前所具有的菜单,再调用函数查询该角色之前有权限的菜单,将两个菜单列表进行对比,如果结果大于零则说明增加了菜单,调用给当前角色增加菜单的函数,为该用户添加菜单,返回操作成功,如果结果小于零,则说明该用户减少了菜单,调用删除角色菜单的函数,删除角色菜单,返回操作成功,否则返回未作出有效操作,最后将结果返回前端。
书目管理模块
模块描述:系统一级管理对象
主要功能:添加、删除、修改、查找、是否在小程序端进行启用书目等其他操作
(1)添加书目
输入项:书目名称
输出项:添加成功/添加失败
算法描述:
调用controller层添加书目接口,将输入信息和默认字段值进行封装后,调用service进而调用dao层,将数据写入到数据库,完成添加。
(2)删除/批量删除书目
输出项:删除成功/删除失败
算法描述:
调用controller层删除书目接口/批量删除接口,将前端传过来的ID号/ID数组传入函数,调用service进而调用dao层,将该ID号/ID数组对应的书目进行删除。
(3)修改书目
输入项:修改的字段
输出项:修改成功/修改失败
算法描述:
将修改的字段封装后,调用controller层修改书目信息的接口,将封装后的实体类传入,调用service层进而调用dao层,根据id值对数据库进行操作,将该id值对应的数据进行修改,并返回前端结果。
(4)查找书目
输入项:书目名称字段
输出项:返回查找后的数据
算法描述:
将用户输入的书目名称传入controller层,调用模糊查询书目的接口,将书目名称名传入函数,调用service层进而调用dao层,对数据库进行查找操作后,将结果返回。
(5)启用/取消启用书目
输入项:书目启用字段、章节ID字段
输出项:启用成功/取消启用成功/失败
算法描述:
将用户输入的启用字段传入controller层,调用controller层修改书目信息的接口,将封装后的实体类传入,调用service层进而调用dao层,根据id值对数据库进行操作,将该id值对应的数据进行修改,并返回前端结果。
章节管理模块
模块描述:系统二级管理对象
主要功能:添加、删除、修改、查找、是否在小程序端进行启用该章节等其他操作
(1)添加章节
输入项:章节名称、章节所属书目ID字段
输出项:添加成功/添加失败
算法描述:
调用controller层添加章节接口,将输入信息和默认字段值进行封装后,调用service进而调用dao层,将数据写入到数据库,完成添加。
(2)删除/批量删除章节
输出项:删除成功/删除失败
算法描述:
调用controller层删除章节接口/批量删除接口,将前端传过来的ID号/ID数组传入函数,调用service进而调用dao层,将该ID号/ID数组对应的章节进行删除。
(3)修改章节
输入项:修改的字段
输出项:修改成功/修改失败
算法描述:
将修改的字段封装后,调用controller层修改章节信息的接口,将封装后的实体类传入,调用service层进而调用dao层,根据id值对数据库进行操作,将该id值对应的数据进行修改,并返回前端结果。
(4)查找章节
输入项:章节名称字段、章节所属书目ID字段
输出项:返回查找后的数据
算法描述:
将用户输入的信息传入controller层,调用模糊查询章节的接口,将章节名称、ID号传入函数,调用service层进而调用dao层,对数据库进行查找操作后,将结果返回。
(5)启用/取消启用章节
输入项:章节启用字段、章节ID字段
输出项:启用成功/取消启用成功/失败
算法描述:
将用户输入的启用字段传入controller层,调用controller层修改章节信息的接口,将封装后的实体类传入,调用service层进而调用dao层,根据id值对数据库进行操作,将该id值对应的数据进行修改,并返回前端结果。
题目管理模块
模块描述:系统三级管理对象,主要管理对象
主要功能:添加、删除、修改、查找、查找题目等其他操作
(1)添加题目
输入项:题目名称、选择、答案、分析、来源等字段
输出项:添加成功/添加失败
算法描述:
调用controller层添加题目接口,将输入信息和默认字段值进行封装后,调用service进而调用dao层,将数据写入到数据库,完成添加。
(2)删除/批量删除题目
输出项:删除成功/删除失败
算法描述:
调用controller层删除题目接口/批量删除接口,将前端传过来的ID号/ID数组传入函数,调用service进而调用dao层,将该ID号/ID数组对应的题目进行删除。
(3)修改题目
输入项:修改的字段
输出项:修改成功/修改失败
算法描述:
将修改的字段封装后,调用controller层修改题目信息的接口,将封装后的实体类传入,调用service层进而调用dao层,根据id值对数据库进行操作,将该id值对应的数据进行修改,并返回前端结果。
(4)查找题目
输入项:题目名称字段、题目所属书目ID字段、题目所属章节ID字段
输出项:返回查找后的数据
算法描述:
将用户输入的信息传入controller层,调用模糊查询题目的接口,将题目名称、书目ID号、章节ID号传入函数,调用service层进而调用dao层,对数据库进行查找操作后,将结果返回。
系统运行展示
系统登录
数据可视化
修改密码
用户管理
模糊查找
新增信息
修改信息
分配角色
分配权限
菜单管理
新增菜单
题目管理
条件查询
修改题目
章节管理
书目管理
今日排行榜
累计排行榜
效果预览
408小程序管理端