这个作业属于哪个课程 2021春软件工程实践S班
这个作业要求在哪里 团队作业四——系统设计和数据库设计
这个作业的目标 1.完善设计类图;
2.设计好系统和数据库;
3.制定好团队计划和分工;
4.为下一次的团队Alpha冲刺作业提前做好准备。
其他参考文献 《构建之法(第三版)》、UML之类图UML类图详解
详解设计模式六大原则数据库表结构设计的几条准则
数据库表设计(一对多、多对多)
常见web攻击方法及防御手段总结用户密码加密
JavaWeb项目前后端分离RBAC用户、角色、权限、组设计方案
...

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

项目开发计划 最晚完成日期 完成情况
完成系统设计和数据库设计,确定前后端要使用的框架 2021-4-23 完成
学习框架,前端编写实现静态页面,后端实现对所有接口的数据处理逻辑 2021-4-30 未完成
前端完善页面的设计和调整改进,后端完成数据的测试以及安全性测试,前后端实现对接 2021-5-7 未完成
对每个功能完成测试,修复当前每个功能出现的bug 2021-5-14 未完成
发布正式版本1.0,将项目部署到服务器上,撰写项目使用手册 2021-5-21 未完成
对整个开发过程进行总结,完善各个部分细节的工作 2021-5-28 未完成

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

2.1 后端分工安排

姓名 任务分工
郑麟轩 搭建后端框架、发布框架学习任务、实现系统安全的保护,参与测试
吴涵 编码model模块、编写用户管理相关模块、实现角色权限管理
郑嘉晖 参与编码API、编码成绩管理模块、实现评分模块
张孝勇 编码model模块、测试系统功能、编写用户管理相关模块
洪世灿 参与编码API、测试系统功能、实现评分模块

2.2 前端分工安排

姓名 任务分工
丁宇凡 完成学生界面,用户登录界面的静态界面。完成登录、学生界面的数据交互
毛依婷 完成教师界面的静态界面以及数据交互
陈修庆 完成队长,评分等界面的静态界面和数据交互
廖其昌 完成管理员界面的静态界面和数据交互

三、体系结构设计

 本系统使用MVC模式设计架构,进行前后端分离。视图层和业务层分离,这样就允许更改视图层代码而不用重新编译模型和控制器代码,业务流程或者规则的改变只需要对前端代码进行改动即可。也可以很容易地改变应用程序的数据层和业务规则。

根据MVC模式,本系统主要可分为Model(模型),View(视图),Controller(控制器)三个层次。
(1)Model层
本层主要负责数据库的结构映射,数据库增删改查等直接对数据库进行操作的行为。向提供接口的方式允许其他层间接地访问数据库。
(2)View层
本层的分为前端与后端两个部分。前端负责Web界面的显示与逻辑。后端负责接收前端请求并根据前端请求返回前端所需的数据。
(3)Controller层
本层负责绝大多数的业务逻辑。在接收到前端请求的时候,对请求进行处理。处理业务逻辑过程中,通过Model层间接对数据库进行访问,并且通过View层将处理结果返回给前端,并在前端展示给用户。

评了么-团队作业四——系统设计和数据库设计

四、功能模块层次图

4.1 功能模块层次设计思路

1. 超级管理员
 超级管理员模块由登录、教师管理、密码重置组成。超级管理员模块主要负责危险数据的访问,如增加教师与密码重置。

2. 教师/助教
 教师/助教模块由学生管理,班级管理,助教管理,作业管理,评分管理,成绩管理等组成。学生管理允许对学生进行导入,以及信息的修改。班级管理、助教管理负责对班级进行创建、增加助教等。作业管理、评分管理、成绩管理可以新建发布作业,对评审表进行评分,对个人成绩、团队成绩进行管理。

3. 学生/组员
 普通组员模块主要功能是查看成绩,如个人成绩,团队成绩。
 组长模块由团队管理,组员管理,绩效管理,评审表新建、评审表打分组成。

4.2 功能模块层次图展示

评了么-团队作业四——系统设计和数据库设计

五、ER分析

5.1 ER设计思路

  • 1.确定实体集合及包含的属性
