随着移动互联网的快速发展,小程序作为一种新型的应用形态,已经深入到人们的生活中。在高校中,实验室预约管理是一个重要的环节,但传统的预约方式存在着诸多问题,如预约流程繁琐、信息不透明等。因此,本文旨在设计和实现一个基于SpringBoot的高校实验室预约小程序,以解决这些问题,提高实验室的利用率和管理效率。该小程序具备用户注册登录、实验室信息查询、预约申请、预约管理等功能,可以方便学生进行实验预约,同时管理员也可以方便地进行预约管理。通过使用SpringBoot框架,我们可以快速构建应用程序,并保证其稳定性和可扩展性。同时,结合小程序的特点,我们可以实现用户界面的友好性和操作的便捷性。该小程序不仅可以解决高校实验室预约管理的问题,还可以为学生和教师提供更好的实验环境和服务。
关键词:SpringBoot;高校实验室;预约管理;小程序;设计与实现
Abstract
With the rapid development of mobile internet,小程序as a new application form has penetrated into people’s lives. In Colleges and universities, laboratory appointment management is an important link, but the traditional appointment method has many problems, such as complicated appointment process and opaque information. Therefore, this article aims to design and implement a SpringBoot-based college laboratory appointment small program to solve these problems and improve the utilization rate and management efficiency of the laboratory. This small program has functions such as user registration and login, laboratory query, appointment application, and appointment management, which can facilitate students to make experimental appointments. At the same time, administrators can also facilitate appointment management. By using the SpringBoot framework, we can quickly build applications and ensure their stability and scalability. At the same time, combined with the characteristics of small programs, we can achieve user-friendly interfaces and convenient operations. This small program can not only solve the problems of college laboratory appointment management, but also provide better experimental environments and services for students and teachers.
Key words: SpringBoot; College laboratory; Appointment management; Design and implementation of small programs
目录
随着信息技术的飞速发展,移动互联网已经深入到人们生活的方方面面。在高等教育领域,实验室预约管理作为教学管理的重要组成部分,其传统的管理方式已经无法满足现代教育的需求。为此,设计和实现一个基于SpringBoot的高校实验室预约小程序具有重要的现实意义。
首先,从技术发展的角度来看,SpringBoot框架的普及和微信小程序的兴起,为高校实验室预约管理提供了新的解决方案。SpringBoot以其快速开发和强大的扩展性,使得开发高效、稳定的应用程序成为可能;而微信小程序则提供了便捷的用户界面和操作体验,使得用户可以随时随地进行预约操作。
其次,从高校实验室管理的现状来看,传统的预约方式存在诸多问题。例如,预约流程繁琐、信息不透明、管理效率低下等。这些问题不仅影响了学生的学习效率,也给实验室的管理带来了很大的不便。因此,通过开发基于SpringBoot的高校实验室预约小程序,可以有效地解决这些问题,提高实验室的利用率和管理效率。
最后,从教育改革的角度来看,高校实验室预约小程序的设计与实现符合现代教育信息化的发展趋势。通过引入先进的信息技术,可以推动高校教育的现代化进程,为学生和教师提供更好的实验环境和服务。
综上所述,基于SpringBoot的高校实验室预约小程序的设计与实现课题具有重要的研究价值和实践意义。它不仅可以解决高校实验室预约管理的问题,还可以为其他领域的管理提供借鉴和参考。
随着信息技术的快速发展,高校实验室预约管理面临着诸多挑战。传统的预约方式已经无法满足现代教育的需求,存在着预约流程繁琐、信息不透明、管理效率低下等问题。因此,设计和实现一个基于SpringBoot的高校实验室预约小程序具有重要的现实意义和研究价值。
首先,基于SpringBoot的高校实验室预约小程序能够提供更加便捷、高效的预约服务。通过小程序,学生可以随时随地进行实验室预约,省去了传统预约方式中繁琐的步骤和等待时间。同时,小程序的用户界面友好、操作便捷,能够提高用户的使用体验。
其次,该小程序能够提高实验室的利用率和管理效率。通过实时更新和同步数据,管理员可以随时了解实验室的预约情况,方便地进行管理。同时,小程序提供的预约管理功能可以方便地进行预约审批、调整和取消等操作,提高了管理效率。
此外,基于SpringBoot的高校实验室预约小程序还具有一定的技术价值。该小程序采用SpringBoot框架进行开发,能够快速构建应用程序并保证其稳定性和可扩展性。同时,结合小程序的特点,可以实现用户界面的友好性和操作的便捷性。这种技术实现方式可以为其他领域的管理提供借鉴和参考。
最后,该课题的研究还具有一定的教育改革意义。通过引入先进的信息技术,可以推动高校教育的现代化进程,为学生和教师提供更好的实验环境和服务。这符合现代教育信息化的发展趋势,对于推动教育改革和创新具有一定的意义。
综上所述,基于SpringBoot的高校实验室预约小程序的设计与实现的课题研究意义在于解决高校实验室预约管理的问题,提供更加便捷、高效的预约服务,提高实验室的利用率和管理效率,具有一定的技术价值和教育改革意义。
1.3系统开发技术的特色
(1)系统采用前后端分离的开发模式,使得前端和后端可以独立开发和维护,提高了开发效率和系统的可维护性。
(2)系统采用微服务架构,将系统拆分成多个独立的服务,每个服务可以独立部署和扩展,提高了系统的灵活性和可扩展性。
(3)系统采用 Docker 容器化部署技术,使得系统可以快速部署和迁移,提高了系统的可靠性和可移植性。
(4)系统采用自动化测试技术,包括单元测试、接口测试和性能测试等,提高了系统的稳定性和可靠性。
(5)系统采用安全保障技术,包括用户认证、授权、数据加密等,保障了系统的安全性和用户的隐私。
这些技术特色使得基于 Spring Boot 的高校实验室预约小程序具有高效、稳定、可靠、安全等优点,能够满足用户的需求和提高用户的体验。
2 基于springboot的高校实验室预约小程序分析
基于springboot的高校实验室预约小程序可在微信端实现查看实验室信息、新闻资讯、进行预约、查看通知提醒等操作,相对于高校实验室预约方式,基于springboot的高校实验室预约小程序提高了效率和便利性。在后台可对实验室信息管理、预约信息、通知提醒信息进行管理、有效掌握实验室预约信息,充分了解用户的需求,更有针对性的服务用户。
2.1可行性分析
2.1.1技术可行性分析
基于springboot的高校实验室预约小程序存储所使用的mysql数据库以及开发中所使用的IDEA、Tomcat这些开发工具的使用,能够给我们的编写工作带来许多的便利。系统使用SSM框架进行开发,使系统的可扩展性和维护性更佳,减少java配置代码,简化编程代码,目前springboot框架也是很多企业选择的框架之一。
2.1.2经济可行性分析
在开发基于springboot的高校实验室预约小程序中所使用的开发软件像IDEA开发工具、Tomcat8.0服务器、MySQL5.7数据库、Photoshop图片处理软件等,这些都是开源免费的,并且基于springboot的高校实验室预约小程序是自己设计并编码实现的,数据库是使用流行mysql进行数据的存储,开源的mysql等技术的使用,减少系统开发费用。
2.1.3操作可行性分析
在日常生活中,随着小程序的快速推广和使用,越来越多人掌握小程序的使用方法,基于springboot的高校实验室预约小程序在这种条件背景下是很容易被人们所接受和熟悉的,所以在操作上没任何问题。
2.2功能需求分析
基于springboot的高校实验室预约小程序中的web后台管理端采用了IntelliJ IDEA 2019.3.4 开发工具,配合了java开发语言中SSM开发框架以及tomcat8.0服务器、jdk1.8,微信端采用了微信开发者工具稳定版1.05.2111300,页面使用wxss和wxml进行布局,微信端和web后台管理端采用json接口通信。
1.微信用户端功能需求分析:
首页:显示实验室的概览信息,包括实验室介绍、设备清单、当前预约状态等。提供快速预约或取消预约的入口。
实验室信息:展示实验室的详细信息,包括实验室名称、地址、设备清单、使用时间等。用户可以查看各个实验室的详情,并进行预约。
新闻资讯:发布实验室的最新动态、研究成果、学术活动等信息,增强用户与实验室的互动。
我的:用户个人信息管理页面,包括基本信息(姓名、学号等)、收藏(收藏的实验室或资讯)、预约信息(已预约的实验室、时间等)、通知提醒(接收到的通知、提醒)等。
2.管理员功能需求分析
系统用户:管理后台的用户账户,包括创建新用户、修改用户权限、查看用户信息等。
实验室信息管理:管理实验室的基本信息,包括添加新实验室、修改现有实验室信息、删除实验室等。
预约信息管理:管理用户的预约信息,包括查看预约详情、批准或拒绝预约、调整预约时间等。
通知提醒管理:管理发送给用户的通知和提醒,可以编辑通知内容、选择发送对象、设定发送时间等。
系统管理:管理轮播图,编辑轮播图内容、设置轮播图位置等。
通知公告管理:发布和编辑通知公告,包括发布新的通知公告、编辑现有通知公告内容等。
资源管理:管理后台的资源文件,包括新闻资讯的管理(增删改查新闻资讯)、资讯分类的管理等。
权限管理:设置不同用户的权限,确保后台管理的安全性和规范性。可以为用户分配不同的角色和权限级别。
通过以上功能需求分析,我们可以明确系统的功能模块和业务流程,为后续的系统设计和开发提供指导。
基于springboot的高校实验室预约小程序的完整UML用例图分别是图2-1,图2-2。在参与者上包括普通用户、管理员。
用户角色的用例包括首页、实验室信息、关于我们、新闻资讯、我的(基本信息、收藏、预约信息、通知提醒)。

