字节乱动-团队作业四项目系统设计与数据库设计
字节乱动对团队作业四 — 项目系统设计与数据库设计
字节乱动对团队作业四 — 项目系统设计与数据库设计
这个作业属于哪个课程 | 2021春软件工程实践|s班 |
---|---|
这个作业要求在哪里 | 作业要求 |
团队名称 | 字节乱动 |
这个作业的目标 | 完成需求分析,制定团队项目的整体计划安排及明确的里程碑 |
作业正文 | 正文 |
其他参考文献 | 《系统设计说明书》《数据库设计说明书》国标规范文本 |
一、预期开发计划时间安排
项目主要分为 4阶段:
- 系统与数据库设计。
- 项目实现V.1.0版本。
- 项目实现思考与学习。
- 项目实现V2.0版本。
计划表格如下:
序号 | 计划 | 开始时间 | 结束时间 | 耗时 | 完成度 |
---|---|---|---|---|---|
1 | 系统设计 | 2021-04-19 | 2021-04-23 | 5.0 日 | 100% |
2 | 数据库设计 | 2021-04-19 | 2021-04-23 | 5.0 日 | 100% |
3 | 环境搭建 | 2021-04-23 | 2021-04-25 | 3.0 日 | 0% |
4. | 安卓端mvvm架构搭建 | 2021-04-23 | 2021-04-23 | 1.0 日 | 0% |
5. | springboot+thymeleaf+mybais搭建 | 2021-04-23 | 2021-04-23 | 1.0 日 | 0% |
6. | 前后端调试 | 2021-04-24 | 2021-04-25 | 2.0 日 | 0% |
7. | 项目实现V1.0-安卓: | 2021-04-26 | 2021-05-05 | 10.0 日 | 0% |
8. | 用户登录,注册(学生) | 2021-04-26 | 2021-04-26 | 1.0 日 | 0% |
9. | 分数查看 | 2021-04-27 | 2021-04-27 | 1.0 日 | 0% |
10 | 评分任务-组内评分 | 2021-04-28 | 2021-04-28 | 1.0 日 | 0% |
11 | 评分任务-组间评分 | 2021-04-29 | 2021-04-30 | 2.0 日 | 0% |
12 | 个人模块-我的团队 | 2021-05-01 | 2021-05-01 | 1.0 日 | 0% |
13 | 个人模块-退出登录,反馈意见 | 2021-05-02 | 2021-05-02 | 1.0 日 | 0% |
14 | 前后端对接 | 2021-05-03 | 2021-05-05 | 3.0 日 | 0% |
15 | 项目实现V1.0-web前端: | 2021-04-26 | 2021-05-09 | 14.0 日 | 0% |
16 | 登录模块 | 2021-04-26 | 2021-04-26 | 1.0 日 | 0% |
17 | 细则管理-新增细则 | 2021-04-27 | 2021-04-27 | 1.0 日 | 0% |
18 | 细则管理-所有细则 | 2021-04-28 | 2021-04-28 | 1.0 日 | 0% |
19 | 细则管理-细则详情 | 2021-04-29 | 2021-04-29 | 1.0 日 | 0% |
20 | 细则管理-删改细则 | 2021-04-30 | 2021-04-30 | 1.0 日 | 0% |
21 | 学生管理-新增学生 | 2021-05-01 | 2021-05-01 | 1.0 日 | 0% |
22 | 学生管理-所有学生 | 2021-05-02 | 2021-05-02 | 1.0 日 | 0% |
23 | 团队管理-新增团队 | 2021-05-03 | 2021-05-03 | 1.0 日 | 0% |
24 | 团队管理-所有团队 | 2021-05-04 | 2021-05-04 | 1.0 日 | 0% |
25 | 学生模块-作业提交(链接版本) | 2021-05-05 | 2021-05-05 | 1.0 日 | 0% |
26 | 成绩管理-博客评分(链接版本) | 2021-05-06 | 2021-05-08 | 3.0 日 | 0% |
27 | 成绩管理-成绩查询 | 2021-05-09 | 2021-05-09 | 1.0 日 | 0% |
28 | 项目实现V1.0-后端(): | 2021-04-26 | 2021-05-09 | 14.0 日 | 0% |
29 | 完成安卓部分接口 | 2021-04-26 | 2021-05-01 | 5.0日 | 0% |
30 | 完成web前端部分接口 | 2021-05-02 | 2021-05-09 | 7.0日 | 0% |
31 | 项目实现V1.0-前后端对接调试 | 2021-05-10 | 2021-05-11 | 2.0 日 | 0% |
32 | 项目实现思考与学习: | 2021-05-12 | 2021-05-24 | 13.0 日 | 0% |
33 | shiro权限管理与本项目对接 | 2021-05-12 | 2021-05-16 | 5.0 日 | 0% |
34 | 其他问题 | 2021-05-17 | 2021-05-24 | 8.0日 | 0% |
35 | 项目实现V2.0前端 | 2021-06-01 | 2021-06-15 | 15.0 日 | 0% |
36 | 成绩管理-成绩查询 | 2021-06-01 | 2021-06-02 | 2.0 日 | 0% |
37 | 成绩管理-成绩改删 | 2021-06-03 | 2021-06-05 | 3.0 日 | 0% |
38 | 作业提交(本地markdown) | 2021-06-06 | 2021-06-08 | 3.0 日 | 0% |
39 | 学生模块其他部分 | 2021-06-09 | 2021-06-11 | 3.0 日 | 0% |
40 | 教师模块其他部分 | 2021-06-12 | 2021-06-14 | 3.0 日 | 0% |
41 | 助教模块其他部分 | 2021-06-13 | 2021-06-15 | 3.0 日 | 0% |
42 | 项目实现V2.0安卓: | 2021-06-01 | 2021-06-15 | 15.0 日 | 0% |
43 | V.1.0问题解决 | 2021-06-01 | 2021-06-05 | 5.0 日 | 0% |
44 | 权限与数据隔离 | 2021-06-11 | 2021-06-18 | 8.0 日 | 0% |
45 | 组间评分细化 | 2021-06-19 | 2021-06-21 | 3.0 日 | 0% |
45 | 项目实现V2.0后端(与前端一致) | 2021-06-01 | 2021-06-12 | 12.0 日 | 0% |
46 | 项目实现V2.0-前后端对接调试 | 2021-06-13 | 2021-06-20 | 8.0 日 | 0% |
甘特图如下:
二、预期开发计划分工安排
姓名 | 任务 | |
---|---|---|
王思皓 | 分数查看模块,评分任务模块(组内评分,组间评分) | 安卓端 |
黄炜 | 个人模块,登录模块 | 安卓端 |
李达明 | 助教模块-细则管理 ,学生模块。助教模块-成绩管理(博客评分) | web端 |
李进明 | 助教模块-成绩管理,助教模块-用户管理。 | web端 |
黄伟为 | 登录模块,统计模块。 | web端 |
郑龙海 | 安卓个人模块,评分任务模块,分数查看模块。 | 后端 |
牙举韬 | 登录模块,统计模块,助教模块-细则管理。 | 后端 |
曹鑫 | 助教模块-成绩管理,助教模块用户管理。 | 后端 |
三、系统设计
1.体系结构设计
-
web端
前端:采用Bootstrap进行网页设计开发。
后端:使用springboot整合mybatis、Thymeleaf模板引擎、easypoi表格框架、 Shiro框架
mybatis: 实现对用户的账户信息、学生的成绩等持久化信息的存取。Thymeleaf: 采用Thymeleaf进行页面编写。
Shiro: 采用Shiro框架进行用户认证和权限管理,如学生、助教和教师的登录, 教师和助教对学生作业操作权限的控制。
easypoi: 基于easypoi,对Excel进行分析处理用于Excel的表格导入和导出,如学生信息的上传。
-
安卓端
使用的是目前官方比较推崇的MVVM架构 Model View ViewModel 采用Jetpack库提供的框架
2.功能模块层次图
3.设计类图
此图展示了各个类相互之间的继承、聚合关系:
l 助教、教师、学生继承自用户,组长又继承自学生。
l 每一位助教和每一位都对应多个团队,每一个团队由一位组长和几位队员组成。
l 每一位学生和每一个团队对应多次博客作业,每一次博客作业对应一份评分细则和一项成绩。
l 每一条评分细则由多个评分项聚合而成。
4.ER分析 & 表结构设计
1.E-R图
-
总览E-R图
-
团队管理E-R图
-
作业管理E-R图
-
学生管理E-R图
2.表设计结构
user表结构:
列名 | 数据类型 | 长度 | 主键 | 非空 | 自增 | 注释 |
---|---|---|---|---|---|---|
id | int | 11 | 是 | 是 | 是 | |
user_name | varchar | 128 | 用户名 | |||
account | varchar | 15 | 实际账号(助教号:A001,教师号:T001 ,学号:221801112) | |||
password | varchar | 128 | 密码 | |||
perms | varchar | 128 | 权限 | |||
salt | varchar | 255 | 盐 | |||
total_score | double | 11 | 个人累积总成绩 | |||
team_id | int | 11 | 所属团队Id | |||
team_change_history | varchar | 255 | 所属团队变更记录(如1,2) | |||
class_id | int | 11 | 班级id |
blog_work表结构
列名 | 数据类型 | 长度 | 主键 | 非空 | 自增 | 注释 |
---|---|---|---|---|---|---|
sys_id | int | 11 | 是 | 是 | 是 | |
blog_work_name | varchar | 128 | 博客名称 | |||
blog_work_content | text | 博客内容 | ||||
user_id | int | 11 | 发布者id(团队作业时该项为空) | |||
team_id | int | 11 | 发布团队id(个人作业时该项为空) | |||
task_id | int | 11 | 该博客对应的作业id | |||
blog_work_type | varchar | 128 | 博客类型(个人作业,团队作业,结对作业) |
class表结构
列名 | 数据类型 | 长度 | 主键 | 非空 | 自增 | 注释 |
---|---|---|---|---|---|---|
sys_id | int | 11 | 是 | 是 | 是 | |
class_name | varchar | 128 | 班级名称 | |||
grade | varchar | 128 | 年级 | |||
teacher_id | int | 11 | 教师id | |||
details表结构
列名 | 数据类型 | 长度 | 主键 | 非空 | 自增 | 注释 |
---|---|---|---|---|---|---|
sys_id | int | 11 | 是 | 是 | 是 | |
details_name | varchar | 255 | 评分细则项名称 | |||
score_ratio | double | 11 | 评分项分值比例 | |||
create_user_id | int | 11 | 创建人 | |||
create_time | datetime | 创建时间 | ||||
task_id | int | 11 | 所属作业id |
pair_score表结构
列名 | 数据类型 | 长度 | 主键 | 非空 | 自增 | 注释 |
---|---|---|---|---|---|---|
sys_id | int | 11 | 是 | 是 | 是 | |
user1_id | int | 11 | 结对队友1ID | |||
user2_id | int | 11 | 结对队友2ID | |||
task_id | int | 11 | 所属作业ID | |||
sys_score | double | 11 | 本对本次作业总得分 |
pair_score_details表结构
列名 | 数据类型 | 长度 | 主键 | 非空 | 自增 | 注释 |
---|---|---|---|---|---|---|
sys_id | int | 11 | 是 | 是 | 是 | |
pair_score_id | int | 11 | 结对成绩的ID | |||
details_id | int | 11 | 评分细则项ID | |||
score | int | 11 | 该项得分 | |||
perms表结构
列名 | 数据类型 | 长度 | 主键 | 非空 | 自增 | 注释 |
---|---|---|---|---|---|---|
id | int | 11 | 是 | 是 | 是 | |
permsname | varchar | 64 | 权限名 | |||
url | varchar | 64 | 可访问地址 | |||
role 表结构
列名 | 数据类型 | 长度 | 主键 | 非空 | 自增 | 注释 |
---|---|---|---|---|---|---|
id | int | 11 | 是 | 是 | 是 | |
rolename | int | 11 | 角色名 | |||
role_perms表结构
列名 | 数据类型 | 长度 | 主键 | 非空 | 自增 | 注释 |
---|---|---|---|---|---|---|
id | int | 11 | 是 | 是 | 是 | |
roleid | int | 11 | 角色ID | |||
permsid | int | 11 | 权限ID | |||
task表结构
列名 | 数据类型 | 长度 | 主键 | 非空 | 自增 | 注释 |
---|---|---|---|---|---|---|
sys_id | int | 11 | 是 | 是 | 是 | 主键 |
task_name | varchar | 255 | 作业名称 | |||
task_content | text | 作业内容 | ||||
create_user | int | 11 | 创建人 | |||
create_time | datetime | 创建时间 | ||||
begine_time | datetime | 开始时间 | ||||
deadline | datetime | 截止日期 |
team表结构
列名 | 数据类型 | 长度 | 主键 | 非空 | 自增 | 注释 |
---|---|---|---|---|---|---|
sys_id | int | 11 | 是 | 是 | 是 | 主键 |
sys_team_name | varchar | 255 | 团队名称 | |||
sys_team_slogan | varchar | 255 | 团队口号 | |||
team_score表结构
列名 | 数据类型 | 长度 | 主键 | 非空 | 自增 | 注释 |
---|---|---|---|---|---|---|
sys_id | int | 11 | 是 | 是 | 是 | |
sys_score | int | 11 | 一次作业总成绩 | |||
team_id | int | 11 | 成绩所属者ID(团队) | |||
task_id | int | 11 | 成绩所属作业ID | |||
contributions | varchar | 128 | 成员贡献度(22991:10,22992:20,22993:70) |
team_score_details表结构
列名 | 数据类型 | 长度 | 主键 | 非空 | 自增 | 注释 |
---|---|---|---|---|---|---|
sys_id | int | 11 | 是 | 是 | 是 | |
team_score_id | int | 11 | 团队成绩的ID | |||
details_id | int | 11 | 评分细则项ID | |||
score | int | 11 | 该项得分 | |||
user_role表结构
列名 | 数据类型 | 长度 | 主键 | 非空 | 自增 | 注释 |
---|---|---|---|---|---|---|
id | int | 11 | 是 | 是 | 是 | |
userid | int | 11 | 用户ID | |||
roleid | int | 11 | 角色ID | |||
user_score表结构
列名 | 数据类型 | 长度 | 主键 | 非空 | 自增 | 注释 |
---|---|---|---|---|---|---|
sys_id | int | 11 | 是 | 是 | 是 | |
user_id | int | 11 | 所属用户ID | |||
task_id | int | 11 | 所属作业ID | |||
sys_score | double | 11 | 该用户该次作业总得分 | |||
user_score_details表结构
列名 | 数据类型 | 长度 | 主键 | 非空 | 自增 | 注释 |
---|---|---|---|---|---|---|
sys_id | int | 11 | 是 | 是 | 是 | |
user_score_id | int | 11 | 个人成绩的ID | |||
details_id | int | 11 | 评分细则项ID | |||
score | int | 11 | 该项得分 | |||
5.系统安全和权限设计
5.1系统安全设计
1.教师和助教不提供注册功能,教师账号需在数据库中手动添加,助教账号可以由教师通过新增功能添加,也可以直接在数据库中添加。
2.数据库可以自动定期备份,每天0点进行一次备份,数据出现丢失或其他异常后可以通过备份恢复,当然也可以进行事务回滚,在操作发生异常后回滚数据库操作,保证数据的安全性和完整性。
3.对用户的密码使用MD5或SHA加密,可以避免密码被直接截获破解。
4.使用正则表达式过滤传入的参数,防止SQL注入
5.后端添加了拦截器后设定拦截规则,获取请求主机IP地址,如果通过代理进来,则透过防火墙获取真实IP地址,在获取用户真实IP地址后,如果某ip的访问太过频繁,则用拦截器拦截掉IP并将其加入黑名单。
6.通过RBAC进行权限管理,所有用户不能越权操作不能访问权限以外的数据。
7.前端进行数据校验后,后端对前端参数进行校验,前端验证减少了对服务器的不必要的不合法的请求,后端校验保证了对于一些敏感数据比如用户登录数据进行了双重验证,另外可以用许多工具来绕过前端,修改前端的方式避开js的处理验证,所以后端的验证可以保证安全性
5.2系统权限设计
安卓端
权限 | 登陆 | 注册 | 查看分数 | 组间评分 | 个人中心 | 组间互评 | 产看成员信息 |
---|---|---|---|---|---|---|---|
学生 | √ | √ | √ | √ | √ | √ | √ |
老师 | |||||||
助教 |
Web端
权限 | 登录 | 分数查询 | 作业提交 | 助教管理 | 评分细则管理 | 答辩评分 | 博客评分 | 学生成绩管理(增删改) | 学生管理 | 公共统计信息 |
---|---|---|---|---|---|---|---|---|---|---|
学生 | √ | √ | √ | √ | √ | |||||
老师 | √ | √ | √ | √ | √ | |||||
助教 | √ | √ | √ | √ | √ | √ | √ | √ | ||
权限 | 团队管理 | 博客作业列表管理 | 助教学生总览 | 助教学生新增 | 细则表管理 | 细则信息搜索 | 细则详情管理 | 学生总成绩管理 | ||
学生 | ||||||||||
老师 | √ | √ | √ | |||||||
助教 | √ | √ | √ | √ | √ | √ |
6.设计思路
四、问题与改进
问题 | 改进 |
---|---|
未能使用项目管理工具,团队间分工合作不明确 | 通过预先对作业进行分析,将作业明确分为多个小任务,由组员自由选择任务,再根据助教发的github教程,使用Github Project,Issue,Milestone来管理项目。 |
需求分析不够详细 | 对用例图进行修改,再次细化类图,并添加活动图、状态图辅助理解 |
各个模块还可细化 | 我们会在团队内部交流,并与实现开发的部分负责人就实现可行性进行讨论。 |
原型设计中未考虑到学期和班级 | 一开始原型设计的时候,界面没有考虑到,但是目前我们的数据库设计已经考虑到了班级和年级(我们的课程应该是一学年一次),接下来,我们会考虑如何再界面,具体开发上,实现对已结束的学期,进行访问。 |
系统设计上仍应保留最完整的方案 | 我们不应该在一开始就对系统进行削减,而是要做出最完整的方案,在时间有限的条件下,才进行迭代,所以对原本削减的内容再次添加(如安卓端的结对功能) |
五、工作流程、组员分工、贡献比例
1.工作流程
- 根据对博客园发布的作业进行分析,列出需要完成的任务清单,定好时间节点需要交付或完成的任务,发布到qq群中, 让大家自己选择任务
- 大家各自选择完任务后开始各自开展工作,遇到问题及时在 QQ 群中反馈
- 使用Github Project,Issue,Milestone来管理项目,分配各自已选择的任务
- 完成任务后,在 Github 上把任务状态改为已完成,将待交付成果发布到群里,由专人审核,遇到问题时抛到群里,大家一起讨论
2.组员分工与贡献比例
学号 | 姓名 | 工作内容 | 贡献度 |
---|---|---|---|
221801101 | 王思皓 | 设计类图 | 12 |
221801103 | 牙举韬 | 系统设计、数据库设计答辩PPT和评审表 | 10 |
221801106 | 郑龙海 | 接口设计 | 12 |
221801112 | 曹鑫 | 任务分配、ER分析和表结构设计、甘特图 | 14 |
221801121 | 黄炜 | 安全和权限设计 | 12 |
221801225 | 李进明 | 整合、博客随笔 | 11 |
221801237 | 黄伟为 | 功能模块层次设计 | 9 |
221801305 | 陈晓汉 | 体系结构设计 | 9 |
221801332 | 李达明 | ER分析和表结构设计 | 11 |