字节乱动-团队作业四项目系统设计与数据库设计

字节乱动对团队作业四 — 项目系统设计与数据库设计

字节乱动对团队作业四 — 项目系统设计与数据库设计

这个作业属于哪个课程 2021春软件工程实践|s班
这个作业要求在哪里 作业要求
团队名称 字节乱动
这个作业的目标 完成需求分析,制定团队项目的整体计划安排及明确的里程碑
作业正文 正文
其他参考文献 《系统设计说明书》《数据库设计说明书》国标规范文本

一、预期开发计划时间安排

项目主要分为 4阶段:

  1. 系统与数据库设计。
  2. 项目实现V.1.0版本。
  3. 项目实现思考与学习。
  4. 项目实现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%

甘特图如下:
image

二、预期开发计划分工安排

姓名 任务
王思皓 分数查看模块,评分任务模块(组内评分,组间评分) 安卓端
黄炜 个人模块,登录模块 安卓端
李达明 助教模块-细则管理 ,学生模块。助教模块-成绩管理(博客评分) 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.功能模块层次图

img

3.设计类图

​ 此图展示了各个类相互之间的继承、聚合关系:

​ l 助教、教师、学生继承自用户,组长又继承自学生。

​ l 每一位助教和每一位都对应多个团队,每一个团队由一位组长和几位队员组成。

​ l 每一位学生和每一个团队对应多次博客作业,每一次博客作业对应一份评分细则和一项成绩。

​ l 每一条评分细则由多个评分项聚合而成。

img

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.工作流程

  1. 根据对博客园发布的作业进行分析,列出需要完成的任务清单,定好时间节点需要交付或完成的任务,发布到qq群中, 让大家自己选择任务
  2. 大家各自选择完任务后开始各自开展工作,遇到问题及时在 QQ 群中反馈
  3. 使用Github Project,Issue,Milestone来管理项目,分配各自已选择的任务
  4. 完成任务后,在 Github 上把任务状态改为已完成,将待交付成果发布到群里,由专人审核,遇到问题时抛到群里,大家一起讨论

2.组员分工与贡献比例

学号 姓名 工作内容 贡献度
221801101 王思皓 设计类图 12
221801103 牙举韬 系统设计、数据库设计答辩PPT和评审表 10
221801106 郑龙海 接口设计 12
221801112 曹鑫 任务分配、ER分析和表结构设计、甘特图 14
221801121 黄炜 安全和权限设计 12
221801225 李进明 整合、博客随笔 11
221801237 黄伟为 功能模块层次设计 9
221801305 陈晓汉 体系结构设计 9
221801332 李达明 ER分析和表结构设计 11

六、附件链接

posted @ 2021-04-23 20:29  字节乱动  阅读(243)  评论(10编辑  收藏  举报