摘要:本项目设计并实现了高校实验室预约与设备管理系统。系统面向管理员与学生两类角色,覆盖实验室与分类管理、设备与维护管理、预约规则与预约审核、签到签退与使用记录、设备借用审批、违规与信用分、公告消息以及智能实验室与设备推荐等业务模块。技术上采用 Spring Boot、MyBatis-Plus、JWT、MySQL、Vue 3、Element Plus、ECharts、Vite 与 uni-app 小程序实现前后端分离与移动端访问。系统通过预约时段冲突检测保障实验室有序使用,通过预约流程表完整记录提交、审批、签到、签退与爽约节点,通过信用分与封禁阈值约束爽约和违规行为,并通过大模型接口根据实验需求推荐本院实验室与设备。全文从研究背景与意义、相关技术、需求分析、总体与数据库设计、接口设计、创新点实现及系统测试等方面进行阐述,形成可运行、可演示的毕设级业务闭环。在实现上,管理端侧重资源与审核配置,学生端侧重办理与查询;小程序复用同一套后端接口,便于移动场景下的预约与借用。通过对关键页面删除、流程中文化与借用实验室字段补全等细节完善,提高了系统可用性与文档描述的一致性。

技术栈: Spring Boot 3 + MyBatis-Plus + MySQL + Vue 3 + Element Plus + ECharts

数据库表:15张

创新点:预约时段冲突自动检测与流程追溯、AI大模型智能实验室与设备推荐、学生信用分与低分封号联动

演示视频

基于SpringBoot+Vue+AI大模型的实验室预约系统

🍅文末获取联系🍅

🍅文末获取联系🍅

作者介绍:专注计算机编程,个人开发,坚持原创非工作室源码全网唯一

技术主流:SpringBoot + Vue 前后端分离,MySQL,Echarts数据统计,可本地运行

配套资料:源码 + 数据库 + 实验报告/论文 + 答辩 PPT+部署演示+远程调试+问题解答

技术范围:SpringBoot、Vue、数据可视化、小程序、HLMT、Nodejs、uni-app、MySQL数据库、ElementUi等设计与开发。

适用范围:软件工程、软件技术、计算机科学与技术、大数据、云计算、JavaWeb开发、JavaEE、Java、Web应用开发、动态网页设计、小程序的毕设、计算机毕业设计参考

开发文档创新点说明、功能需求分析、数据库表结构设计、后端接口设计、创新点代码分析

功能展示

用户端功能

序号

菜单名称

功能描述

1

首页

浏览系统入口、公告摘要与快捷服务。

2

实验室

浏览开放实验室并进入详情发起预约。

3

智能推荐

输入实验需求,获取智能实验室与设备推荐。

4

公告通知

查看已发布的公告通知。

5

预约申请

选择实验室与时段提交预约申请。

6

我的预约

查看个人预约、取消或删除终态记录并追溯流程。

7

签到签退

对已通过预约进行签到签退。

8

设备借用

查看个人设备借用记录并归还设备。

9

申请借用

以卡片方式选择可借设备并提交借用申请。

10

个人使用记录

查看个人实验室使用时长记录。

11

违规记录

查看个人违规与信用扣分明细。

12

系统消息

接收预约、借用、封禁等系统消息。

管理员端功能

序号

菜单名称

功能描述

1

数据统计

汇总实验室、预约、借用、违规等核心指标,支撑管理决策。

2

实验室分类

维护实验室分类名称、排序与启用状态。

3

实验室管理

管理实验室基本信息、开放时段、容量与启用状态。

4

设备管理

维护设备所属实验室、型号编号与运行状态。

5

设备维护

登记设备维护计划或故障报修并跟踪完成情况。

6

耗材库存

管理实验耗材库存数量与预警阈值。

7

预约规则

配置单日预约上限、提前天数、爽约扣分与信用分封禁阈值。

8

预约管理

审核学生实验室预约,查看流程追溯并处理相关记录。

9

借用管理

审批设备借用申请、确认归还并维护借用台账。

10

使用记录

查询学生签到签退与实际使用时长记录。

11

违规管理

登记违规类型与信用扣分,联动学生信用分。

12

公告管理

发布与管理面向学生的公告通知。

13

学生管理

维护学生账号、信用分,支持封号与解封。

14

管理员账号

维护后台管理员账号与启用状态。

数据库及架构

系统数据库设计为:

数据库设计:

/*
 Navicat Premium Data Transfer

 Source Server         : 1
 Source Server Type    : MySQL
 Source Server Version : 50722
 Source Host           : localhost:3306
 Source Schema         : 1vuez_lab_system

 Target Server Type    : MySQL
 Target Server Version : 50722
 File Encoding         : 65001

 Date: 15/08/2026 23:22:54
*/

