基于JAVA+SpringBoot+Vue+ElementUI中学化学实验室耗材管理系统

news2024/11/25 10:13:37

✌全网粉丝20W+,csdn特邀作者、博客专家、CSDN新星计划导师、java领域优质创作者,博客之星、掘金/华为云/阿里云/InfoQ等平台优质作者、专注于Java技术领域和毕业项目实战✌

🍅文末获取项目下载方式🍅


一、项目背景介绍:

当前,中学的化学实验教学越来越重视,为了让学生对化学有更深刻的了解,必须要进行大量的化学实验。然而,由于耗材数量众多,很难有效地管理。因此,研发一个中学化学实验室耗材管理系统显得十分必要。 这个系统可以帮助学校有效地管理实验室耗材的数量,从而提高实验的效率和质量。它可以实现对耗材的自动化管理,包括耗材的入库、出库、分配和回收。同时,它还可以管理预约和使用历史记录,方便管理人员对耗材的使用情况进行监控和评估。 这个系统的开发将使中学的化学实验教学更加高效、科学,更好地满足学生的需求。

二、项目技术简介:

  1. JAVA:Java是一门面向对象编程语言,不仅吸收了C++语言的各种优点,还摒弃了C++里难以理解的多继承、指针等概念,因此Java语言具有功能强大和简单易用两个特征。Java语言作为静态面向对象编程语言的代表,极好地实现了面向对象理论,允许程序员以优雅的思维方式进行复杂的编程。

  2. Vue:Vue (发音为 /vjuː/,类似 view) 是一款用于构建用户界面的JavaScript框架。它基于标准HTML、CSS和JavaScript构建,并提供了一套声明式的、组件化的编程模型,帮助开发者高效地开发用户界面。 Vue是一个独立的社区驱动的项目,它是由尤雨溪在2014年作为其个人项目创建, 是一个成熟的、经历了无数实战考验的框架,它是目前生产环境中使用最广泛的JavaScript框架之一,可以轻松处理大多数web应用的场景,并且几乎不需要手动优化,并且Vue完全有能力处理大规模的应用。

  3. Element-UI:Element,一套为开发者、设计师和产品经理准备的基于 Vue 2.0 的桌面端组件库。

  4. SpringBoot:Spring Boot是由Pivotal团队提供的全新框架,其设计目的是用来简化新Spring应用的初始搭建以及开发过程。该框架使用了特定的方式来进行配置,从而使开发人员不再需要定义样板化的配置。通过这种方式,Spring Boot致力于在蓬勃发展的快速应用开发领域(rapid application development)成为领导者。

  5. Mybatis-Plus:MyBatis-Plus(简称 MP)是一个 MyBatis的增强工具,在 MyBatis 的基础上只做增强不做改变,为 简化开发、提高效率而生。

三、系统功能模块介绍:

四、数据库设计:

  1. '非常规耗材申请表'(apply)

字段名类型默认值列注释
idbigintNULL主键ID
user_idbigintNULL用户ID
consumables_idbigintNULL非常规耗材ID
create_datedatetimeNULL创建时间
updata_datedatetimeNULL更新时间
apply_datedatetimeNULL申请时间
statusbigintNULL申请状态(select)(search)[0:申请中,1:通过,2:驳回,3:完成]
  1. '常规器材预约表'(appointment)

字段名类型默认值列注释
idbigintNULL主键ID
user_idbigintNULL用户ID
equipment_idbigintNULL常规器材ID
appointment_datedatetimeNULL预约时间
create_datedatetimeNULL创建时间
updata_datedatetimeNULL更新时间
statustinyintNULL器材状态(select)(search)[0:预约中,1:完成]
  1. '非常规耗材信息表'(consumables)

字段名类型默认值列注释
idbigintNULL主键ID
type_idbigintNULL非常规耗材类型(select)(search)
namevarcharNULL非常规耗材名称(search)
pricebigintNULL价格(search)
remarkvarcharNULL备注(search)
create_datedatetimeNULL入库时间
updata_datedatetimeNULL更新时间
delete_datedatetimeNULL出库时间
statustinyintNULL非常规耗材状态(select)(search)[0:冻结,1:正常]
imgvarcharNULL头像(img)
  1. '非常规耗材类型表'(consumables_type)