图2-1 基于springboot的高校实验室预约小程序用户角色用例图
管理员角色的用例包括后台首页、系统用户、实验室信息管理、预约信息管理、通知提醒管理、系统管理(轮播图管理)、通知公告管理、资源管理(新闻资讯、资讯分类)、权限管理。

图2-2 基于springboot的高校实验室预约小程序管理员角色用例图
3基于springboot的高校实验室预约小程序总体设计
在上一章节中分析了基于springboot的高校实验室预约小程序的功能性需求,并且根据需求分析了基于springboot的高校实验室预约小程序中的用例。那么接下来就要开始对基于springboot的高校实验室预约小程序架构、主要功能和数据库开始进行设计。
3.1系统功能模块设计
通过对基于springboot的高校实验室预约小程序的功能需求分析以及用例分析,得出了基于springboot的高校实验室预约小程序的功能模块图如图3-1所示。

图3-1基于springboot的高校实验室预约小程序功能模块图
3.3数据库设计
3.3.1 数据库E-R模型
下面是整个基于springboot的高校实验室预约小程序的数据库表的E-R实体关系图,如图3-2所示:

图3-2 基于springboot的高校实验室预约小程序E-R实体关系图
3.3.2 数据库表设计
通过上一小节中基于django的凤冈县公安局证据管理系统中总E-R关系图上得出一共需要创建很多个数据表。在此我主要罗列几个主要的数据库表结构设计。
表access_token (登陆访问时长)
| 编号 | 名称 | 数据类型 | 长度 | 小数位 | 允许空值 | 主键 | 默认值 | 说明 |
| 1 | token_id | int | 10 | 0 | N | Y | 临时访问牌ID | |
| 2 | token | varchar | 64 | 0 | Y | N | 临时访问牌 | |
| 3 | info | text | 65535 | 0 | Y | N | ||
| 4 | maxage | int | 10 | 0 | N | N | 2 | 最大寿命:默认2小时 |
| 5 | create_time | timestamp | 19 | 0 | N | N | CURRENT_TIMESTAMP | 创建时间: |
| 6 | update_time | timestamp | 19 | 0 | N | N | CURRENT_TIMESTAMP | 更新时间: |
| 7 | user_id | int | 10 | 0 | N | N | 0 | 用户编号: |
表appointment_information (预约信息)
| 编号 | 名称 | 数据类型 | 长度 | 小数位 | 允许空值 | 主键 | 默认值 | 说明 |
| 1 | appointment_information_id | int | 10 | 0 | N | Y | 预约信息ID | |
| 2 | laboratory_number | varchar | 64 | 0 | Y | N | 实验室编号 | |
| 3 | laboratory_name | varchar | 64 | 0 | Y | N | 实验室名称 | |
| 4 | appointment_users | int | 10 | 0 | Y | N | 0 | 预约用户 |
| 5 | user_name | varchar | 64 | 0 | Y | N | 用户姓名 | |
| 6 | contact_phone_number | varchar | 64 | 0 | Y | N | 联系电话 | |
| 7 | appointment_date | date | 10 | 0 | Y | N | 预约日期 | |
| 8 | appointment_remarks | text | 65535 | 0 | Y | N | 预约备注 | |
| 9 | appointment_status | varchar | 64 | 0 | Y | N | 预约状态 | |
| 10 | appointment_reply | text | 65535 | 0 | Y | N | 预约回复 | |
| 11 | create_time | datetime | 19 | 0 | N | N | CURRENT_TIMESTAMP | 创建时间 |
| 12 | update_time | timestamp | 19 | 0 | N | N | CURRENT_TIMESTAMP | 更新时间 |
| 编号 | 名称 | 数据类型 | 长度 | 小数位 | 允许空值 | 主键 | 默认值 | 说明 |
| 1 | article_id | mediumint | 8 | 0 | N | Y | 文章id:[0,8388607] | |
| 2 | title | varchar | 125 | 0 | N | Y | 标题:[0,125]用于文章和html的title标签中 | |
| 3 | type | varchar | 64 | 0 | N | N | 0 | 文章分类:[0,1000]用来搜索指定类型的文章 |
| 4 | hits | int | 10 | 0 | N | N | 0 | 点击数:[0,1000000000]访问这篇文章的人次 |
| 5 | praise_len | int | 10 | 0 | N | N | 0 | 点赞数 |
| 6 | create_time | timestamp | 19 | 0 | N | N | CURRENT_TIMESTAMP | 创建时间: |
| 7 | update_time | timestamp | 19 | 0 | N | N | CURRENT_TIMESTAMP | 更新时间: |
| 8 | source | varchar | 255 | 0 | Y | N | 来源:[0,255]文章的出处 | |
| 9 | url | varchar | 255 | 0 | Y | N | 来源地址:[0,255]用于跳转到发布该文章的网站 | |
| 10 | tag | varchar | 255 | 0 | Y | N | 标签:[0,255]用于标注文章所属相关内容,多个标签用空格隔开 | |
| 11 | content | longtext | 2147483647 | 0 | Y | N | 正文:文章的主体内容 | |
| 12 | img | varchar | 255 | 0 | Y | N | 封面图 | |
| 13 | description | text | 65535 | 0 | Y | N | 文章描述 |
| 编号 | 名称 | 数据类型 | 长度 | 小数位 | 允许空值 | 主键 | 默认值 | 说明 |
| 1 | type_id | smallint | 5 | 0 | N | Y | 分类ID:[0,10000] | |
| 2 | display | smallint | 5 | 0 | N | N | 100 | 显示顺序:[0,1000]决定分类显示的先后顺序 |
| 3 | name | varchar | 16 | 0 | N | N | 分类名称:[2,16] | |
| 4 | father_id | smallint | 5 | 0 | N | N | 0 | 上级分类ID:[0,32767] |
| 5 | description | varchar | 255 | 0 | Y | N | 描述:[0,255]描述该分类的作用 | |
| 6 | icon | text | 65535 | 0 | Y | N | 分类图标: | |
| 7 | url | varchar | 255 | 0 | Y | N | 外链地址:[0,255]如果该分类是跳转到其他网站的情况下,就在该URL上设置 | |
| 8 | create_time | timestamp | 19 | 0 | N | N | CURRENT_TIMESTAMP | 创建时间: |
| 9 | update_time | timestamp | 19 | 0 | N | N | CURRENT_TIMESTAMP | 更新时间: |
| 编号 | 名称 | 数据类型 | 长度 | 小数位 | 允许空值 | 主键 | 默认值 | 说明 |
| 1 | auth_id | int | 10 | 0 | N | Y | 授权ID: | |
| 2 | user_group | varchar | 64 | 0 | Y | N | 用户组: | |
| 3 | mod_name | varchar | 64 | 0 | Y | N | 模块名: | |
| 4 | table_name | varchar | 64 | 0 | Y | N | 表名: | |
| 5 | page_title | varchar | 255 | 0 | Y | N | 页面标题: | |
| 6 | path | varchar | 255 | 0 | Y | N | 路由路径: | |
| 7 | position | varchar | 32 | 0 | Y | N | 位置: | |
| 8 | mode | varchar | 32 | 0 | N | N | _blank | 跳转方式: |
| 9 | add | tinyint | 3 | 0 | N | N | 1 | 是否可增加: |
| 10 | del | tinyint | 3 | 0 | N | N | 1 | 是否可删除: |
| 11 | set | tinyint | 3 | 0 | N | N | 1 | 是否可修改: |
| 12 | get | tinyint | 3 | 0 | N | N | 1 | 是否可查看: |
| 13 | field_add | text | 65535 | 0 | Y | N | 添加字段: | |
| 14 | field_set | text | 65535 | 0 | Y | N | 修改字段: | |
| 15 | field_get | text | 65535 | 0 | Y | N | 查询字段: | |
| 16 | table_nav_name | varchar | 500 | 0 | Y | N | 跨表导航名称: | |
| 17 | table_nav | varchar | 500 | 0 | Y | N | 跨表导航: | |
| 18 | option | text | 65535 | 0 | Y | N | 配置: | |
| 19 | create_time | timestamp | 19 | 0 | N | N | CURRENT_TIMESTAMP | 创建时间: |
| 20 | update_time | timestamp | 19 | 0 | N | N | CURRENT_TIMESTAMP | 更新时间: |
| 编号 | 名称 | 数据类型 | 长度 | 小数位 | 允许空值 | 主键 | 默认值 | 说明 |
| 1 | collect_id | int | 10 | 0 | N | Y | 收藏ID: | |
| 2 | user_id | int | 10 | 0 | N | N | 0 | 收藏人ID: |
| 3 | source_table | varchar | 255 | 0 | Y | N | 来源表: | |
| 4 | source_field | varchar | 255 | 0 | Y | N | 来源字段: | |
| 5 | source_id | int | 10 | 0 | N | N | 0 | 来源ID: |
| 6 | title | varchar | 255 | 0 | Y | N | 标题: | |
| 7 | img | varchar | 255 | 0 | Y | N | 封面: | |
| 8 | create_time | timestamp | 19 | 0 | N | N | CURRENT_TIMESTAMP | 创建时间: |
| 9 | update_time | timestamp | 19 | 0 | N | N | CURRENT_TIMESTAMP | 更新时间: |
| 编号 | 名称 | 数据类型 | 长度 | 小数位 | 允许空值 | 主键 | 默认值 | 说明 |
| 1 | comment_id | int | 10 | 0 | N | Y | 评论ID: | |
| 2 | user_id | int | 10 | 0 | N | N | 0 | 评论人ID: |
| 3 | reply_to_id | int | 10 | 0 | N | N | 0 | 回复评论ID:空为0 |
| 4 | content | longtext | 2147483647 | 0 | Y | N | 内容: | |
| 5 | nickname | varchar | 255 | 0 | Y | N | 昵称: | |
| 6 | avatar | varchar | 255 | 0 | Y | N | 头像地址:[0,255] | |
| 7 | create_time | timestamp | 19 | 0 | N | N | CURRENT_TIMESTAMP | 创建时间: |
| 8 | update_time | timestamp | 19 | 0 | N | N | CURRENT_TIMESTAMP | 更新时间: |
| 9 | source_table | varchar | 255 | 0 | Y | N | 来源表: | |
| 10 | source_field | varchar | 255 | 0 | Y | N | 来源字段: | |
| 11 | source_id | int | 10 | 0 | N | N | 0 | 来源ID: |
| 编号 | 名称 | 数据类型 | 长度 | 小数位 | 允许空值 | 主键 | 默认值 | 说明 |
| 1 | hits_id | int | 10 | 0 | N | Y | 点赞ID: | |
| 2 | user_id | int | 10 | 0 | N | N | 0 | 点赞人: |
| 3 | create_time | timestamp | 19 | 0 | N | N | CURRENT_TIMESTAMP | 创建时间: |
| 4 | update_time | timestamp | 19 | 0 | N | N | CURRENT_TIMESTAMP | 更新时间: |
| 5 | source_table | varchar | 255 | 0 | Y | N | 来源表: | |
| 6 | source_field | varchar | 255 | 0 | Y | N | 来源字段: | |
| 7 | source_id | int | 10 | 0 | N | N | 0 | 来源ID: |
表laboratory_information (实验室信息)
| 编号 | 名称 | 数据类型 | 长度 | 小数位 | 允许空值 | 主键 | 默认值 | 说明 |
| 1 | laboratory_information_id | int | 10 | 0 | N | Y | 实验室信息ID | |
| 2 | laboratory_number | varchar | 64 | 0 | Y | N | 实验室编号 | |
| 3 | laboratory_name | varchar | 64 | 0 | Y | N | 实验室名称 | |
| 4 | laboratory_status | varchar | 64 | 0 | Y | N | 实验室状态 | |
| 5 | opening_hours | varchar | 64 | 0 | Y | N | 开放时间 | |
| 6 | laboratory_location | varchar | 64 | 0 | Y | N | 实验室位置 | |
| 7 | laboratory_images | varchar | 255 | 0 | Y | N | 实验室图片 | |
| 8 | laboratory_equipment | text | 65535 | 0 | Y | N | 实验室设备 | |
| 9 | laboratory_introduction | longtext | 2147483647 | 0 | Y | N | 实验室简介 | |
| 10 | hits | int | 10 | 0 | N | N | 0 | 点击数 |
| 11 | praise_len | int | 10 | 0 | N | N | 0 | 点赞数 |
| 12 | recommend | int | 10 | 0 | N | N | 0 | 智能推荐 |
| 13 | create_time | datetime | 19 | 0 | N | N | CURRENT_TIMESTAMP | 创建时间 |
| 14 | update_time | timestamp | 19 | 0 | N | N | CURRENT_TIMESTAMP | 更新时间 |
| 编号 | 名称 | 数据类型 | 长度 | 小数位 | 允许空值 | 主键 | 默认值 | 说明 |
| 1 | notice_id | mediumint | 8 | 0 | N | Y | 公告id: | |
| 2 | title | varchar | 125 | 0 | N | N | 标题: | |
| 3 | content | longtext | 2147483647 | 0 | Y | N | 正文: | |
| 4 | create_time | timestamp | 19 | 0 | N | N | CURRENT_TIMESTAMP | 创建时间: |
| 5 | update_time | timestamp | 19 | 0 | N | N | CURRENT_TIMESTAMP | 更新时间: |
| 编号 | 名称 | 数据类型 | 长度 | 小数位 | 允许空值 | 主键 | 默认值 | 说明 |
| 1 | notification_reminder_id | int | 10 | 0 | N | Y | 通知提醒ID | |
| 2 | notification_title | varchar | 64 | 0 | Y | N | 通知标题 | |
| 3 | laboratory_number | varchar | 64 | 0 | Y | N | 实验室编号 | |
| 4 | laboratory_name | varchar | 64 | 0 | Y | N | 实验室名称 | |
| 5 | appointment_users | int | 10 | 0 | Y | N | 0 | 预约用户 |
| 6 | user_name | varchar | 64 | 0 | Y | N | 用户姓名 | |
| 7 | appointment_date | date | 10 | 0 | Y | N | 预约日期 | |
| 8 | notification_content | text | 65535 | 0 | Y | N | 通知内容 | |
| 9 | create_time | datetime | 19 | 0 | N | N | CURRENT_TIMESTAMP | 创建时间 |
| 10 | update_time | timestamp | 19 | 0 | N | N | CURRENT_TIMESTAMP | 更新时间 |
| 编号 | 名称 | 数据类型 | 长度 | 小数位 | 允许空值 | 主键 | 默认值 | 说明 |
| 1 | praise_id | int | 10 | 0 | N | Y | 点赞ID: | |
| 2 | user_id | int | 10 | 0 | N | N | 0 | 点赞人: |
| 3 | create_time | timestamp | 19 | 0 | N | N | CURRENT_TIMESTAMP | 创建时间: |
| 4 | update_time | timestamp | 19 | 0 | N | N | CURRENT_TIMESTAMP | 更新时间: |
| 5 | source_table | varchar | 255 | 0 | Y | N | 来源表: | |
| 6 | source_field | varchar | 255 | 0 | Y | N | 来源字段: | |
| 7 | source_id | int | 10 | 0 | N | N | 0 | 来源ID: |
| 8 | status | bit | 1 | 0 | N | N | 1 | 点赞状态:1为点赞,0已取消 |
| 编号 | 名称 | 数据类型 | 长度 | 小数位 | 允许空值 | 主键 | 默认值 | 说明 |
| 1 | regular_users_id | int | 10 | 0 | N | Y | 普通用户ID | |
| 2 | user_name | varchar | 64 | 0 | Y | N | 用户姓名 | |
| 3 | user_gender | varchar | 64 | 0 | Y | N | 用户性别 | |
| 4 | contact_phone_number | varchar | 16 | 0 | Y | N | 联系电话 | |
| 5 | examine_state | varchar | 16 | 0 | N | N | 已通过 | 审核状态 |
| 6 | user_id | int | 10 | 0 | N | N | 0 | 用户ID |
| 7 | create_time | datetime | 19 | 0 | N | N | CURRENT_TIMESTAMP | 创建时间 |
| 8 | update_time | timestamp | 19 | 0 | N | N | CURRENT_TIMESTAMP | 更新时间 |
| 编号 | 名称 | 数据类型 | 长度 | 小数位 | 允许空值 | 主键 | 默认值 | 说明 |
| 1 | sensitive_vocabulary_id | int | 10 | 0 | N | Y | 敏感词汇ID | |
| 2 | sensitive_vocabulary | varchar | 64 | 0 | Y | N | 敏感词汇 | |
| 3 | create_time | datetime | 19 | 0 | N | N | CURRENT_TIMESTAMP | 创建时间 |
| 4 | update_time | timestamp | 19 | 0 | N | N | CURRENT_TIMESTAMP | 更新时间 |
| 编号 | 名称 | 数据类型 | 长度 | 小数位 | 允许空值 | 主键 | 默认值 | 说明 |
| 1 | slides_id | int | 10 | 0 | N | Y | 轮播图ID: | |
| 2 | title | varchar | 64 | 0 | Y | N | 标题: | |
| 3 | content | varchar | 255 | 0 | Y | N | 内容: | |
| 4 | url | varchar | 255 | 0 | Y | N | 链接: | |
| 5 | img | varchar | 255 | 0 | Y | N | 轮播图: | |
| 6 | hits | int | 10 | 0 | N | N | 0 | 点击量: |
| 7 | create_time | timestamp | 19 | 0 | N | N | CURRENT_TIMESTAMP | 创建时间: |
| 8 | update_time | timestamp | 19 | 0 | N | N | CURRENT_TIMESTAMP | 更新时间: |
| 编号 | 名称 | 数据类型 | 长度 | 小数位 | 允许空值 | 主键 | 默认值 | 说明 |
| 1 | upload_id | int | 10 | 0 | N | Y | 上传ID | |
| 2 | name | varchar | 64 | 0 | Y | N | 文件名 | |
| 3 | path | varchar | 255 | 0 | Y | N | 访问路径 | |
| 4 | file | varchar | 255 | 0 | Y | N | 文件路径 | |
| 5 | display | varchar | 255 | 0 | Y | N | 显示顺序 | |
| 6 | father_id | int | 10 | 0 | Y | N | 0 | 父级ID |
| 7 | dir | varchar | 255 | 0 | Y | N | 文件夹 | |
| 8 | type | varchar | 32 | 0 | Y | N | 文件类型 |
| 编号 | 名称 | 数据类型 | 长度 | 小数位 | 允许空值 | 主键 | 默认值 | 说明 |
| 1 | user_id | mediumint | 8 | 0 | N | Y | 用户ID:[0,8388607]用户获取其他与用户相关的数据 | |
| 2 | state | smallint | 5 | 0 | N | N | 1 | 账户状态:[0,10](1可用|2异常|3已冻结|4已注销) |
| 3 | user_group | varchar | 32 | 0 | Y | N | 所在用户组:[0,32767]决定用户身份和权限 | |
| 4 | login_time | timestamp | 19 | 0 | N | N | CURRENT_TIMESTAMP | 上次登录时间: |
| 5 | phone | varchar | 11 | 0 | Y | N | 手机号码:[0,11]用户的手机号码,用于找回密码时或登录时 | |
| 6 | phone_state | smallint | 5 | 0 | N | N | 0 | 手机认证:[0,1](0未认证|1审核中|2已认证) |
| 7 | username | varchar | 16 | 0 | N | N | 用户名:[0,16]用户登录时所用的账户名称 | |
| 8 | nickname | varchar | 16 | 0 | Y | N | 昵称:[0,16] | |
| 9 | password | varchar | 64 | 0 | N | N | 密码:[0,32]用户登录所需的密码,由6-16位数字或英文组成 | |
| 10 | | varchar | 64 | 0 | Y | N | 邮箱:[0,64]用户的邮箱,用于找回密码时或登录时 | |
| 11 | email_state | smallint | 5 | 0 | N | N | 0 | 邮箱认证:[0,1](0未认证|1审核中|2已认证) |
| 12 | avatar | varchar | 255 | 0 | Y | N | 头像地址:[0,255] | |
| 13 | open_id | varchar | 255 | 0 | Y | N | 针对获取用户信息字段 | |
| 14 | create_time | timestamp | 19 | 0 | N | N | CURRENT_TIMESTAMP | 创建时间: |
| 15 | vip_level | varchar | 255 | 0 | Y | N | 会员等级 | |
| 16 | vip_discount | double | 11 | 2 | Y | N | 0.00 | 会员折扣 |
| 编号 | 名称 | 数据类型 | 长度 | 小数位 | 允许空值 | 主键 | 默认值 | 说明 |
| 1 | group_id | mediumint | 8 | 0 | N | Y | 用户组ID:[0,8388607] | |
| 2 | display | smallint | 5 | 0 | N | N | 100 | 显示顺序:[0,1000] |
| 3 | name | varchar | 16 | 0 | N | N | 名称:[0,16] | |
| 4 | description | varchar | 255 | 0 | Y | N | 描述:[0,255]描述该用户组的特点或权限范围 | |
| 5 | source_table | varchar | 255 | 0 | Y | N | 来源表: | |
| 6 | source_field | varchar | 255 | 0 | Y | N | 来源字段: | |
| 7 | source_id | int | 10 | 0 | N | N | 0 | 来源ID: |
| 8 | register | smallint | 5 | 0 | Y | N | 0 | 注册位置: |
| 9 | create_time | timestamp | 19 | 0 | N | N | CURRENT_TIMESTAMP | 创建时间: |
| 10 | update_time | timestamp | 19 | 0 | N | N | CURRENT_TIMESTAMP | 更新时间: |
4 基于springboot的高校实验室预约小程序关键模块实现
基于springboot的高校实验室预约小程序划分了微信小程序用户端和web后台管理员端,微信端实现首页、实验室信息、关于我们、新闻资讯、我的(基本信息、收藏、预约信息、通知提醒)等功能,web端是为后台管理员提供系统用户、实验室信息管理、预约信息管理、通知提醒管理、系统管理(轮播图管理)、通知公告管理、资源管理(新闻资讯、资讯分类)、权限管理的平台。
4.1 前台微信端
4.1.1 用户注册界面
不是基于springboot的高校实验室预约小程序的用户可以通过微信小程序在线进行注册,填写上自己的账号、密码、重复密码、昵称、邮箱登信息后点击“提交”按钮后将会验证是否有非空数据,再验证密码和重复密码是否一样,最后验证是否账号重复,都验证没问题后即可注册成功。注册实现了用户注册和发布者注册两部分,其用户注册界面展示如下图4-1所示。

