智能学生管理系统:Spring Boot3+Vue3 前后端分离开发与 Docker 部署

Leaf SMS 学生管理系统:Spring Boot3+Vue3 前后端分离开发与 Docker 部署

项目简介

Leaf SMS 是一款基于 Spring Boot 3 和 Vue 3 的学生信息管理系统,具备完善的多角色权限控制。这个项目最初是为了本科毕业设计而开发的,但随着功能的不断完善,现在已经成长为一个功能完整、架构清晰、易于扩展的学生管理系统。

系统采用了前后端分离的架构设计,后端使用 Spring Boot 3 框架,前端使用 Vue.js 3 配合 Element Plus 组件库,数据库采用 MySQL 8.0。

系统预览

首页

登录页面

注册页面

学生首页

教师首页

核心特性

  • 完善的三端权限控制:系统分为管理员、教师、学生三个角色,每个角色都有独立的功能模块和权限控制。

  • JWT Token认证机制:采用 JSON Web Token 进行用户身份认证,无状态设计,支持分布式部署。

  • 统一的异常处理和响应格式:后端采用统一的异常处理机制和响应格式,前端可以统一处理各种异常情况。

  • MyBatis Plus简化CRUD操作:使用 MyBatis Plus 框架,大大简化了数据库操作,支持分页查询、条件查询等高级功能。

  • 分页查询支持:所有列表页面都支持分页查询,提高大数据量下的查询性能。

  • 选课时间控制功能:管理员可以灵活控制选课功能的启用和禁用状态,以及设置选课的开始和结束时间。

  • 密码加密存储:用户密码采用加密存储,确保用户信息安全。

  • CORS跨域支持:支持跨域访问,方便前后端分离部署。

  • 全局请求拦截器:前端采用全局请求拦截器,统一处理Token添加、错误处理等逻辑。

技术栈

后端技术

后端采用 Spring Boot 3.1.0 作为核心框架,配合 MyBatis Plus 3.5.4.1 进行数据库操作。Spring Boot 3 是目前最新的稳定版本,提供了更好的性能和更多的特性。MyBatis Plus 是 MyBatis 的增强工具,在 MyBatis 的基础上只做增强不做改变,为简化开发、提高效率而生。

数据库采用 MySQL 8.0,这是目前最流行的开源关系型数据库之一,性能稳定,功能强大。认证方面使用 JWT (jjwt 0.11.5),这是一种基于 Token 的认证方式,相比传统的 Session 认证方式更加灵活和安全。

前端技术

前端采用 Vue.js 3 作为核心框架,这是目前最流行的前端框架之一,采用组合式 API,代码组织更加清晰。UI 组件库使用 Element Plus 2.10.4,这是基于 Vue 3 的企业级 UI 组件库,提供了丰富的组件和完善的文档。

前端采用模块化开发,将 API 接口、组件、页面、路由等分离管理,代码结构清晰,易于维护和扩展。

环境要求

在开始使用 Leaf SMS 之前,请确保您的开发环境满足以下要求:

  • JDK 17+:Spring Boot 3 要求 JDK 版本至少为 17,推荐使用 JDK 17 或 JDK 21
  • Node.js 16+:Vue 3 要求 Node.js 版本至少为 16,推荐使用 Node.js 18 或 Node.js 20
  • MySQL 8.0+:数据库采用 MySQL 8.0 或更高版本
  • Maven 3.6+:后端项目使用 Maven 进行依赖管理和构建

快速开始

数据库配置

项目根目录下有 init.sql 文件,包含数据库表结构和初始数据。

1. 创建数据库
bash 复制代码
mysql -u root -p < init.sql
2. 修改数据库配置

编辑 backend-java/src/main/resources/application-dev.yml 文件:

yaml 复制代码
spring:
  datasource:
    url: jdbc:mysql://localhost:3306/leaf_sms?useSSL=false&serverTimezone=Asia/Shanghai&allowPublicKeyRetrieval=true&characterEncoding=utf8
    username: root
    password: your_password

请将 your_password 替换为您实际的 MySQL 数据库密码。

后端启动

1. 进入后端目录
bash 复制代码
cd backend-java
2. 编译运行
bash 复制代码
mvn clean install
mvn spring-boot:run

后端服务将在 http://localhost:8081/api 启动。

前端启动