字段名类型默认值列注释
idbigintNULL主键ID
namevarcharNULL非常规耗材类型名称(search)
create_datedatetimeNULL创建时间
updata_datedatetimeNULL更新时间
  1. '常规器材信息表'(equipment)

字段名类型默认值列注释
idbigintNULL主键ID
type_idbigintNULL常规器材类型(select)(search)
namevarcharNULL常规器材名称(search)
pricebigintNULL价格(search)
remarkvarcharNULL备注(search)
create_datedatetimeNULL入库时间
updata_datedatetimeNULL更新时间
delete_datedatetimeNULL出库时间
statustinyintNULL状态(select)(search)[0:冻结,1:正常]
imgvarcharNULL头像(img)
  1. '常规器材类型表'(equipment_type)

字段名类型默认值列注释
idbigintNULL主键ID
namevarcharNULL常规器材类型名称(search)
create_datedatetimeNULL创建时间
updata_datedatetimeNULL更新时间
  1. '用户信息表'(user)

字段名类型默认值列注释
idbigintNULL主键ID
user_namevarcharNULL用户名(search)
pass_wordvarcharNULL密码
real_namevarcharNULL真实姓名(search)
roletinyintNULL角色(select)(search)[0:后台管理员,1:前端用户]
statustinyintNULL状态(select)(search)[0:冻结,1:正常]
imgvarcharNULL头像(img)
create_datedatetimeNULL创建时间
updata_datedatetimeNULL更新时间

五、功能模块:

  1. 非常规耗材申请:非常规耗材申请界面可以根据非常规耗材的名称对处于申请中的非常规耗材信息进行搜索,并且可以添加新的非常规耗材使用申请、修改处于申请中的非常规耗材申请、删除申请中的申请信息 此处无法查询、修改、删除已经被管理员处理过的数据,因已经处理过的数据再进行修改删除的话则不符合实际的业务场景

  2. 常规器材预约:常规器材预约界面可以根据常规器材的名称对处于预约中的常规器材信息进行搜索,并且可以添加新的常规器材使用预约、修改处于预约中的常规器材预约、删除预约中的预约请信息 此处无法查询、修改、删除已经被管理员处理过的数据,因已经处理过的数据再进行修改删除的话则不符合实际的业务场景

  3. 非常规耗材申请记录:非常规耗材申请记录界面可以查看历史非常规耗材的申请记录,此处的非常规耗材的申请记录是指已经被管理员处理过的数据,在界面上可以根据非常规耗材的耗材名称进行搜索

  4. 用户与管理员登录:管理员和用户可以分别在对于的界面中进行登录

六、代码示例:

非常规耗材申请

@GetMapping("/all/consumablesType")
    public ReturnMsg allConsumablesType() {
        List<BaseSelectEntity> list = new ArrayList<>();
        List<ConsumablesTypeDTO> dtos = consumablesTypeService.list();
            for (ConsumablesTypeDTO dto : dtos) {
            BaseSelectEntity baseSelectEntity = new BaseSelectEntity();
            baseSelectEntity.setKey(dto.getId());
            baseSelectEntity.setValue(dto.getName());
            list.add(baseSelectEntity);
        }
        return ReturnMsg.ok(list);
    }
​
    @Override
    protected void beforeUpdate(ConsumablesDTO entity) throws Exception {
        if(entity.getStatus() != null && entity.getStatus() == 0){
            entity.setDeleteDate(new Date());
        }
        entity.setUpdataDate(new Date());
        super.beforeUpdate(entity);
    }