图4-1用户注册界面图
注册页UserController.java,传入user对象,并将"user_id"、 "state"、 "user_group"、"login_time"、"phone"、"phone_state"、 "username"、"nickname"、"password"、"email"、"email_state"、"avatar"、"create_time"输入,重点是 "username"、"nickname"、"password"必须输入,通过获取username,数据库查询是否有该用户,如果存在,则提示“用户已存在”,否则执行将UserId置为空(数据库表中该字段已设置自动递增),代码如下:
/**
* 注册
* @param user
* @return
*/
@PostMapping("register")
public Map<String, Object> signUp(@RequestBody User user) {
// 查询用户
Map<String, String> query = new HashMap<>();
Map<String,Object> map = JSON.parseObject(JSON.toJSONString(user));
query.put("username",user.getUsername());
List list = service.selectBaseList(service.select(query, new HashMap<>()));
if (list.size()>0){
return error(30000, "用户已存在");
}
map.put("password",service.encryption(String.valueOf(map.get("password"))));
service.insert(map);
return success(1);
}
4.1.2 用户登录界面
微信小程序上注册后的用户可以通过自己的用户名和密码进行登录,在用户填写好自己的用户名和密码信息并点击“登录”按钮后,将会先验证是否有非空数据,再验证填写的用户信息和数据库中保存的是否一致,一致后将会登录成功,登录成功后将会在左上角上显示用户信息;否则将会提示相应错误信息,用户登录界面如下图4-2所示。

