一、项目概述
高校自习室座位预约系统旨在解决学生占座难、管理员管理效率低的问题,通过线上预约、实时座位状态展示、智能超时释放等功能,实现自习室资源的高效利用。
免费下载地址:
ai工具开发的pythonfastApi+vue高校自习室预约管理系统源码资源-CSDN下载
核心需求分析
学生端功能:
-
用户登录认证
-
楼栋→自习室→座位三级可视化浏览
-
选择日期+时段提交座位预约
-
个人预约订单管理(待签到、已完成、已取消)
-
个人中心(黑名单状态、违规记录)
-
规则说明查看
管理端功能:
-
用户管理(学生信息、黑名单管理)
-
楼栋/自习室/座位管理(增删改查、批量导入)
-
时段排期配置
-
预约订单管理(强制释放、纠纷处理)
-
违规黑名单管理
-
数据统计可视化
-
系统设置与操作日志
核心业务逻辑:
-
选座互斥:同座位同时段不可重复预约
-
超时释放:超过签到时间自动释放座位并生成违规记录
-
黑名单机制:多次违规自动拉黑,管理员可手动管理
二、技术选型
后端技术栈
技术 版本 用途 Python 3.10+ 编程语言 FastAPI 0.139.0 Web框架 SQLAlchemy 2.0+ ORM数据库操作 MySQL 8.0+ 数据库 Uvicorn 0.24+ ASGI服务器 python-jose 3.3+ JWT认证 APScheduler 3.10+ 定时任务
前端技术栈
技术 版本 用途 Vue 3.4+ 前端框架 Vue Router 4.2+ 路由管理 Axios 1.6+ HTTP请求 ECharts 5.4+ 数据可视化 Vite 5.4+ 构建工具
三、系统架构设计
整体架构
┌─────────────────────────────────────────────────────────────┐
│ 前端 (Vue3) │
│ ┌─────────────┐ ┌─────────────┐ ┌───────────────┐ │
│ │ 学生端 │ │ 管理端 │ │ 登录页 │ │
│ └──────┬──────┘ └──────┬──────┘ └───────┬───────┘ │
│ │ │ │ │
│ └──────────────────┴────────────────────┘ │
│ │ │
│ ▼ │
│ Axios API │
└─────────────────────────┬───────────────────────────────────┘
│ HTTP/HTTPS
▼
┌─────────────────────────────────────────────────────────────┐
│ 后端 (FastAPI) │
│ ┌─────────────┐ ┌─────────────┐ ┌───────────────┐ │
│ │ 认证路由 │ │ 业务路由 │ │ 定时任务 │ │
│ └──────┬──────┘ └──────┬──────┘ └───────┬───────┘ │
│ │ │ │ │
│ └──────────────────┴────────────────────┘ │
│ │ │
│ ▼ │
│ 业务逻辑层 (Services) │
│ │ │
│ ▼ │
│ SQLAlchemy ORM │
│ │ │
│ ▼ │
│ MySQL 8.0 │
└─────────────────────────────────────────────────────────────┘
系统采用前后端分离架构,前端通过RESTful API与后端通信:
后端目录结构
backend/
├── app/
│ ├── core/ # 核心配置
│ │ ├── database.py # 数据库连接
│ │ └── security.py # JWT认证工具
│ ├── models/ # ORM数据模型
│ ├── schemas/ # Pydantic校验模型
│ ├── routers/ # API路由
│ ├── services/ # 业务逻辑层
│ └── main.py # 应用入口
├── init_db.py # 数据库初始化
├── init_data.py # 测试数据
├── requirements.txt # 依赖列表
└── venv/ # 虚拟环境
前端目录结构
frontend/
├── src/
│ ├── api/ # API接口封装
│ ├── router/ # 路由配置
│ ├── views/ # 页面视图
│ │ ├── admin/ # 管理端页面
│ │ └── student/ # 学生端页面
│ ├── App.vue # 根组件
│ └── main.js # 入口文件
├── index.html
├── package.json
└── vite.config.js
四、数据库设计
命名规范
-
表名和字段使用 camelCase 命名
-
规避MySQL关键字(如用 state 代替 status , sysUser 代替 user )
-
除主键外,其他字段均可为空
核心表结构 sysUser(用户表)
字段 类型 说明 id INT 主键,自增 userName VARCHAR(50) 用户名 password VARCHAR(100) 密码(明文) realName VARCHAR(50) 真实姓名 role VARCHAR(20) 角色(student/admin) blacklisted BOOLEAN 是否拉黑 blacklistEndTime DATETIME 拉黑到期时间 violationCount INT 违规次数
building(楼栋表)
字段 类型 说明 id INT 主键,自增 buildingName VARCHAR(100) 楼栋名称 buildingCode VARCHAR(50) 楼栋编码 floorCount INT 楼层数
room(自习室表)
字段 类型 说明 id INT 主键,自增 roomName VARCHAR(100) 自习室名称 roomCode VARCHAR(50) 自习室编码 buildingId INT 所属楼栋ID floor INT 楼层
seat(座位表)
字段 类型 说明 id INT 主键,自增 seatCode VARCHAR(50) 座位编码 roomId INT 所属自习室ID rowNum INT 行号 colNum INT 列号 locked BOOLEAN 是否锁定
timeslot(时段表)
字段 类型 说明 id INT 主键,自增 slotName VARCHAR(50) 时段名称 startTime TIME 开始时间 endTime TIME 结束时间
reservation(预约表)
字段 类型 说明 id INT 主键,自增 userId INT 用户ID seatId INT 座位ID timeslotId INT 时段ID reserveDate DATE 预约日期 state VARCHAR(20) 状态(pending/checkedIn/completed/cancelled)
violation(违规记录表)
字段 类型 说明 id INT 主键,自增 userId INT 用户ID violationType VARCHAR(50) 违规类型 penaltyDays INT 处罚天数 penaltyEndTime DATETIME 处罚结束时间
五、后端实现