1. 进入前端目录
bash 复制代码
cd frontend
2. 安装依赖
bash 复制代码
npm install
3. 启动开发服务器
bash 复制代码
npm run serve

前端服务将在 http://localhost:8080 启动。

Docker 部署

本节介绍如何使用 Docker 快速部署 Leaf SMS 系统。

前置要求

  • Docker 20.10+:确保已安装 Docker
  • init.sql 文件 :确保项目根目录下有 init.sql 数据库初始化脚本

部署步骤

1. 创建 Docker 网络
bash 复制代码
docker network create leaf-sms-network
2. 启动 MySQL 容器
bash 复制代码
docker run -d \
  --name=leaf-sms-mysql \
  --restart=always \
  --network=leaf-sms-network \
  -p 3306:3306 \
  -e MYSQL_ROOT_PASSWORD=123456 \
  mysql:8.0
3. 初始化数据库
bash 复制代码
docker exec -i leaf-sms-mysql mysql -uroot -p123456 < init.sql
4. 启动后端容器
bash 复制代码
docker run -d \
  --name=leaf-sms-backend \
  --restart=always \
  --network=leaf-sms-network \
  -p 8081:8081 \
  yangshengzhou/leafsms:backend-v1
5. 启动前端容器
bash 复制代码
docker run -d \
  --name=leaf-sms-frontend \
  --restart=always \
  --network=leaf-sms-network \
  -p 80:80 \
  yangshengzhou/leafsms:frontend-v1
6. 验证部署
bash 复制代码
docker ps

应该看到三个容器都在运行:

bash 复制代码
CONTAINER ID   IMAGE                               COMMAND                  CREATED          STATUS          PORTS                                                    NAMES
..            yangshengzhou/leafsms:frontend-v1   "/docker-entrypoint...."   ..              Up ..           0.0.0.0:80->80/tcp, [::]:80->80/tcp                      leaf-sms-frontend
..            yangshengzhou/leafsms:backend-v1    "java -jar /app/app...."   ..              Up ..           0.0.0.0:8081->8081/tcp, [::]:8081->8081/tcp              leaf-sms-backend
..            mysql:8.0                           "docker-entrypoint.s..."   ..              Up ..           0.0.0.0:3306->3306/tcp, [::]:3306->3306/tcp, 33060/tcp   leaf-sms-mysql

在浏览器中访问 http://服务器IP 即可使用系统(例如:http://192.168.1.100)。

常用命令

查看容器日志
bash 复制代码
docker logs leaf-sms-mysql
docker logs leaf-sms-backend
docker logs leaf-sms-frontend
停止容器
bash 复制代码
docker stop leaf-sms-frontend leaf-sms-backend leaf-sms-mysql
启动容器
bash 复制代码
docker start leaf-sms-mysql leaf-sms-backend leaf-sms-frontend
删除容器
bash 复制代码
docker rm -f leaf-sms-frontend leaf-sms-backend leaf-sms-mysql
删除网络
bash 复制代码
docker network rm leaf-sms-network

镜像信息

  • 后端镜像yangshengzhou/leafsms:backend-v1
  • 前端镜像yangshengzhou/leafsms:frontend-v1
  • 数据库镜像mysql:8.0

注意事项

  1. MySQL 密码 :默认 root 密码为 123456,生产环境建议修改为强密码
  2. 端口占用:确保 80、8081、3306 端口没有被其他程序占用
  3. 数据持久化 :当前配置未挂载数据卷,容器删除后数据会丢失,如需持久化请添加 -v 参数挂载数据卷
  4. 防火墙设置:确保服务器防火墙已开放相应端口

数据持久化配置(可选)

bash 复制代码
docker run -d \
  --name=leaf-sms-mysql \
  --restart=always \
  --network=leaf-sms-network \
  -p 3306:3306 \
  -e MYSQL_ROOT_PASSWORD=123456 \
  -v mysql-data:/var/lib/mysql \
  mysql:8.0

默认账号

系统初始化时会创建三个默认用户,分别对应管理员、教师和学生角色。您可以使用这些账号登录系统进行测试。

管理员账号

  • 邮箱: admin@qq.com
  • 密码: 123456

管理员拥有系统的最高权限,可以管理所有用户、课程、部门、公告等数据,还可以配置系统参数,如选课时间控制等。

教师账号

  • 邮箱: teacher@qq.com
  • 密码: 123456

