1.0–博客考试管理系统 表初步设计
- 1.用户表(user) 编号(id) ,用户名(username),密码(password),电话(phone),邮箱(email),状态(status),头像(image),签名(sign)创建时间(created),修改时间(updated)
- 2.题库表(topic) 编号(id),题目((topic_name ), 题目内容(topic_body),所属科目(subject ), 难度(difficulty ), 上传者(writer ),上传者ID(writer_id),试题状态(status)
- 3.答案表(anwer) 编号(id),对应题目编号(topic_id),答案选项(options),答案内容(options_body),正确性(correct)
- 4.菜单表(menu) 编号(id),菜单名(name),父级(parent_id),路径(path),层级(level),图标(icon)创建时间(created),更新时间(updated),菜单状态(status)
- 5.科目表(subject):科目编号(id),科目名字(name),科目描述(name_desc),科目状态(status),创建时间(created),修改时间(updated)
- 6.角色表(role) 角色编号(role_id),角色姓名(role_name),角色职责(role_duty),角色状态(role_status),角色数量(role_num),创建时间(created),修改时间(updated)
- 7.用户角色关联表(user_role)关系编号(id) 用户id(user_id),角色id(role_id),创建时间(created ),修改时间(updated)
- 8.角色菜单关联表(role_menu),关系编号(id),角色id(role_id),菜单id(menu_id),创建时间(created),修改时间(updated)
- 9.好友表(friend)表编号(id),用户id(user_id),好友id(friend_id),好友个数(friend_num),添加时间(created)
- 10.收藏夹(collect)表编号(id),用户id(user_id) ,试题(topic_id), 科目(subject_id),收藏时间(created)
- 11.成绩表(grade)表编号(id),用户id(user_id),所属科目(subject_id),成绩分数(grade)考试时间(created)
- 12.好友请求表(user_request) 请求编号(id),用户id(user_id),请求者id(request_id),请求时间(created)
1.1–具体表描述
1.1-1 用户表
+----------+--------------+------+-----+---------+----------------+
| Field | Type | Null | Key | Default | Extra |
+----------+--------------+------+-----+---------+----------------+
| id | int(11) | NO | PRI | NULL | auto_increment |
| username | varchar(255) | NO | | NULL | |
| password | varchar(255) | NO | | NULL | |
| phone | varchar(20) | YES | | NULL | |
| email | varchar(255) | YES | | NULL | |
| status | int(1) | YES | | 1 | |
| image | varchar(255) | YES | | NULL | |
| created | date | YES | | NULL | |
| updated | date | YES | | NULL | |
| sign | varchar(255) | YES | | NULL | |
+----------+--------------+------+-----+---------+----------------+
1.1-2 题库表
+------------+--------------+------+-----+---------+----------------+
| Field | Type | Null | Key | Default | Extra |
+------------+--------------+------+-----+---------+----------------+
| id | int(20) | NO | PRI | NULL | auto_increment |
| topic_name | varchar(255) | YES | | NULL | |
| topic_body | text | YES | | NULL | |
| subject | int(11) | YES | MUL | NULL | |
| difficulty | int(2) | YES | | NULL | |
| writer | varchar(255) | YES | | NULL | |
| writer_id | int(11) | YES | | NULL | |
+------------+--------------+------+-----+---------+----------------+
1.1-3 答案表
+--------------+--------------+------+-----+---------+----------------+
| Field | Type | Null | Key | Default | Extra |
+--------------+--------------+------+-----+---------+----------------+
| id | int(11) | NO | PRI | NULL | auto_increment |
| topic_id | int(5) | YES | MUL | NULL | |
| options | varchar(50) | YES | | NULL | |
| options_body | varchar(255) | YES | | NULL | |
| correct | int(2) | YES | | NULL | |
+--------------+--------------+------+-----+---------+----------------+
1.1-4菜单表
+-----------+--------------+------+-----+---------+----------------+
| Field | Type | Null | Key | Default | Extra |
+-----------+--------------+------+-----+---------+----------------+
| id | int(11) | NO | PRI | NULL | auto_increment |
| NAME | varchar(20) | YES | | NULL | |
| parent_id | int(5) | YES | | NULL | |
| path | varchar(15) | YES | | NULL | |
| level | int(5) | YES | | NULL | |
| icon | varchar(255) | YES | | NULL | |
| created | date | YES | | NULL | |
| updated | date | YES | | NULL | |
+-----------+--------------+------+-----+---------+----------------+
1.1-5科目表
+-----------+--------------+------+-----+---------+----------------+
| Field | Type | Null | Key | Default | Extra |
+-----------+--------------+------+-----+---------+----------------+
| id | int(20) | NO | PRI | NULL | auto_increment |
| name | varchar(765) | YES | | NULL | |
| name_desc | varchar(765) | YES | | NULL | |
| status | int(2) | YES | | NULL | |
| created | date | YES | | NULL | |
| updated | date | YES | | NULL | |
+-----------+--------------+------+-----+---------+----------------+
1.1-6角色表
+-------------+--------------+------+-----+---------+----------------+
| Field | Type | Null | Key | Default | Extra |
+-------------+--------------+------+-----+---------+----------------+
| role_id | int(100) | NO | PRI | NULL | auto_increment |
| role_name | varchar(255) | YES | | NULL | |
| role_duty | varchar(255) | YES | | NULL | |
| role_status | int(2) | YES | | NULL | |
| role_num | int(100) | YES | | NULL | |
| created | date | YES | | NULL | |
| updated | date | YES | | NULL | |
+-------------+--------------+------+-----+---------+----------------+
1.1-7用户角色关联表
+---------+----------+------+-----+---------+----------------+
| Field | Type | Null | Key | Default | Extra |
+---------+----------+------+-----+---------+----------------+
| id | int(20) | NO | PRI | NULL | auto_increment |
| user_id | int(20) | YES | | NULL | |
| role_id | int(20) | YES | | NULL | |
| created | datetime | YES | | NULL | |
| updated | datetime | YES | | NULL | |
+---------+----------+------+-----+---------+----------------+
1.1-8角色菜单关联表
+---------+----------+------+-----+---------+----------------+
| Field | Type | Null | Key | Default | Extra |
+---------+----------+------+-----+---------+----------------+
| id | int(20) | NO | PRI | NULL | auto_increment |
| role_id | int(20) | YES | | NULL | |
| menu_id | int(20) | YES | | NULL | |
| created | datetime | YES | | NULL | |
| updated | datetime | YES | | NULL | |
+---------+----------+------+-----+---------+----------------+
1.1-9好友表
+------------+----------+------+-----+---------+----------------+
| Field | Type | Null | Key | Default | Extra |
+------------+----------+------+-----+---------+----------------+
| id | int(20) | NO | PRI | NULL | auto_increment |
| user_id | int(20) | YES | | NULL | |
| friend_id | int(20) | YES | | NULL | |
| friend_num | int(20) | YES | | NULL | |
| created | datetime | YES | | NULL | |
+------------+----------+------+-----+---------+----------------+
1.1-10收藏夹
+------------+----------+------+-----+---------+----------------+
| Field | Type | Null | Key | Default | Extra |
+------------+----------+------+-----+---------+----------------+
| id | int(20) | NO | PRI | NULL | auto_increment |
| user_id | int(20) | YES | | NULL | |
| topic_id | int(20) | YES | | NULL | |
| subject_id | int(20) | YES | | NULL | |
| created | datetime | YES | | NULL | |
+------------+----------+------+-----+---------+----------------+
1.1-11成绩表
+------------+----------+------+-----+---------+----------------+
| Field | Type | Null | Key | Default | Extra |
+------------+----------+------+-----+---------+----------------+
| id | int(20) | NO | PRI | NULL | auto_increment |
| user_id | int(20) | YES | | NULL | |
| subject_id | int(20) | YES | | NULL | |
| grade | int(20) | YES | | NULL | |
| created | datetime | YES | | NULL | |
+------------+----------+------+-----+---------+----------------+
1.1-12好友请求表
+------------+----------+------+-----+---------+----------------+
| Field | Type | Null | Key | Default | Extra |
+------------+----------+------+-----+---------+----------------+
| id | int(20) | NO | PRI | NULL | auto_increment |
| user_id | int(20) | YES | | NULL | |
| request_id | int(20) | YES | | NULL | |
| created | datetime | YES | | NULL | |
+------------+----------+------+-----+---------+----------------+
2.0–功能模块
2.1 登陆注册流程
- 注册: 1.注册校验 2.MD5加密 3.存表
- 登录: 1.校验 2.路由拦截守卫 3.表查询 4.MD5加密查询
-
登录跳转到用户的默认界面
2.2 菜单栏表格功能
菜单栏(VUE加 Element-UI)
- 1.表结构定义好层级,父级
- 2.接收封装的菜单数组
- 3.前端展示
业务
- 面包屑
- 2.卡片页
- 3.table 表格
- 4.分页查询(接收3条业务数据,定义返回类型,) 两种写法,第一种mapper层@Select注解,第二种 利用MybatisPlus的分页对象+条件构造
2.3业务状态修改(status)
业务说明:
通过开关,可以控制数据类型的true/false
参数说明:1.传递userID主键
2.传递当前状态信息 true false
前端JS: 有个作用域插槽(slot-scope)利用这个定义作用域,来选择当前需要修改的对应id或者对应的数据
2.4用户新增操作
- 添加对话框 通过属性dialogVisible 控制对话框是否可见.
2.5修改用户信息
业务分析–信息回显
- 获取用户ID,动态查询后台数据库信息,之后实现数据回显操作 最新数据
- 利用作用域插槽,获取当前行对象,之后实现数据回显 页面数据
2.6修改后的确认点击事件
- 对话框的修改事件
2.7全局异常处理机制
说明:后端服务器发生了运行时异常,应当第一时间通知用户,否则用户没有任何提示,影响用户体验
分析:
- 页面没有提示的原因,服务器没有返回201的报错数据
- 后端服务器报错之后,没有处理
采用AOP来解决
AOP的说明:面向想切面编程
AOP说明:
名称:“面向切面编程”
作用:“在不影响源码的情况下,对方法进行扩展,降低了业务的耦合性”
通知:
1.前置通知 before
2.后置通知 afterReturning
3.异常通知 afterThrowing
4.最终通知 after
上述的四大通知 不能改变程序的运行的状态
5.环绕通知 around
环绕通知是功能最为强大的通知方法,可以控制程序的流转过程
2.7Spring中的事物机制
说明
如果后台服务器发生了问题,那么数据信息应该回滚,不应该提交
事物作用:保证正数据的隔离性、持久性、原子性、一致性
@Trasactional加这个注解就解决了
3.0数据的自动同填充功能
业务说明:完成数据库的入库操作的时候,,其中创建时间和修改时间都是需要操作的数据,但是每次都需要操作,就不智能,这种公共的部分应该由框架帮做。
3.1自动填充功能的实现
在入库操作时候,自动填充创建时间
在入库操作是狗,自动填充更新时间
//pojo基类,完成2个任务,2个日期,实现序列化
@Data
@Accessors(chain=true)
public class BasePojo implements Serializable{
@TableField(fill = FieldFill.INSERT)
private Date created; //表示入库时需要赋值
@TableField(fill = FieldFill.INSERT_UPDATE)
private Date updated; //表示入库/更新时赋值.
}