基于springboot+vue的教材管理系统(前后端分离)

博主主页:猫头鹰源码

博主简介:Java领域优质创作者、CSDN博客专家、公司架构师、全网粉丝5万+、专注Java技术领域和毕业设计项目实战

主要内容:毕业设计(Javaweb项目|小程序等)、简历模板、学习资料、面试题库、技术咨询

文末联系获取

项目介绍: 

本系统为原创项目,采用前后端分离,项目代码工整,结构清晰,适合选题:教材、教材管理、前后端分离类其他教材等。系统采用springboot+vue整合开发,前端主要使用了element-ui框架、项目后端主要使用了springboot,数据层采用mybatis。

部分功能:

用户管理、教材信息管理、教材需求管理、教材采购管理、教材库存管理、教材领取管理、教材报损管理、通知管理

系统包含技术:

后端:springboot,mybatis
前端:element-ui、js、css等
开发工具:idea/vscode
数据库:mysql 5.7
JDK版本:jdk1.8

部分截图说明:

下面是登录

首页统计信息

用户管理

教材信息管理

采购教材

库存管理

领取教材

部分代码:

@PostMapping("selectAll")
    public PageInfo<Damage> selectAll(@RequestBody Map<String,String> mp) {
        PageHelper.startPage(Integer.parseInt(mp.get("currentPage").toString()), Integer.parseInt(mp.get("pagesize").toString()));
        List<Damage> list = damageService.queryAllByLimit(mp);
        PageInfo<Damage> pageInfo = new PageInfo<Damage>(list);
        return pageInfo;
    }

    /**
     * 查询所有
     */
    @PostMapping("queryAll")
    public List<Damage> queryAll(@RequestBody Damage damage) {
        List<Damage> list = damageService.queryCondition(damage);
        return list;
    }

    /**
     * 修改
     */
    @RequestMapping("edit")
    public Result edit(@RequestBody Damage damage) {
        try {
            Damage damage1 = damageService.queryById(damage.getId());
            Inventory inventory = new Inventory();
            inventory.setTid(damage.getTid());
            List<Inventory> inventories = inventoryService.queryCondition(inventory);
            Inventory inventory2 = new Inventory();
            if(inventories.size()>0){
                Inventory inventory1 = inventories.get(0);
                if(damage.getNum()>inventory1.getNum()+damage1.getNum()){
                    return Result.error("库存不足,请重试");
                }
                inventory2.setId(inventory1.getId());
                inventory2.setNum(inventory1.getNum()+damage1.getNum()-damage.getNum());
            }else{
                return Result.error("库存无该教材,请重试");
            }
            inventoryService.update(inventory2);
            damageService.update(damage);
            return Result.success("修改成功");
        }catch (Exception e){
            e.printStackTrace();
            return Result.error("修改失败");
        }
    }

    //审批
    @RequestMapping("updateStatus")
    public Result updateStatus(@RequestBody Damage damage) {
        damageService.update(damage);
        if(damage.getStatus().equals("03")){
            Inventory inventory = new Inventory();
            inventory.setTid(damage.getTid());
            List<Inventory> inventories = inventoryService.queryCondition(inventory);
            if(inventories.size()>0){
                inventory.setId(inventories.get(0).getId());
                inventory.setNum(inventories.get(0).getNum()+damage.getNum());
                inventoryService.update(inventory);
            }
        }
        return Result.success("操作成功");
    }

    /**
     * 新增
     */
    @RequestMapping("add")
    public Result add(@RequestBody Damage damage) {
        try {
            Inventory inventory = new Inventory();
            inventory.setTid(damage.getTid());
            List<Inventory> inventories = inventoryService.queryCondition(inventory);
            Inventory inventory2 = new Inventory();
            if(inventories.size()>0){
                Inventory inventory1 = inventories.get(0);
                if(damage.getNum()>inventory1.getNum()){
                    return Result.error("库存不足,请重试");
                }
                inventory2.setId(inventory1.getId());
                inventory2.setNum(inventory1.getNum()-damage.getNum());
            }else{
                return Result.error("库存无该教材,请重试");
            }
            Date date = new Date();
            damage.setCreateTime(date);
            damageService.insert(damage);
            inventoryService.update(inventory2);
            return Result.success("报损成功");
        }catch (Exception e){
            e.printStackTrace();
            return Result.error("报损失败");
        }
    }

    /**
     * 通过主键查询单条数据
     */
    @GetMapping("selectOne")
    public Damage selectOne(Integer id) {
        return damageService.queryById(id);
    }