图4-2用户登录界面图
登录页,首先传入"username"、"email"、"phone"、"password",用户可通过用户名、邮箱、手机号进行登陆,通过判断resultList来确定查询结果,然后执行查询用户组UserGroup,用户组里面不存在,依然报“用户不存在”,执行完以上代码,最后涉及到用户带有“审核”的,会查询examine_state(用户的审核状态),数据库表user_group中含有source_table和source_field进行查询,以上步骤完成,对输入的密码进行存储Token到数据库,匹对账号和密码,数据库中的AccessToken为令牌,用于身份认证,其代码如下:
/**
* 登录
* @param data
* @param httpServletRequest
* @return
*/
@PostMapping("login")
public Map<String, Object> login(@RequestBody Map<String, String> data, HttpServletRequest httpServletRequest) {
log.info("[执行登录接口]");
String username = data.get("username");
String email = data.get("email");
String phone = data.get("phone");
String password = data.get("password");
List resultList = null;
Map<String, String> map = new HashMap<>();
if(username != null && "".equals(username) == false){
map.put("username", username);
resultList = service.selectBaseList(service.select(map, new HashMap<>()));
}
else if(email != null && "".equals(email) == false){
map.put("email", email);
resultList = service.selectBaseList(service.select(map, new HashMap<>()));
}
else if(phone != null && "".equals(phone) == false){
map.put("phone", phone);
resultList = service.selectBaseList(service.select(map, new HashMap<>()));
}else{
return error(30000, "账号或密码不能为空");
}
if (resultList == null || password == null) {
return error(30000, "账号或密码不能为空");
}
//判断是否有这个用户
if (resultList.size()<=0){
return error(30000,"用户不存在");
}
User byUsername = (User) resultList.get(0);
Map<String, String> groupMap = new HashMap<>();
groupMap.put("name",byUsername.getUserGroup());
List groupList = userGroupService.selectBaseList(userGroupService.select(groupMap, new HashMap<>()));
if (groupList.size()<1){
return error(30000,"用户组不存在");
}
UserGroup userGroup = (UserGroup) groupList.get(0);
//查询用户审核状态
if (!StringUtils.isEmpty(userGroup.getSourceTable())){
String res = service.selectExamineState(userGroup.getSourceTable(),byUsername.getUserId());
if (res==null){
return error(30000,"用户不存在");
}
if (!res.equals("已通过")){
return error(30000,"该用户审核未通过");
}
}
//查询用户状态
if (byUsername.getState()!=1){
return error(30000,"用户非可用状态,不能登录");
}
String md5password = service.encryption(password);
if (byUsername.getPassword().equals(md5password)) {
// 存储Token到数据库
AccessToken accessToken = new AccessToken();
accessToken.setToken(UUID.randomUUID().toString().replaceAll("-", ""));
accessToken.setUser_id(byUsername.getUserId());
Duration duration = Duration.ofSeconds(7200L);
redisTemplate.opsForValue().set(accessToken.getToken(), accessToken,duration);
// 返回用户信息
JSONObject user = JSONObject.parseObject(JSONObject.toJSONString(byUsername));
user.put("token", accessToken.getToken());
JSONObject ret = new JSONObject();
ret.put("obj",user);
return success(ret);
} else {
return error(30000, "账号或密码不正确");
}
}
输入有效的用户名和密码信息,点击“登录”按钮,自动跳转到“首页”页面,首页界面如下图4-3所示。

