字節亂動對團隊作業四 — 項目系統設計與數據庫設計
字節亂動對團隊作業四 — 項目系統設計與數據庫設計
這個作業屬於哪個課程 | 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 |