教师可以管理自己的课程,查看学生信息,录入和修改学生成绩,查看教学计划等。

学生账号

  • 邮箱: student@qq.com
  • 密码: 123456

学生可以查看个人信息,进行选课和退课操作,查询成绩和课表,查看公告等。

功能模块

管理员功能

管理员是系统的最高权限用户,负责整个系统的管理和维护工作。管理员功能模块包括:

  • 用户管理:管理员可以对系统中的所有用户进行增删改查操作,包括学生、教师和管理员账号的创建、修改和删除。

  • 课程管理:管理员可以管理所有课程信息,包括课程的基本信息、学分、学时、所属部门等,支持课程的增删改查操作。

  • 成绩管理:管理员可以查看和管理所有学生的成绩信息,支持成绩的增删改查操作。

  • 部门管理:管理员可以管理学校的部门信息,包括部门的创建、修改和删除,部门信息用于组织和管理课程和人员。

  • 公告管理:管理员可以发布和管理系统公告,公告可以针对全体用户、学生或教师,支持公告的增删改查操作。

  • 系统配置:管理员可以配置系统参数,特别是选课时间控制功能,可以设置选课的开始和结束时间,以及启用或禁用选课功能。管理员还可以管理学期信息,包括添加和删除学期,学期数据会从教学任务中自动提取。

  • 个人资料管理:管理员可以查看和修改自己的个人信息,包括用户名、邮箱、手机号、地址等。

教师功能

教师是教学活动的主要执行者,负责课程教学和学生成绩管理。教师功能模块包括:

  • 个人信息管理:教师可以查看和修改自己的个人信息,包括用户名、邮箱、手机号、地址等。

  • 学生管理:教师可以查看选修自己课程的学生信息,了解学生的基本情况。

  • 课程管理:教师可以管理自己负责的课程,包括课程的基本信息、教学安排、教室分配等,支持课程的增删改查操作。

  • 成绩录入与管理:教师可以录入和修改选修自己课程的学生成绩,包括平时成绩、期中成绩、期末成绩等,系统会自动计算总成绩和等级。

  • 教学计划查看:教师可以查看自己的教学计划,了解课程安排和时间表。

学生功能

学生是系统的主要使用者,通过系统进行选课、查询成绩和课表等操作。学生功能模块包括:

  • 个人信息管理:学生可以查看和修改自己的个人信息,包括用户名、邮箱、手机号、地址等。

  • 选课/退课:学生可以在选课时间内选择或退选课程,系统会实时显示可选课程和已选课程,以及已选学分等信息。

  • 成绩查询:学生可以查询自己的所有课程成绩,包括平时成绩、期中成绩、期末成绩、总成绩和等级等信息。

  • 课表查询:学生可以查看自己的课程表,了解课程的时间、地点等信息。

  • 公告查看:学生可以查看系统发布的公告,了解学校的最新通知和安排。

API接口说明

系统采用 RESTful API 设计,所有接口都返回统一的 JSON 格式数据。以下是主要的 API 接口说明。

登录接口

登录接口用于用户身份认证,支持密码登录和邮箱登录两种方式。

  • POST /login/password - 密码登录,邮箱和密码作为请求参数
  • POST /login/email - 邮箱登录,邮箱和验证码作为请求参数
  • POST /login/resetPassword - 重置密码,需要提供邮箱和验证码
  • POST /login/sendCode - 发送验证码,用于邮箱登录和密码重置
  • GET /login/profile - 获取个人信息,需要携带 JWT Token
  • PUT /login/profile - 更新个人信息,需要携带 JWT Token

管理员接口

管理员接口用于管理系统的各项数据,包括用户、课程、部门、公告、成绩等。

  • GET /admin/home - 获取首页统计数据,包括用户数、课程数、部门数等
  • GET /admin/users - 获取用户列表,支持分页和条件查询
  • POST /admin/users - 添加新用户,包括学生、教师和管理员
  • PUT /admin/users - 更新用户信息
  • DELETE /admin/users/{userId} - 删除指定用户
  • GET /admin/courses - 获取课程列表,支持分页和条件查询
  • POST /admin/courses - 添加新课程
  • PUT /admin/courses - 更新课程信息
  • DELETE /admin/courses/{courseId} - 删除指定课程
  • GET /admin/departments - 获取部门列表,支持分页和条件查询
  • POST /admin/departments - 添加新部门
  • PUT /admin/departments - 更新部门信息
  • DELETE /admin/departments/{departmentId} - 删除指定部门
  • GET /admin/announcements - 获取公告列表,支持分页和条件查询
  • GET /admin/announcements/{announcementId} - 获取公告详情
  • POST /admin/announcements - 创建新公告
  • PUT /admin/announcements - 更新公告信息
  • DELETE /admin/announcements/{announcementId} - 删除指定公告
  • GET /admin/grades - 获取成绩列表,支持分页和条件查询
  • PUT /admin/grades - 更新成绩信息
  • DELETE /admin/grades/{gradeId} - 删除指定成绩