SET NAMES utf8mb4;
SET FOREIGN_KEY_CHECKS = 0;

-- ----------------------------
-- Table structure for admins
-- ----------------------------
DROP TABLE IF EXISTS `admins`;
CREATE TABLE `admins`  (
  `id` bigint(20) NOT NULL AUTO_INCREMENT COMMENT '主键',
  `username` varchar(50) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NOT NULL COMMENT '账号',
  `password` varchar(255) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NOT NULL COMMENT '密码',
  `name` varchar(50) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NULL DEFAULT NULL COMMENT '姓名',
  `phone` varchar(20) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NULL DEFAULT NULL COMMENT '手机号',
  `enabled` tinyint(4) NULL DEFAULT 1 COMMENT '是否启用',
  PRIMARY KEY (`id`) USING BTREE,
  UNIQUE INDEX `username`(`username`) USING BTREE
) ENGINE = InnoDB AUTO_INCREMENT = 3 CHARACTER SET = utf8mb4 COLLATE = utf8mb4_general_ci COMMENT = '管理员' ROW_FORMAT = DYNAMIC;

-- ----------------------------
-- Table structure for borrows
-- ----------------------------
DROP TABLE IF EXISTS `borrows`;
CREATE TABLE `borrows`  (
  `id` bigint(20) NOT NULL AUTO_INCREMENT COMMENT '主键',
  `device_id` bigint(20) NOT NULL COMMENT '设备',
  `student_id` bigint(20) NOT NULL COMMENT '借用人',
  `apply_reason` varchar(500) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NULL DEFAULT NULL COMMENT '申请原因',
  `borrow_date` date NULL DEFAULT NULL COMMENT '借用日期',
  `expect_return_date` date NULL DEFAULT NULL COMMENT '预计归还',
  `actual_return_date` date NULL DEFAULT NULL COMMENT '实际归还',
  `status` tinyint(4) NULL DEFAULT 0 COMMENT '状态【0待审核,1驳回,2借用中,3已归还】',
  `reject_reason` varchar(500) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NULL DEFAULT NULL COMMENT '驳回原因',
  `created_at` datetime NULL DEFAULT CURRENT_TIMESTAMP COMMENT '创建时间',
  PRIMARY KEY (`id`) USING BTREE
) ENGINE = InnoDB AUTO_INCREMENT = 4 CHARACTER SET = utf8mb4 COLLATE = utf8mb4_general_ci COMMENT = '设备借用' ROW_FORMAT = DYNAMIC;

-- ----------------------------
-- Table structure for device_maintains
-- ----------------------------
DROP TABLE IF EXISTS `device_maintains`;
CREATE TABLE `device_maintains`  (
  `id` bigint(20) NOT NULL AUTO_INCREMENT COMMENT '主键',
  `device_id` bigint(20) NOT NULL COMMENT '设备',
  `maintain_type` tinyint(4) NULL DEFAULT 1 COMMENT '维护类型【1例行保养,2故障维修】',
  `plan_date` date NULL DEFAULT NULL COMMENT '计划日期',
  `content` varchar(500) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NULL DEFAULT NULL COMMENT '维护内容',
  `status` tinyint(4) NULL DEFAULT 0 COMMENT '状态【0待执行,1已完成】',
  `finished_at` datetime NULL DEFAULT NULL COMMENT '完成时间',
  `remark` varchar(500) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NULL DEFAULT NULL COMMENT '备注',
  `created_at` datetime NULL DEFAULT CURRENT_TIMESTAMP COMMENT '创建时间',
  PRIMARY KEY (`id`) USING BTREE
) ENGINE = InnoDB AUTO_INCREMENT = 3 CHARACTER SET = utf8mb4 COLLATE = utf8mb4_general_ci COMMENT = '设备维护' ROW_FORMAT = DYNAMIC;

-- ----------------------------
-- Table structure for devices
-- ----------------------------
DROP TABLE IF EXISTS `devices`;
CREATE TABLE `devices`  (
  `id` bigint(20) NOT NULL AUTO_INCREMENT COMMENT '主键',
  `lab_id` bigint(20) NOT NULL COMMENT '所属实验室',
  `name` varchar(100) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NOT NULL COMMENT '设备名称',
  `model` varchar(100) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NULL DEFAULT NULL COMMENT '型号',
  `serial_no` varchar(100) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NULL DEFAULT NULL COMMENT '编号',
  `status` tinyint(4) NULL DEFAULT 1 COMMENT '状态【1正常,2维修中,3报废】',
  `enabled` tinyint(4) NULL DEFAULT 1 COMMENT '是否启用',
  `created_at` datetime NULL DEFAULT CURRENT_TIMESTAMP COMMENT '创建时间',
  PRIMARY KEY (`id`) USING BTREE
) ENGINE = InnoDB AUTO_INCREMENT = 4 CHARACTER SET = utf8mb4 COLLATE = utf8mb4_general_ci COMMENT = '设备' ROW_FORMAT = DYNAMIC;

