这个作业属于哪个课程 | 2021春软件工程实践S班 |
---|---|
这个作业要求在哪里 | 团队作业四——系统设计和数据库设计 |
这个作业的目标 | 1.完善设计类图; 2.设计好系统和数据库; 3.制定好团队计划和分工; 4.为下一次的团队Alpha冲刺作业提前做好准备。 |
其他参考文献 | 《构建之法(第三版)》、UML之类图、UML类图详解、 详解设计模式六大原则、数据库表结构设计的几条准则、 数据库表设计(一对多、多对多)、 常见web攻击方法及防御手段总结、用户密码加密、 JavaWeb项目前后端分离、RBAC用户、角色、权限、组设计方案 ... |
目录
- 一、预期开发计划时间安排
- 二、预期开发计划分工安排
- 2.1 后端分工安排
- 2.2 前端分工安排
- 三、体系结构设计
- 四、功能模块层次图
- 4.1 功能模块层次设计思路
- 4.2 功能模块层次图展示
- 五、ER分析
- 5.1 ER设计思路
- 5.2 ER图展示
- 六、表结构设计
- 七、设计类图
- 7.1 设计类图展示
- 7.2 类图设计思路
- 八、系统安全
- 九、权限设计
- 十、问题回答&改进
- 十一、绩效
- 十二、链接合集
- 12.1 github团队仓库链接
- 12.2 团队名称_系统设计说明书.pdf
- 12.3 团队名称_数据库设计说明书.pdf
- 12.4 团队名称_系统设计和数据库设计答辩PPT.pdf
项目开发计划 | 最晚完成日期 | 完成情况 |
---|---|---|
完成系统设计和数据库设计,确定前后端要使用的框架 | 2021-4-23 | 完成 |
学习框架,前端编写实现静态页面,后端实现对所有接口的数据处理逻辑 | 2021-4-30 | 未完成 |
前端完善页面的设计和调整改进,后端完成数据的测试以及安全性测试,前后端实现对接 | 2021-5-7 | |
对每个功能完成测试,修复当前每个功能出现的bug | 2021-5-14 | |
发布正式版本1.0,将项目部署到服务器上,撰写项目使用手册 | 2021-5-21 | |
对整个开发过程进行总结,完善各个部分细节的工作 | 2021-5-28 |
姓名 | 任务分工 |
---|---|
郑麟轩 | 搭建后端框架、发布框架学习任务、实现系统安全的保护,参与测试 |
吴涵 | 编码model模块、编写用户管理相关模块、实现角色权限管理 |
郑嘉晖 | 参与编码API、编码成绩管理模块、实现评分模块 |
张孝勇 | 编码model模块、测试系统功能、编写用户管理相关模块 |
洪世灿 | 参与编码API、测试系统功能、实现评分模块 |
丁宇凡 | 完成学生界面,用户登录界面的静态界面。完成登录、学生界面的数据交互 |
毛依婷 | 完成教师界面的静态界面以及数据交互 |
陈修庆 | 完成队长,评分等界面的静态界面和数据交互 |
廖其昌 | 完成管理员界面的静态界面和数据交互 |
本系统使用MVC模式设计架构,进行前后端分离。视图层和业务层分离,这样就允许更改视图层代码而不用重新编译模型和控制器代码,业务流程或者规则的改变只需要对前端代码进行改动即可。也可以很容易地改变应用程序的数据层和业务规则。
根据MVC模式,本系统主要可分为Model(模型),View(视图),Controller(控制器)三个层次。
(1)Model层
本层主要负责数据库的结构映射,数据库增删改查等直接对数据库进行操作的行为。向提供接口的方式允许其他层间接地访问数据库。
(2)View层
本层的分为前端与后端两个部分。前端负责Web界面的显示与逻辑。后端负责接收前端请求并根据前端请求返回前端所需的数据。
(3)Controller层
本层负责绝大多数的业务逻辑。在接收到前端请求的时候,对请求进行处理。处理业务逻辑过程中,通过Model层间接对数据库进行访问,并且通过View层将处理结果返回给前端,并在前端展示给用户。
![](https://img.laitimes.com/img/_0nNw4CM6IyYiwiM6ICdiwiIn5GcuYUOlIkQlcTRlIkQlMjQlcTRlgDOlkjQlQTRlYDOlEkQlQTRlQDOlYUQlgTRlQTMyIDOwMjM0ATMy81bvwlNwYTN2kTMvw1ZulGdhV2bh12Lc12bj91cn9Gbi52YvwVbvNmLzd2bsJmbj5ycldWYtl2Lc9CX6MHc0RHaiojIsJye.png)
1. 超级管理员
超级管理员模块由登录、教师管理、密码重置组成。超级管理员模块主要负责危险数据的访问,如增加教师与密码重置。
2. 教师/助教
教师/助教模块由学生管理,班级管理,助教管理,作业管理,评分管理,成绩管理等组成。学生管理允许对学生进行导入,以及信息的修改。班级管理、助教管理负责对班级进行创建、增加助教等。作业管理、评分管理、成绩管理可以新建发布作业,对评审表进行评分,对个人成绩、团队成绩进行管理。
3. 学生/组员
普通组员模块主要功能是查看成绩,如个人成绩,团队成绩。
组长模块由团队管理,组员管理,绩效管理,评审表新建、评审表打分组成。
- 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 | 权限 | |
Role_Permission | ID,role_id,permission_id | 角色-权限 |
- 2.确定实体集之间的联系
实体集1 | 实体集2 | 联系 | 联系类型(实体集1-实体集2) |
---|---|---|---|
拥有 | m-n | ||
n-1 | |||
获得 | 1-n | ||
属于 | n-m | ||
管理 | |||
m-1 | |||
得分 | |||
Evaluation_Item | |||
Evalustion_Item_Grade |
- 1.用户User表
字段名 | 类型 | 长度 | 是否主键 | 是否非空 | 是否唯一 | 描述 |
---|---|---|---|---|---|---|
ID | INT | 是 | 主键,自增长字段 | |||
UID | VARCHAR | 9 | 用户名:学生学号或教师工号 | |||
password | 16 | 加密密码 | ||||
nickname | 20 | 昵称 | ||||
role | 用户身份,外键,对应权限表的主键 |
- 2.学生-班级Student_Class表
student_id | 学生ID,外键,对应用户表的主键 | |||||
class_id | 班级号,外键,对应班级表的主键 |
- 3.教师-班级Teacher_Class表
teacher_id | 教师或助教ID,外键,对应用户表的主键 | |||||
- 4.学生-团队Student_Team表
team_id | 团队ID,外键,对应团队表的主键 |
- 5.班级Class表
name | 255 | 班级名 |
- 6.作业Homework表
班级ID,外键,对应班级表的主键 | ||||||
type | 1 | 作业类型:个人作业0,结对作业1,团队作业2 | ||||
title | 作业标题 | |||||
content | TEXT | 作业内容 | ||||
start_time | DATE | 开始时间 | ||||
end_time | 截止时间 |
- 7.评分项Scoring_Item表
homework_id | 作业ID,外键,对应作业表的主键 | |||||
description | 评分项的描述 | |||||
score | 评分项的分值 | |||||
optional | 是否选做:是1,否0 | |||||
note | 备注 | |||||
assistant_id | 助教ID,外键,对应用户表的主键 | |||||
parent_item_id | 父项ID,外键,对应评分项表的主键 | |||||
sequence | 同级排序,表示同一级表格项的顺序 |
- 8.个人博客成绩成绩Personal_Blog_Grade表
scoring_item_id | 评分项ID,外键,对应评分项表的主键 | |||||
scorekeeper_id | 得分者ID,外键,对应用户表的主键 | |||||
grade | 评分项得分 |
- 9.团队博客成绩Team_Blog_Grade表
- 10.评审表Evaluation_Table表
- 11.评审表项Evaluation_Item表
evaluation_table_id | 评审表ID,外键,对应评审表的主键 | |||||
评审表项内容 | ||||||
评审表项的成绩 | ||||||
suggest | 评审人所给建议 | |||||
- 12.评审表项成绩Evaluation_Item_Grade表
评审表项ID,外键,对应评审表项表的主键 | ||||||
被评团队ID,外键,对应团队表的主键 | ||||||
评分者ID,外键,对应用户表主键 | ||||||
评审表项得分 |
- 13.团队Team表
number | 团队序列号 | |||||
团队名 | ||||||
group_leader_id | 组长ID,外键,对应用户表主键 | |||||
- 14.结对Partner表
student1_id | 结对学生ID,外键,对应用户表主键 | |||||
student2_id |
- 15.绩效Performance表
学生ID,外键,对应用户表主键 | ||||||
percentage | 绩效百分比 |
- 16.作业提交Job_Submission表
submitter_id | 提交者ID,学生或是团队ID | |||||
submit_status | 提交状态:补交2,按时提交1,未提交0 | |||||
filepath | 否 | 提交作业的路径 |
- 17.角色Role表
角色类型,需要Unique |
- 18.权限Permission表
- 19.角色-权限Role_Permission表
role_id | 角色ID,外键,对应角色表的主键 | |||||
permission_id | 权限ID,外键,对应权限表的主键 |
1.用户需求
老师:
(1)添加助教;
(2)导入学生信息;
(3)创建班级;
(4)博客评分;
(5)评审团队;
(6)开始/结束结对组队;
(7)开始/结束团队创建;
(8)登录;
助教:
(1)批改作业;
(2)博客评分;
(3)创建作业;
(4)自定义评分细则;
组员:
(1)查看成绩;
(2)查看作业;
(3)结对组队;
(4)登录;
组长:
(4)组员管理;
(5)创建评审表;
(6)评审其他团队;
(7)填写绩效;
超级管理员:
(1)用户管理;
(2)重置密码;
(3)PDF导入名称正则规则修改;
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 | |
数据库说明书、开发计划 | ||
数据库结构表、ER图、功能模块层次图、泳道图 | 13 | |
原型设计 | 10 | |
评审表,权限文档,接口文档,ER图 | ||
接口设计,ppt,数据流图 | ||
github团队仓库链接
系统设计说明书链接
数据库设计说明书链接
系统设计和数据库设计答辩PPT链接