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

2023-09-21 10:08:08

前言

💗博主介绍:✌全网粉丝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套》

更多推荐

cookie信息无法获取问题研究

背景在oneapi这个前后端都有的开源项目中,我想接入chatnextweb到oneapi的后端。由于需要二开chatnextweb,添加登录注册功能,考虑到java后端的性能问题和内存占用,决定不重启写个服务,而是将登录注册接入到oneapi的登录注册api,没错,和oneapi的前端公用一套登录注册熬了个大夜后,终

GLTF编辑器:在线模型材质编辑工具

GLTF编辑器是一个功能强大、易于使用的在线3D模型编辑和查看工具,它支持多种格式的3D模型导入并将模型导出为GLB格式,除了可以对3D模型进行基本属性的修改之外,还支持对模型原点重置以及模型材质纹理修改。对于3D开发者和设计师来说,GLTF编辑器是一个非常有用的工具,可以帮助他们更方便地处理3D模型数据。1、首先介绍

VR全景技术在教育中的应用:VR教学的“因材施教”

随着科技的不断进步和发展,VR全景技术在教育领域的应用,给传统教育模式带来了新的变革和机遇,同时也促进了教育的创新和进步。VR教学模式可以打破传统教育的限制,通过模拟各种场景,让学生身临其境地学习多样化知识,感受不同国家的风土人情、拓展自身视野,这种具备沉浸感的学习体验可以很好的激发学生的学习兴趣和动力。VR教学可以构

vr飞机驾驶舱模拟流程3D仿真演示加大航飞安全法码

众所周知,航空航天飞行是一项耗资大、变量参数很多、非常复杂的系统工程,因此可利用虚拟仿真技术经济、安全及可重复性等特点,进行飞行任务或操作的模拟,以代替某些费时、费力、费钱的真实试验或者真实试验无法开展的场合,从而获得提高航空航天员工作效率或航空航天器系统可靠性等的设计对策。飞机飞行操作要求严、风险大且成本高,因此在真

windows RocketMQ与可视化监控平台安装

windowsRocketMQ与可视化监控平台安装安装日期2023.09.21最新版RocketMQ是一个纯Java、分布式、队列模型的开源消息中间件,搭建RocketMQ需要先配置JAVA环境变量,需要有JAVA_HOME。下载安装包进入官网选择需要的版本下载安装包(以下以5.1.3为例)。官网下载地址:官网下载编译

中秋节听夜曲,Android OpenGL 呈现周董专属的玉兔主题音乐播放器

概述前几天发现QQ音乐有个好玩的功能,为用户提供了多种播放器主题,其中原神的主题让我眼前一亮:当然,诸如换肤、主题类的功能已经屡见不鲜,但这类沉浸式播放器的听歌体验确实不错。见猎心喜,正好中秋马上就到,我也尝试整个中秋主题音乐播放器试试水。整体思路有2点:首先是技术方面,纯粹的ImageView图层堆砌来实现,渲染效率

05预测识别-依托YOLO V8进行训练模型的识别——对视频中的图片进行识别

在前面的一些章节中,我们已经讲如何准备打标签的素材、如何制作标签、如何训练以及得到我们最终需要的用于YOLO目标识别的模型。那么现在我们就要正式开始,利用我们训练得到的best.pt,这个模型文件来对图片视频进行识别。1、基本思路公安交管场景中,我们经常会遇到需要对摄像头拍到的视频中的目标进行识别,比如识别识别非机动车

【C++】C++ 引用详解 ③ ( 函数返回值不能是 “ 局部变量 “ 的引用或指针 | 函数内的 “ 局部变量 “ 的引用或指针做函数返回值无意义 )

文章目录一、函数返回值不能是"局部变量"的引用或指针1、引用通常做右值2、函数返回值特点3、函数内的"局部变量"的引用或指针做函数返回值无意义二、代码示例-"局部变量"引用或指针做函数返回值测试一、函数返回值不能是"局部变量"的引用或指针1、引用通常做右值之前使用引用时,都是作为右值使用,引用只在声明的同时进行初始化时

ChatGPT可以取代搜索引擎吗?

目录ChatGPT可以取代搜索引擎吗?1、功能和应用场景2、处理的信息量3、实时性4、准确性5、使用习惯和依赖性未来发展趋势1、搜索引擎与ChatGPT的融合2、个性化搜索与自然语言处理3、搜索引擎作为对话平台4、增强现实与搜索引擎ChatGPT是一种大规模的预训练模型,旨在生成自然语言文本,以便在各种自然语言处理任务

【2023,学点儿新Java-51】变量与运算符 (阶段性复习3):常用运算符回顾之比较运算符、逻辑运算符、条件运算符、了解位运算符

前情提要:【2023,学点儿新Java-50】阶段性章节复习:String类的使用以及与基本数据类型变量间的运算|认识进制|常用运算符回顾之算术运算符、赋值运算符【2023,学点儿新Java-49】变量与运算符(阶段性复习2):基本数据类型变量的使用,基本数据类型变量间的运算规则【2023,学点儿新Java-48】变量

前端html原生页面兼容多端H5和移动端适配方案

目录图片代码最后图片是一个注册页面代码自己查看效果注意:单位全部用rem这样才能保证兼容性适配多端,px转rem转换公式1px=1/37.5rem所以想要20px应该对应20/37.5=0.53rem<!DOCTYPEhtml><htmllang="en"><head><metacharset="UTF-8"><met

热文推荐