系统通过数据库查询实现预约互斥:
-
用户互斥 :查询用户在同一日期时段是否已有有效预约
-
座位互斥 :查询座位在同一日期时段是否已有有效预约
-
黑名单检查 :查询用户是否在黑名单中
7.2 超时自动释放
定时任务每5分钟执行一次,核心逻辑:
-
查询所有状态为 pending 的预约
-
计算当前时间是否超过预约开始时间 + 缓冲时长
-
超时的预约状态改为 cancelled ,标记为自动释放
-
生成违规记录,增加用户违规次数
-
违规次数达到阈值时,自动拉黑用户
7.3 黑名单机制
-
自动拉黑 :用户违规次数达到设定阈值时自动拉黑
-
手动拉黑 :管理员可手动拉黑/解除拉黑用户
-
封禁时长 :支持设置封禁天数,到期自动解除
-
预约限制 :黑名单用户无法发起新预约
八、部署与测试
8.1 环境准备
-
创建数据库 :
-
创建虚拟环境 :
-
安装依赖 :
-
初始化数据库 :
8.2 启动服务
后端启动 :
cd backend
venv\Scripts\python.exe -m uvicorn app.main:app --host 0.0.0.0 --port 8000
前端启动 :
cd frontend
npm install
npm run dev
8.3 测试账号
角色 用户名 密码 管理员 admin admin123 学生 student001 123456 学生 student002 123456 学生(已拉黑) student003 123456
九、总结
本系统通过前后端分离架构,实现了高校自习室座位预约的完整功能。核心亮点:
-
高效选座 :可视化座位状态,一键预约
-
智能管理 :超时自动释放,黑名单机制
-
数据统计 :预约人次、上座率可视化分析
-
权限控制 :学生端与管理端分离,角色权限分明
系统采用现代化技术栈,代码结构清晰,易于维护和扩展。可根据实际需求进一步优化功能,如添加消息通知、移动端适配等。
大家点赞、收藏、关注、评论啦 其他的定制服务 商务合作 下方联系卡片↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓ 或者私信作者