基于微信小程序的实验室预约管理系统设计与实现

news2025/2/25 11:27:41

前言

💗博主介绍:✌全网粉丝10W+,CSDN特邀作者、博客专家、CSDN新星计划导师、全栈领域优质创作者,博客之星、掘金/华为云/阿里云/InfoQ等平台优质作者、专注于Java、小程序技术领域和毕业项目实战✌💗
👇🏻 精彩专栏 推荐订阅👇🏻
2023-2024年最值得选的微信小程序毕业设计选题大全:100个热门选题推荐✅

2023-2024年最值得选的Java毕业设计选题大全:500个热门选题推荐✅

Java精品实战案例《500套》

微信小程序项目精品案例《500套》

🌟文末获取源码+数据库🌟
感兴趣的可以先收藏起来,还有大家在毕设选题,项目以及论文编写等相关问题都可以给我留言咨询,希望帮助更多的人

系统功能结构图

开放实验室预约管理系统具有管理员角色,用户角色,这几个操作权限。
开放实验室预约管理系统针对管理员设置的功能有:添加并管理各种类型信息,管理用户账户信息,管理实验室信息,管理公告信息等内容。
开放实验室预约管理系统针对用户设置的功能有:查看并修改个人信息,查看实验室信息,查看公告信息等内容。

具体实现

5.1管理员功能介绍

5.1.1管理员登录

系统登录功能是程序必不可少的功能,在登录页面必填的数据有两项,一项就是账号,另一项数据就是密码,当管理员正确填写并提交这二者数据之后,管理员就可以进入系统后台功能操作区。下图就是管理员登录页面。

img

图5.1 管理员登录页面

5.1.2 实验室管理

项目管理页面提供的功能操作有:查看实验室,删除实验室操作,新增实验室操作,修改实验室操作。下图就是实验室管理页面。

img

图5.2 实验室管理页面

5.1.3 公告信息管理

公告信息管理页面提供的功能操作有:新增公告,修改公告,删除公告操作。下图就是公告信息管理页面。

img

图5.3 公告信息管理页面

5.1.4公告类型管理

公告类型管理页面显示所有公告类型,在此页面既可以让管理员添加新的公告信息类型,也能对已有的公告类型信息执行编辑更新,失效的公告类型信息也能让管理员快速删除。下图就是公告类型管理页面。

img

图5.4 公告类型列表页面

5.2 小程序功能视频演示

请联系我获取演示视频

为什么选择我

自己的网站

网站上传的项目均为博主自己收集和开发的,质量都可以得到保障,适合自己懂一点程序开发的同学使用!

自己的小程序(小蔡coding)

为了方便同学们使用,我开发了小程序版的,名字叫小蔡coding。同学们可以通过小程序快速搜索和定位到自己想要的程序

有保障的售后

福利

每推荐一位同学,推荐费一位100!
a51e38c5bf9f17df58ffdbbe74c16c44_720

代码参考

@IgnoreAuth
@PostMapping(value = "/login")
public R login(String username, String password, String captcha, HttpServletRequest request) {
   UsersEntity user = userService.selectOne(new EntityWrapper<UsersEntity>().eq("username", username));
   if(user==null || !user.getPassword().equals(password)) {
      return R.error("账号或密码不正确");
   }
   String token = tokenService.generateToken(user.getId(),username, "users", user.getRole());
   return R.ok().put("token", token);
}

	@Override
	public String generateToken(Long userid,String username, String tableName, String role) {
		TokenEntity tokenEntity = this.selectOne(new EntityWrapper<TokenEntity>().eq("userid", userid).eq("role", role));
		String token = CommonUtil.getRandomString(32);
		Calendar cal = Calendar.getInstance();   
    	cal.setTime(new Date());   
    	cal.add(Calendar.HOUR_OF_DAY, 1);
		if(tokenEntity!=null) {
			tokenEntity.setToken(token);
			tokenEntity.setExpiratedtime(cal.getTime());
			this.updateById(tokenEntity);
		} else {
			this.insert(new TokenEntity(userid,username, tableName, role, token, cal.getTime()));
		}
		return token;
	}



/**
 * 权限(Token)验证
 */
@Component
public class AuthorizationInterceptor implements HandlerInterceptor {

    public static final String LOGIN_TOKEN_KEY = "Token";

    @Autowired
    private TokenService tokenService;
    