-- ----------------------------
-- Table structure for lab_categories
-- ----------------------------
DROP TABLE IF EXISTS `lab_categories`;
CREATE TABLE `lab_categories`  (
  `id` bigint(20) NOT NULL AUTO_INCREMENT COMMENT '主键',
  `name` varchar(100) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NOT NULL COMMENT '分类名称',
  `sort_order` int(11) NULL DEFAULT 0 COMMENT '排序',
  `enabled` tinyint(4) NULL DEFAULT 1 COMMENT '是否启用',
  PRIMARY KEY (`id`) USING BTREE
) ENGINE = InnoDB AUTO_INCREMENT = 4 CHARACTER SET = utf8mb4 COLLATE = utf8mb4_general_ci COMMENT = '实验室分类' ROW_FORMAT = DYNAMIC;

-- ----------------------------
-- Table structure for labs
-- ----------------------------
DROP TABLE IF EXISTS `labs`;
CREATE TABLE `labs`  (
  `id` bigint(20) NOT NULL AUTO_INCREMENT COMMENT '主键',
  `name` varchar(100) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NOT NULL COMMENT '实验室名称',
  `location` varchar(200) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NULL DEFAULT NULL COMMENT '位置',
  `capacity` int(11) NULL DEFAULT 30 COMMENT '容量',
  `category_id` bigint(20) NULL DEFAULT NULL COMMENT '所属分类',
  `open_time` time NULL DEFAULT NULL COMMENT '开放开始',
  `close_time` time NULL DEFAULT NULL COMMENT '开放结束',
  `description` text CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NULL COMMENT '说明',
  `status` tinyint(4) NULL DEFAULT 1 COMMENT '状态【1正常开放,2暂停使用】',
  `enabled` tinyint(4) NULL DEFAULT 1 COMMENT '是否启用',
  `created_at` datetime NULL DEFAULT CURRENT_TIMESTAMP COMMENT '创建时间',
  PRIMARY KEY (`id`) USING BTREE
) ENGINE = InnoDB AUTO_INCREMENT = 4 CHARACTER SET = utf8mb4 COLLATE = utf8mb4_general_ci COMMENT = '实验室' ROW_FORMAT = DYNAMIC;

-- ----------------------------
-- Table structure for messages
-- ----------------------------
DROP TABLE IF EXISTS `messages`;
CREATE TABLE `messages`  (
  `id` bigint(20) NOT NULL AUTO_INCREMENT COMMENT '主键',
  `user_id` bigint(20) NOT NULL COMMENT '接收用户',
  `user_role` varchar(20) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NOT NULL COMMENT '接收角色【STUDENT学生,ADMIN管理员】',
  `title` varchar(200) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NULL DEFAULT NULL COMMENT '标题',
  `content` text CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NULL COMMENT '内容',
  `is_read` tinyint(4) NULL DEFAULT 0 COMMENT '是否已读【0未读,1已读】',
  `created_at` datetime NULL DEFAULT CURRENT_TIMESTAMP COMMENT '创建时间',
  PRIMARY KEY (`id`) USING BTREE
) ENGINE = InnoDB AUTO_INCREMENT = 13 CHARACTER SET = utf8mb4 COLLATE = utf8mb4_general_ci COMMENT = '系统消息' ROW_FORMAT = DYNAMIC;

-- ----------------------------
-- Table structure for notices
-- ----------------------------
DROP TABLE IF EXISTS `notices`;
CREATE TABLE `notices`  (
  `id` bigint(20) NOT NULL AUTO_INCREMENT COMMENT '主键',
  `title` varchar(200) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NOT NULL COMMENT '标题',
  `content` text CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NULL COMMENT '内容',
  `publisher_id` bigint(20) NULL DEFAULT NULL COMMENT '发布人',
  `publisher_role` varchar(20) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NULL DEFAULT NULL COMMENT '发布角色',
  `created_at` datetime NULL DEFAULT CURRENT_TIMESTAMP COMMENT '创建时间',
  PRIMARY KEY (`id`) USING BTREE
) ENGINE = InnoDB AUTO_INCREMENT = 3 CHARACTER SET = utf8mb4 COLLATE = utf8mb4_general_ci COMMENT = '公告' ROW_FORMAT = DYNAMIC;