系统配置接口

系统配置接口用于管理系统参数,包括选课时间控制、学期管理和系统配置项。

  • GET /admin/config/course-selection - 获取选课配置,包括选课开始时间、结束时间、是否启用等
  • POST /admin/config/course-selection/update - 更新选课配置
  • GET /admin/config - 获取系统配置列表,支持分页和条件查询
  • GET /admin/config/{configId} - 获取指定配置详情
  • POST /admin/config - 创建新系统配置
  • PUT /admin/config - 更新系统配置信息
  • DELETE /admin/config/{configId} - 删除指定系统配置
  • GET /admin/semesters - 获取学期列表
  • POST /admin/semesters - 添加新学期
  • DELETE /admin/semesters/{semester} - 删除指定学期

学生接口

学生接口用于学生进行选课、查询成绩和课表等操作。

  • GET /student/home - 获取首页统计数据,包括已选课程数、已完成课程数、平均成绩等
  • GET /student/grades/pagination - 分页获取成绩列表
  • GET /student/schedule - 获取课表信息
  • GET /student/announcements - 获取公告列表
  • GET /student/courses/available/pagination - 分页获取可选课程列表
  • GET /student/courses/selected/pagination - 分页获取已选课程列表
  • POST /student/courses/select - 选择课程
  • POST /student/courses/drop - 退选课程

教师接口

教师接口用于教师管理课程和学生成绩。

  • GET /teacher/home - 获取首页统计数据,包括课程数、学生数等
  • GET /teacher/students - 获取学生列表,支持分页和条件查询
  • GET /teacher/students/stats - 获取学生统计数据,包括总学生数、正常在校人数、特殊状态人数、专业数量
  • GET /teacher/courses - 获取课程列表,支持分页和条件查询
  • GET /teacher/departments - 获取部门列表,支持分页和条件查询
  • POST /teacher/courses - 创建新课程
  • PUT /teacher/courses/{assignmentId} - 更新课程信息
  • DELETE /teacher/courses/{assignmentId} - 删除指定课程
  • GET /teacher/courses/{courseId}/grades - 获取课程成绩列表
  • PUT /teacher/course-grades/{selectionId} - 更新成绩信息
  • DELETE /teacher/course-grades/{selectionId} - 删除指定成绩

注意事项

  1. 确保MySQL服务已启动:启动后端服务前,确保 MySQL 服务已启动,数据库已创建并初始化。

  2. 确保数据库配置正确 :确保 application-dev.yml 中的数据库连接信息正确。

  3. 端口不要冲突:前端默认使用 8080 端口,后端默认使用 8081 端口,请确保端口未被占用。

  4. 首次运行需要执行init.sql :首次运行项目时,需要执行 init.sql 文件创建数据库表结构和初始数据。

  5. 默认密码为123456 :系统默认用户的密码都是 123456,正式使用时建议修改默认密码。

  6. JWT Token认证 :需要认证的接口需在请求头中携带 JWT Token,格式为 Authorization: Bearer {token}

  7. 选课时间控制:管理员可以控制选课功能的启用/禁用状态,设置选课的开始和结束时间。

项目结构

Leaf SMS 采用前后端分离的架构,项目结构清晰,便于理解和扩展。