图4-3首页界面图
4.1.3 新闻资讯界面
用户点击新闻资讯按钮,可以进入新闻资讯列表,点击感兴趣的新闻资讯,进入新闻资讯详情页面,用户可以进行查看、点赞、收藏、评论等操作,界面如下图4-4所示。

图4-4新闻资讯详情界面图
4.1.4 实验室信息详情界面
用户点击实验室信息可以进入实验室信息列表,点击任意一个实验室信息后将可以进入到该实验室信息的详情界面中,用户可以查看实验室信息的详细介绍,还可以进行预约、点赞、收藏、评论等,房源详情界面如下图4-5所示。

图4-5实验室信息详情界面图
4.1.5 预约界面
在实验室信息详情页面左下角点击“预约”后进入到“预约”界面,输入相关信息后,点击“提交”按钮后将会生成自己的实验室预约信息,预约界面如下图4-6所示。

图4-6预约信息界面图
4.1.7我的界面
点击基于springboot的高校实验室预约小程序端底部的“我的”菜单进行“我的”页面,用户可以管理自己的基本信息(姓名、学号等)、收藏(收藏的实验室或资讯)、预约信息(已预约的实验室、时间等)、通知提醒(接收到的通知、提醒),界面如下图4-7所示。

图4-7我的界面图
4.2后台管理员端
4.2.1 系统用户界面
管理员点击“系统用户”这一菜单会显示管理员、普通用户这两个子菜单,管理员可以对这两个角色的信息进行增删改查操作。界面如下图4-8所示。