-- ----------------------------
-- Table structure for reservation_process
-- ----------------------------
DROP TABLE IF EXISTS `reservation_process`;
CREATE TABLE `reservation_process`  (
  `id` bigint(20) NOT NULL AUTO_INCREMENT COMMENT '主键',
  `reservation_id` bigint(20) NOT NULL COMMENT '预约',
  `step` varchar(30) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NOT NULL COMMENT '流程步骤【SUBMIT提交,APPROVE通过,REJECT驳回,CHECKIN签到,CHECKOUT签退】',
  `operator_id` bigint(20) NULL DEFAULT NULL COMMENT '操作人',
  `operator_role` varchar(20) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NULL DEFAULT NULL COMMENT '操作角色',
  `remark` varchar(500) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NULL DEFAULT NULL COMMENT '备注',
  `created_at` datetime NULL DEFAULT CURRENT_TIMESTAMP COMMENT '创建时间',
  PRIMARY KEY (`id`) USING BTREE
) ENGINE = InnoDB AUTO_INCREMENT = 12 CHARACTER SET = utf8mb4 COLLATE = utf8mb4_general_ci COMMENT = '预约流程' ROW_FORMAT = DYNAMIC;

-- ----------------------------
-- Table structure for reservations
-- ----------------------------
DROP TABLE IF EXISTS `reservations`;
CREATE TABLE `reservations`  (
  `id` bigint(20) NOT NULL AUTO_INCREMENT COMMENT '主键',
  `lab_id` bigint(20) NOT NULL COMMENT '实验室',
  `student_id` bigint(20) NULL DEFAULT NULL COMMENT '预约学生',
  `reserve_date` date NOT NULL COMMENT '预约日期',
  `start_time` time NOT NULL COMMENT '开始时间',
  `end_time` time NOT NULL COMMENT '结束时间',
  `purpose` varchar(500) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NULL DEFAULT NULL COMMENT '用途说明',
  `status` tinyint(4) NULL DEFAULT 0 COMMENT '状态【0待审核,1驳回,2待签到,3使用中,4已完成】',
  `reject_reason` varchar(500) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NULL DEFAULT NULL COMMENT '驳回原因',
  `created_at` datetime NULL DEFAULT CURRENT_TIMESTAMP COMMENT '创建时间',
  PRIMARY KEY (`id`) USING BTREE
) ENGINE = InnoDB AUTO_INCREMENT = 6 CHARACTER SET = utf8mb4 COLLATE = utf8mb4_general_ci COMMENT = '实验室预约' ROW_FORMAT = DYNAMIC;

-- ----------------------------
-- Table structure for reserve_rules
-- ----------------------------
DROP TABLE IF EXISTS `reserve_rules`;
CREATE TABLE `reserve_rules`  (
  `id` bigint(20) NOT NULL AUTO_INCREMENT COMMENT '主键',
  `name` varchar(100) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NOT NULL COMMENT '规则名称',
  `max_hours_per_day` int(11) NULL DEFAULT 4 COMMENT '每日上限小时',
  `advance_days` int(11) NULL DEFAULT 7 COMMENT '可提前预约天数',
  `no_show_penalty` int(11) NULL DEFAULT 1 COMMENT '爽约扣分',
  `credit_ban_threshold` int(11) NULL DEFAULT 60 COMMENT '信用分封禁阈值',
  `enabled` tinyint(4) NULL DEFAULT 1 COMMENT '是否启用',
  PRIMARY KEY (`id`) USING BTREE
) ENGINE = InnoDB AUTO_INCREMENT = 2 CHARACTER SET = utf8mb4 COLLATE = utf8mb4_general_ci COMMENT = '预约规则' ROW_FORMAT = DYNAMIC;

-- ----------------------------
-- Table structure for stocks
-- ----------------------------
DROP TABLE IF EXISTS `stocks`;
CREATE TABLE `stocks`  (
  `id` bigint(20) NOT NULL AUTO_INCREMENT COMMENT '主键',
  `lab_id` bigint(20) NOT NULL COMMENT '实验室',
  `name` varchar(100) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NOT NULL COMMENT '耗材名称',
  `unit` varchar(20) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NULL DEFAULT NULL COMMENT '单位',
  `quantity` int(11) NULL DEFAULT 0 COMMENT '库存数量',
  `warn_quantity` int(11) NULL DEFAULT 10 COMMENT '预警数量',
  `enabled` tinyint(4) NULL DEFAULT 1 COMMENT '是否启用',
  PRIMARY KEY (`id`) USING BTREE
) ENGINE = InnoDB AUTO_INCREMENT = 4 CHARACTER SET = utf8mb4 COLLATE = utf8mb4_general_ci COMMENT = '耗材库存' ROW_FORMAT = DYNAMIC;

-- ----------------------------
-- Table structure for students
-- ----------------------------
DROP TABLE IF EXISTS `students`;
CREATE TABLE `students`  (
  `id` bigint(20) NOT NULL AUTO_INCREMENT COMMENT '主键',
  `username` varchar(50) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NOT NULL COMMENT '账号',
  `password` varchar(255) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NOT NULL COMMENT '密码',
  `name` varchar(50) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NULL DEFAULT NULL COMMENT '姓名',
  `student_no` varchar(50) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NULL DEFAULT NULL COMMENT '学号',
  `phone` varchar(20) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NULL DEFAULT NULL COMMENT '手机号',
  `avatar` varchar(500) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NULL DEFAULT NULL COMMENT '头像',
  `credit_score` int(11) NULL DEFAULT 100 COMMENT '信用分(满分100)',
  `enabled` tinyint(4) NULL DEFAULT 1 COMMENT '是否启用',
  PRIMARY KEY (`id`) USING BTREE,
  UNIQUE INDEX `username`(`username`) USING BTREE
) ENGINE = InnoDB AUTO_INCREMENT = 4 CHARACTER SET = utf8mb4 COLLATE = utf8mb4_general_ci COMMENT = '学生' ROW_FORMAT = DYNAMIC;

-- ----------------------------
-- Table structure for usage_records
-- ----------------------------
DROP TABLE IF EXISTS `usage_records`;
CREATE TABLE `usage_records`  (
  `id` bigint(20) NOT NULL AUTO_INCREMENT COMMENT '主键',
  `reservation_id` bigint(20) NULL DEFAULT NULL COMMENT '关联预约',
  `student_id` bigint(20) NOT NULL COMMENT '学生',
  `lab_id` bigint(20) NOT NULL COMMENT '实验室',
  `check_in_at` datetime NULL DEFAULT NULL COMMENT '签到时间',
  `check_out_at` datetime NULL DEFAULT NULL COMMENT '签退时间',
  `duration_minutes` int(11) NULL DEFAULT 0 COMMENT '使用分钟',
  `created_at` datetime NULL DEFAULT CURRENT_TIMESTAMP COMMENT '创建时间',
  PRIMARY KEY (`id`) USING BTREE
) ENGINE = InnoDB AUTO_INCREMENT = 2 CHARACTER SET = utf8mb4 COLLATE = utf8mb4_general_ci COMMENT = '使用记录' ROW_FORMAT = DYNAMIC;

-- ----------------------------
-- Table structure for violations
-- ----------------------------
DROP TABLE IF EXISTS `violations`;
CREATE TABLE `violations`  (
  `id` bigint(20) NOT NULL AUTO_INCREMENT COMMENT '主键',
  `student_id` bigint(20) NOT NULL COMMENT '学生',
  `violation_type` varchar(50) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NULL DEFAULT NULL COMMENT '违规类型',
  `description` varchar(500) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NULL DEFAULT NULL COMMENT '说明',
  `penalty` int(11) NULL DEFAULT 0 COMMENT '扣分',
  `status` tinyint(4) NULL DEFAULT 1 COMMENT '状态【1有效,0撤销】',
  `created_at` datetime NULL DEFAULT CURRENT_TIMESTAMP COMMENT '创建时间',
  PRIMARY KEY (`id`) USING BTREE
) ENGINE = InnoDB AUTO_INCREMENT = 4 CHARACTER SET = utf8mb4 COLLATE = utf8mb4_general_ci COMMENT = '违规记录' ROW_FORMAT = DYNAMIC;

SET FOREIGN_KEY_CHECKS = 1;

擅长功能设计、开题报告、任务书、中期检查PPT、系统功能实现、代码编写、论文编写和辅导、论文降重、长期答辩答疑辅导、腾讯会议一对一专业讲解辅导答辩、模拟答辩演练、和理解代码逻辑思路等。

获取联系

项目功能完整,可在本地运行,并可远程调试,确保运行顺利!

👇🏻👇🏻获取联系方式👇🏻👇🏻

毕业设计获取https://blog.csdn.net/qq_59059632/article/details/163759879?spm=1011.2415.3001.5331

更多推荐