高校培养方案制定系统

高校培养方案制定系统

项目地址

http://8.146.211.92:3001/


目录

  • [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. 效率低下:每次修订都需要重新编辑整个文档
  2. 易出错:手工计算学分、学时容易出错
  3. 难以追溯:历史版本管理不便,难以比对变化
  4. 协作困难:多人协同编辑困难,容易产生冲突
  5. 统计分析难:无法快速统计分析各类数据
  6. 标准化程度低:不同专业的方案格式不统一

开发一套用于制定人才培养方案的系统,能够:

  • ✅ 提高制作者的工作效率
  • ✅ 减少人为错误
  • ✅ 规范方案格式
  • ✅ 便于版本管理和追溯
  • ✅ 支持数据统计和分析
  • ✅ 促进信息化建设

1.3 项目目标

开发一个基于Web的高校培养方案制定与管理系统,为高校教务管理人员提供便捷、高效、规范的培养方案制定、管理、审核和导出功能。

具体目标

  1. 实现培养方案的在线制定和编辑
  2. 实现培养方案的版本管理和历史追溯
  3. 实现培养方案的审核流程管理
  4. 实现培养方案的多格式导出(Word/PDF/Excel)
  5. 实现专业、课程等基础信息的统一管理
  6. 实现系统的权限控制和日志记录
  7. 提供友好的用户界面和操作体验

2. 项目概述

2.1 项目简介

高校培养方案制定系统是一个面向高校教务管理部门的Web应用系统,采用前后端分离架构 ,基于Spring BootVue 3技术栈开发。系统旨在帮助高校教务人员高效、规范地制定和管理各专业的人才培养方案。

2.2 核心功能

本系统主要包含以下核心功能模块:

模块 功能说明 实现状态
用户管理 用户注册、登录、权限管理 ✅ 已完成
专业管理 专业信息的增删改查 ✅ 已完成
课程管理 课程信息的增删改查、批量导入导出 ✅ 已完成
毕业要求管理 毕业学分要求、学制要求等 ⏳ 待完善
培养方案制作 方案基础信息、课程设置、学期计划 ✅ 基础完成
培养方案管理 方案查询、编辑、删除、版本管理 ✅ 基础完成
方案审核 提交审核、审核流程、审核意见 ⏳ 待完善
方案导出 Word/PDF/Excel格式导出 ⏳ 待完善
系统维护 数据备份、日志管理 ⏳ 待完善

2.3 用户角色

系统设计了四种用户角色,满足不同用户的需求:

角色 权限说明 典型用户
系统管理员 拥有系统所有权限,管理用户和系统配置 IT管理员
教务人员 制定和管理培养方案,管理专业课程信息 教务处工作人员
教师 查看培养方案,提供修改建议 各学院教师
学生 查看本专业的培养方案 在校学生

2.4 技术特点

  1. 前后端分离:前后端独立开发、独立部署,提高开发效率
  2. RESTful API:标准化的接口设计,易于集成和扩展
  3. JWT认证:无状态认证机制,安全可靠
  4. 微服务友好:模块化设计,易于拆分为微服务
  5. 响应式布局:支持多种设备访问
  6. 可视化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 前后端分离架构

优势

  1. 并行开发:前后端团队可以同时开发,提高效率
  2. 职责分离:前端负责UI和交互,后端负责业务逻辑和数据
  3. 技术独立:前后端技术栈独立,可以各自选择最适合的技术
  4. 易于扩展:可以轻松支持多端(Web、移动App、小程序)
  5. 部署灵活:前后端可以独立部署,便于负载均衡

通信方式

  • 前端通过HTTP/HTTPS协议调用后端RESTful API
  • 使用JSON格式进行数据交换
  • 通过JWT Token进行身份认证
3.3.2 分层架构设计

后端四层架构

  1. Controller层(控制器层)

    • 职责:接收HTTP请求,参数校验,调用Service层
    • 技术:Spring MVC、Validation
    • 特点:薄控制器,不包含业务逻辑
  2. Service层(业务逻辑层)

    • 职责:实现核心业务逻辑,事务管理
    • 技术:Spring Service、@Transactional
    • 特点:封装业务规则,可复用
  3. Mapper层(数据访问层)

    • 职责:与数据库交互,执行SQL
    • 技术:MyBatis Plus
    • 特点:面向接口编程,支持注解和XML
  4. Entity层(实体层)

    • 职责:定义数据库表对应的Java对象
    • 技术:JPA注解、Lombok
    • 特点:一对一映射数据库表

前端分层架构

  1. Views层(视图层)

    • 职责:定义页面组件和布局
    • 技术:Vue 3 SFC
  2. API层(接口层)

    • 职责:封装后端接口调用
    • 技术:Axios
  3. Store层(状态管理层)

    • 职责:管理全局状态
    • 技术:Pinia
  4. 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)