图4-8普通用户管理界面图
4.2.2实验室信息管理界面
管理员点击后台左边的“实验室信息管理”菜单后将可以对实验室信息进行管理,包括添加、编辑和删除实验室信息等,实验室信息管理界面如下图4-9所示。

图4-9实验室信息列表界面图
新增一条数据,通过post传入一个json对象,然后经过request.getReader(),最后经过readBody()转成一个Map,含有String和Object,key用的是字段名,Object存放数据,最终得到Map,insert用拼装sql,读取body,组装成一个insert对象,runCountSql()语句,代码如下:
@PostMapping("/add")
@Transactional
public Map<String, Object> add(HttpServletRequest request) throws IOException {
service.insert(service.readBody(request.getReader()));
return success(1);
}
public Map<String, Object> addMap(Map<String,Object> map){
service.insert(map);
return success(1);
}
修改一个数据,原理与add基本一致,不同点在于通过readConfig()读取关键字,以及通过readQuery()获取URL后面?指定位置的标识,转成Map对象后,执行update操作,同样通过拼接的sql语句执行,执行过程读取query,toWhereSql()语句完成数据库操作,body为修改对象的值,代码如下:
@PostMapping("/set")
@Transactional
public Map<String, Object> set(HttpServletRequest request) throws IOException {
service.update(service.readQuery(request), service.readConfig(request), service.readBody(request.getReader()));
return success(1);
}
删除一条数据,通过readQuery(),获取URL后面的对象地址,删除FROM具体的table,query删除查询FindConfig语句,代码如下:
@RequestMapping(value = "/del")
@Transactional
public Map<String, Object> del(HttpServletRequest request) {
service.delete(service.readQuery(request), service.readConfig(request));
return success(1);
}
public void delete(Map<String,String> query,Map<String,String> config){
QueryWrapper wrapper = new QueryWrapper<E>();
toWhereWrapper(query, "0".equals(config.get(FindConfig.GROUP_BY)),wrapper);
baseMapper.delete(wrapper);
log.info("[{}] - 删除操作:{}",wrapper.getSqlSelect());
}
4.2.3系统管理界面
管理员点击“系统管理”这一菜单会显示轮播图这一个子菜单,管理员可以对前台展示的轮播图进行设置,界面如下图所示。

