# database_design_OnlineCourseManagement_后端项目 **Repository Path**: LCC_Z/database_design_1 ## Basic Information - **Project Name**: database_design_OnlineCourseManagement_后端项目 - **Description**: 这是一个基于Spring Boot + MyBatis的在线课程管理系统后端项目,实现了学生、教师和管理员三种角色的完整功能。系统支持教师注册审核机制,确保教师资质审核通过后才能使用教师功能。 - **Primary Language**: Unknown - **License**: Not specified - **Default Branch**: master - **Homepage**: None - **GVP Project**: No ## Statistics - **Stars**: 0 - **Forks**: 0 - **Created**: 2025-12-29 - **Last Updated**: 2025-12-30 ## Categories & Tags **Categories**: Uncategorized **Tags**: None ## README # 在线课程管理系统 - 后端项目 ## 项目简介 这是一个基于Spring Boot + MyBatis的在线课程管理系统后端项目,实现了学生、教师和管理员三种角色的完整功能。系统支持教师注册审核机制,确保教师资质审核通过后才能使用教师功能。 ## 技术栈 - **框架**: Spring Boot 3.5.7 - **数据库**: MySQL - **ORM**: MyBatis 3.0.5 - **API文档**: Knife4j (Swagger增强版) - **认证**: JWT - **工具**: Lombok ## 项目结构 ``` src/main/java/com/example/database_design/ ├── common/ # 公共模块 │ ├── config/ # 配置类 │ │ ├── WebMvcConfiguration.java # Web MVC配置 │ │ └── Knife4jConfig.java # Knife4j配置 │ ├── constant/ # 常量类 │ │ └── JwtClaimsConstant.java │ ├── context/ # 上下文 │ │ └── ThreadContext.java │ ├── exception/ # 异常类 │ │ └── BaseException.java │ ├── handler/ # 异常处理器 │ │ └── GlobalExceptionHandler.java │ ├── interceptor/ # 拦截器 │ │ └── JwtTokenInterceptor.java │ └── properties/ # 配置属性 │ └── JwtProperties.java ├── Controller/ # 控制器层 │ ├── Student/ # 学生相关接口 │ │ ├── StudentCourseController.java │ │ ├── StudentChapterController.java │ │ ├── StudentResourceController.java │ │ ├── StudentSubmissionController.java │ │ ├── StudentExamController.java │ │ ├── StudentPostController.java │ │ └── StudentLearningProgressController.java │ ├── Teacher/ # 教师相关接口 │ │ ├── TeacherCourseController.java │ │ ├── TeacherChapterController.java │ │ ├── TeacherResourceController.java │ │ ├── AssignmentController.java │ │ ├── TeacherSubmissionController.java │ │ ├── TeacherExamController.java │ │ ├── ExamResultController.java │ │ ├── TeacherPostController.java │ │ ├── TeacherLearningProgressController.java │ │ ├── TeacherAuthController.java │ │ └── TeacherStatisticsController.java │ ├── Admin/ # 管理员相关接口 │ │ ├── AdminController.java │ │ ├── AdminCourseController.java │ │ ├── AdminTeacherAuthController.java │ │ ├── AdminCategoryController.java │ │ └── StatisticsController.java │ ├── UserController.java │ └── UserCategoryController.java ├── Entity/ # 实体类 ├── Mapper/ # Mapper接口 ├── Service/ # 服务层 │ └── Impl/ # 服务实现 └── Utils/ # 工具类 ├── Result.java └── JwtUtil.java ``` ## 角色定义 系统支持以下角色: - **role = 0**: 待审核教师(注册时提交资质证明,等待管理员审核) - **role = 1**: 学生(可直接注册使用) - **role = 2**: 教师(审核通过后获得教师权限) - **role = 3**: 管理员(系统预设,不允许注册) ### 角色权限说明 | 角色 | 注册方式 | 功能权限 | |------|---------|---------| | 学生 (role=1) | 直接注册 | 浏览课程、学习、提交作业、参加考试、查看进度、发帖等 | | 待审核教师 (role=0) | 注册时提交资质证明 | 仅可查看认证状态、修改个人信息,**不能使用教师功能** | | 教师 (role=2) | 注册后等待审核通过 | 课程管理、作业管理、考试管理、学生管理、数据统计等 | | 管理员 (role=3) | 系统预设 | 用户管理、课程审核、教师认证审核、分类管理、全局统计 | ## 功能模块 ### 1. 用户管理模块 - ✅ 用户注册(学生/教师) - 学生注册:直接注册,role=1 - 教师注册:需提交资质证明(如学历证书、工作经验等),注册后role=0(待审核),等待管理员审核 - **不允许注册管理员角色(role=3)** - ✅ 用户登录(JWT认证) - ✅ 获取当前用户信息(根据角色返回学生/教师详细信息) - ✅ 修改个人资料(邮箱、姓名、性别、电话等) - ✅ 修改密码 ### 2. 课程管理模块 - ✅ 学生浏览课程 - ✅ 学生搜索课程 - ✅ 学生按分类查询课程 - ✅ 学生查看课程详情 - ✅ 学生报名课程 - ✅ 学生查看我的课程 - ✅ 教师创建课程 - ✅ 教师查看我的课程 - ✅ 教师更新课程信息 - ✅ 教师查看课程学生列表 ### 3. 章节和资源管理模块 - ✅ 教师创建章节 - ✅ 教师查看课程章节列表 - ✅ 教师更新章节 - ✅ 教师删除章节 - ✅ 教师上传资源(视频/课件/资料) - ✅ 教师更新资源 - ✅ 教师删除资源 - ✅ 学生查看课程章节列表(需报名) - ✅ 学生查看章节详情(需报名) - ✅ 学生查看章节资源列表(需报名) - ✅ 学生下载资料(需报名,权限验证) - ✅ 学生观看视频(需报名,权限验证) ### 4. 学习进度模块 - ✅ 学生更新学习进度 - ✅ 学生查看我的学习进度 - ✅ 学生查看指定章节的学习进度 - ✅ 教师查看课程的学习进度 - ✅ 自动记录学习行为(观看时长、学习进度、登录次数) ### 5. 作业管理模块 - ✅ 教师创建作业 - ✅ 教师查看课程的作业列表 - ✅ 教师更新作业 - ✅ 教师删除作业 - ✅ 学生提交作业 - ✅ 学生查看作业的提交记录 - ✅ 学生查看我的所有提交 - ✅ 教师查看作业的所有提交 - ✅ 教师批改作业(评分和反馈) ### 6. 考试管理模块 - ✅ 教师创建考试 - ✅ 教师查看课程的考试列表 - ✅ 教师更新考试 - ✅ 教师删除考试 - ✅ 教师录入考试成绩 - ✅ 教师查看考试的所有成绩 - ✅ 学生查看课程的考试列表 - ✅ 学生查看考试详情 - ✅ 学生查看我的考试成绩 - ✅ 学生查看指定考试的成绩 - ✅ 学生提交考试答案 ### 7. 讨论区模块 - ✅ 学生/教师发表帖子 - ✅ 查看课程的帖子列表 - ✅ 查看帖子详情 - ✅ 学生/教师回复帖子 - ✅ 查看帖子的回复列表 - ✅ 教师删除帖子 - ✅ 教师置顶帖子 - ✅ 教师取消置顶 - ✅ 教师发布课程公告 ### 8. 教师认证模块 #### 教师注册和审核流程 1. **教师注册** (`POST /UserController/register`) - 注册时必须提供 `role=2` 和 `material`(资质证明) - 注册成功后,系统自动: - 将用户 `role` 设置为 `0`(待审核状态) - 创建 `teacher` 表记录 - 创建 `teacher_auth` 表记录,`status=1`(审核中) - 返回提示:"注册成功,您的教师认证申请已提交,等待管理员审核" 2. **查看认证状态** (`GET /TeacherAuthController/my-status`) - 待审核教师可以查看自己的认证状态 - 返回认证记录信息(材料、状态、申请时间等) 3. **管理员审核** (`GET /AdminTeacherAuthController/pending` 和 `PUT /AdminTeacherAuthController/{authId}/approve`) - 管理员查询所有待审核的教师认证申请(`status=1`) - 管理员审核认证: - `status=2`(审核通过):系统自动将用户的 `role` 从 `0` 更新为 `2`,教师获得完整权限 - `status=0`(审核拒绝):用户仍为 `role=0`,可以重新提交材料申请 #### 接口说明 - ✅ 教师注册时自动创建认证记录(无需单独申请) - ✅ 教师查看我的认证状态 - ✅ 管理员查询待审核的认证申请 - ✅ 管理员审核教师认证(审核通过后自动更新用户角色) ### 9. 分类管理模块 - ✅ 查询所有分类(学生/教师/管理员) - ✅ 管理员创建分类 - ✅ 管理员更新分类 - ✅ 管理员删除分类 ### 10. 管理员模块 - ✅ 查询所有用户 - ✅ 按角色查询用户 - ✅ 修改用户状态 - ✅ 删除用户 - ✅ 查询待审核课程 - ✅ 审核课程 - ✅ 删除课程 ### 11. 统计报表模块 - ✅ 课程报名统计(按课程统计报名人数) - ✅ 学生学习进度统计(课程完成率、章节学习情况) - ✅ 成绩分析(作业和考试成绩分析) - ✅ 学生活跃度统计(登录次数、在线时长) - ✅ 教师查看自己课程的统计报表 - ⚠️ **注意**:系统已移除课程支付功能,不再包含收入统计 ## API文档 启动项目后,访问以下地址查看API文档: - **Knife4j文档**: http://localhost:8080/doc.html - **Swagger UI**: http://localhost:8080/swagger-ui.html ## 配置说明 ### 数据库配置 在 `application.yml` 中配置数据库连接信息: ```yaml spring: datasource: url: jdbc:mysql://localhost:3306/database_design?serverTimezone=Asia/Shanghai&useUnicode=true&characterEncoding=utf-8&zeroDateTimeBehavior=convertToNull&useSSL=false&allowPublicKeyRetrieval=true username: root password: your_password ``` ### JWT配置 ```yaml design: jwt: user-ttl: 7200000 # token过期时间(毫秒) user-token-name: authorization # token请求头名称 user-secret-key: elm-m-jwt-secret-key-1234567890123456 # 密钥 ``` ## 使用说明 ### 1. 启动项目 ```bash mvn spring-boot:run ``` ### 2. 测试接口 #### 用户注册 ```http POST /UserController/register Content-Type: application/x-www-form-urlencoded username=student01&password=123456&email=stu01@test.com&role=1 ``` #### 用户登录 ```http POST /UserController/login Content-Type: application/x-www-form-urlencoded username=student01&password=123456 ``` 登录成功后,响应体中会包含token,后续请求需要在请求头中携带: ``` Authorization: Bearer {token} ``` #### 浏览课程 ```http GET /StudentCourseController/list Authorization: Bearer {token} ``` ## 数据库设计 项目使用MySQL数据库,包含以下主要表: - `user` - 用户表 - `student` - 学生表 - `teacher` - 教师表 - `course` - 课程表 - `chapter` - 章节表 - `resource` - 资源表 - `enrollment` - 选课表 - `learning_progress` - 学习进度表 - `assignment` - 作业表 - `submission` - 作业提交表 - `exam` - 考试表 - `exam_result` - 考试成绩表 - `post` - 帖子表 - `reply` - 回复表 - `category` - 分类表 - `teacher_auth` - 教师认证表 ## 注意事项 1. **Entity类型**: Entity类中使用`Long`类型对应数据库的`int`类型,MyBatis会自动进行类型转换。 2. **JWT认证**: 需要在请求头中携带token,格式为 `Authorization: Bearer {token}` 3. **权限控制**: 所有接口都需要JWT认证,不同角色访问不同的Controller: - 学生 (role=1): `Student*Controller`, `UserController`, `UserCategoryController` - 待审核教师 (role=0): `TeacherAuthController`(仅查看状态), `UserController`(个人信息) - 教师 (role=2): `Teacher*Controller`, `AssignmentController`, `ExamResultController`, `UserController`, `UserCategoryController` - 管理员 (role=3): `Admin*Controller`, `StatisticsController`, `UserController` 4. **数据库初始化**: - 请先执行 `database_schema.sql` 创建数据库表结构 - 然后执行 `test_data.sql` 插入测试数据 - 数据库表包含外键约束,确保数据一致性: - `student.student_id` → `user.user_id` (ON DELETE CASCADE) - `teacher.teacher_id` → `user.user_id` (ON DELETE CASCADE) 5. **教师注册规则**: - 教师注册时必须提供资质证明(`material` 参数) - 注册后用户角色为 `0`(待审核),不能使用教师功能 - 只有管理员审核通过后,角色才会更新为 `2`(教师),才能使用完整的教师功能 - 如果审核被拒绝,可以重新提交材料申请 6. **学习进度更新**: 学生不能手动修改学习进度,系统会自动记录学习行为(观看时长、学习进度等) 7. **跨域配置**: 系统已配置CORS,支持跨域请求 ## 接口路径说明 ### 学生接口 (role=1) - `/UserController/*` - 用户相关(登录、注册、信息、修改资料、修改密码) - `/StudentCourseController/*` - 课程相关(浏览、搜索、报名、查看我的课程) - `/StudentChapterController/*` - 章节查看(需报名) - `/StudentResourceController/*` - 资源访问(下载资料、观看视频,需报名) - `/StudentSubmissionController/*` - 作业提交 - `/StudentExamController/*` - 考试查看和提交答案 - `/StudentPostController/*` - 讨论区(发表帖子、回复) - `/StudentLearningProgressController/*` - 学习进度(查看、自动记录,**不能手动更新**) - `/UserCategoryController/*` - 分类查询 ### 待审核教师接口 (role=0) - `/UserController/*` - 用户相关(登录、信息、修改资料、修改密码) - `/TeacherAuthController/my-status` - **仅可查看认证状态**,不能使用其他教师功能 ### 教师接口 (role=2) - `/UserController/*` - 用户相关(登录、信息、修改资料、修改密码) - `/TeacherCourseController/*` - 课程管理(创建、更新、查看学生列表) - `/TeacherChapterController/*` - 章节管理(创建、更新、删除) - `/TeacherResourceController/*` - 资源管理(上传、更新、删除) - `/AssignmentController/*` - 作业管理(创建、更新、删除) - `/TeacherSubmissionController/*` - 作业批改(查看提交、评分反馈) - `/TeacherExamController/*` - 考试管理(创建、更新、删除) - `/ExamResultController/*` - 成绩录入(录入、查看) - `/TeacherPostController/*` - 讨论区管理(删除、置顶、发布公告) - `/TeacherLearningProgressController/*` - 学习进度监控 - `/TeacherAuthController/my-status` - 查看认证状态 - `/TeacherStatisticsController/*` - 统计报表(报名、学习进度、成绩、活跃度) - `/UserCategoryController/*` - 分类查询 ### 管理员接口 (role=3) - `/UserController/*` - 用户相关(登录、信息) - `/AdminController/*` - 用户管理(查询所有用户、按角色查询、修改状态、删除) - `/AdminCourseController/*` - 课程审核(查询待审核、审核、删除) - `/AdminTeacherAuthController/*` - 教师认证审核(查询待审核、审核) - `/AdminCategoryController/*` - 分类管理(创建、更新、删除) - `/AdminStatisticsController/*` - 统计报表(全局统计:报名、学习进度、成绩、活跃度) ## 前端页面设计建议 ### 角色路由设计 前端应根据用户角色显示不同的功能页面: 1. **登录后获取用户信息** (`GET /UserController/info`) - 返回 `user.role` 和 `authStatus`(如果是待审核教师,返回 `"pending"`) - 根据角色值路由到对应页面 2. **页面路由建议**: ```javascript // 角色路由映射 role = 1 → /student/* (学生功能页面) role = 0 → /teacher/pending (待审核页面,仅显示认证状态) role = 2 → /teacher/* (教师功能页面) role = 3 → /admin/* (管理员功能页面) ``` 3. **导航菜单显示**: - **学生**: 课程中心、我的学习、我的作业、我的考试、学习进度、论坛 - **待审核教师**: 认证状态、个人信息(**不显示教师功能菜单**) - **教师**: 课程管理、作业管理、考试管理、学生管理、数据统计、论坛管理 - **管理员**: 用户管理、课程管理、分类管理、教师审核、数据统计 4. **路由守卫**: - 实现前端路由守卫,防止用户访问无权限的页面 - 根据 `user.role` 值判断是否有权限访问对应路由 ### 教师审核状态显示 - **待审核教师 (role=0)**: - 显示"等待审核"提示 - 显示提交的资质证明内容 - 显示申请时间 - **不显示任何教师功能入口** - **已审核教师 (role=2)**: - 显示完整的教师功能菜单 - 可以正常使用所有教师功能 ## 数据库设计说明 ### 表关系和外键约束 系统使用外键约束确保数据一致性: 1. **student 表**: - `student_id` 作为主键,同时也是外键,引用 `user.user_id` - 外键约束:`ON DELETE CASCADE ON UPDATE CASCADE` - 删除用户时,自动删除对应的学生记录 2. **teacher 表**: - `teacher_id` 作为主键,同时也是外键,引用 `user.user_id` - 外键约束:`ON DELETE CASCADE ON UPDATE CASCADE` - 删除用户时,自动删除对应的教师记录 3. **teacher_auth 表**: - `teacher_id` 引用 `user.user_id`(通过 `teacher` 表间接关联) - 存储教师认证申请信息(材料、状态、申请时间等) ### 重要字段说明 - `user.role`: 用户角色(0-待审核教师,1-学生,2-教师,3-管理员) - `user.status`: 用户状态(0-禁用,1-启用) - `teacher_auth.status`: 认证状态(0-未认证/拒绝,1-审核中,2-已审核通过) - `learning_progress`: 学习进度由系统自动记录,学生不能手动修改 ## 开发团队 云南大学软件学院 - 数据库系统设计课程项目