常规器材预约

 /**
    * 默认分页查询
    * @param equipmentDTO
    * @return
    */
    @PostMapping("/page")
    public ReturnMsg page(@RequestBody EquipmentDTO equipmentDTO) {
        return ReturnMsg.ok(baseService.basePage(equipmentDTO));
    }
    @GetMapping("/all/equipmentType")
    public ReturnMsg allEquipmentType() {
        List<BaseSelectEntity> list = new ArrayList<>();
        List<EquipmentTypeDTO> dtos = equipmentTypeService.list();
            for (EquipmentTypeDTO dto : dtos) {
            BaseSelectEntity baseSelectEntity = new BaseSelectEntity();
            baseSelectEntity.setKey(dto.getId());
            baseSelectEntity.setValue(dto.getName());
            list.add(baseSelectEntity);
        }
        return ReturnMsg.ok(list);
    }

非常规耗材申请记录

@Override
    protected void beforeSave(ConsumablesDTO entity) throws Exception {
        if(entity.getStatus() != null && entity.getStatus() == 0){
            entity.setDeleteDate(new Date());
        }
        entity.setCreateDate(new Date());
        entity.setUpdataDate(new Date());
        super.beforeSave(entity);
    }

用户与管理员登录

@PostMapping("/admin")
    public ReturnMsg manageLoginAdmin(@RequestBody Map<String, String> param) {
        if (StrUtil.isEmpty(param.get("username")) || StrUtil.isEmpty(param.get("password"))) {
            return ReturnMsg.error("用户名或密码错误!");
        }
        UserDTO userDTO = new UserDTO();
        userDTO.setUserName(param.get("username"));
        userDTO.setPassWord(param.get("password"));
        userDTO.setRole(0);
        userDTO.setStatus(1);
        QueryWrapper<UserDTO> userDTOQueryWrapper = new QueryWrapper<>(userDTO);
        userDTOQueryWrapper.last("limit 1");
        UserDTO adminDTOS = userService.getOne(userDTOQueryWrapper);
        if (adminDTOS == null) return ReturnMsg.error("用户名或密码错误!");
        Map<String, Object> map = new HashMap<>();
        map.put("avatar", StrUtil.isNotBlank(adminDTOS.getImg()) ? adminDTOS.getImg() : "https://wpimg.wallstcn.com/f778738c-e4f8-4870-b634-56703b4acafe.gif");
        map.put("introduction", adminDTOS.getRealName() + ",你好!");
        map.put("name", adminDTOS.getRealName());
        map.put("roles", Arrays.asList("admin"));
        map.put("userinfo", adminDTOS);
        Map<String, String> returnMap = new HashMap<>();
        String uuid = UUID.randomUUID().toString();
        returnMap.put("token", uuid);
        userInfoMap.put(uuid, JSON.toJSONString(map));
        return ReturnMsg.ok(returnMap);
    }

七、项目总结:

当前,中学化学实验室耗材管理系统是一个有前途和潜力的项目,旨在解决中学化学实验室耗材管理问题。 该系统分为管理员模块和用户模块,管理员模块负责系统用户管理、管理员用户登录、用户账号分配、用户预约管理、常规器材管理、非常规耗材管理、常规器材分类管理、非常规耗材分类分类管理、采购信息管理(入库出库)、废料回收管理等功能;用户模块提供用户登录、常规器材预约、非常规耗材申请、历史记录查询等功能。 本项目通过使用高效的数据存储结构和算法,以及稳健的架构设计,来保证系统的可靠性和灵活性。通过详细的测试,我们可以确保系统能够满足用户的需求,并且满足软件质量标准。

八、源码获取:

大家点赞、收藏、关注、评论啦 、查看👇🏻👇🏻👇🏻获取联系方式👇🏻👇🏻👇🏻

链接点击直达:下载链接

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

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

相关文章

【js文字大小自适应】原生js实现文字大小自适应(附完整源码)

目录1、先睹为快2、代码实现第一步、搭建页面第二步、设置样式第三步、JS实现字体自适应3、源码直通车&#xff08;百度云下载&#xff09;【写在前面】之前写过一个大屏的项目&#xff0c;其中里面最头疼的应该是图片&#xff0c;文字&#xff0c;图表&#xff08;echarts&…