实体集 实体集属性 实体集意义
User ID,UID,password,role,nickname 用户
Student_Class ID,student_id,class_id 学生-班级
Teacher_Class ID,class_id,teacher_id 教师-班级
Student_Team ID,teacher_id,team_id 学生-团队
Class ID,name 班级
Homework ID,class_id,type,content,end_time,start_time,title 作业
Scoring_Item ID,homework_id,description,optional,assistant_id,sequence,parent_item_id,note,score 评分项
Personal_Blog_Grade ID,scorekeeper_id,ID,grade,scoring_item_id 个人博客成绩
Team_Blog_Grade ID,grade,scorekeeper_id,scoring_item_id 团队博客成绩
Evaluation_Table ID,homework_id,team_id 评审表
Evaluation_item ID,evaluation_table_id,content,score,sequence,parent_item_id,suggest 评审表项
Evaluation_Item_Grade ID,UID,team_id,grade,scoring_item_id 评审表项成绩
Team ID,group_leader_id,class_id,name,number 团队
Partner ID,student1_id,student2_id 结对
Performance ID,student_id,percentage,homework_id 绩效
Job_Submission ID,submitter_id,homework_id,submit_status,filepath 作业提交
Role ID,type 角色
Permission ID,type 权限
Role_Permission ID,role_id,permission_id 角色-权限
  • 2.确定实体集之间的联系
实体集1 实体集2 联系 联系类型(实体集1-实体集2)
Role Permission 拥有 m-n
User Role 拥有 n-1
User Partner 结对 m-n
User Performance 获得 1-n
User Class 属于 n-m
User Class 管理 n-m
User Team 属于 m-1
User Personal_Blog_Grade 得分 1-n
Team Team_Blog_Grade 得分 1-n
Team_Blog_Grade Scoring_Item 属于 1-n
Personal_Blog_Grade Scoring_Item 属于 1-n
Class Homework 属于 1-n
Homework Performance 属于 1-n
Homework Evaluation_Table 属于 1-n
Homework Job_Submission 属于 1-n
Evaluation_Table Evaluation_Item 属于 1-n
Evaluation_Item Evalustion_Item_Grade 属于 1-n

5.2 ER图展示

评了么-团队作业四——系统设计和数据库设计

六、表结构设计

评了么-团队作业四——系统设计和数据库设计

  • 1.用户User表
字段名 类型 长度 是否主键 是否非空 是否唯一 描述
ID INT 主键,自增长字段
UID VARCHAR 9 用户名:学生学号或教师工号
password VARCHAR 16 加密密码
nickname VARCHAR 20 昵称
role INT 用户身份,外键,对应权限表的主键
  • 2.学生-班级Student_Class表
字段名 类型 长度 是否主键 是否非空 是否唯一 描述
ID INT 主键,自增长字段
student_id INT 学生ID,外键,对应用户表的主键
class_id INT 班级号,外键,对应班级表的主键
  • 3.教师-班级Teacher_Class表
字段名 类型 长度 是否主键 是否非空 是否唯一 描述
ID INT 主键,自增长字段
teacher_id INT 教师或助教ID,外键,对应用户表的主键
class_id INT 班级号,外键,对应班级表的主键
  • 4.学生-团队Student_Team表
字段名 类型 长度 是否主键 是否非空 是否唯一 描述
ID INT 主键,自增长字段
teacher_id INT 学生ID,外键,对应用户表的主键
team_id INT 团队ID,外键,对应团队表的主键
  • 5.班级Class表
字段名 类型 长度 是否主键 是否非空 是否唯一 描述
ID INT 主键,自增长字段
name VARCHAR 255 班级名
  • 6.作业Homework表
字段名 类型 长度 是否主键 是否非空 是否唯一 描述
ID INT 主键,自增长字段
class_id INT 班级ID,外键,对应班级表的主键
type INT 1 作业类型:个人作业0,结对作业1,团队作业2
title VARCHAR 255 作业标题
content TEXT 作业内容
start_time DATE 开始时间
end_time DATE 截止时间
  • 7.评分项Scoring_Item表
字段名 类型 长度 是否主键 是否非空 是否唯一 描述
ID INT 主键,自增长字段
homework_id INT 作业ID,外键,对应作业表的主键
description VARCHAR 255 评分项的描述
score INT 评分项的分值
optional INT 1 是否选做:是1,否0
note VARCHAR 255 备注
assistant_id INT 助教ID,外键,对应用户表的主键
parent_item_id INT 父项ID,外键,对应评分项表的主键
sequence INT 同级排序,表示同一级表格项的顺序
  • 8.个人博客成绩成绩Personal_Blog_Grade表