	@Override
    public boolean preHandle(HttpServletRequest request, HttpServletResponse response, Object handler) throws Exception {

		//支持跨域请求
        response.setHeader("Access-Control-Allow-Methods", "POST, GET, OPTIONS, DELETE");
        response.setHeader("Access-Control-Max-Age", "3600");
        response.setHeader("Access-Control-Allow-Credentials", "true");
        response.setHeader("Access-Control-Allow-Headers", "x-requested-with,request-source,Token, Origin,imgType, Content-Type, cache-control,postman-token,Cookie, Accept,authorization");
        response.setHeader("Access-Control-Allow-Origin", request.getHeader("Origin"));
	// 跨域时会首先发送一个OPTIONS请求,这里我们给OPTIONS请求直接返回正常状态
	if (request.getMethod().equals(RequestMethod.OPTIONS.name())) {
        	response.setStatus(HttpStatus.OK.value());
            return false;
        }
        
        IgnoreAuth annotation;
        if (handler instanceof HandlerMethod) {
            annotation = ((HandlerMethod) handler).getMethodAnnotation(IgnoreAuth.class);
        } else {
            return true;
        }

        //从header中获取token
        String token = request.getHeader(LOGIN_TOKEN_KEY);
        
        /**
         * 不需要验证权限的方法直接放过
         */
        if(annotation!=null) {
        	return true;
        }
        
        TokenEntity tokenEntity = null;
        if(StringUtils.isNotBlank(token)) {
        	tokenEntity = tokenService.getTokenEntity(token);
        }
        
        if(tokenEntity != null) {
        	request.getSession().setAttribute("userId", tokenEntity.getUserid());
        	request.getSession().setAttribute("role", tokenEntity.getRole());
        	request.getSession().setAttribute("tableName", tokenEntity.getTablename());
        	request.getSession().setAttribute("username", tokenEntity.getUsername());
        	return true;
        }
        
		PrintWriter writer = null;
		response.setCharacterEncoding("UTF-8");
		response.setContentType("application/json; charset=utf-8");
		try {
		    writer = response.getWriter();
		    writer.print(JSONObject.toJSONString(R.error(401, "请先登录")));
		} finally {
		    if(writer != null){
		        writer.close();
		    }
		}
//				throw new EIException("请先登录", 401);
		return false;
    }
}

论文参考

在这里插入图片描述

源码获取

文章下方名片联系我即可~
大家点赞、收藏、关注、评论啦 、查看👇🏻获取联系方式👇🏻
精彩专栏推荐订阅:在下方专栏👇🏻
Java精品实战案例《500套》
微信小程序项目精品案例《500套》

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/1027628.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

没有白走的路,这个结果你配得上。

作者 | 磊哥 来源 |公众号&#xff1a;Java中文社群 转载请联系授权&#xff08;微信ID&#xff1a;GG_Stone&#xff09; 几年前&#xff0c;我在看新三国时&#xff0c;有一段记忆深刻的话&#xff0c;司马懿获胜之后说&#xff1a;“我挥剑只有一次&#xff0c;却磨了十几年…

多线程的学习第二篇

多线程 线程是为了解决并发编程引入的机制. 线程相比于进程来说,更轻量 ~~ 更轻量的体现: 创建线程比创建进程,开销更小销毁线程比销毁进程,开销更小调度线程比调度进程,开销更小 进程是包含线程的. 同一个进程里的若干线程之间,共享着内存资源和文件描述符表 每个线程被独…

vue监听路由变化

//监听watch: {//监听路由$route (to, from) { //监听路由是否变化console.log(to.path);if(to.path "/Jindex/JuserindexAdd"){}}}, 升级 //监听watch: {//监听路由$route (to, from) { //监听路由是否变化let urlPath [/order/order,/order/listDate];console.l…

智能合约平台开发方案:构建可靠且高效的区块链应用

随着区块链技术的发展与应用&#xff0c;智能合约平台成为了构建去中心化应用的核心基础设施。本文将从技术架构、智能合约编写与测试、安全性和可扩展性等方面深入探讨智能合约平台的开发方案&#xff0c;旨在为开发者提供专业且有深度的思考&#xff0c;帮助他们构建可靠且高…

MongoDB 2023年度纽约 MongoDB 年度大会话题 -- MongoDB 数据模式与建模

开头还是介绍一下群&#xff0c;如果感兴趣PolarDB ,MongoDB ,MySQL ,PostgreSQL ,Redis, Oceanbase, 等有问题&#xff0c;有需求都可以加群群内有各大数据库行业大咖&#xff0c;CTO&#xff0c;可以解决你的问题。加群请联系 liuaustin3 &#xff0c;在新加的朋友会分到2群&…

【校招VIP】前端JS语言之CSS基础属性

考点介绍 CSS全称为Cascading Style Sheets&#xff0c;中文翻译为“层叠样式表”&#xff0c;简称CSS样式表&#xff0c;所以称之为层叠样式表&#xff08;Cascading Stylesheet&#xff09;简称CSS。在网页制作时采用CSS技术&#xff0c;可以有效地对页面的布局、字体、颜色、…

MyBatis 篇

目录 1、什么是MyBatis 2、说说MyBatis的优点和缺点 3、#{}和${}的区别是什么&#xff1f; 4、当实体类中的属性名和表中的字段名不一样 &#xff0c;怎么办 &#xff1f; 5、Mybatis是如何进行分页的&#xff1f;分页插件的原理是什么&#xff1f; 6、Mybatis是否支…

MLAgents (0) Unity 安装及运行

1、下载ML-Agents 下载地址 GitHub - Unity-Technologies/ml-agents: The Unity Machine Learning Agents Toolkit (ML-Agents) is an open-source project that enables games and simulations to serve as environments for training intelligent agents using deep reinfo…