分布式事务解决方案——TCC

TCC是Try、Confirm、Cancel三个词语的缩写&#xff0c;TCC要求每个分支事务实现三个操作&#xff1a;预处理Try、确认Confirm、撤销Cancel。1、Try 阶段是做业务检查(一致性)及资源预留(隔离)&#xff0c;此阶段仅是一个初步操作&#xff0c;它和后续的Confirm一起才能真正构成…

Win11系统如何安装Ubuntu20.04(WSL版本)并安装docker

终于还是下定决心去换电脑了……这次采用轻量级的WSL&#xff0c;发现虽然没有占内存的GUI界面&#xff0c;但是编码和阅读文档还是非常nice的 1、首先开启Win11的虚拟机服务 2、下载你期望的Ubuntu服务器&#xff08;这里以20.04为例&#xff09; 安装成功后&#xff0c;发现…

发布的软文如何提高阅读量?

软文文章是一种带有宣传性质的文章&#xff0c;旨在宣传某个产品、品牌或者公司。然而&#xff0c;要想有效地宣传&#xff0c;就必须要让读者真正的阅读并了解软文中的内容。因此&#xff0c;提高软文文章阅读量是非常重要的。下面是一些有助于提高软文文章阅读量的方法&#…

简单记录简单记录

目录1.注册Gmail2.注册ChatGPT3.验证“真人”使用4.开始使用1.注册Gmail 第一步先注册一个谷歌邮箱&#xff0c;你也可以使用微软账号&#xff0c;大部分人选择使用gmail。 申请谷歌邮箱 选择个人用途创建账号即可。 &#x1f4cc;温馨提示&#xff1a; 你直接使用guo内的网…

react路由详解

在学习react路由之前&#xff0c;我们肯定需要安装路由。大家先运行如下命令安装路由。安装之后随我一起探索react路由。 安装 版本v6 npm i react-router-dom -S 页面准备 创建两个文件夹 pages和 router pages文件夹里面放的是页面 router文件夹里面是进行路由配置 路由…

【MySQL】聚合函数和GROUP BY

文章目录1、聚合函数2、GROUP BY3、HAVING4、SELECT的执行过程1、聚合函数 聚合函数作用于一组数据&#xff0c;并对一组数据返回一个值。聚合函数类型&#xff1a;AVG()、SUM()、MAX()、MIN()、COUNT()。不能在 WHERE 子句中使用聚合函数。 SELECT AVG(salary), MAX(salary)…

从0到1一步一步玩转openEuler--14 openEuler DNF(YUM)配置管理

文章目录14.1 DNF配置文件14.1.1 配置main部分14.1.2 配置repository部分14.1.3 显示当前配置14.2 创建本地软件源仓库14.3 添加、启用和禁用软件源14.3.1 添加软件源14.3.2 禁用软件源14.3.3 启用软件源DNF是一款Linux软件包管理工具&#xff0c;用于管理RPM软件包。DNF可以查…

论文笔记: Monocular Depth Estimation: a Review of the 2022 State of the Art

中文标题&#xff1a;单目深度估计&#xff1a;回顾2022年最先进技术 本文对比了物种最近的基于深度学习的单目深度估计方法&#xff1a; GPLDepth(2022)[15]: Global-Local Path Networks for Monocular Depth Estimation with Vertical CutDepthAdabins(2021)[1]: Adabins:…

操作系统:文件系统的实现

一、文件系统结构 磁盘的逻辑单元为块&#xff0c;内存和磁盘之间的I/O传输以块为单位执行。 磁盘的特点 1可以原地重写&#xff0c;可以从磁盘上读一块儿&#xff0c;修改该块&#xff0c;并将它写回到原来的位置可以直接访问磁盘上的任意一块。因此&#xff0c;可以方便地…

浅析SCSI协议(2)命令模型