权限类型

  1. 菜单权限:控制页面可见性
  2. 按钮权限:控制操作按钮显示
  3. 接口权限:控制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     │  │
│  └───────────┘  │
└─────────────────┘

部署步骤

  1. 安装MySQL,创建数据库
  2. 使用IDEA启动Spring Boot
  3. 使用VS Code + Vite启动Vue 3
  4. 浏览器访问 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 技术特色

  1. 最新技术栈

    • Spring Boot 3.2.5
    • Vue 3 Composition API
    • Java 21新特性
    • MyBatis Plus 3.5
  2. 前后端分离

    • 独立开发、独立部署
    • RESTful API标准化
    • 前端自动代理后端
  3. JWT无状态认证

    • 不需要Session
    • 支持分布式部署
    • 支持跨域认证
  4. 自动化配置

    • 自动填充创建时间、更新时间
    • 自动软删除
    • 自动分页
    • 自动生成API文档
  5. 优雅的代码

    • Lombok简化代码
    • Lambda表达式
    • Stream API
    • 函数式编程

10.2 功能特色

  1. 完整的CRUD

    • 所有模块支持增删改查
    • 统一的分页查询
    • 灵活的搜索条件
  2. 版本管理(待完善)

    • 培养方案版本控制
    • 历史版本查看
    • 版本对比
    • 版本回滚
  3. 审核流程(待完善)

    • 方案提交审核
    • 审核通过/驳回
    • 审核意见记录
    • 审核历史追溯
  4. 多格式导出(待完善)

    • Word文档导出
    • PDF文档导出
    • Excel表格导出

10.3 体验特色

  1. 美观的UI

    • Element Plus组件库
    • 响应式布局
    • 友好的交互
  2. 完善的提示

    • 表单验证提示
    • 操作成功/失败提示
    • 确认对话框
    • 加载状态显示
  3. 便捷的操作

    • 快速搜索
    • 批量操作
    • 一键复制
    • 快捷键支持

!!!商务合作,代码咨询,扫描下方二维码联系作者!!!

相关推荐
常利兵2 小时前
Spring项目新姿势:Lambda封装Service调用,告别繁琐注入!
java·数据库·spring
sjmaysee3 小时前
Java框架SpringBoot(一)
java·开发语言·spring boot
寒秋花开曾相惜3 小时前
(学习笔记)3.8 指针运算(3.8.3 嵌套的数组& 3.8.4 定长数组)
java·开发语言·笔记·学习·算法
想唱rap3 小时前
Linux线程
java·linux·运维·服务器·开发语言·mysql
golang学习记3 小时前
IDEA 2026.1官宣:AI 建议免费了!
java·ide·intellij-idea
cccccc语言我来了3 小时前
Linux(9)操作系统
android·java·linux
东离与糖宝3 小时前
金三银四Java校招面经:从双非到大厂Offer,我只准备了这些
java·面试
禾小西4 小时前
Spring AI :Spring AI的介绍
java·人工智能·spring
愤豆4 小时前
05-Java语言核心-语法特性--模块化系统详解
java·开发语言·python