高校培养方案制定系统
项目地址
目录
- [1. 项目背景](#1. 项目背景)
- [2. 项目概述](#2. 项目概述)
- [3. 技术架构](#3. 技术架构)
- [4. 功能模块](#4. 功能模块)
- [5. 页面展示](#5. 页面展示)
- [6. 数据库设计](#6. 数据库设计)
- [7. 系统架构设计](#7. 系统架构设计)
- [8. 接口设计](#8. 接口设计)
- [9. 安全设计](#9. 安全设计)
- [10. 部署架构](#10. 部署架构)
- [11. 项目特色](#11. 项目特色)
1. 项目背景
1.1 教育改革背景
近年来,我国高等教育逐步实现了由精英教育向大众教育普及化的转变。随着教育规模的扩大和教育质量要求的提高,如何科学地培养人才,培养什么样的人才,成为高校面临的首要问题。
面临的挑战:
- 专业数量不断增加,管理难度加大
- 课程体系日益复杂,更新频繁
- 培养方案制定工作繁重,效率低下
- 缺乏统一的管理平台和规范流程
- 方案修订版本管理困难
- 历史数据追溯和统计分析困难
1.2 项目意义
人才培养方案是高校培养人才的指挥棒,是实现人才培养目标的具体实施方案。传统的培养方案制定和管理方式主要依靠人工编写和维护Word文档,存在以下问题:
- 效率低下:每次修订都需要重新编辑整个文档
- 易出错:手工计算学分、学时容易出错
- 难以追溯:历史版本管理不便,难以比对变化
- 协作困难:多人协同编辑困难,容易产生冲突
- 统计分析难:无法快速统计分析各类数据
- 标准化程度低:不同专业的方案格式不统一
开发一套用于制定人才培养方案的系统,能够:
- ✅ 提高制作者的工作效率
- ✅ 减少人为错误
- ✅ 规范方案格式
- ✅ 便于版本管理和追溯
- ✅ 支持数据统计和分析
- ✅ 促进信息化建设
1.3 项目目标
开发一个基于Web的高校培养方案制定与管理系统,为高校教务管理人员提供便捷、高效、规范的培养方案制定、管理、审核和导出功能。
具体目标:
- 实现培养方案的在线制定和编辑
- 实现培养方案的版本管理和历史追溯
- 实现培养方案的审核流程管理
- 实现培养方案的多格式导出(Word/PDF/Excel)
- 实现专业、课程等基础信息的统一管理
- 实现系统的权限控制和日志记录
- 提供友好的用户界面和操作体验
2. 项目概述
2.1 项目简介
高校培养方案制定系统是一个面向高校教务管理部门的Web应用系统,采用前后端分离架构 ,基于Spring Boot 和Vue 3技术栈开发。系统旨在帮助高校教务人员高效、规范地制定和管理各专业的人才培养方案。
2.2 核心功能
本系统主要包含以下核心功能模块:
| 模块 | 功能说明 | 实现状态 |
|---|---|---|
| 用户管理 | 用户注册、登录、权限管理 | ✅ 已完成 |
| 专业管理 | 专业信息的增删改查 | ✅ 已完成 |
| 课程管理 | 课程信息的增删改查、批量导入导出 | ✅ 已完成 |
| 毕业要求管理 | 毕业学分要求、学制要求等 | ⏳ 待完善 |
| 培养方案制作 | 方案基础信息、课程设置、学期计划 | ✅ 基础完成 |
| 培养方案管理 | 方案查询、编辑、删除、版本管理 | ✅ 基础完成 |
| 方案审核 | 提交审核、审核流程、审核意见 | ⏳ 待完善 |
| 方案导出 | Word/PDF/Excel格式导出 | ⏳ 待完善 |
| 系统维护 | 数据备份、日志管理 | ⏳ 待完善 |
2.3 用户角色
系统设计了四种用户角色,满足不同用户的需求:
| 角色 | 权限说明 | 典型用户 |
|---|---|---|
| 系统管理员 | 拥有系统所有权限,管理用户和系统配置 | IT管理员 |
| 教务人员 | 制定和管理培养方案,管理专业课程信息 | 教务处工作人员 |
| 教师 | 查看培养方案,提供修改建议 | 各学院教师 |
| 学生 | 查看本专业的培养方案 | 在校学生 |
2.4 技术特点
- 前后端分离:前后端独立开发、独立部署,提高开发效率
- RESTful API:标准化的接口设计,易于集成和扩展
- JWT认证:无状态认证机制,安全可靠
- 微服务友好:模块化设计,易于拆分为微服务
- 响应式布局:支持多种设备访问
- 可视化API文档:Knife4j自动生成,便于调试
3. 技术架构
3.1 技术选型
3.1.1 后端技术栈
| 技术/框架 | 版本 | 说明 | 官网 |
|---|---|---|---|
| Spring Boot | 3.2.5 | Java应用开发框架 | https://spring.io/projects/spring-boot |
| Spring Security | 6.x | 安全框架 | https://spring.io/projects/spring-security |
| MyBatis Plus | 3.5.5 | 持久层框架 | https://baomidou.com |
| MySQL | 8.0 | 关系型数据库 | https://www.mysql.com |
| JWT | 0.12.5 | Token认证 | https://jwt.io |
| Knife4j | 4.4.0 | API文档工具 | https://doc.xiaominfo.com |
| Hutool | 5.8.25 | Java工具类库 | https://hutool.cn |
| Lombok | Latest | 代码简化工具 | https://projectlombok.org |
| Maven | 3.8+ | 项目构建工具 | https://maven.apache.org |
| Java | 21 | 编程语言 | https://www.oracle.com/java |
技术选型理由:
- Spring Boot 3.2.5:最新稳定版本,支持Java 21,性能优秀
- MyBatis Plus:基于MyBatis增强,提供自动CRUD、分页等功能
- MySQL 8.0:成熟稳定,性能优秀,支持JSON字段
- JWT:无状态认证,适合分布式部署
- Knife4j:美观的API文档界面,支持在线调试
3.1.2 前端技术栈
| 技术/框架 | 版本 | 说明 | 官网 |
|---|---|---|---|
| Vue | 3.4 | 渐进式JavaScript框架 | https://vuejs.org |
| Vite | 5.x | 前端构建工具 | https://vitejs.dev |
| Element Plus | 2.6 | Vue 3 UI组件库 | https://element-plus.org |
| Vue Router | 4.x | Vue路由管理 | https://router.vuejs.org |
| Pinia | 2.x | Vue状态管理 | https://pinia.vuejs.org |
| Axios | Latest | HTTP客户端 | https://axios-http.com |
| Node.js | 16+ | JavaScript运行环境 | https://nodejs.org |
技术选型理由:
- Vue 3:最新版本,性能更好,Composition API更灵活
- Vite:极速的冷启动和热更新,开发体验极佳
- Element Plus:成熟的Vue 3 UI组件库,组件丰富
- Pinia:Vue 3官方推荐的状态管理库,比Vuex更轻量
3.1.3 开发工具
| 工具 | 说明 |
|---|---|
| IntelliJ IDEA | Java集成开发环境 |
| VS Code | 前端开发编辑器 |
| Navicat / DBeaver | 数据库管理工具 |
| Postman / Apifox | API测试工具 |
| Git | 版本控制工具 |
| Chrome DevTools | 浏览器调试工具 |
3.2 系统架构图
┌─────────────────────────────────────────────────────────────┐
│ 用户层 │
│ ┌──────────┐ ┌──────────┐ ┌──────────┐ ┌──────────┐ │
│ │ 管理员 │ │ 教务人员 │ │ 教师 │ │ 学生 │ │
│ └──────────┘ └──────────┘ └──────────┘ └──────────┘ │
└─────────────────────────────────────────────────────────────┘
│
↓
┌─────────────────────────────────────────────────────────────┐
│ 前端展示层 (Vue 3) │
│ ┌──────────┐ ┌──────────┐ ┌──────────┐ ┌──────────┐ │
│ │ 登录页面 │ │ 专业管理 │ │ 课程管理 │ │ 方案管理 │ │
│ └──────────┘ └──────────┘ └──────────┘ └──────────┘ │
│ Axios HTTP请求 + JWT Token认证 │
└─────────────────────────────────────────────────────────────┘
│
↓ RESTful API
┌─────────────────────────────────────────────────────────────┐
│ 后端服务层 (Spring Boot) │
│ ┌──────────────────────────────────────────────────────┐ │
│ │ Controller 层 (控制器) │ │
│ │ ┌────────┐ ┌────────┐ ┌────────┐ ┌──────────────┐ │ │
│ │ │ Auth │ │ Major │ │ Course │ │TrainingPlan │ │ │
│ │ └────────┘ └────────┘ └────────┘ └──────────────┘ │ │
│ └──────────────────────────────────────────────────────┘ │
│ │ │
│ ┌──────────────────────────────────────────────────────┐ │
│ │ Service 层 (业务逻辑) │ │
│ │ ┌────────┐ ┌────────┐ ┌────────┐ ┌──────────────┐ │ │
│ │ │ User │ │ Major │ │ Course │ │TrainingPlan │ │ │
│ │ │Service │ │Service │ │Service │ │ Service │ │ │
│ │ └────────┘ └────────┘ └────────┘ └──────────────┘ │ │
│ └──────────────────────────────────────────────────────┘ │
│ │ │
│ ┌──────────────────────────────────────────────────────┐ │
│ │ Mapper 层 (数据访问) │ │
│ │ ┌────────┐ ┌────────┐ ┌────────┐ ┌──────────────┐ │ │
│ │ │ User │ │ Major │ │ Course │ │TrainingPlan │ │ │
│ │ │ Mapper │ │ Mapper │ │ Mapper │ │ Mapper │ │ │
│ │ └────────┘ └────────┘ └────────┘ └──────────────┘ │ │
│ └──────────────────────────────────────────────────────┘ │
│ │
│ ┌──────────────────────────────────────────────────────┐ │
│ │ 安全与工具层 │ │
│ │ ┌───────────┐ ┌──────────┐ ┌──────────────────┐ │ │
│ │ │ Security │ │ JWT │ │ GlobalException │ │ │
│ │ │ Filter │ │ Util │ │ Handler │ │ │
│ │ └───────────┘ └──────────┘ └──────────────────┘ │ │
│ └──────────────────────────────────────────────────────┘ │
└─────────────────────────────────────────────────────────────┘
│
↓ MyBatis Plus
┌─────────────────────────────────────────────────────────────┐
│ 数据持久层 (MySQL 8.0) │
│ ┌──────────┐ ┌──────────┐ ┌──────────┐ ┌──────────┐ │
│ │ 用户表 │ │ 专业表 │ │ 课程表 │ │ 方案表 │ │
│ └──────────┘ └──────────┘ └──────────┘ └──────────┘ │
│ 17张数据表 │
└─────────────────────────────────────────────────────────────┘
3.3 技术架构说明
3.3.1 前后端分离架构
优势:
- 并行开发:前后端团队可以同时开发,提高效率
- 职责分离:前端负责UI和交互,后端负责业务逻辑和数据
- 技术独立:前后端技术栈独立,可以各自选择最适合的技术
- 易于扩展:可以轻松支持多端(Web、移动App、小程序)
- 部署灵活:前后端可以独立部署,便于负载均衡
通信方式:
- 前端通过HTTP/HTTPS协议调用后端RESTful API
- 使用JSON格式进行数据交换
- 通过JWT Token进行身份认证
3.3.2 分层架构设计
后端四层架构:
-
Controller层(控制器层)
- 职责:接收HTTP请求,参数校验,调用Service层
- 技术:Spring MVC、Validation
- 特点:薄控制器,不包含业务逻辑
-
Service层(业务逻辑层)
- 职责:实现核心业务逻辑,事务管理
- 技术:Spring Service、@Transactional
- 特点:封装业务规则,可复用
-
Mapper层(数据访问层)
- 职责:与数据库交互,执行SQL
- 技术:MyBatis Plus
- 特点:面向接口编程,支持注解和XML
-
Entity层(实体层)
- 职责:定义数据库表对应的Java对象
- 技术:JPA注解、Lombok
- 特点:一对一映射数据库表
前端分层架构:
-
Views层(视图层)
- 职责:定义页面组件和布局
- 技术:Vue 3 SFC
-
API层(接口层)
- 职责:封装后端接口调用
- 技术:Axios
-
Store层(状态管理层)
- 职责:管理全局状态
- 技术:Pinia
-
Router层(路由层)
- 职责:管理页面路由
- 技术:Vue Router
4. 功能模块
4.1 用户管理模块
功能描述 :
管理系统用户,包括用户注册、登录、权限分配等功能。
主要功能:
- ✅ 用户注册(填写用户名、密码、姓名等信息)
- ✅ 用户登录(支持用户名密码登录,返回JWT Token)
- ✅ 用户信息查询(获取当前登录用户信息)
- ✅ 用户列表管理(分页查询、搜索)
- ✅ 用户信息编辑(修改用户基本信息)
- ✅ 用户状态管理(启用/禁用用户)
- ✅ 角色分配(为用户分配角色)
- ⏳ 密码修改(待完善)
- ⏳ 密码重置(待完善)
数据表:
sys_user- 用户表sys_role- 角色表sys_user_role- 用户角色关联表sys_permission- 权限表sys_role_permission- 角色权限关联表
接口列表:
POST /api/auth/login- 用户登录POST /api/auth/register- 用户注册GET /api/auth/info- 获取当前用户信息POST /api/auth/logout- 退出登录GET /api/users- 用户列表POST /api/users- 创建用户PUT /api/users/{id}- 更新用户DELETE /api/users/{id}- 删除用户
4.2 专业管理模块
功能描述 :
管理高校各专业的基础信息,为培养方案制定提供基础数据。
主要功能:
- ✅ 专业信息录入(专业代码、名称、学院、学位类型、学制等)
- ✅ 专业信息编辑
- ✅ 专业信息删除(软删除)
- ✅ 专业信息查询(支持模糊搜索)
- ✅ 专业列表展示(分页)
- ✅ 按学院筛选专业
- ⏳ 专业数据批量导入(待完善)
数据表:
major_info- 专业信息表
字段说明:
major_code- 专业代码(如:080901)major_name- 专业名称(如:计算机科学与技术)college_name- 所属学院degree_type- 学位类型(学士、硕士、博士)education_length- 学制(年)subject_category- 学科门类enrollment_year- 开始招生年份status- 状态(在招/停招)
接口列表:
GET /api/majors- 专业列表(分页、搜索)GET /api/majors/{id}- 专业详情POST /api/majors- 创建专业PUT /api/majors/{id}- 更新专业DELETE /api/majors/{id}- 删除专业
4.3 课程管理模块
功能描述 :
管理高校所有课程信息,包括通识课程、专业课程、实践课程等。
主要功能:
- ✅ 课程信息录入(课程代码、名称、学分、学时等)
- ✅ 课程信息编辑
- ✅ 课程信息删除(软删除)
- ✅ 课程信息查询(支持多条件组合查询)
- ✅ 课程列表展示(分页)
- ✅ 按课程类型筛选
- ⏳ 课程批量导入(Excel导入,待完善)
- ⏳ 课程批量导出(Excel导出,待完善)
数据表:
course_info- 课程信息表
字段说明:
course_code- 课程代码course_name- 课程名称course_type- 课程类型(必修/选修/实践)course_category- 课程类别(通识/专业基础/专业核心等)credits- 学分total_hours- 总学时theory_hours- 理论学时experiment_hours- 实验学时practice_hours- 实践学时assessment_method- 考核方式(考试/考查)prerequisite_courses- 先修课程opening_semester- 开课学期建议teaching_dept- 开课单位
接口列表:
GET /api/courses- 课程列表(分页、搜索)GET /api/courses/{id}- 课程详情POST /api/courses- 创建课程PUT /api/courses/{id}- 更新课程DELETE /api/courses/{id}- 删除课程
4.4 毕业要求管理模块
功能描述 :
管理各专业的毕业要求,包括学分要求、课程要求、实践要求等。
主要功能:
- ⏳ 毕业要求录入
- ⏳ 毕业要求编辑
- ⏳ 毕业要求查询
- ⏳ 与专业关联
数据表:
graduation_requirement- 毕业要求表
4.5 培养方案制作模块
功能描述 :
核心模块,用于制定和编辑培养方案,包括基础信息填写、课程设置、学期计划等。
主要功能:
4.5.1 基础信息填写
- ✅ 选择专业
- ✅ 填写方案名称
- ✅ 设置适用年级
- ✅ 填写培养目标
- ✅ 填写培养规格
- ✅ 设置学制和学位类型
- ✅ 设置总学分要求
4.5.2 课程设置
- ✅ 从课程库选择课程
- ✅ 设置课程类型(必修/选修)
- ✅ 设置课程类别
- ✅ 设置开课学期
- ✅ 调整课程顺序
- ⏳ 设置学时分配(理论/实验/实践)
- ⏳ 设置考核方式
4.5.3 学期计划编排
- ✅ 查看学期课程分布
- ⏳ 编辑学期计划
- ⏳ 学期学分统计
- ⏳ 学期学时统计
数据表:
training_plan- 培养方案主表training_plan_course- 培养方案课程关联表course_setting- 课程设置详情表semester_plan- 学期计划表
接口列表:
POST /api/training-plans- 创建培养方案PUT /api/training-plans/{id}- 更新培养方案POST /api/training-plans/{id}/courses- 添加课程到方案DELETE /api/training-plans/{planId}/courses/{courseId}- 移除课程
4.6 培养方案管理模块
功能描述 :
管理已创建的培养方案,包括查询、编辑、删除、版本管理、审核等。
主要功能:
4.6.1 方案查询
- ✅ 培养方案列表(分页)
- ✅ 按专业筛选
- ✅ 按年级筛选
- ✅ 按状态筛选
- ✅ 方案详情查看
- ✅ 方案课程列表查看
4.6.2 方案编辑
- ✅ 编辑方案基础信息
- ✅ 编辑方案课程
- ✅ 复制方案(快速创建新方案)
4.6.3 方案删除
- ✅ 删除方案(软删除)
- ✅ 删除确认提示
4.6.4 版本管理
- ⏳ 保存历史版本
- ⏳ 查看版本历史
- ⏳ 版本对比
- ⏳ 版本回滚
4.6.5 审核流程
- ⏳ 提交审核
- ⏳ 审核通过/驳回
- ⏳ 审核意见记录
- ⏳ 审核历史查看
4.6.6 方案导出
- ⏳ 导出为Word文档
- ⏳ 导出为PDF文档
- ⏳ 导出为Excel文档
数据表:
training_plan- 培养方案表training_plan_version- 培养方案版本表training_plan_audit- 培养方案审核表
接口列表:
GET /api/training-plans- 培养方案列表GET /api/training-plans/{id}- 方案详情DELETE /api/training-plans/{id}- 删除方案GET /api/training-plans/{id}/courses- 方案课程列表GET /api/training-plans/major/{majorId}- 按专业查询方案PUT /api/training-plans/{id}/publish- 发布方案
4.7 系统维护模块
功能描述 :
系统维护相关功能,包括日志管理、数据备份等。
主要功能:
- ⏳ 操作日志查询
- ⏳ 登录日志查询
- ⏳ 数据库备份
- ⏳ 数据恢复
- ⏳ 备份记录管理
数据表:
sys_log_operation- 操作日志表sys_log_login- 登录日志表sys_backup_record- 备份记录表
5. 页面展示
5.1 登录页面
系统采用简洁的登录界面,用户输入用户名和密码后通过JWT认证进入系统。登录成功后根据用户角色自动跳转到对应功能首页。

页面说明:
- 支持用户名/密码登录
- 表单实时校验,输入有误时即时提示
- 登录成功后Token存储于 localStorage,自动维持登录状态
5.2 首页 / 导航布局
系统主界面采用左侧菜单栏 + 顶部导航 + 内容区的经典布局。左侧菜单根据当前用户角色动态渲染可见菜单项,顶部显示当前用户信息及退出按钮。

页面说明:
- 左侧菜单支持折叠/展开
- 顶部面包屑导航实时反映当前页面层级
- 不同角色登录后可见菜单不同(管理员 > 教务人员 > 教师 > 学生)
5.3 专业管理页面
专业管理页面以表格形式列出所有专业信息,支持按专业名称、学院等条件筛选,并提供新增、编辑、删除操作。

页面说明:
- 顶部搜索栏支持按专业名称、学院名称模糊查询
- 表格支持分页,每页默认显示10条记录
- 点击"新增"或"编辑"弹出表单对话框,支持输入专业代码、名称、所属学院、学位类型、学制等信息
- 删除操作有二次确认弹窗,防止误操作
5.4 课程管理页面
课程管理页面用于维护课程库,展示课程代码、名称、类型、学分、学时等核心信息,支持多条件组合查询。

页面说明:
- 支持按课程名称、课程类型、课程类别等多条件筛选
- 表格列包含:课程代码、课程名称、课程类型、学分、总学时(理论/实验/实践)、开课单位
- 新增/编辑表单包含课程全部字段,学时自动累加校验
5.5 培养方案列表页面
培养方案列表以卡片或表格形式展示所有已创建的培养方案,支持按专业、年级、状态筛选,可快速进入方案详情或编辑页。

页面说明:
- 支持按专业、适用年级、方案状态(草稿/已发布)筛选
- 每条记录显示方案名称、关联专业、适用年级、课程数量、总学分、当前状态
- 提供查看详情、编辑、复制、删除快捷操作
5.6 培养方案制作页面
培养方案制作是系统的核心功能页面,分步骤引导用户完成基础信息填写、课程选择与学期计划编排。

页面说明:
- 步骤一 基础信息:选择专业,填写方案名称、适用年级、培养目标、培养规格、学制、学位类型、总学分要求
- 步骤二 课程设置:从课程库中搜索选择课程,为每门课程设置课程类型(必修/选修)、所属类别、开课学期
- 步骤三 学期计划:按学期查看课程分布,统计各学期学分和学时
- 表单实时统计已选课程总学分,与设定目标进行对比提示
6. 数据库设计
5.1 数据库概述
数据库名称 :training_plan_system
数据库类型 :MySQL 8.0
字符集 :utf8mb4
排序规则:utf8mb4_general_ci
表数量统计:
- 系统管理模块:5张表
- 信息管理模块:3张表
- 培养方案模块:6张表
- 系统维护模块:3张表
- 总计:17张表
5.2 数据表清单
| 序号 | 表名 | 说明 | 记录数(测试) |
|---|---|---|---|
| 1 | sys_user | 用户表 | 5 |
| 2 | sys_role | 角色表 | 4 |
| 3 | sys_user_role | 用户角色关联表 | 5 |
| 4 | sys_permission | 权限表 | 30+ |
| 5 | sys_role_permission | 角色权限关联表 | 50+ |
| 6 | major_info | 专业信息表 | 7 |
| 7 | graduation_requirement | 毕业要求表 | 6 |
| 8 | course_info | 课程信息表 | 50+ |
| 9 | training_plan | 培养方案表 | 3 |
| 10 | training_plan_course | 培养方案课程关联表 | 20+ |
| 11 | course_setting | 课程设置表 | 0 |
| 12 | semester_plan | 学期计划表 | 8 |
| 13 | training_plan_version | 培养方案版本表 | 3 |
| 14 | training_plan_audit | 培养方案审核表 | 3 |
| 15 | sys_log_operation | 操作日志表 | 7 |
| 16 | sys_log_login | 登录日志表 | 7 |
| 17 | sys_backup_record | 备份记录表 | 6 |
5.3 表结构设计规范
字段命名规范:
- 主键:
id(BIGINT, AUTO_INCREMENT) - 创建时间:
create_time(DATETIME) - 更新时间:
update_time(DATETIME) - 创建人:
create_by(VARCHAR(64)) - 更新人:
update_by(VARCHAR(64)) - 删除标识:
deleted(TINYINT, 0-未删除, 1-已删除) - 备注:
remark(VARCHAR(500))
索引设计原则:
- 主键自动创建聚簇索引
- 外键字段创建索引
- 经常查询的字段创建索引
- 唯一约束字段创建唯一索引
5.4 核心表结构说明
5.4.1 sys_user - 用户表
sql
CREATE TABLE sys_user (
id BIGINT AUTO_INCREMENT PRIMARY KEY,
username VARCHAR(64) NOT NULL UNIQUE,
password VARCHAR(255) NOT NULL,
real_name VARCHAR(64) NOT NULL,
gender TINYINT DEFAULT 0,
phone VARCHAR(20),
email VARCHAR(100),
avatar VARCHAR(255),
status TINYINT DEFAULT 1,
create_time DATETIME DEFAULT CURRENT_TIMESTAMP,
update_time DATETIME DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP,
create_by VARCHAR(64),
update_by VARCHAR(64),
deleted TINYINT DEFAULT 0,
remark VARCHAR(500)
);
5.4.2 major_info - 专业信息表
sql
CREATE TABLE major_info (
id BIGINT AUTO_INCREMENT PRIMARY KEY,
major_code VARCHAR(20) NOT NULL UNIQUE,
major_name VARCHAR(100) NOT NULL,
college_name VARCHAR(100) NOT NULL,
degree_type VARCHAR(20),
education_length DECIMAL(3,1) DEFAULT 4.0,
subject_category VARCHAR(50),
enrollment_year INT,
status TINYINT DEFAULT 1,
create_time DATETIME DEFAULT CURRENT_TIMESTAMP,
update_time DATETIME DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP,
create_by VARCHAR(64),
update_by VARCHAR(64),
deleted TINYINT DEFAULT 0,
remark VARCHAR(500)
);
5.4.3 course_info - 课程信息表
sql
CREATE TABLE course_info (
id BIGINT AUTO_INCREMENT PRIMARY KEY,
course_code VARCHAR(30) NOT NULL UNIQUE,
course_name VARCHAR(100) NOT NULL,
course_type VARCHAR(20) NOT NULL,
course_category VARCHAR(50),
credits DECIMAL(4,1) NOT NULL,
total_hours INT NOT NULL,
theory_hours INT DEFAULT 0,
experiment_hours INT DEFAULT 0,
practice_hours INT DEFAULT 0,
assessment_method VARCHAR(50),
prerequisite_courses VARCHAR(500),
opening_semester VARCHAR(20),
teaching_dept VARCHAR(100),
status TINYINT DEFAULT 1,
create_time DATETIME DEFAULT CURRENT_TIMESTAMP,
update_time DATETIME DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP,
create_by VARCHAR(64),
update_by VARCHAR(64),
deleted TINYINT DEFAULT 0,
remark VARCHAR(500)
);
5.4.4 training_plan - 培养方案表
sql
CREATE TABLE training_plan (
id BIGINT AUTO_INCREMENT PRIMARY KEY,
plan_code VARCHAR(50) NOT NULL UNIQUE,
plan_name VARCHAR(200) NOT NULL,
major_id BIGINT NOT NULL,
academic_year VARCHAR(20) NOT NULL,
training_goal TEXT,
training_specs TEXT,
degree_type VARCHAR(20),
education_length DECIMAL(3,1),
total_credits DECIMAL(5,1),
plan_status TINYINT DEFAULT 1,
current_version INT DEFAULT 1,
publish_time DATETIME,
create_time DATETIME DEFAULT CURRENT_TIMESTAMP,
update_time DATETIME DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP,
create_by VARCHAR(64),
update_by VARCHAR(64),
deleted TINYINT DEFAULT 0,
remark VARCHAR(500)
);
5.5 数据库E-R图
┌─────────────┐ ┌─────────────┐
│ sys_user │──────────│ sys_role │
│ (用户表) │ M : N│ (角色表) │
└─────────────┘ └─────────────┘
│ │
│ │
└────────┬───────────────┘
│
┌───────────────┐
│sys_user_role │
│(用户角色关联) │
└───────────────┘
┌─────────────┐ ┌─────────────┐
│ major_info │──────────│training_plan│
│ (专业表) │ 1 : N│ (方案表) │
└─────────────┘ └─────────────┘
│
│ M
│
┌──────┴──────┐
│ │ N
┌──────────────┐ ┌─────────────┐
│training_plan │ │course_info │
│ _course │ │ (课程表) │
│(方案课程关联) │ └─────────────┘
└──────────────┘
7. 系统架构设计
6.1 后端架构设计
6.1.1 包结构
com.xiaoa.peiyangfangan
├── common # 通用模块
│ ├── Result.java # 统一响应结果
│ ├── PageResult.java # 分页结果
│ ├── ErrorCode.java # 错误码枚举
│ └── Constants.java # 常量定义
├── config # 配置类
│ ├── MybatisPlusConfig.java # MyBatis Plus配置
│ ├── SecurityConfig.java # Spring Security配置
│ ├── CorsConfig.java # 跨域配置
│ ├── Knife4jConfig.java # API文档配置
│ └── MetaObjectHandler.java # 自动填充处理器
├── controller # 控制层
│ ├── AuthController.java # 认证控制器
│ ├── UserController.java # 用户管理
│ ├── MajorInfoController.java # 专业管理
│ ├── CourseInfoController.java # 课程管理
│ └── TrainingPlanController.java # 培养方案管理
├── service # 服务层
│ ├── IUserService.java
│ ├── IMajorInfoService.java
│ ├── ICourseInfoService.java
│ └── ITrainingPlanService.java
├── service.impl # 服务实现层
│ ├── UserServiceImpl.java
│ ├── MajorInfoServiceImpl.java
│ ├── CourseInfoServiceImpl.java
│ └── TrainingPlanServiceImpl.java
├── mapper # 数据访问层
│ ├── UserMapper.java
│ ├── RoleMapper.java
│ ├── MajorInfoMapper.java
│ ├── CourseInfoMapper.java
│ └── TrainingPlanMapper.java
├── entity # 实体类
│ ├── User.java
│ ├── Role.java
│ ├── MajorInfo.java
│ ├── CourseInfo.java
│ └── TrainingPlan.java
├── dto # 数据传输对象
│ ├── LoginRequest.java # 登录请求
│ ├── LoginResponse.java # 登录响应
│ ├── UserRequest.java # 用户请求
│ ├── MajorRequest.java # 专业请求
│ ├── CourseRequest.java # 课程请求
│ └── TrainingPlanRequest.java # 方案请求
├── exception # 异常处理
│ ├── BusinessException.java # 业务异常
│ └── GlobalExceptionHandler.java # 全局异常处理
├── security # 安全模块
│ ├── JwtAuthenticationFilter.java # JWT过滤器
│ ├── JwtAuthenticationEntryPoint.java # 认证入口点
│ └── UserDetailsServiceImpl.java # 用户详情服务
└── utils # 工具类
└── JwtUtil.java # JWT工具类
6.1.2 设计模式
1. 依赖注入(DI)
java
@Service
public class UserServiceImpl implements IUserService {
@Autowired
private UserMapper userMapper;
@Autowired
private PasswordEncoder passwordEncoder;
}
2. 面向接口编程
java
public interface IUserService extends IService<User> {
User login(String username, String password);
void register(UserRequest request);
}
3. 策略模式(认证策略)
java
public interface AuthenticationStrategy {
boolean authenticate(String credentials);
}
4. 工厂模式(Token生成)
java
public class JwtTokenFactory {
public static String createToken(User user) {
// 生成Token逻辑
}
}
6.2 前端架构设计
6.2.1 目录结构
frontend/src
├── api # API接口层
│ ├── user.js # 用户接口
│ ├── major.js # 专业接口
│ ├── course.js # 课程接口
│ └── plan.js # 培养方案接口
├── assets # 静态资源
│ ├── css # 样式文件
│ │ └── global.css # 全局样式
│ └── images # 图片资源
├── components # 公共组件
│ ├── TableList.vue # 表格组件
│ ├── FormDialog.vue # 表单对话框
│ └── PageHeader.vue # 页面头部
├── views # 页面视图
│ ├── Login.vue # 登录页
│ ├── Layout.vue # 主布局
│ ├── major # 专业管理
│ │ └── Index.vue
│ ├── course # 课程管理
│ │ └── Index.vue
│ └── plan # 培养方案
│ └── Index.vue
├── router # 路由配置
│ └── index.js # 路由定义
├── store # 状态管理
│ ├── user.js # 用户状态
│ └── app.js # 应用状态
├── utils # 工具类
│ ├── request.js # axios封装
│ ├── auth.js # 认证工具
│ └── validate.js # 表单验证
├── App.vue # 根组件
└── main.js # 入口文件
6.2.2 组件设计原则
1. 单一职责原则
- 每个组件只负责一个功能
- 复杂组件拆分为多个子组件
2. 组合优于继承
- 使用组合方式复用代码
- 使用Composition API编写逻辑
3. Props Down, Events Up
- 父组件通过props向下传递数据
- 子组件通过事件向上通知父组件
4. 响应式设计
- 使用ref和reactive管理状态
- 使用computed计算派生数据
8. 接口设计
7.1 接口规范
7.1.1 RESTful API设计
HTTP方法语义:
GET:查询资源POST:创建资源PUT:更新资源(全量更新)PATCH:更新资源(部分更新)DELETE:删除资源
URL设计规范:
GET /api/majors # 获取专业列表
GET /api/majors/{id} # 获取专业详情
POST /api/majors # 创建专业
PUT /api/majors/{id} # 更新专业
DELETE /api/majors/{id} # 删除专业
7.1.2 统一响应格式
成功响应:
json
{
"code": 200,
"msg": "success",
"data": {
// 业务数据
}
}
失败响应:
json
{
"code": 400,
"msg": "参数错误",
"data": null
}
分页响应:
json
{
"code": 200,
"msg": "success",
"data": {
"records": [], // 数据列表
"total": 100, // 总记录数
"current": 1, // 当前页码
"size": 10 // 每页大小
}
}
7.1.3 状态码定义
| HTTP状态码 | 业务码 | 说明 |
|---|---|---|
| 200 | 200 | 成功 |
| 400 | 400 | 请求参数错误 |
| 401 | 401 | 未认证 |
| 403 | 403 | 无权限 |
| 404 | 404 | 资源不存在 |
| 500 | 500 | 服务器内部错误 |
7.2 核心接口列表
7.2.1 认证接口
登录接口
POST /api/auth/login
Content-Type: application/json
Request:
{
"username": "admin",
"password": "123456"
}
Response:
{
"code": 200,
"msg": "success",
"data": {
"token": "eyJhbGciOiJIUzI1NiJ9...",
"username": "admin",
"realName": "系统管理员"
}
}
7.2.2 专业管理接口
获取专业列表
GET /api/majors?current=1&size=10&majorName=计算机
Authorization: Bearer {token}
Response:
{
"code": 200,
"msg": "success",
"data": {
"records": [
{
"id": 1,
"majorCode": "080901",
"majorName": "计算机科学与技术",
"collegeName": "计算机与信息工程学院",
"degreeType": "工学学士",
"educationLength": 4.0
}
],
"total": 7,
"current": 1,
"size": 10
}
}
7.2.3 课程管理接口
创建课程
POST /api/courses
Authorization: Bearer {token}
Content-Type: application/json
Request:
{
"courseCode": "CS101",
"courseName": "数据结构",
"courseType": "必修",
"courseCategory": "专业核心课程",
"credits": 4.0,
"totalHours": 80,
"theoryHours": 48,
"experimentHours": 32
}
Response:
{
"code": 200,
"msg": "success",
"data": {
"id": 100,
"courseCode": "CS101",
...
}
}
7.2.4 培养方案接口
添加课程到方案
POST /api/training-plans/{id}/courses
Authorization: Bearer {token}
Content-Type: application/json
Request:
{
"courseId": 10,
"semester": 1,
"courseType": "必修",
"courseCategory": "专业核心课程"
}
Response:
{
"code": 200,
"msg": "success",
"data": null
}
7.3 API文档地址
Knife4j文档:http://localhost:8080/api/doc.html
特性:
- 自动生成API文档
- 支持在线调试
- 支持参数校验
- 支持文档导出
- 美观的UI界面
9. 安全设计
8.1 认证机制
8.1.1 JWT认证流程
1. 用户登录
↓
2. 验证用户名和密码
↓
3. 生成JWT Token
↓
4. 返回Token给客户端
↓
5. 客户端存储Token(localStorage)
↓
6. 后续请求携带Token
↓
7. 服务器验证Token
↓
8. 提取用户信息
↓
9. 执行业务逻辑
8.1.2 JWT Token结构
Header.Payload.Signature
Header:
{
"alg": "HS256",
"typ": "JWT"
}
Payload:
{
"sub": "1", // 用户ID
"username": "admin", // 用户名
"iat": 1679875200, // 签发时间
"exp": 1679961600 // 过期时间
}
Signature:
HMACSHA256(
base64UrlEncode(header) + "." +
base64UrlEncode(payload),
secret
)
8.1.3 Token有效期
- 默认有效期:24小时(86400000毫秒)
- 刷新机制:Token过期前30分钟可刷新
- 过期处理:返回401状态码,前端跳转到登录页
8.2 权限控制
8.2.1 RBAC模型
角色访问控制(Role-Based Access Control)
用户(User) ──┬─→ 角色(Role) ──┬─→ 权限(Permission)
│ │
└───────────────┴─→ 资源(Resource)
权限类型:
- 菜单权限:控制页面可见性
- 按钮权限:控制操作按钮显示
- 接口权限:控制API访问
8.2.2 权限注解
java
// 需要登录
@PreAuthorize("isAuthenticated()")
// 需要特定角色
@PreAuthorize("hasRole('ADMIN')")
// 需要特定权限
@PreAuthorize("hasAuthority('system:user:add')")
// 复合条件
@PreAuthorize("hasRole('ADMIN') and hasAuthority('system:user:delete')")
8.3 数据安全
8.3.1 密码加密
使用BCrypt算法加密用户密码:
java
// 加密
String encodedPassword = passwordEncoder.encode("123456");
// 验证
boolean matches = passwordEncoder.matches("123456", encodedPassword);
特点:
- 每次加密结果不同(自动加盐)
- 单向不可逆
- 计算成本高,防止暴力破解
8.3.2 SQL注入防护
使用预编译语句:
java
// 安全:使用MyBatis的#{}
SELECT * FROM user WHERE username = #{username}
// 危险:使用${}
SELECT * FROM user WHERE username = '${username}'
8.3.3 XSS防护
后端:
- 对用户输入进行HTML转义
- 使用
@Valid注解验证输入
前端:
- Vue自动转义模板内容
- 避免使用
v-html绑定用户输入
8.4 接口安全
8.4.1 请求限流
功能:防止接口被恶意调用
实现方式:
- 使用Redis + Lua脚本实现令牌桶算法
- 限制单个IP的请求频率
- 限制单个用户的请求频率
8.4.2 CORS跨域配置
java
@Configuration
public class CorsConfig implements WebMvcConfigurer {
@Override
public void addCorsMappings(CorsRegistry registry) {
registry.addMapping("/api/**")
.allowedOrigins("http://localhost:3000")
.allowedMethods("GET", "POST", "PUT", "DELETE")
.allowedHeaders("*")
.allowCredentials(true);
}
}
10. 部署架构
9.1 开发环境部署
架构图:
┌─────────────────┐
│ 开发机器 │
│ ┌───────────┐ │
│ │ MySQL │ │ localhost:3306
│ └───────────┘ │
│ ┌───────────┐ │
│ │ Spring │ │ localhost:8080
│ │ Boot │ │
│ └───────────┘ │
│ ┌───────────┐ │
│ │ Vue 3 │ │ localhost:3000
│ │ Vite │ │
│ └───────────┘ │
└─────────────────┘
部署步骤:
- 安装MySQL,创建数据库
- 使用IDEA启动Spring Boot
- 使用VS Code + Vite启动Vue 3
- 浏览器访问 http://localhost:3000
9.2 生产环境部署
架构图:
┌──────────────┐
│ Nginx │ (端口 80/443)
│ 反向代理 │
└──────┬───────┘
│
┌───────────┴───────────┐
│ │
┌────▼─────┐ ┌─────▼────┐
│ 静态资源 │ │ Spring │
│ (Vue) │ │ Boot │
│ /html │ │ :8080 │
└──────────┘ └─────┬────┘
│
┌─────▼────┐
│ MySQL │
│ :3306 │
└──────────┘
部署步骤:
1. 后端部署
bash
# 打包
mvn clean package -DskipTests
# 运行
java -jar peiyangfangan-0.0.1-SNAPSHOT.jar
# 或使用nohup后台运行
nohup java -jar peiyangfangan-0.0.1-SNAPSHOT.jar > app.log 2>&1 &
2. 前端部署
bash
# 构建
cd frontend
npm run build
# 将dist目录复制到Nginx的html目录
3. Nginx配置
nginx
server {
listen 80;
server_name yourdomain.com;
# 前端静态资源
location / {
root /usr/share/nginx/html;
try_files $uri $uri/ /index.html;
}
# 后端API代理
location /api {
proxy_pass http://localhost:8080;
proxy_set_header Host $host;
proxy_set_header X-Real-IP $remote_addr;
}
}
9.3 Docker部署
docker-compose.yml:
yaml
version: '3'
services:
mysql:
image: mysql:8.0
environment:
MYSQL_ROOT_PASSWORD: 123456
MYSQL_DATABASE: training_plan_system
ports:
- "3306:3306"
volumes:
- ./mysql-data:/var/lib/mysql
backend:
build: .
ports:
- "8080:8080"
depends_on:
- mysql
nginx:
image: nginx:latest
ports:
- "80:80"
volumes:
- ./frontend/dist:/usr/share/nginx/html
- ./nginx.conf:/etc/nginx/nginx.conf
启动命令:
bash
docker-compose up -d
11. 项目特色
10.1 技术特色
-
最新技术栈
- Spring Boot 3.2.5
- Vue 3 Composition API
- Java 21新特性
- MyBatis Plus 3.5
-
前后端分离
- 独立开发、独立部署
- RESTful API标准化
- 前端自动代理后端
-
JWT无状态认证
- 不需要Session
- 支持分布式部署
- 支持跨域认证
-
自动化配置
- 自动填充创建时间、更新时间
- 自动软删除
- 自动分页
- 自动生成API文档
-
优雅的代码
- Lombok简化代码
- Lambda表达式
- Stream API
- 函数式编程
10.2 功能特色
-
完整的CRUD
- 所有模块支持增删改查
- 统一的分页查询
- 灵活的搜索条件
-
版本管理(待完善)
- 培养方案版本控制
- 历史版本查看
- 版本对比
- 版本回滚
-
审核流程(待完善)
- 方案提交审核
- 审核通过/驳回
- 审核意见记录
- 审核历史追溯
-
多格式导出(待完善)
- Word文档导出
- PDF文档导出
- Excel表格导出
10.3 体验特色
-
美观的UI
- Element Plus组件库
- 响应式布局
- 友好的交互
-
完善的提示
- 表单验证提示
- 操作成功/失败提示
- 确认对话框
- 加载状态显示
-
便捷的操作
- 快速搜索
- 批量操作
- 一键复制
- 快捷键支持
!!!商务合作,代码咨询,扫描下方二维码联系作者!!!