复制代码
leaf-sms/
├── backend-java/          # 后端项目
│   ├── src/
│   │   ├── java/      # Java源码
│   │   │   └── com/leafsms/
│   │   │       ├── common/        # 通用类,包括Result、PageResult等
│   │   │       ├── config/        # 配置类,包括MyBatisPlusConfig、WebMvcConfig等
│   │   │       ├── controller/    # 控制器,处理HTTP请求
│   │   │       ├── entity/        # 实体类,对应数据库表
│   │   │       ├── interceptor/   # 拦截器,包括JWT拦截器
│   │   │       ├── mapper/        # 数据访问层,MyBatis Mapper接口
│   │   │       ├── service/       # 业务逻辑层,包括Service接口和实现类
│   │   │       └── util/         # 工具类,包括JWT工具类、Excel工具类等
│   │   └── resources/ # 配置文件,包括application.yml、application-dev.yml等
│   └── pom.xml           # Maven配置文件
├── frontend/             # 前端项目
│   ├── src/
│   │   ├── api/          # API接口,封装所有后端接口调用
│   │   ├── assets/       # 静态资源,包括图片、样式等
│   │   ├── components/   # 组件,包括布局组件等
│   │   ├── views/        # 页面,包括所有业务页面
│   │   ├── router/       # 路由配置
│   │   └── utils/        # 工具函数,包括请求封装等
│   └── package.json      # npm配置文件
└── init.sql             # 数据库初始化脚本

常见问题

在使用 Leaf SMS 的过程中,可能会遇到一些常见问题,这里提供一些解决方案。

1. 后端启动失败

如果后端启动失败,请检查以下几个方面:

  • 检查 JDK 版本是否为 17+,Spring Boot 3 要求 JDK 版本至少为 17
  • 检查 MySQL 连接配置是否正确,包括数据库名称、用户名和密码
  • 检查端口 8081 是否被其他程序占用
  • 确保数据库已经创建并初始化,执行了 init.sql 文件

2. 前端启动失败

如果前端启动失败,请检查以下几个方面:

  • 检查 Node.js 版本是否为 16+,Vue 3 要求 Node.js 版本至少为 16
  • 删除 node_modules 文件夹,重新执行 npm install 安装依赖
  • 检查端口 8080 是否被其他程序占用

3. 登录失败

如果登录失败,请检查以下几个方面:

  • 检查数据库是否已经初始化,执行了 init.sql 文件
  • 检查邮箱和密码是否正确,默认密码都是 123456
  • 查看后端日志,排查具体的错误信息

4. 接口401错误

如果接口返回 401 错误,表示未授权访问,请检查以下几个方面:

  • 检查 JWT Token 是否过期,Token 有效期一般为 24 小时
  • 检查请求头是否正确携带 Token,格式为 Authorization: Bearer {token}
  • 重新登录获取新的 Token

开发说明

本项目为本科毕业设计,代码结构清晰,功能完整。如果您想基于本项目进行二次开发,建议按照以下步骤进行:

  1. 先熟悉数据库表结构:了解各个表之间的关系和字段含义,这是理解系统功能的基础。

  2. 了解前后端接口对应关系:查看前端 API 文件和后端 Controller,了解前后端是如何交互的。

  3. 参考现有功能模块进行扩展:在添加新功能时,参考现有功能的实现方式,保持代码风格一致。

  4. 遵循现有的代码规范和命名规则:保持代码风格一致,便于维护和协作。

完整代码下载地址:学生管理系统

相关推荐
尘世壹俗人2 小时前
知识点7---Docker的容器编排工具Compose以及如何用Harbor部署私有化远程镜像仓库
运维·docker·容器
ノBye~2 小时前
Centos7.6 Docker安装MySQL8
运维·docker·容器
工边页字2 小时前
AI产品中的长期记忆和短期记忆是什么,你知道吗?
前端·人工智能·后端
毕设源码-钟学长2 小时前
【开题答辩全过程】以 基于SpringBoot的健康系统为例,包含答辩的问题和答案
java·spring boot·后端
badhope2 小时前
Python 库全景图:核心工具与最佳实践(小白也能看懂版)
后端·python
慧都小项2 小时前
Java开发工具MyEclipse发布v2026.1:支持Java25和Spring Boot4、AI功能升级
java·spring boot·myeclipse
小码哥_常2 小时前
解锁Spring Boot Starter:从原理到实战,让开发效率狂飙
后端
ZHANG13HAO2 小时前
校园食堂订餐系统微服务架构设计与实现
spring boot
独断万古他化2 小时前
【抽奖系统开发实战】Spring Boot 项目的用户模块设计:注册登录、权限管控与敏感数据加密
java·spring boot·redis·后端·mvc·jwt·拦截器