图书馆座位预约系统

SpringBootVueMySQL

本项目是一个基于 Spring Boot 3 + Vue 3 前后端分离架构的图书馆座位预约系统,旨在解决高校图书馆座位占用混乱、资源浪费等问题,提供可视化选座、智能预约、信用积分管理、数据统计分析等核心功能。

图书馆座位预约系统 — 项目介绍文档

一、项目概述

本项目是一套图书馆座位在线预约系统,采用前后端分离架构,覆盖从用户浏览楼层座位、在线预约、签到签退、续约离席回归到信用积分管理的完整业务流程。系统同时提供后台管理端,支持楼层区域配置、座位管理、预约管理和数据统计。

属性 说明
项目名称 图书馆座位预约系统(Library Reservation System)
架构模式 B/S 前后端分离
后端技术 Spring Boot 3.2 / MyBatis-Plus 3.5 / MySQL 8.0 / JWT
前端技术 Vue 3 / Element Plus / Pinia / Axios / ECharts / Vite
开发语言 Java 21 / JavaScript(ES6+)
适用场景 计算机毕设、课程设计、源码学习与二次开发

二、技术架构

2.1 后端技术栈

类别 技术选型 版本 说明
核心框架 Spring Boot 3.2.3 Java 企业级开发框架
ORM 框架 MyBatis-Plus 3.5.5 增强版 MyBatis,简化 CRUD
数据库 MySQL 8.0+ 关系型数据库
安全认证 jjwt(JWT) 0.12.3 无状态 Token 认证
密码加密 BCrypt(Hutool) 5.8.26 慢哈希 + 随机盐值
API 文档 Knife4j(OpenAPI 3) 4.4.0 Swagger 增强 UI
工具库 Hutool 5.8.26 Java 通用工具集
构建工具 Maven 3.8+ 依赖管理与项目构建

2.2 前端技术栈

类别 技术选型 版本 说明
核心框架 Vue 3(Composition API) 3.4.21 渐进式前端框架
UI 组件库 Element Plus 2.6.3 企业级桌面端组件库
路由 Vue Router 4.3.0 单页应用路由管理
状态管理 Pinia 2.1.7 Vue 官方状态管理库
HTTP 客户端 Axios 1.15.2 基于 Promise 的 HTTP 库
图表 ECharts 5.5.0 数据可视化图表库
构建工具 Vite 5.2.0 下一代前端构建工具
自动导入 unplugin-auto-import 0.17.5 API 自动按需导入

2.3 架构图