【C++杂货铺】国庆中秋特辑——多态由浅入深详细总结

文章目录 一、多态的概念二、多态的定义及实现2.1 多态的构成条件2.2 虚函数2.3 虚函数的重写2.4 虚函数重写的两个例外2.4.1 协变&#xff08;基类与派生类虚函数返回值类型不同&#xff09;2.4.2 析构函数的重写&#xff08;基类与派生类析构函数的名字不同&#xff09; 2.5 …

【Java核心】JDK、JRE、 JVM的联系与区别

个人简介&#xff1a;Java领域新星创作者&#xff1b;阿里云技术博主、星级博主、专家博主&#xff1b;正在Java学习的路上摸爬滚打&#xff0c;记录学习的过程~ 个人主页&#xff1a;.29.的博客 学习社区&#xff1a;进去逛一逛~ JDK、JRE、 JVM的联系与区别 1. 简述2. 是什么…

Linux查看系统信息

# 查看操作系统的详细信息 uname -a# 查看已安装的Linux发行版信息 cat /etc/os-release# 查看Linux Standard Base (LSB)的信息 lsb_release -a# 查看主机的信息 hostnamectl# 查看文件系统的磁盘空间使用情况 df -h# 查看系统内存的使用情况 free -h# 查看网络接口的信息 ifc…

【LeetCode75】第六十题 使用最小花费爬楼梯

目录 题目&#xff1a; 示例&#xff1a; 分析&#xff1a; 代码&#xff1a; 题目&#xff1a; 示例&#xff1a; 分析&#xff1a; 题目给我们一个数组&#xff0c;第i个数表示在第i个台阶起步所需的花费。我们可以从下标为0或是1的台阶出发&#xff0c;问我们最终到达顶…

【校招VIP】测试脚本语言之权限命令

考点介绍&#xff1a; 在计算机科学中&#xff0c;Shell俗称壳&#xff08;用来区别于核&#xff09;&#xff0c;是指“为使用者提供操作界面”的软件&#xff08;command interpreter&#xff0c;命令解析器&#xff09;。它类似于DOS下的http://COMMAND.COM和后来的cmd.exe…

nginx配置gzip压缩,优化传输效率,加快页面访问速度

文章目录 引言一、什么是nginx的gzip二、nginx的常用配置项三、使用示例四、浏览器查看gzip是否生效1. 判断浏览器是否支持gzip2. 判断gzip是否生效 总结 引言 在现代互联网的高速发展进程中&#xff0c;网站的访问速度愈发成为了用户选择和留存的关键。其中&#xff0c;通过g…

【方案】浅析AI视频分析与视频监控技术的工厂车间智能化监管方案

一、方案背景 工厂生产车间一般是从原材料到成品的流水作业&#xff0c;有大量器械和物料。为保障车间财产安全并提高生产效率&#xff0c;需要进行全面的监管。在生产制造流水线的关键工序中&#xff0c;不仅有作业过程监管需求&#xff0c;同时&#xff0c;也存在生产发生异…

SpringBoot-JWT生成

一、理论 1.配置pom.xml <!-- JWT令牌--><dependency><groupId>io.jsonwebtoken</groupId><artifactId>jjwt</artifactId><version>0.9.1</version></dependency> 2.加密方式 说明:官网JSON Web Tokens - jwt…

vim的使用介绍以及命令大全(系统性学习day3)

懒羊羊感谢大家的关注和三连支持~ 目录 前言 一、vim的使用介绍 二、命令大全 1.命令模式 &#xff08;1&#xff09;复制&#xff08;配合粘贴命令p使用&#xff09; &#xff08;2&#xff09;剪切 &#xff08;3&#xff09;粘贴 &#xff08;4&#xff09;删除 …

IDM激活

激活脚本原地址 github搜索&#xff1a;IDM-Activation-Script 或者直接点我进入 如何激活&#xff1f; 下载IDM 官网链接&#xff1a;Internet Download Manager: The fastest download accelerator 然后安装 安装成功后进入powershell win x 执行命令 iwr -useb https:/…

企业蓄电池怎么实时监测?这个方法最简单使用!

在这个数字时代&#xff0c;企业对电力的依赖性愈发显著&#xff0c;这使得电池系统成为维持业务连续性的不可或缺的一环。 蓄电池监控不仅有助于实时跟踪电池系统的性能和状态&#xff0c;还有助于预测问题&#xff0c;提前采取措施以防止电力中断。它还可以帮助企业降低能源成…

2023年9月21日,历史上的今天大事件早读

​公元前19年9月21日古罗马诗人维吉尔逝世 1069年9月21日宋神宗采用王安石新法&#xff0c;开始实行青苗法 1643年9月21日皇太极逝世 1898年9月21日慈禧太后发动戊戌政变 1909年9月21日我国飞机设计师冯如第一次试飞成功 1920年9月21日民主革命家朱执信遇难 1926年9月21日…