以上就是部分功能展示,从整体上来看,本系统功能是十分完整的,界面设计简洁大方,交互友好,数据库设计也很合理,规模适中,代码工整,清晰,适合学习使用。

好了,今天就到这儿吧,小伙伴们点赞、收藏、评论,一键三连走起呀,下期见~

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

windows操作系统蓝屏错误日志分析日志通用方法全网唯一程序员必学技能

windows11操作系统蓝屏错误分析日志通用方法全网唯一程序员必学技能 一、背景介绍 本人是一个老程序员&#xff0c;DBA&#xff0c;架构师&#xff0c;开发工作10年了&#xff0c;我们平常用的开发电脑以及游戏电脑时不时会遇到操作系统突然蓝屏&#xff0c;一般情况下都是一…

C++力扣题目232--用栈实现队列

请你仅使用两个栈实现先入先出队列。队列应当支持一般队列支持的所有操作&#xff08;push、pop、peek、empty&#xff09;&#xff1a; 实现 MyQueue 类&#xff1a; void push(int x) 将元素 x 推到队列的末尾int pop() 从队列的开头移除并返回元素int peek() 返回队列开头…

ThingsBoard 3.4 -- 规则链使用

规则链的使用 创建规则链 调试模式用于调试日志的输出&#xff0c;测试阶段建议选择 配置规则 点击规则链&#xff0c;进入详情页面 打开规则链进行规则配置 规则链节点类型分为6类&#xff0c;每一类下面又包含多个小类 过滤器/筛选器&#xff1a;过滤器节点用于消息过滤…

springboot对接WebSocket实现消息推送

1.修改pom文件 <dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-websocket</artifactId></dependency> 2.增加配置WebSocketConfig.java import org.springframework.context.annotation.Bean…

网络隔离后,怎样建立高效安全的数据安全交换通道?

数据安全对企业生存发展有着举足轻重的影响&#xff0c;数据资产的外泄、破坏都会导致企业无可挽回的经济损失和核心竞争力缺失。数据流动才能让其释放价值&#xff0c;想要保护企业核心资产&#xff0c;就要实现数据安全交换。 很多企业为了防止知识产权、商业机密数据泄露&am…

2023安洵杯-秦岭防御军wp

reverse 感觉有点点简单## import base64 def ba64_decode(str1_1):mapp "4KBbSzwWClkZ2gsr1qAQu0FtxOm6/iVcJHPY9GNp7EaRoDf8UvIjnL5MydTX3eh"data_1 [0] * 4flag_1 [0] * 3for i in range(32, 127):for y in range(32, 127):for k in range(32, 127):flag_1[0]…

【目标跟踪】解决多目标跟踪遮挡问题

文章目录 前言一、判定遮挡目标二、扩展目标框三、结论 前言 目标跟踪在发生遮挡时&#xff0c;极其容易发生Id Switch。网上许多算法忽视跟踪遮挡问题,同时网上相关资料也很少。博主为了解决跟踪遮挡&#xff0c;翻阅大量论文。分享其中一篇论文。论文链接&#xff1a;https:…

dl转置卷积

转置卷积 转置卷积&#xff0c;顾名思义&#xff0c;通过名字我们应该就能看出来&#xff0c;其作用和卷积相反&#xff0c;它可以使得图像的像素增多 上图的意思是&#xff0c;输入是22的图像&#xff0c;卷积核为22的矩阵&#xff0c;然后变换成3*3的矩阵 代码如下 import…

Python 运维(四):使用 PyInstaller 将 Python 程序打包成可执行文件

大家好&#xff0c;我是水滴~~ PyInstaller是一款强大的Python打包工具&#xff0c;通过将Python程序转换成可执行文件&#xff0c;它简化了程序的分享和分发过程。本文从简介、安装、使用以及典型案例四个方面对PyInstaller进行了介绍。 文章内容包含大量的示例代码&#xf…

Vue学习之第一、二章——Vue核心与组件化编程