SCSI命令模型 SCSI协议对链路传输没有进行严格的限制&#xff0c;但约束了SCSI的命令模型。协议允许使用SAS、FC以及以太网等不同的链路实现&#xff0c;但对所有的SCSI传输层实现而言&#xff0c;都必须遵循统一的SCSI命令模型。SCSI命令模型约束了SCSI命令执行过程、命令请求…

《底层逻辑:看清这个世界的底牌》读后感

书名《底层逻辑&#xff1a;看清这个世界的底牌》作者刘润简介如果只教给你各行各业的“干货”&#xff08;方法论&#xff09;&#xff0c;那只是“授人以鱼”&#xff0c;一旦环境出现任何变化&#xff0c;“干货”就不再适用。但如果教给你的是底层逻辑&#xff0c;那就是“…

初入测试如何编写测试用例?从3个方面带你写一个合格的测试用例

前言 作为一个测试新人&#xff0c;刚开始接触测试&#xff0c;对于怎么写测试用例很头疼&#xff0c;无法接触需求&#xff0c;只能根据站在用户的角度去做测试&#xff0c;但是这样情况会导致不能全方位的测试APP&#xff0c;这种情况就需要一份测试用例了&#xff0c;但是不…

亿级高并发电商项目-- 实战篇 --万达商城项目 七(品牌模块、商品类型模块等开发)

专栏&#xff1a;高并发---分布式 在管理商品时&#xff0c;除了商品名、价格、商品介绍等基本参数外。还需 要给商品添加品牌、商品类型、商品规格等参数。比如Iphone13的 品牌是苹果。商品类型属于手机通讯>手机>手机。规格有机身颜色: 星光色、版本:128G。品牌、商品…

暗网与深网:5 个主要区别

在互联网上&#xff0c;深网不会被网络爬虫索引&#xff0c;而暗网是故意隐藏的。 文章目录前言一、暗网与深网二、什么是暗网&#xff1f;什么是深网&#xff1f;暗网和深网之间的 5 个主要区别1. 范围和操作暗网深网2. 尺寸暗网&#xff1a;深网&#xff1a;3. 访问暗网深网4…

数据的分组聚合

1&#xff1a;分组 t.groupby #coding:utf-8 import pandas as pd import numpy as np file_path./starbucks_store_worldwide.csv dfpd.read_csv(file_path) #print(df.head(1)) #print(df.info()) groupeddf.groupby(byCountry) print(grouped) #DataFrameGroupBy #可以遍历…

1.2配置OSPF包文分析和验证

1.2.2实验2:配置OSPF包文分析和验证 [1] 实验目的通过抓包分析OSPF的包文实现OSPF区域认证的配置实验拓扑实验拓扑图如图1-3所示。 图1-3 配置OSPF包文分析和验证 实验步骤 IP地址的配置、运行OSPF的步骤与实验1相同,此处略。[2] 在R1的g0/0/0抓包

Redis 集群搭建及集群管理工具

目录一、简介二、架构图三、搭建集群3.1、下载3.2、编译安装3.3、配置文件修改3.4、创建集群四、集群管理工具redis-cli4.1、查看集群信息4.2、检查集群4.3、修复槽错误4.4、重分片4.5、负载均衡4.6、添加节点4.7、删除节点4.8、设置超时4.9、导入数据4.10、重建集群一、简介 本…

【JavaWeb】网络编程概念 + Socket套接字 + UDP/TCP编程

目录 网络编程基础概念 发送端与接受端 请求与响应 客户端与服务器 常见的客户端服务器模型 Socket套接字 回显(echo)程序 UDP版的回显程序 服务器代码 客户端代码 结果 TCP版的回显程序 服务器代码 客户端代码 结果 网络编程基础概念 网络编程&#xff0c;指网…

2.5|物联网应用系统设计|复习提纲|提问背诵

基础概念总结掌握Linux常用的基本命令功能、语法结构&#xff0c;用法等。具体命令参考实验指导书、相关PPT等资料内容。什么是操作系统&#xff08;OS&#xff09;&#xff1f;操作系统是用以控制和管理计算机系统资源&#xff0c;方便用户使用的程序和数据结构的集合。在所有…