字段名 类型 长度 是否主键 是否非空 是否唯一 描述
ID INT 主键,自增长字段
scoring_item_id INT 评分项ID,外键,对应评分项表的主键
scorekeeper_id INT 得分者ID,外键,对应用户表的主键
grade INT 评分项得分
  • 9.团队博客成绩Team_Blog_Grade表
字段名 类型 长度 是否主键 是否非空 是否唯一 描述
ID INT 主键,自增长字段
scoring_item_id INT 评分项ID,外键,对应评分项表的主键
scorekeeper_id INT 得分者ID,外键,对应用户表的主键
grade INT 评分项得分
  • 10.评审表Evaluation_Table表
字段名 类型 长度 是否主键 是否非空 是否唯一 描述
ID INT 主键,自增长字段
homework_id INT 作业ID,外键,对应作业表的主键
team_id INT 团队ID,外键,对应团队表的主键
  • 11.评审表项Evaluation_Item表
字段名 类型 长度 是否主键 是否非空 是否唯一 描述
ID INT 主键,自增长字段
evaluation_table_id INT 评审表ID,外键,对应评审表的主键
content VARCHAR 255 评审表项内容
score INT 评审表项的成绩
suggest TEXT 评审人所给建议
parent_item_id INT 父项ID,外键,对应评分项表的主键
sequence INT 同级排序,表示同一级表格项的顺序
  • 12.评审表项成绩Evaluation_Item_Grade表
字段名 类型 长度 是否主键 是否非空 是否唯一 描述
ID INT 主键,自增长字段
scoring_item_id INT 评审表项ID,外键,对应评审表项表的主键
team_id INT 被评团队ID,外键,对应团队表的主键
UID INT 评分者ID,外键,对应用户表主键
grade INT 评审表项得分
  • 13.团队Team表
字段名 类型 长度 是否主键 是否非空 是否唯一 描述
ID INT 主键,自增长字段
number INT 团队序列号
name VARCHAR 255 团队名
group_leader_id INT 组长ID,外键,对应用户表主键
class_id INT 班级号,外键,对应班级表的主键
  • 14.结对Partner表
字段名 类型 长度 是否主键 是否非空 是否唯一 描述
ID INT 主键,自增长字段
student1_id INT 结对学生ID,外键,对应用户表主键
student2_id INT 结对学生ID,外键,对应用户表主键
  • 15.绩效Performance表
字段名 类型 长度 是否主键 是否非空 是否唯一 描述
ID INT 主键,自增长字段
homework_id INT 作业ID,外键,对应作业表的主键
student_id INT 学生ID,外键,对应用户表主键
percentage INT 绩效百分比
  • 16.作业提交Job_Submission表
字段名 类型 长度 是否主键 是否非空 是否唯一 描述
ID INT 主键,自增长字段
submitter_id INT 提交者ID,学生或是团队ID
homework_id INT 作业ID,外键,对应作业表的主键
submit_status INT 1 提交状态:补交2,按时提交1,未提交0
filepath VARCHAR 255 提交作业的路径
  • 17.角色Role表
字段名 类型 长度 是否主键 是否非空 是否唯一 描述
ID INT 主键,自增长字段
type INT 角色类型,需要Unique
  • 18.权限Permission表
字段名 类型 长度 是否主键 是否非空 是否唯一 描述
ID INT 主键,自增长字段
type INT 角色类型,需要Unique
  • 19.角色-权限Role_Permission表
字段名 类型 长度 是否主键 是否非空 是否唯一 描述
ID INT 主键,自增长字段
role_id INT 角色ID,外键,对应角色表的主键
permission_id INT 权限ID,外键,对应权限表的主键

七、设计类图

7.1 设计类图展示

评了么-团队作业四——系统设计和数据库设计

7.2 类图设计思路