第一章. Vue核心 1.1 Vue简介 1.1.1 官网 英文官网: https://vuejs.org/中文官网: https://cn.vuejs.org/ 1.1.2 Vue特点 遵循 MVVM 模式编码简洁, 体积小, 运行效率高, 适合移动/PC 端开发它本身只关注 UI, 也可以引入其它第三方库开发项目 1.2 初始Vue 这里可以参考&a…

uni-app 命令行创建

1. 首先创建项目&#xff0c;命令如下: npx degit dcloudio/uni-preset-vue#vite-ts uni-app-demo如果出现报错&#xff0c;如下图. 大概率就是没有目录C:\Users\Administrator\AppData\Roaming\npm 解决办法&#xff1a; 创建目录 C:\Users\Administrator\AppData\Roaming\n…

关于Zoom ZTP和AudioCodes Ltd桌面电话缺陷暴露,导致用户遭受窃听的动态情报

一、基本内容 近期SySS安全研究员发布分析报告显示&#xff0c;Zoom的零接触&#xff08;ZTP&#xff09;和AudioCodes Ltd桌面电话配置功能中发现高危漏洞&#xff0c;可以获得对设备的完全远程控制并不受限制的访问可以被武器化&#xff0c;以窃听房间或电话、通过设备并攻击…

LazyForEach常见使用问题

目录 1、渲染结果非预期 2、重新渲染时图片闪烁 3、ObjectLink属性变化UI未更新 上篇文章中我们介绍了LazyForEach的基本使用&#xff0c;展示了如何使用LazyForEach构造一个列表&#xff0c;并演示数据的添加、删除、修改如何与LazyForEach配合并正确的更新UI。本篇将介绍使…

【kafka消息里会有乱序消费的情况吗?如果有,是怎么解决的?】

文章目录 什么是消息乱序消费了&#xff1f;顺序生产&#xff0c;顺序存储&#xff0c;顺序消费如何解决乱序数据库乐观锁是怎么解决这个乱序问题吗 保证消息顺序消费两种方案固定分区方案乐观锁实现方案 前几天刷着视频看见评论区有大佬问了这个问题&#xff1a;你们的kafka消…

策略模式(组件协作)

策略模式&#xff08;组件协作&#xff09; 链接&#xff1a;策略模式实例代码 注解 目的 正常情况下&#xff0c;一个类/对象中会包含其所有可能会使用的内外方法&#xff0c;但是一般情况下&#xff0c;这些常使用的类都是由不同的父类继承、组合得来的&#xff0c;来实现…

《软件需求分析报告》

第1章 序言 第2章 引言 2.1 项目概述 2.2 编写目的 2.3 文档约定 2.4 预期读者及阅读建议 第3章 技术要求 3.1 软件开发要求 第4章 项目建设内容 第5章 系统安全需求 5.1 物理设计安全 5.2 系统安全设计 5.3 网络安全设计 5.4 应用安全设计 5.5 对用户安全管理 …

创建servlet的三种方式

目录 ​编辑 1.实现Servlet接口的方式 2.继承GenericServlet抽象类的方式 3.继承HttpServlet的方式 1.实现Servlet接口的方式 因为是实现 Servlet 接口&#xff0c;所以我们需要实现接口里的方法。 import javax.servlet.*; import javax.servlet.annotation.WebServlet;…

DS八大排序之归并排序和计数排序

前言 前几期我们详细介绍了插入排序&#xff08;直接插入排序和希尔排序&#xff09;、选择排序&#xff08;直接选择和堆排序&#xff09;、交换排序&#xff08;冒泡排序和快速排序&#xff09;。并对快排的各个版本做了详细的介绍&#xff0c;本期我们来介绍把最后两个即外…

k8s面试之——简述网络模型

kubernetes网络模型是kubernetes集群中管理容器网络通信的一种机制&#xff0c;用于实现pod间、pod与外部网络间的通信和互联&#xff0c;并提供了多种网络插件和配置选项来满足不同应用场景下的需求。kubernetes网络模型可以分为一下几个部分&#xff1a; 1. pod网络模型 在…

经典文献阅读之--OccNeRF(基于神经辐射场的自监督多相机占用预测)

0. 简介 作为基于视觉感知的基本任务&#xff0c;3D占据预测重建了周围环境的3D结构。它为自动驾驶规划和导航提供了详细信息。然而&#xff0c;大多数现有方法严重依赖于激光雷达点云来生成占据地面真实性&#xff0c;而这在基于视觉的系统中是不可用的。之前我们介绍了《经典…