4.2.4通知公告管理界面
点击“通知告管理”这个菜单,可以查看到系统中所有添加的通知公告,支持通过标题对通知公告进行查询,添加、删除等操作。通知公告管理界面如下图所示。

图4-11通知公告界面图
4.2.5资源管理界面
管理员点击“资源管理”这一菜单会显示新闻资讯、资讯分类这两个子菜单,管理员可以对这两部分涉及到的功能进行更新维护,更好的服务于前台用户。界面如下图所示。

5 基于springboot的高校实验室预约小程序测试
基于springboot的高校实验室预约小程序测试是为了检验软件是否达到设计要求,是否存在错误,通过测试的方法来检查基于springboot的高校实验室预约小程序,以便发现基于springboot的高校实验室预约小程序中的错误。测试工作是保证基于springboot的高校实验室预约小程序质量的关键。
微信端上用户在线预约功能测试:
表5-1微信端上用户在线预约功能测试用例表
| 测试名称 | 测试功能 | 操作 | 操作过程 | 预期结果 | 测试结果 |
| 在线预约功能模块测试 | 实验室情信息正常的显示 | 浏览实验室详情信息 | 在小程序端上选择一个实验室信息将会进入该实验室的详情界面,同时可以预约、评论、收藏、点赞。 | 进入该实验室的详情信息界面 | 正确 |
| 在线预约功能模块测试 | 在线预约功能成功 | 浏览实验室详情信息 | 点击“预约”填写预约信息,点击“提交”按钮。 | 生成自己的预约但。 | 正确 |
微信端上评论功能测试:
表5-2微信端上评论功能测试用例表
| 测试名称 | 测试功能 | 操作 | 操作过程 | 预期结果 | 测试结果 |
| 评论功能模块测试 | 评论信息正常的显示 | 浏览实验室详情信息 | 点击“评论”-“输入评论内容,点击“提交”按钮。 | 成功完成评论 | 正确 |
web后台端上管理员发布实验室信息功能测试:
表5-3web后台端上管理员发布实验室信息功能测试用例表
| 测试名称 | 测试功能 | 操作 | 操作过程 | 预期结果 | 测试结果 |
| 管理员发布实验室信息功能测试 | 添加实验室信息的情况 | 输入新实验室信息的基本信息 | 后台选择“实验室信息管理”菜单后,填写新实验室基本信息后点击“提交”按钮 | 新实验室信息发布成功 | 正确 |
5.2测试结果
通过编写了基于springboot的高校实验室预约小程序的测试用例,已经检测完毕了5.1章节中的3大模块,它为基于springboot的高校实验室预约小程序系统的后期推广运营提供了强力的技术支撑。
本次基于springboot的高校实验室预约小程序的设计与实现,功能方面,通过功能模块图区分该程序的用户端与管理端各自的功能权限;数据库方面,数据库使用口碑较好的mysql进行数据的存储,开源的mysql等技术的使用,相对来说体积较小,服务稳定,减少系统开发成本费用,通过数据库表的E-R实体关系图建立了表单与表单之间的连接,区分不同的表单之间的关系,更好的完善数据库的内容;测试方面,通过测试用例检查基于springboot的高校实验室预约小程序的设计缺陷和程序存在的错误,在系统测试阶段的过程中,出现了一些问题,例如,注册信息,没有规范用户在注册页面填写信息时输入两次密码,而导致后期登录错误,最后通过多次修改程序和测试解决了问题。最终经过不断的检测、修改,实现项目的稳定,达到了预期的设计效果。
系统整体的功能到达预期的效果,但页面的美化方面还是存在一些不足,例如:小程序中的图标过于简洁;wxss页面的渲染布局方面不够完善,人们在使用软件过程中,对某些功能不易找寻,针对此次项目产生的问题,日后将不断改进,使该项目更加完善。
[1]徐正超,王义斐,谭煜凯等.基于HTML的实验预约管理系统设计与实现[J].科技与创新,2023,(22):146-148.DOI:10.15913/j.cnki.kjycx.2023.22.041.
[2]杨萍萍,白艳茹.基于低代码的高校实验室预约系统设计与实现[J].实验科学与技术,2023,21(05):149-153.
[3]曹霞,陶建平,黄晓涛等.计算机开放实验室预约系统设计与实践[J].办公自动化,2023,28(04):9-11.
[4]王以伍,舒晖.基于SpringBoot+Vue前后端分离的高校实验室预约管理系统的设计与实现[J].现代计算机,2023,29(01):114-117.
[5]万玲娜.基于Web的实验室预约系统设计与实现[J].现代计算机,2022,28(23):92-96.
[6]胡之惠,王佳瑶.专业实验室预约系统的设计[J].福建电脑,2022,38(08):108-110.DOI:10.16707/j.cnki.fjpc.2022.08.027.
[7]余久久,郑昊,张继山等.面向成人高校的实验室预约系统构建[J].实验室研究与探索,2022,41(04):246-250.DOI:10.19927/j.cnki.syyt.2022.04.051.
[8]张文韬.开放性实验室的网上预约系统设计[J].无线互联科技,2022,19(05):57-58.
[9]魏琛.基于微信小程序的实验室在线预约功能研究与实践[J].天津科技,2021,48(10):7-10+13.DOI:10.14099/j.cnki.tjkj.2021.10.003.
[10]潘可贤.基于微信小程序的高校实验室预约平台的设计[J].网络安全技术与应用,2021,(06):34-35.
[11]马若鹏.基于微信小程序的实验室考勤管理系统的设计与实现[D].华中科技大学,2021.DOI:10.27157/d.cnki.ghzku.2021.005867.
[12]李福顺.基于B/S实验室在线预约系统智能化研究[J].电子测试,2020,(24):82-83.DOI:10.16520/j.cnki.1000-8519.2020.24.033.
[13]开放实验室预约系统.甘肃省,兰州理工大学,2020-09-24.
[14]叶叶.基于微信小程序的开放实验室预约系统设计与实现[J].信息技术与信息化,2020,(08):172-173.
[15]黄镇建,陈泓昌.基于二维码的开放实验室预约系统[J].现代计算机,2020,(18):156-160.
[16]刘素转,朱丽萍,王晓娜.基于微信小程序的开放实验室预约系统设计与实现[J].课程教育研究,2020,(19):246.
[17]赵家伟,白花蒲,张恒瑞等.基于微信小程序的实验室预约系统开发与实现[J].电脑知识与技术,2020,16(11):80-81.DOI:10.14004/j.cnki.ckt.2020.1382.
[18]Wang Y ,Wei Z ,Cao J , et al.Research and Implementation of Big Data Technology Laboratory Equipment Reservation Management System[J].IOP Conference Series: Earth and Environmental Science,2019,252(4):042072 (6pp).
[19]Ma X .The Research of the Opening System of University Laboratory and the Design of the Laboratory Reservation System[C]//[出版者不详],2016:
[20]Reservation System for machine time in the laboratories of the University of Informatics Sciences[J].Revista Cubana de Ciencias Informáticas,2013,7(4):
至此论文结束,感谢您的阅读。首先,我要感谢我的父母对我的支持与理解,在两年的本科学习生活中,倾其所能的爱护我,使我能够心无旁骛,全心全意的投入到学习中;不断鼓励我,让我能够拥有不断前进的动力。其次还要感谢我的导师,感谢在这段时间给予我有效的建议,以至于我的毕设有了整体的设计思路,尽管我在实习期间很忙,论文撰写总是停停改改,但是导师依然十分负责,时不时的询问我的任务进展情况,跟进我的论文进度。在老师的帮助下,我逐步完成了自己的论文和程序,从导师身上也学习到很多知识,和经验,这些知识和经验令我受益匪浅。
此外,还要感谢我的同学,热心的解答了我在程序上遇到的问题,是他们在我编写程序过程中给了我很多的启发和感想,也帮助了我对于程序的调试和检测,让我受益良多。在这两年的时间里,我学会了许多专业的知识,还有老师们的谆谆教诲和同学们的帮助使我不断进步,能够做得更好;我也会不断给自己充电,不断突破,成为更好的自己。
最后向所有关心我、帮助我的老师及同学们表示衷心的感谢!
免费领取项目源码,请关注❥点赞收藏并私信博主,谢谢~

被折叠的 条评论
为什么被折叠?



