# eams **Repository Path**: sinorich/eams ## Basic Information - **Project Name**: eams - **Description**: 教务管理系统 - **Primary Language**: Unknown - **License**: Not specified - **Default Branch**: main - **Homepage**: None - **GVP Project**: No ## Statistics - **Stars**: 0 - **Forks**: 2 - **Created**: 2026-05-13 - **Last Updated**: 2026-05-13 ## Categories & Tags **Categories**: Uncategorized **Tags**: None ## README ### 一、系统需求分析 #### 1.1 用户角色 - **管理员**:负责系统的整体管理,包括用户权限分配、课程设置、成绩录入等。 - **教师**:负责课程教学,包括课程安排、成绩录入、学生考勤等。 - **学生**:查看课程表、成绩查询、选课等。 #### 1.2 功能需求 - **课程管理**:课程信息录入、修改、删除;课程安排(教室、时间)。 - **学生管理**:学生信息录入、修改、删除;学生选课、退课。 - **教师管理**:教师信息录入、修改、删除;教师课程分配。 - **成绩管理**:成绩录入、修改、查询;成绩统计与分析。 - **考勤管理**:学生考勤记录;考勤统计与分析。 - **报表生成**:生成课程表、成绩报表、考勤报表等。 #### 1.3 非功能需求 - **性能要求**:系统响应时间不超过3秒,支持并发用户数不少于1000。 - **安全性要求**:用户身份认证、数据加密存储、访问权限控制。 - **可扩展性**:方便后续功能模块的添加和扩展。 ### 二、功能模块设计 #### 2.1 系统登录模块 - 提供用户登录界面,支持管理员、教师、学生三种角色登录。 - 用户输入用户名和密码,系统验证身份后进入相应角色界面。 #### 2.2 课程管理模块 - **课程信息管理**:管理员可以添加、修改、删除课程信息,包括课程名称、课程代码、学分、授课教师等。 - **课程安排**:管理员可以为课程分配教室和上课时间,生成课程表。 #### 2.3 学生管理模块 - **学生信息管理**:管理员可以添加、修改、删除学生信息,包括学生姓名、学号、专业、班级等。 - **学生选课**:学生可以查看可选课程,进行选课和退课操作。 - **学生成绩查询**:学生可以查询自己的成绩,查看成绩排名。 #### 2.4 教师管理模块 - **教师信息管理**:管理员可以添加、修改、删除教师信息,包括教师姓名、工号、职称等。 - **教师课程分配**:管理员可以为教师分配授课课程。 #### 2.5 成绩管理模块 - **成绩录入**:教师可以录入学生课程成绩,支持批量导入成绩。 - **成绩修改**:教师可以修改学生课程成绩。 - **成绩查询**:管理员、教师、学生都可以查询成绩,支持按课程、班级、学生等条件查询。 - **成绩统计与分析**:系统可以对成绩进行统计分析,生成成绩分布图、平均分、及格率等报表。 #### 2.6 考勤管理模块 - **考勤记录**:教师可以记录学生考勤情况,包括出勤、迟到、早退、旷课等。 - **考勤统计与分析**:系统可以统计学生的考勤情况,生成考勤报表,分析学生的出勤率等。 #### 2.7 报表生成模块 - **课程表生成**:系统可以根据课程安排生成课程表,支持打印和导出。 - **成绩报表生成**:系统可以根据成绩数据生成成绩报表,支持按课程、班级、学生等条件生成。 - **考勤报表生成**:系统可以根据考勤数据生成考勤报表,支持按班级、学生等条件生成。 ### 三、数据库设计 #### 3.1 数据库表设计 - **用户表(User)** - 用户ID(主键) - 用户名 - 密码 - 角色(管理员、教师、学生) - **学生表(Student)** - 学生ID(主键) - 学号 - 姓名 - 性别 - 专业 - 班级 - 入学时间 - **教师表(Teacher)** - 教师ID(主键) - 工号 - 姓名 - 性别 - 职称 - 所属系部 - **课程表(Course)** - 课程ID(主键) - 课程代码 - 课程名称 - 学分 - 授课教师ID(外键,关联教师表) - **选课表(Course_Selection)** - 选课ID(主键) - 学生ID(外键,关联学生表) - 课程ID(外键,关联课程表) - 选课时间 - **成绩表(Grade)** - 成绩ID(主键) - 学生ID(外键,关联学生表) - 课程ID(外键,关联课程表) - 成绩 - 录入时间 - **考勤表(Attendance)** - 考勤ID(主键) - 学生ID(外键,关联学生表) - 课程ID(外键,关联课程表) - 考勤日期 - 考勤状态(出勤、迟到、早退、旷课) #### 3.2 数据库关系图 (此处可以使用ER图工具绘制数据库关系图,展示表之间的关系) ![image-20250418212949997](.\images\image-20250418212949997.png) #### 3.3 数据库实现 ```sql -- -------------------------------------------------------- -- 服务器版本: 11.6.2-MariaDB - mariadb.org binary distribution -- 服务器操作系统: Win64 -- -------------------------------------------------------- -- 导出 eams 的数据库结构 CREATE DATABASE IF NOT EXISTS `eams` /*!40100 DEFAULT CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci */; USE `eams`; -- 导出 表 eams.attendance 结构 CREATE TABLE IF NOT EXISTS `attendance` ( `attendance_id` int(11) NOT NULL AUTO_INCREMENT, `student_number` char(50) DEFAULT NULL, `course_schedule_id` int(11) DEFAULT NULL, `attendance_date` date NOT NULL, `attendance_status` enum('出勤','迟到','早退','旷课') NOT NULL, PRIMARY KEY (`attendance_id`), KEY `course_id` (`course_schedule_id`) USING BTREE, KEY `student_id` (`student_number`) USING BTREE ) ENGINE=InnoDB AUTO_INCREMENT=5 DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_general_ci; -- 正在导出表 eams.attendance 的数据:~4 rows (大约) DELETE FROM `attendance`; INSERT INTO `attendance` (`attendance_id`, `student_number`, `course_schedule_id`, `attendance_date`, `attendance_status`) VALUES (1, '2204010413', 1, '1970-01-21', '出勤'), (2, '2204010413', 1, '2025-05-01', '出勤'), (3, '2204010413', 1, '2025-05-01', '出勤'), (4, '2204010413', 1, '2025-05-01', '迟到'); -- 导出 表 eams.course 结构 CREATE TABLE IF NOT EXISTS `course` ( `course_id` varchar(50) NOT NULL DEFAULT '', `course_description` varchar(255) NOT NULL, `course_name` varchar(50) NOT NULL, `credits` decimal(3,1) NOT NULL, `pre_course_id` varchar(50) DEFAULT NULL, PRIMARY KEY (`course_id`) ) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_general_ci; -- 正在导出表 eams.course 的数据:~5 rows (大约) DELETE FROM `course`; INSERT INTO `course` (`course_id`, `course_description`, `course_name`, `credits`, `pre_course_id`) VALUES ('daxueyingyu1', '大学英语', '大学英语1', 2.0, ''), ('daxueyingyu2', '大学英语2', '大学英语2', 2.0, 'daxueyingyu1'), ('daxueyingyu3', '大学英语3视听说,读写', '大学英语3', 2.0, ''), ('gaodengshuxue1', '简单入门', '高等数学上', 2.0, '12312313'), ('gaodenshuxue2', '开始难了', '高等数学下', 2.0, '123123'), ('xianxingdaishu', '比较简单', '线性代数', 2.0, '200002'); -- 导出 表 eams.course_schedule 结构 CREATE TABLE IF NOT EXISTS `course_schedule` ( `id` bigint(20) NOT NULL AUTO_INCREMENT COMMENT '主键ID', `schedule_info` longtext CHARACTER SET utf8mb4 COLLATE utf8mb4_bin DEFAULT NULL COMMENT '时间安排' CHECK (json_valid(`schedule_info`)), `course_id` varchar(50) NOT NULL COMMENT '关联课程ID', `staff_number` varchar(50) DEFAULT NULL COMMENT '教师工号(外键)', `capacity` int(11) NOT NULL DEFAULT 30 COMMENT '课程限定人数', PRIMARY KEY (`id`) ) ENGINE=InnoDB AUTO_INCREMENT=2 DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_uca1400_ai_ci; -- 正在导出表 eams.course_schedule 的数据:~1 rows (大约) DELETE FROM `course_schedule`; INSERT INTO `course_schedule` (`id`, `schedule_info`, `course_id`, `staff_number`, `capacity`) VALUES (1, '[{"endTime":1748745000000,"id":1,"room":"A101","startTime":1748739600000},{"endTime":1748935800000,"id":2,"room":"B202","startTime":1748930400000}]', 'daxueyingyu1', 'lifengma0402', 30); -- 导出 表 eams.grade 结构 CREATE TABLE IF NOT EXISTS `grade` ( `grade_id` int(11) NOT NULL AUTO_INCREMENT, `student_number` char(50) DEFAULT NULL, `course_schedule_id` int(11) DEFAULT NULL, `score` int(11) DEFAULT NULL, `entry_time` timestamp NULL DEFAULT NULL, PRIMARY KEY (`grade_id`), KEY `student_id` (`student_number`) USING BTREE, KEY `course_id` (`course_schedule_id`) USING BTREE ) ENGINE=InnoDB AUTO_INCREMENT=3 DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_general_ci; -- 正在导出表 eams.grade 的数据:~1 rows (大约) DELETE FROM `grade`; INSERT INTO `grade` (`grade_id`, `student_number`, `course_schedule_id`, `score`, `entry_time`) VALUES (1, '2204010413', 1, 57, '2025-05-02 09:03:27'); -- 导出 表 eams.role 结构 CREATE TABLE IF NOT EXISTS `role` ( `role_name` varchar(20) NOT NULL DEFAULT '' COMMENT '角色名称', `role_code` varchar(20) NOT NULL COMMENT '角色编码', `description` varchar(255) DEFAULT NULL COMMENT '描述', PRIMARY KEY (`role_code`) ) ENGINE=InnoDB DEFAULT CHARSET=utf8mb3 COLLATE=utf8mb3_general_ci COMMENT='角色'; -- 正在导出表 eams.role 的数据:~3 rows (大约) DELETE FROM `role`; INSERT INTO `role` (`role_name`, `role_code`, `description`) VALUES ('管理员', 'ADMIN', '管理员'), ('学生', 'STU', '学生'), ('教师', 'TEACH', '教师'); -- 导出 表 eams.student 结构 CREATE TABLE IF NOT EXISTS `student` ( `student_number` varchar(20) NOT NULL, `name` varchar(50) NOT NULL, `gender` enum('男','女') NOT NULL, `major` varchar(50) NOT NULL, `enrollment_date` date NOT NULL, PRIMARY KEY (`student_number`) ) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_general_ci; -- 正在导出表 eams.student 的数据:~2 rows (大约) DELETE FROM `student`; INSERT INTO `student` (`student_number`, `name`, `gender`, `major`, `enrollment_date`) VALUES ('2204010413', '牛天地', '男', '计算机科学与技术', '2025-04-24'), ('2204010444', '牛天懒', '男', '计算机科学与技术', '2025-04-24'), ('2204010455', '江忍', '男', '焚身', '2025-04-24'); -- 导出 表 eams.sys_menu 结构 CREATE TABLE IF NOT EXISTS `sys_menu` ( `id` varchar(50) NOT NULL DEFAULT 'AUTO_INCREMENT' COMMENT '编号', `parent_id` varchar(50) NOT NULL DEFAULT '0' COMMENT '所属上级', `name` varchar(20) NOT NULL DEFAULT '' COMMENT '名称', `requires_auth` tinyint(3) NOT NULL DEFAULT 0 COMMENT '类型(0:目录,1:菜单,2:按钮)', `path` varchar(100) DEFAULT NULL COMMENT '路由地址', `component` varchar(100) DEFAULT NULL COMMENT '组件路径', `icon` varchar(100) DEFAULT NULL COMMENT '图标', PRIMARY KEY (`id`), KEY `idx_parent_id` (`parent_id`) ) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_general_ci COMMENT='菜单表'; -- 正在导出表 eams.sys_menu 的数据:~10 rows (大约) DELETE FROM `sys_menu`; INSERT INTO `sys_menu` (`id`, `parent_id`, `name`, `requires_auth`, `path`, `component`, `icon`) VALUES ('133', '0', '课程管理', 1, '/course', 'components/CourseManagement', 'Goods'), ('A2z9SLtLqXmWPf4QRcgkr', '0', '角色-菜单管理', 0, '/role-menu', 'components/RoleMenuManagement', 'Menu'), ('bcjWEaJTtqsm8_C_DO8ZQ', '0', '成绩管理', 0, '/grade', 'components/GradeManagement', 'List'), ('Blzg6O7tFRVzYXS2YjERM', '0', '考勤管理', 0, '/attendance', 'components/AttendanceManagement', 'Check'), ('C2yx8AEFu7GTcVwnGEYyg', '0', '学生管理', 0, '/student', 'components/StudentManagement', 'School'), ('plRjnGfE5sopa5XlztFaq', '0', '选课', 0, '/select-course', 'components/CourseSelect', 'Briefcase'), ('TfIrfItX8iOyXzejoPXtB', '0', '菜单管理', 0, '/sys-menu', 'components/MenuManagement', 'Menu'), ('UUWQvYFQp_3EvkLNRT6tb', '0', '用户管理', 0, '/user', 'views/UserManagement', 'User'), ('VlDdusLIKaMJ2FtIOo4fc', '0', '角色管理', 0, '/role', 'components/RoleManagement', 'Menu'), ('yczc1hnH2qziRpWcfbmZr', '0', '教师管理', 0, '/teacher', 'components/TeacherManagement', 'Briefcase'); -- 导出 表 eams.sys_role_menu 结构 CREATE TABLE IF NOT EXISTS `sys_role_menu` ( `id` varchar(50) NOT NULL, `role_code` varchar(50) NOT NULL DEFAULT '0', `menu_id` varchar(50) NOT NULL DEFAULT '0', PRIMARY KEY (`id`), KEY `idx_menu_id` (`menu_id`), KEY `idx_role_id` (`role_code`) USING BTREE ) ENGINE=InnoDB DEFAULT CHARSET=utf8mb3 COLLATE=utf8mb3_general_ci COMMENT='角色菜单'; -- 正在导出表 eams.sys_role_menu 的数据:~10 rows (大约) DELETE FROM `sys_role_menu`; INSERT INTO `sys_role_menu` (`id`, `role_code`, `menu_id`) VALUES ('1917793434333589505', 'STU', 'plRjnGfE5sopa5XlztFaq'), ('1917795132548558849', 'ADMIN', '133'), ('1917795132548558850', 'ADMIN', 'A2z9SLtLqXmWPf4QRcgkr'), ('1917795132548558851', 'ADMIN', 'bcjWEaJTtqsm8_C_DO8ZQ'), ('1917795132548558852', 'ADMIN', 'C2yx8AEFu7GTcVwnGEYyg'), ('1917795132603084801', 'ADMIN', 'TfIrfItX8iOyXzejoPXtB'), ('1917795132603084802', 'ADMIN', 'UUWQvYFQp_3EvkLNRT6tb'), ('1917795132603084803', 'ADMIN', 'VlDdusLIKaMJ2FtIOo4fc'), ('1917795472245239809', 'TEACH', 'bcjWEaJTtqsm8_C_DO8ZQ'), ('1917795472245239810', 'TEACH', 'Blzg6O7tFRVzYXS2YjERM'); -- 导出 表 eams.teacher 结构 CREATE TABLE IF NOT EXISTS `teacher` ( `staff_number` varchar(20) NOT NULL, `name` varchar(50) NOT NULL, `gender` enum('男','女') NOT NULL, `title` varchar(50) NOT NULL, `department` varchar(50) NOT NULL, PRIMARY KEY (`staff_number`) ) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_general_ci; -- 正在导出表 eams.teacher 的数据:~1 rows (大约) DELETE FROM `teacher`; INSERT INTO `teacher` (`staff_number`, `name`, `gender`, `title`, `department`) VALUES ('lifengma0402', '李丰马', '男', '正教授', '计算机科学与技术学院'), ('lifengniu520lfn', '李丰牛', '男', '副教授', '计算机科学与技术学院'); -- 导出 表 eams.user 结构 CREATE TABLE IF NOT EXISTS `user` ( `user_id` varchar(50) NOT NULL DEFAULT '', `username` varchar(50) NOT NULL, `password` varchar(100) NOT NULL, `role` varchar(50) NOT NULL DEFAULT '', PRIMARY KEY (`user_id`) ) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_general_ci; -- 正在导出表 eams.user 的数据:~4 rows (大约) DELETE FROM `user`; INSERT INTO `user` (`user_id`, `username`, `password`, `role`) VALUES ('2204010413', '牛天地', 'efe6398127928f1b2e9ef3207fb82663', 'STU'), ('2204010444', '牛天懒', 'efe6398127928f1b2e9ef3207fb82663', 'STU'), ('admin', 'Admin', '4297f44b13955235245b2497399d7a93', 'ADMIN'), ('lifengma0402', '李丰马', 'efe6398127928f1b2e9ef3207fb82663', 'TEACH'); ``` ### 四、系统架构设计 #### 4.1 系统架构图 (可以使用UML图或架构图工具绘制系统架构图,展示系统的分层结构) #### 4.2 技术选型 - **前端**:HTML、CSS、JavaScript、Vue.js(用于构建用户界面,实现交互功能) - **后端**:Java(Spring Boot框架)(用于处理业务逻辑,与数据库交互) - **数据库**:MySQL(用于存储系统数据) - **服务器**:Linux服务器(用于部署系统,提供服务) #### 4.3 系统部署 - 将系统部署在Linux服务器上,使用Nginx作为反向代理服务器,提高系统的性能和安全性。 - 使用MySQL数据库存储系统数据,确保数据的完整性和一致性。 - 使用Git进行代码版本管理,方便团队协作开发。 ### 五、系统实现 #### 5.1 前端实现 - 使用HTML、CSS、JavaScript构建用户界面,实现登录、课程管理、学生管理、教师管理、成绩管理、考勤管理等功能模块的页面布局和交互效果。 - 登陆页面,课程管理,学生管理,教师管理,成绩管理,考勤管理,用户管理,角色管理, - 使用Vue.js框架实现页面的动态加载和数据绑定,提高用户体验。 #### 5.2 后端实现 - 使用Java(Spring Boot框架)实现系统的后端逻辑,包括用户认证、课程管理、学生管理、教师管理、成绩管理、考勤管理等功能模块的业务逻辑处理。 用户认证: - [x] 用户登录,下发token - [x] 请求拦截器 - [x] 登录用户token鉴权 - [x] 登录用户使用LoginUserHolder 课程管理: - [x] 添加课程 - [x] 更新课程 - [x] 删除课程 - [x] 获取全部课程 课程表管理: - [x] 课程表添加 - [x] 获取全部课程表 学生管理: - [x] 更新学生 - [x] 删除学生 - [x] 添加学生 - [x] 根据学生ID获取学生信息 - [x] 获取全部学生信息 ​ 教师管理: - [x] 获取所有教师信息 - [x] 添加教师 - [x] 修改教师 - [x] 删除教师 - [x] 获取教师信息 考勤管理: - [x] 获取所有考勤记录信息 - [x] 添加考勤记录 - [x] 修改考勤记录信息 - [x] 删除考勤记录 - [x] 获取考勤记录信息 - [x] 根据学生ID获取考勤记录信息 - [x] 根据课程ID获取考勤记录信息 成绩管理: - [x] 更新课程 - [x] 删除课程 - [x] 根据课程ID获取课程 - [x] 增加课程 - [x] 获取全部课程 学校开课: 学生选课: 从请求包含课程记录ID。 - 使用MySQL数据库存储系统数据,通过JDBC(Java)-MybayisPlus技术实现后端与数据库的交互。 #### 5.3 数据库实现 - 根据数据库设计,使用MySQL数据库创建相应的表,并设置表之间的关系。 - 编写SQL语句实现数据的增删改查操作,为后端提供数据支持。 ### 六、系统测试 #### 6.1 测试用例设计 - 根据系统需求和功能模块设计测试用例,覆盖系统的各个功能点,包括登录、课程管理、学生管理、教师管理、成绩管理、考勤管理等功能模块的正常流程和异常情况。 #### 6.2 测试方法 - **功能测试**:测试系统的各个功能模块是否正常工作,包括登录、课程管理、学生管理、教师管理、成绩管理、考勤管理等功能模块的功能是否正确实现。 - **性能测试**:测试系统的性能是否满足需求,包括系统响应时间、并发用户数等性能指标是否达到要求。 - **安全性测试**:测试系统的安全性是否可靠,包括用户身份认证、数据加密存储、访问权限控制等功能是否正常工作。 #### 6.3 测试结果 - 根据测试用例执行测试,记录测试结果,对发现的问题进行修复和优化,确保系统的质量和稳定性。 ### 七、系统部署与维护 #### 7.1 系统部署 - 将系统部署在Linux服务器上,使用Nginx作为反向代理服务器,提高系统的性能和安全性。 - 使用MySQL数据库存储系统数据,确保数据的完整性和一致性。 - 使用Git进行代码版本管理,方便团队协作开发。 #### 7.2 系统维护 - 定期对系统进行备份和更新,确保系统的稳定运行。 - 对系统进行性能优化和安全加固,提高系统的性能和安全性。 - 及时处理用户反馈的问题,优化系统功能,提升用户体验。