┌─────────────────────────────────────────────────────────┐
│                      浏览器(Browser)                    │
├───────────────────────┬─────────────────────────────────┤
│   前台页面(Portal)    │     后台管理(Admin)             │
│   localhost:5173       │     localhost:5173/admin         │
│   · 首页/轮播公告       │     · 仪表盘/数据统计              │
│   · 楼层座位浏览/预约    │     · 楼层/区域/座位 CRUD         │
│   · 我的预约/签到签退    │     · 预约管理/取消预约            │
│   · 信用记录/个人中心    │     · 用户/信用/黑名单管理          │
│   · 系统消息/候补队列    │     · 轮播图/公告管理              │
└───────────────────────┴─────────────────────────────────┘
                          │  HTTP /api/*
                          ▼
┌─────────────────────────────────────────────────────────┐
│              Spring Boot 后端(localhost:8080)            │
├─────────────┬──────────────┬──────────────┬──────────────┤
│  Interceptor │  Controller  │   Service    │   Mapper     │
│  JWT认证     │  portal/ 前台  │  业务逻辑     │  MyBatis-Plus│
│  管理员鉴权   │  admin/ 后台  │   事务管理    │  XML 自定义SQL│
└─────────────┴──────────────┴──────────────┴──────────────┘
                          │
                          ▼
┌─────────────────────────────────────────────────────────┐
│                MySQL 8.0(yc_library)                    │
│                      共 11 张数据表                       │
└─────────────────────────────────────────────────────────┘

2.4 安全设计

  • JWT 双拦截器:JwtAuthInterceptor(认证)+ AdminAuthInterceptor(鉴权),按路径和执行顺序分层控制
  • 密码 BCrypt 加密:使用慢哈希算法加随机盐值,有效抵御彩虹表攻击
  • @Anonymous 注解:标注公开接口(如注册、登录、首页轮播公告),无需额外维护白名单
  • CORS 精准控制:仅允许特定来源跨域,携带认证信息

三、功能模块

3.1 前台功能(学生用户)

模块 功能点 说明
首页 轮播图展示、系统公告 展示轮播图 Banner 和已发布公告列表
座位浏览 楼层列表、区域详情、座位状态查看 按楼层→区域层级展示;支持静音区/讨论区/电子阅览区分类;区分空闲/已预约/故障状态
预约座位 选择日期时段、时段冲突检测、创建预约 单次最长4小时;信用分≥60且非黑名单用户可预约;同用户同时间段仅能预约一个座位
签到签退 到场签到、离场签退 预约后15分钟内需签到,超时自动释放并扣信用分;正常签退加5信用分
续约 使用中预约延长使用时间 仅可续约一次,续约时长+原时长≤4小时,且不与其他预约冲突
离席回归 临时离开座位、返回座位 离席后座位标记为临时占用;超过10分钟未回归自动释放并扣信用分
取消预约 主动取消待签到/使用中预约 提前取消不扣分,释放座位并通知候补队列
候补队列 加入候补、确认预约、取消候补 座位满时加入排队;当前用户签退/取消后按排队序号通知;10分钟内确认有效
我的预约 预约列表、状态筛选 支持按待签到/使用中/已完成/已取消/未签到(超时)筛选
信用积分 信用记录查询 初始100分;签到使用+5分;超时未签到-10分;离席超时-10分;管理员可手动调整
系统消息 消息列表、已读/未读、全部已读 预约状态变更、候补通知、信用变动等消息推送
个人中心 修改资料、头像上传、修改密码 昵称/邮箱/手机号/性别/头像可编辑

3.2 后台功能(管理员)

模块 功能点 说明
仪表盘 今日预约数、使用中座位数、用户总数、预约趋势图 ECharts 可视化图表
楼层管理 楼层增删改查 楼层编号、名称、描述、开放/关闭状态
区域管理 区域增删改查 类型(静音区/讨论区/电子阅览区)、电源、靠窗、座位类型
座位管理 座位增删改查、状态管理 行号/列号/座位编号;空闲/已预约/临时占用/故障状态切换
预约管理 全部预约查询、按状态筛选、管理员取消预约 支持关键词搜索
用户管理 用户列表、启用/禁用、角色过滤 模糊搜索用户名
信用管理 信用记录列表、手动调整信用分 按用户筛选,手动加减分
黑名单管理 添加/解除黑名单 支持有效期设置和永久封禁
轮播图管理 轮播图增删改查 标题、图片、跳转链接、排序
公告管理 公告增删改查 类型(系统公告/活动通知)、置顶、草稿/发布状态
个人信息 查看/修改管理员信息 同前台个人中心

四、项目亮点

4.1 信用积分体系

每位用户初始拥有 100 信用分(最高 100 分,不可超过)。系统通过以下规则自动维护信用分:

  • 正常签到使用并签退:+5 分
  • 预约后 15 分钟未签到(超时自动释放):-10 分
  • 离席超时 10 分钟未回归:-10 分
  • 信用分低于 60 分时禁止预约
  • 信用分上限 100 分,加分时不超过上限
  • 管理员可手动调整用户信用分(总分不超过 100)

4.2 候补队列机制

当目标座位在目标时段已被预约时,用户可选择加入候补队列。当前用户签退或取消预约时,系统自动按排队序号通知候补用户,被通知用户需在 10 分钟内确认,超时自动顺延至下一位。

4.3 离席回归机制

用户在使用座位过程中可临时离开(如去洗手间、取书),系统记录离席时间。若超过 10 分钟未回归,自动释放座位并扣除信用分。回归后座位恢复正常使用状态。

4.4 续约功能

使用中的预约可申请续约一次,系统自动校验续约后总时长是否超过4小时上限以及是否与后续预约冲突。

4.5 定时任务自动处理

@Scheduled 定时任务每分钟执行三项检查:

  • 超时未签到处理:释放超过 15 分钟未签到的预约
  • 候补过期处理:标记超过 10 分钟未确认的候补为过期
  • 离席超时处理:释放离席超过 10 分钟的座位

4.6 预约冲突检测

创建预约时进行多重校验:

  1. 时段重叠检测:同一座位同一时段不能有冲突预约
  2. 用户重叠检测:同一用户同一时段只能有一个预约
  3. 黑名单校验:在有效黑名单期内的用户禁止预约
  4. 信用分校验:低于60分禁止预约

4.7 代码规范性

  • 全局统一异常处理(GlobalExceptionHandler),错误码枚举化管理
  • 分页统一返回结构(PageResult),前端无需适配不同接口
  • 所有数据库操作使用 Lambda 表达式构建条件,避免字段名硬编码
  • 统一响应体(Result<T>),所有接口返回格式一致

五、项目结构

library-reservation-system/
├── db/                          # 数据库脚本(init.sql 建库建表+基础数据;demo.sql 演示数据)
├── springboot/                  # 后端 Spring Boot
│   └── src/main/
│       ├── java/com/example/
│       │   ├── common/          # 公共模块(常量/枚举/异常/统一响应)
│       │   ├── config/          # 配置(跨域/拦截器/MyBatis-Plus)
│       │   ├── controller/      # 控制器(admin 后台 / portal 前台 / 文件上传)
│       │   ├── dto/             # 数据传输对象
│       │   ├── entity/          # 实体类
│       │   ├── mapper/          # MyBatis-Plus Mapper
│       │   ├── security/        # JWT 认证与拦截器
│       │   ├── service/         # 业务逻辑
│       │   ├── task/            # 定时任务
│       │   ├── utils/           # 工具类
│       │   ├── vo/              # 视图对象
│       │   └── MainApplication.java   # 启动类
│       └── resources/           # 配置(application.yml、mapper XML、static 静态资源)
├── vue/                         # 前端 Vue 3
│   └── src/
│       ├── api/                 # 接口封装
│       ├── components/          # 公共组件
│       ├── layouts/             # 布局(PortalLayout 前台 / AdminLayout 后台)
│       ├── router/              # 路由
│       ├── stores/              # Pinia 状态
│       ├── utils/               # 工具(request、file)
│       └── views/               # 页面(admin 后台 / 前台)
└── uploads/                     # 文件上传目录(avatar 头像 / demo 演示图)
客服
反馈