教務管理系統設計總結
一、概述
教務管理系統,是一個管理教師、學生信息和管理教師、學生事務的管理系統,該系統分為教師端、學生端和管理員端,其權限比較:管理員>教師>學生,管理員負責管理教師、學生、賬號各信息,教師負責向學生端發布作業信息和批改學生作業,學生端接受作業后將作業提交至教師端,三者中管理員權限最大也最辛苦,可由教師賬號和學生賬號選舉產生,由管理員授權
二、項目結構及執行流程
1.執行流程
技術架構
學生端
教師端
管理員
2.項目結構
以 maven 為容器,SpringBoot+Vue 架構,前后端分離
后端
SpringBoot+MyBatis Plus+SpringMVC
前端
Vue+Axios+Element UI
開發環境
jdk1.8
MySQL8.0.20
Vue @vue/cli 4.5.15
三、數據庫
表結構
腳本
-- 教務管理系統
CREATE DATABASE studentworksystem;
USE studentworksystem;
-- ----------------------------
-- Table structure for class
-- ----------------------------
DROP TABLE IF EXISTS `class`;
CREATE TABLE `class`
(
`Class_Id` int(0) NOT NULL AUTO_INCREMENT COMMENT '班級編號',
`Class_Name` varchar(64) CHARACTER SET utf8mb4 COLLATE utf8mb4_0900_ai_ci NOT NULL COMMENT '班級名稱',
PRIMARY KEY (`Class_Id`) USING BTREE
) ENGINE = InnoDB
AUTO_INCREMENT = 11
CHARACTER SET = utf8mb4
COLLATE = utf8mb4_0900_ai_ci
ROW_FORMAT = Dynamic;
-- ----------------------------
-- Table structure for student
-- ----------------------------
DROP TABLE IF EXISTS `student`;
CREATE TABLE `student`
(
`Student_Id` int(0) NOT NULL AUTO_INCREMENT COMMENT '編號',
`Student_Name` varchar(64) CHARACTER SET utf8mb4 COLLATE utf8mb4_0900_ai_ci NOT NULL COMMENT '學生姓名',
`Student_Age` int(0) NOT NULL COMMENT '學生年齡',
`Student_Sex` varchar(32) CHARACTER SET utf8mb4 COLLATE utf8mb4_0900_ai_ci NOT NULL COMMENT '學生性別',
`Student_Address` varchar(1024) CHARACTER SET utf8mb4 COLLATE utf8mb4_0900_ai_ci NOT NULL COMMENT '學生居住地',
`Class_ID` int(0) NULL DEFAULT NULL COMMENT '班級編號',
`User_ID` int(0) NULL DEFAULT NULL COMMENT '用戶編號',
PRIMARY KEY (`Student_Id`) USING BTREE,
INDEX `Student_Work_fk` (`Class_ID`) USING BTREE,
INDEX `Student_User_fk` (`User_ID`) USING BTREE,
CONSTRAINT `Student_User_fk` FOREIGN KEY (`User_ID`) REFERENCES `user` (`User_Id`) ON DELETE RESTRICT ON UPDATE CASCADE,
CONSTRAINT `Student_Work_fk` FOREIGN KEY (`Class_ID`) REFERENCES `class` (`Class_Id`) ON DELETE RESTRICT ON UPDATE CASCADE
) ENGINE = InnoDB
AUTO_INCREMENT = 204
CHARACTER SET = utf8mb4
COLLATE = utf8mb4_0900_ai_ci
ROW_FORMAT = Dynamic;
-- ----------------------------
-- Table structure for student_work
-- ----------------------------
DROP TABLE IF EXISTS `student_work`;
CREATE TABLE `student_work`
(
`Student_Work_Id` int(0) NOT NULL AUTO_INCREMENT COMMENT '編號',
`Student_ID` int(0) NULL DEFAULT NULL COMMENT '學生編號',
`Work_ID` int(0) NULL DEFAULT NULL COMMENT '作業編號',
`Student_Work` varchar(3072) CHARACTER SET utf8mb4 COLLATE utf8mb4_0900_ai_ci NULL DEFAULT NULL COMMENT '學生作業',
`Student_Source` double NULL DEFAULT 0 COMMENT '學生成績',
PRIMARY KEY (`Student_Work_Id`) USING BTREE,
INDEX `Student_fk` (`Student_ID`) USING BTREE,
INDEX `SWork_fk` (`Work_ID`) USING BTREE,
CONSTRAINT `Student_fk` FOREIGN KEY (`Student_ID`) REFERENCES `student` (`Student_Id`) ON DELETE RESTRICT ON UPDATE CASCADE,
CONSTRAINT `SWork_fk` FOREIGN KEY (`Work_ID`) REFERENCES `work` (`Work_Id`) ON DELETE RESTRICT ON UPDATE CASCADE
) ENGINE = InnoDB
AUTO_INCREMENT = 235
CHARACTER SET = utf8mb4
COLLATE = utf8mb4_0900_ai_ci
ROW_FORMAT = Dynamic;
-- ----------------------------
-- Table structure for teacher
-- ----------------------------
DROP TABLE IF EXISTS `teacher`;
CREATE TABLE `teacher`
(
`Teacher_Id` int(0) NOT NULL AUTO_INCREMENT COMMENT '編號',
`Teacher_Name` varchar(64) CHARACTER SET utf8mb4 COLLATE utf8mb4_0900_ai_ci NOT NULL COMMENT '教師姓名',
`Teacher_Age` int(0) NOT NULL COMMENT '教師年齡',
`Teacher_Sex` varchar(32) CHARACTER SET utf8mb4 COLLATE utf8mb4_0900_ai_ci NOT NULL COMMENT '教師性別',
`Teacher_Address` varchar(1024) CHARACTER SET utf8mb4 COLLATE utf8mb4_0900_ai_ci NOT NULL COMMENT '教師居住地',
`User_ID` int(0) NULL DEFAULT NULL COMMENT '用戶編號',
PRIMARY KEY (`Teacher_Id`) USING BTREE,
INDEX `Teacher_User_fk` (`User_ID`) USING BTREE,
CONSTRAINT `Teacher_User_fk` FOREIGN KEY (`User_ID`) REFERENCES `user` (`User_Id`) ON DELETE RESTRICT ON UPDATE CASCADE
) ENGINE = InnoDB
AUTO_INCREMENT = 53
CHARACTER SET = utf8mb4
COLLATE = utf8mb4_0900_ai_ci
ROW_FORMAT = Dynamic;
-- ----------------------------
-- Table structure for user
-- ----------------------------
DROP TABLE IF EXISTS `user`;
CREATE TABLE `user`
(
`User_Id` int(0) NOT NULL AUTO_INCREMENT COMMENT '編號',
`User_Name` varchar(32) CHARACTER SET utf8mb4 COLLATE utf8mb4_0900_ai_ci NOT NULL COMMENT '用戶姓名',
`User_Password` varchar(32) CHARACTER SET utf8mb4 COLLATE utf8mb4_0900_ai_ci NOT NULL COMMENT '用戶密碼',
`User_Deleted` int(0) NOT NULL DEFAULT 0 COMMENT '凍結指數',
`User_Create_Time` datetime(0) NOT NULL DEFAULT CURRENT_TIMESTAMP(0) COMMENT '創建時間',
`User_Update_Time` datetime(0) NOT NULL DEFAULT CURRENT_TIMESTAMP(0) ON UPDATE CURRENT_TIMESTAMP(0) COMMENT '修改時間',
`User_Identity` int(0) NOT NULL DEFAULT 0 COMMENT '身份碼',
`User_Admin` int(0) NOT NULL DEFAULT 0 COMMENT '管理員碼',
PRIMARY KEY (`User_Id`) USING BTREE,
UNIQUE INDEX `username` (`User_Name`) USING BTREE
) ENGINE = InnoDB
AUTO_INCREMENT = 263
CHARACTER SET = utf8mb4
COLLATE = utf8mb4_0900_ai_ci
ROW_FORMAT = Dynamic;
-- ----------------------------
-- Table structure for work
-- ----------------------------
DROP TABLE IF EXISTS `work`;
CREATE TABLE `work`
(
`Work_Id` int(0) NOT NULL AUTO_INCREMENT COMMENT '編號',
`Work_Name` varchar(1024) CHARACTER SET utf8mb4 COLLATE utf8mb4_0900_ai_ci NOT NULL COMMENT '作業姓名',
`Work_Content` varchar(3072) CHARACTER SET utf8mb4 COLLATE utf8mb4_0900_ai_ci NULL DEFAULT NULL COMMENT '作業要求',
`Teacher_Id` int(0) NULL DEFAULT NULL COMMENT '教師編號',
`Class_Id` int(0) NULL DEFAULT NULL COMMENT '班級編號',
PRIMARY KEY (`Work_Id`) USING BTREE,
INDEX `Class_Work_fk` (`Class_Id`) USING BTREE,
INDEX `Teacher_Work_fk` (`Teacher_Id`) USING BTREE,
CONSTRAINT `Class_Work_fk` FOREIGN KEY (`Class_Id`) REFERENCES `class` (`Class_Id`) ON DELETE CASCADE ON UPDATE CASCADE,
CONSTRAINT `Teacher_Work_fk` FOREIGN KEY (`Teacher_Id`) REFERENCES `teacher` (`Teacher_Id`) ON DELETE CASCADE ON UPDATE CASCADE
) ENGINE = InnoDB
AUTO_INCREMENT = 71
CHARACTER SET = utf8mb4
COLLATE = utf8mb4_0900_ai_ci
ROW_FORMAT = Dynamic;
四、后端開發
后端依托 springboot 這個大框架為主體,mybatis plus 作為數據層,springMVC 為表現層
1.核心結構
數據層
以 mybatis plus 為框架
業務層
直接與數據層交互
表現層
與業務層交互
2.核心業務代碼
由於項目前后端分離,在這里用於與前端交互數據,前端向后端服務器發送各種請求,后端將返回 Json 用於響應
3.前端需發送的請求如下:
所有請求的前綴為
http://[后端服務器地址]:[端口號]
,以下請求均以此向后添加字段即可
注意:由於響應的字符串為 Json 字符串,以下我將羅列響應和請求的 Json 各 key 值的含義,方便理解
以下為 java 實體類源碼,其中 Json 以實體類定義的各對象屬性字段為 key 值,帶有
@TableId(type = IdType.AUTO)
為數據庫主鍵,帶有@TableField(exist = false)
注解的代表數據庫中沒有該字段但實體類操作過程中必須的字段
//班級
@TableId(type = IdType.AUTO)
private Long classId;//班級編號
private String className;//班級名稱
@TableField(exist = false)
private List<Work> classWorks;//班級作業
//學生
@TableId(type = IdType.AUTO)
private Long studentId;//編號
private String studentName;//學生姓名
private Long classId;//班級編號
private Long userId;//用戶編號
@TableField(exist = false)
private String className;//班級名稱
private Integer studentAge;//學生年齡
private String studentSex;//學生性別
private String studentAddress;//學生地址
@TableField(exist = false)
private List<StudentWork> studentWorks;//學生作業
//學生作業
@TableId(type = IdType.AUTO)
private Long studentWorkId;//學生作業編號
private Long studentId;//學生編號
private Long workId;//作業編號
private String studentWork;//學生作業
private Double studentSource;//作業分數
@TableField(exist = false)
private String studentName;//學生姓名
//教師
@TableId(type = IdType.AUTO)
private Long teacherId;//編號
private String teacherName;//教師姓名
private int teacherAge;//教師年齡
private String teacherSex;//教師性別
private String teacherAddress;//教師地址
private Long userId;//用戶編號
//用戶
@TableId(type = IdType.AUTO)
private Long userId;//編號
private String userName;//用戶名
@TableField(exist = false)
private String newUserName;//新用戶名
private String userPassword;//用戶密碼
@TableField(exist = false)
private String newUserPassWord;//新密碼
@TableLogic
private Integer userDeleted;//凍結指數
@TableField(fill = FieldFill.INSERT)
private Date userCreateTime;//創建時間
@TableField(fill = FieldFill.INSERT_UPDATE)
private Date userUpdateTime;//修改時間
private Integer userIdentity;//用戶身份
private Integer userAdmin;//管理員標識
@TableField(exist = false)
private String userRealName;//用戶真實姓名
@TableField(exist = false)
private String className;//用戶班級
@TableField(exist = false)
private String address;//用戶地址
@TableField(exist = false)
private String Identity;//身份
@TableField(exist = false)
private String Admin;//權限
//作業
@TableId(type = IdType.AUTO)
private Long workId;//作業編號
private String workName;//作業名稱
private String workContent;//作業要求
private Long teacherId;//教師編號
private Long classId;//班級編號
@TableField(exist = false)
private String teacherName;//布置人
@TableField(exist = false)
private String className;//班級名
//Json
private boolean status;//狀態信息
private Object data;//數據
五、前端開發
1.核心結構
2.登錄及注冊界面
登錄功能
注冊功能
登錄驗證功能
2.教師端
核心代碼
核心效果
-
查看功能
在此板塊中,教師用於查看一個班級布置的所有作業,可以向一個班級發布一次作業,修改作業,甚至刪除作業(此功能需謹慎使用!)
-
批改功能
在此板塊中,教師主要用於直觀的查看班級作業提交情況,下拉列表設有分數系統,教師可根據作業以及學生的完成情況進行人性化的處理
3.學生端
核心代碼
-
整體界面
-
查看作業
-
查看班級作業
4.管理端
核心代碼
-
管理學生
-
管理教師
-
管理用戶
5.賬號管理
這個頁面為三個端口公共的部分
已知的未修復的 bug 及臨時解決方案:
-
登錄頁面時,如果密碼輸入錯誤,輸入框會進入"禁止"狀態,此時點擊瀏覽器刷新即可解決
-
由於本人能力有限,登錄界面暫未實現攔截和會話保存,用戶登錄時點擊刷新后頁面會失效,此時重新登錄即可繼續操作。
項目啟動時間:2022 年 2 月 1 日
項目完結時間:2022 年 2 月 26 日
作者:春風能解釋(前端&后端)
項目 git 地址:
https://gitee.com/cfnjs/web/tree/master/教務管理系統(基於Spring+Vue的設計架構)
項目github地址:
https://github.com/2516649281/web/tree/master/教務管理系統(基於Spring+Vue的設計架構)