1.用户需求
 老师:
   (1)添加助教;
   (2)导入学生信息;
   (3)创建班级;
   (4)博客评分;
   (5)评审团队;
   (6)开始/结束结对组队;
   (7)开始/结束团队创建;
   (8)登录;

 助教:
   (1)批改作业;
   (2)博客评分;
   (3)创建作业;
   (4)自定义评分细则;
   (5)评审团队;
   (6)开始/结束结对组队;
   (7)开始/结束团队创建;
   (8)登录;

 组员:
   (1)查看成绩;
   (2)查看作业;
   (3)结对组队;
   (4)登录;

 组长:
   (1)查看成绩;
   (2)查看作业;
   (3)结对组队;
   (4)组员管理;
   (5)创建评审表;
   (6)评审其他团队;
   (7)填写绩效;
   (8)登录;

 超级管理员:
   (1)用户管理;
   (2)重置密码;
   (3)PDF导入名称正则规则修改;
   (4)登录;

2.类
 用户类
   教师
   学生
 班级类
 团队类
 结对类
 绩效类
 作业类
 作业提交类
 博客成绩类
 评审表类
 评审表项类
 评分项类
 评审表成绩类

八、系统安全

我们针对几种常见的Web攻击方式,制定了几种应对策略。

1. SRF(Cross-site request forgery)跨站请求伪造
 我们通过设置SameSite Cookie属性为strict属性,使Cookie在任何情况下都不可能作为第三方Cookie,来避免CSRF攻击。

2.SQL注入
 我们通过使用ORM框架,避免SQL语句直接进行字符串拼接,以避免SQL注入。

3. XSS(Cross Site Scripting)跨站脚本攻击
 我们通过对特殊字符进行转义来避免XSS攻击。

九、权限设计

 本系统使用基于角色的权限访问控制RBAC(Role-Based Access Control)方式进行权限控制。每个用户都对应以下的某个角色,每种角色拥有自己特定的权限。

用户 评审表评分 团队管理 学生管理 助教管理 老师管理 班级管理 创建评审表 重置密码 作业管理 成绩管理
组员
组长
老师
助教
超级管理员

十、问题回答&改进

Q1:个人单次作业成绩在总分中的占比是否能够体现?

A1:在第一版原型中确实无法体现,原型展示结束(4.13)后就开始了对原型的改进,在新版原型中的组员-成绩列表中不光可以显示每次作业的成绩,还可以显示该次作业在总分中的占比。包括在之后的实现中也会在相应页面显示分数和占比。
评了么-团队作业四——系统设计和数据库设计

Q2:团队作业中成员的绩效如何体现?

A2:原来的想法是助教在进行批改团队作业的同时录入团队成员的绩效,后来经过商讨,在组长界面中增加了添加绩效表的功能按钮,可以让组长设置各次团队作业组员的绩效占比(总值100,每人1-100,如组长设置甲某绩效80,则甲某本次绩效占比80%),在团队作业评分结束后,系统会自动获取绩效占比,并计算每位同学的作业得分。
评了么-团队作业四——系统设计和数据库设计

Q3:团队作业的答辩部分分为老师、助教和学生,这三部分得分按一定公式计算得到团队答辩分数,是否可以实现?

A3:可以,我们的系统划分了老师、助教和学生,其中组长、助教、老师都可以评审团队并提交评审表,系统获取角色身份和评审分计算出团队作业的答辩分数。
评了么-团队作业四——系统设计和数据库设计

Q4:团队作业得分为博客得分和答辩得分按照一定计算公式计算得到,系统能否实现?

A4:可以,在原型中分别有个人作业和团队作业的成绩展示页面,在团队作业的展示页面中,显示了该次作业不同模块的得分情况,这些得分由系统获得后按公式计算得到最终得分。
评了么-团队作业四——系统设计和数据库设计

十一、绩效

学号 工作内容 贡献度
郑麟轩 系统结构说明书,权限设计 14
毛依婷 审核原型,报告、博客 12
吴涵 数据库说明书、开发计划 14
张孝勇 数据库结构表、ER图、功能模块层次图、泳道图 13
陈修庆 原型设计 10
郑嘉晖 评审表,权限文档,接口文档,ER图 14
洪世灿 接口设计,ppt,数据流图 13
丁宇凡 原型设计 9
廖其昌 1

十二、链接合集

12.1 github团队仓库链接

github团队仓库链接

12.2 团队名称_系统设计说明书.pdf

系统设计说明书链接

12.3 团队名称_数据库设计说明书.pdf

数据库设计说明书链接

12.4 团队名称_系统设计和数据库设计答辩PPT.pdf

系统设计和数据库设计答辩PPT链接

相关文章: