摘要:本项目设计并实现了高校实验室预约小程序。系统面向管理员与学生两类角色,覆盖实验室与分类管理、设备与维护管理、预约规则与预约审核、签到签退与使用记录、设备借用审批、违规与信用分、公告消息以及智能实验室与设备推荐等业务模块。技术上采用 Spring Boot、MyBatis-Plus、JWT、MySQL、Vue 3、Element Plus、ECharts、Vite 与 uni-app 小程序实现前后端分离与移动端访问。系统通过预约时段冲突检测保障实验室有序使用,通过预约流程表完整记录提交、审批、签到、签退与爽约节点,通过信用分与封禁阈值约束爽约和违规行为,并通过大模型接口根据实验需求推荐本院实验室与设备。全文从研究背景与意义、相关技术、需求分析、总体与数据库设计、接口设计、创新点实现及系统测试等方面进行阐述,形成可运行、可演示的毕设级业务闭环。在实现上,管理端侧重资源与审核配置,学生端侧重办理与查询;小程序复用同一套后端接口,便于移动场景下的预约与借用。通过对关键页面删除、流程中文化与借用实验室字段补全等细节完善,提高了系统可用性与文档描述的一致性。
技术栈: Spring Boot3+uni-app+Vue3+uViewPlus+Vite+MybatsiPlus+Echarts+微信小程序
数据库表:15张
创新点:预约时段冲突自动检测与流程追溯、AI大模型智能实验室与设备推荐、学生信用分与低分封号联动
演示视频
基于微信小程序+uni-app+AI大模型的实验室预约小程序
🍅文末获取联系🍅
🍅文末获取联系🍅
作者介绍:专注计算机编程,个人开发,坚持原创,非工作室,源码全网唯一。
✅技术主流:SpringBoot+Vue+uni-app前后端分离,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