SpringBoot+Vue项目校园防疫管理系统

news2024/11/28 10:33:41

文末获取源码

开发语言:Java

使用框架:spring boot

前端技术:JavaScript、Vue.js 、css3

开发工具:IDEA/MyEclipse/Eclipse、Visual Studio Code

数据库:MySQL 5.7/8.0

数据库管理工具:phpstudy/Navicat

JDK版本:Java jdk8

Maven:apache-maven 3.8.1-bin

目录

一、前言介绍 

二、系统设计规则

三、管理员功能模块

3.1系统登录页面

3.2采购计划管理页面

3.3物资信息管理页面

3.4入库管理管理页面 

3.5疫情数据管理页面 

四、操作员功能模块

4.1采购计划页面

4.2出库管理页面 

4.3供应商信息页面 

4.4公告信息页面

4.5疫情数据页面 

五、部分核心代码 

5.1采购计划关键代码

5.2入库管理关键代码

5.3疫情数据关键代码


一、前言介绍 

本系统前端框架采用了比较流行的渐进式JavaScript框架Vue.js。使用Vue-Router和Vuex实现动态路由和全局状态管理,Ajax实现前后端通信,Element UI组件库使页面快速成型。后端部分:采用springboot作为开发框架,同时集成MyBatis、Redis等相关技术。

校园防疫管理,主要的模块包括查看首页、用户管理(管理员、操作员、)更多管理(采购计划、物资信息、分类管理、入库管理、出库管理、供应商信息、公告信息、疫情数据)等功能。系统中管理员主要是为了安全有效地存储和管理各类信息,还可以对系统进行管理与更新维护等操作,并且对后台有相应的操作权限。

要想实现校园防疫管理的各项功能,需要后台数据库的大力支持。管理员验证注册信息,收集的用户信息,并由此分析得出的关联信息等大量的数据都由数据库管理系统管理。本文中数据库服务器端采用了Mysql作为后台数据库,使Web与数据库紧密联系起来。在设计过程中,充分保证了系统代码的良好可读性、实用性、易扩展性、通用性、便于后期维护、操作方便以及页面简洁等特点。

本系统的开发使获取校园防疫管理信息能够更加方便快捷,同时也使校园防疫管理管理信息变的更加系统化、有序化。系统界面较友好,易于操作。

二、系统设计规则

本校园防疫管理采用Java技术,Mysql数据库开发,充分保证了系统稳定性、完整性。

校园防疫管理的设计与实现的设计思想如下:

操作简单方便、系统界面安全良好:简单明了的页面布局,方便查询校园防疫管理管理的相关信息。

2、即时可见:对校园防疫管理信息的处理将立马在对应地点可以查询到,从而实现“即时发布、即时见效”的系统功能。

3、功能的完善性:可以管理首页、用户管理(管理员、操作员、)更多管理(采购计划、物资信息、分类管理、入库管理、出库管理、供应商信息、公告信息、疫情数据)系统管理模块的修改和维护操作。

三、管理员功能模块

3.1系统登录页面

3.2采购计划管理页面

3.3物资信息管理页面

3.4入库管理管理页面 

3.5疫情数据管理页面 

四、操作员功能模块

4.1采购计划页面

4.2出库管理页面 

4.3供应商信息页面 

4.4公告信息页面

4.5疫情数据页面 

五、部分核心代码 

5.1采购计划关键代码

@RequestMapping(value = {"/count_group", "/count"})

    public Map<String, Object> count(HttpServletRequest request) {
        Query count = service.count(service.readQuery(request), service.readConfig(request));

        return success(count.getResultList());

}

5.2入库管理关键代码

@PostMapping("/add")

    @Transactional

    public Map<String, Object> add(HttpServletRequest request) throws IOException {
        service.insert(service.readBody(request.getReader()));

        return success(1);

    }

    @Transactional

    public Map<String, Object> addMap(Map<String,Object> map){
        service.insert(map);

        return success(1);

}

    public Map<String,Object> readBody(BufferedReader reader){
        BufferedReader br = null;

        StringBuilder sb = new StringBuilder("");

        try{
            br = reader;

            String str;

            while ((str = br.readLine()) != null){
                sb.append(str);

            }

            br.close();

            String json = sb.toString();

            return JSONObject.parseObject(json, Map.class);

        }catch (IOException e){
            e.printStackTrace();

        }finally{
            if (null != br){
                try{
                    br.close();

                }catch (IOException e){
                    e.printStackTrace();

                }

            }

        }

        return null;

}

    public void insert(Map<String,Object> body){
        StringBuffer sql = new StringBuffer("INSERT INTO ");

        sql.append("`").append(table).append("`").append(" (");

        for (Map.Entry<String,Object> entry:body.entrySet()){
            sql.append("`"+humpToLine(entry.getKey())+"`").append(",");

        }

        sql.deleteCharAt(sql.length()-1);

        sql.append(") VALUES (");

        for (Map.Entry<String,Object> entry:body.entrySet()){
            Object value = entry.getValue();

            if (value instanceof String){
                sql.append("'").append(entry.getValue()).append("'").append(",");

            }else {
                sql.append(entry.getValue()).append(",");

            }

        }

        sql.deleteCharAt(sql.length() - 1);

        sql.append(")");

        log.info("[{}] - 插入操作:{}",table,sql);

        Query query = runCountSql(sql.toString());

        query.executeUpdate();

    }

5.3疫情数据关键代码

@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);

}

    public Map<String,String> readConfig(HttpServletRequest request){

        Map<String,String> map = new HashMap<>();

        map.put(FindConfig.PAGE,request.getParameter(FindConfig.PAGE));

        map.put(FindConfig.SIZE,request.getParameter(FindConfig.SIZE));

        map.put(FindConfig.LIKE,request.getParameter(FindConfig.LIKE));

        map.put(FindConfig.ORDER_BY,request.getParameter(FindConfig.ORDER_BY));

        map.put(FindConfig.FIELD,request.getParameter(FindConfig.FIELD));

        map.put(FindConfig.GROUP_BY,request.getParameter(FindConfig.GROUP_BY));

        map.put(FindConfig.MAX_,request.getParameter(FindConfig.MAX_));

        map.put(FindConfig.MIN_,request.getParameter(FindConfig.MIN_));

        return map;

}

    public Map<String,String> readQuery(HttpServletRequest request){

        String queryString = request.getQueryString();

        if (queryString != null && !"".equals(queryString)) {

            String[] querys = queryString.split("&");

            Map<String, String> map = new HashMap<>();

            for (String query : querys) {

                String[] q = query.split("=");

                map.put(q[0], q[1]);

            }

            map.remove(FindConfig.PAGE);

            map.remove(FindConfig.SIZE);

            map.remove(FindConfig.LIKE);

            map.remove(FindConfig.ORDER_BY);

            map.remove(FindConfig.FIELD);

            map.remove(FindConfig.GROUP_BY);

            map.remove(FindConfig.MAX_);

            map.remove(FindConfig.MIN_);

            return map;

        }else {

            return new HashMap<>();

        }

}

    @Transactional

    public void update(Map<String,String> query,Map<String,String> config,Map<String,Object> body){

        StringBuffer sql = new StringBuffer("UPDATE ").append("`").append(table).append("`").append(" SET ");

        for (Map.Entry<String,Object> entry:body.entrySet()){

            Object value = entry.getValue();

            if (value instanceof String){

                sql.append("`"+humpToLine(entry.getKey())+"`").append("=").append("'").append(value).append("'").append(",");

            }else {

                sql.append("`"+humpToLine(entry.getKey())+"`").append("=").append(value).append(",");

            }

        }

        sql.deleteCharAt(sql.length()-1);

        sql.append(toWhereSql(query,"0".equals(config.get(FindConfig.LIKE))));

        log.info("[{}] - 更新操作:{}",table,sql);

        Query query1 = runCountSql(sql.toString());

        query1.executeUpdate();

}

    public String toWhereSql(Map<String,String> query, Boolean like) {

        if (query.size() > 0) {

            try {

                StringBuilder sql = new StringBuilder(" WHERE ");

                for (Map.Entry<String, String> entry : query.entrySet()) {

                    if (entry.getKey().contains(FindConfig.MIN_)) {

                        String min = humpToLine(entry.getKey()).replace("_min", "");

                        sql.append("`"+min+"`").append(" >= '").append(URLDecoder.decode(entry.getValue(), "UTF-8")).append("' and ");

                        continue;

                    }

                    if (entry.getKey().contains(FindConfig.MAX_)) {

                        String max = humpToLine(entry.getKey()).replace("_max", "");

                        sql.append("`"+max+"`").append(" <= '").append(URLDecoder.decode(entry.getValue(), "UTF-8")).append("' and ");

                        continue;

                    }

                    if (like == true) {

                        sql.append("`"+humpToLine(entry.getKey())+"`").append(" LIKE '%").append(URLDecoder.decode(entry.getValue(), "UTF-8")).append("%'").append(" and ");

                    } else {

                        sql.append("`"+humpToLine(entry.getKey())+"`").append(" = '").append(URLDecoder.decode(entry.getValue(), "UTF-8")).append("'").append(" and ");

                    }

                }

                sql.delete(sql.length() - 4, sql.length());

                sql.append(" ");

                return sql.toString();

            } catch (UnsupportedEncodingException e) {

                log.info("拼接sql 失败:{}", e.getMessage());

            }

        }

        return "";

    }

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

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

相关文章

Apollo 应用与源码分析:Monitor监控-硬件监控-GPS

硬件架构图 可以看到左下角的“GNSS定位模块”其实是有IMU和GPS Antenna 组成的。 执行分析 代码 class GpsMonitor : public RecurrentRunner {public:GpsMonitor();void RunOnce(const double current_time) override; };void GpsMonitor::RunOnce(const double current_t…

为什么要把Linux机器加入到Windows AD/域控制器(Linux机器为什么要入域)?

文章目录1. 如何入域&#xff1f;2. 如何判断入域成功&#xff1f;3. 入域的效果(目的)是什么&#xff1f;4. 入域和SSSD之间是什么关系&#xff1f;1. 如何入域&#xff1f; sudo yum -y install oddjob oddjob-mkhomedir sssd samba-common-tools adcli \krb5-workstation o…

Java项目:jsp+servlet实现的新闻发布系统

作者主页&#xff1a;源码空间站2022 简介&#xff1a;Java领域优质创作者、Java项目、学习资料、技术互助 文末获取源码 项目介绍 本项目分为前后台&#xff1b; 前台主要功能为&#xff1a; 首页、娱乐新闻、经济新闻、文化新闻、小道新闻、用户评价等&#xff1b; 后台主要…

HTML5学习笔记(五)

CSS3 多列布局 CSS3新增了一种布局方式——多列布局。使用多列布局&#xff0c;可以轻松实现类似报纸那样的布局。 多列布局的应用非常广泛&#xff0c;像各大电商网站、素材网站中常见的“瀑布流效果”。 column-count属性来定义多列布局的列数。 column-width属性来定义多列…

【云原生系列】第四讲:Knative 之 Eventing

目录 序言 1.基础介绍 2.组成要素 2.1 事件源&#xff08;Event Source&#xff09; 2.2 事件处理&#xff08;Flow&#xff09; 2.3 事件消费者&#xff08;Event Consumer&#xff09; 3.架构模式 3.1 Source to Service ​编辑 3.2Channels & Subscriptions …

思科配置SVI实现VLAN间路由

思科SVI配置 说明 SVI技术与单臂路由和传统VLAN间路由一样&#xff0c;都是解决多个VLAN间通信问题。 SVI技术利用了多层交换机&#xff08;本文以三层交换机为例&#xff09;。 示例拓扑 其中S1为三层交换机 S2的Fa0/2接口于VLAN 10下 S3的Fa0/2接口于VLAN 20下 PC 1地…

NH2-picolyl-azide|2168629-06-7|Amine azide Picolyl叠氮生物标记基团

【产品描述】 西安凯新生物科技有限公司​picolyl-azide-NH2含有叠氮基&#xff0c;叠氮基可以通过点击化学与炔烃、BCN、DBCO反应&#xff0c;生成稳定的三唑键。末端羧酸在活化剂&#xff08;如EDC或HATU&#xff09;存在下可与伯胺基反应&#xff0c;形成稳定的酰胺键。叠氮…

python基础之面向对象基础语法

文章目录一、面向对象基础语法1.dir内置函数&#xff1a;2.定义一个简单的类&#xff08;只包含方法&#xff09;&#xff1a;二、实例演练3.面对对象练习&#xff1a;小明爱跑步需求&#xff1a;4.摆放家具练习&#xff1a;5.士兵突击&#xff0c;需求&#xff1a;6.私有属性和…

CDN技术介绍

引言 随着Internet技术和多媒体技术的不断发展&#xff0c;图像、音频、视频服务所占的比重越来越大&#xff0c;加之网民数量激增&#xff0c;网络访问距离过长&#xff0c;导致网络负载迅速增加&#xff0c;从而使用户的访问质量受到严重影响。传统的缓存技术对交互性强和比…

【ML特征工程】第 9 章 :回到特征:构建学术论文推荐器

&#x1f50e;大家好&#xff0c;我是Sonhhxg_柒&#xff0c;希望你看完之后&#xff0c;能对你有所帮助&#xff0c;不足请指正&#xff01;共同学习交流&#x1f50e; &#x1f4dd;个人主页&#xff0d;Sonhhxg_柒的博客_CSDN博客 &#x1f4c3; &#x1f381;欢迎各位→点赞…

算法leetcode|17. 电话号码的字母组合(rust重拳出击)

文章目录17. 电话号码的字母组合&#xff1a;样例 1&#xff1a;样例 2&#xff1a;样例 3&#xff1a;提示&#xff1a;原题传送门&#xff1a;分析题解rustgocjavatypescriptpython17. 电话号码的字母组合&#xff1a; 给定一个仅包含数字 2-9 的字符串&#xff0c;返回所有…

向NS-3添加新模块_ns3.35添加新模块_ns3.35以及更早版本添加新模块

2022年11月&#xff0c;ns3官网发布了3.37版本&#xff0c;与3.36一样&#xff0c;运行、编译、配置的时候使用的都是ns3.37/ns3 这个脚本&#xff0c;但3.35以及3.35以前的版本使用的都是ns3.35/waf脚本&#xff0c;相应的3.35以及以前的版本与3.36以后的版本&#xff0c;新生…

Java迭代器 for循环的区别

1、Iterator接口&#xff1a; Iterator接口包含三个方法&#xff1a;hasNext&#xff0c;next&#xff0c;remove Iterator常用于对集合进行 一边遍历一边修改 的操作 注意&#xff1a;当Iterator迭代访问Collection集合中元素时&#xff0c;Collection的元素不能改变&#x…

数据库实践 Hw02

Assignment 02: get familiar with operations in MySQL 创建数据库 创建名字为bank的银行数据库 create database if not exists bank; show create database bank; use bank; show tables;可以获得如下内容 后续展示bank数据库中的tables tables为空 bank数据中创建表…

【Compose】Desktop Application 初尝试

前言 作为一个多年的android开发者&#xff0c;自从Jetpack发布以来&#xff0c;其中的Compose组件就深深的吸引了我&#xff0c;在去年就用新版android studio创建模板尝鲜了一把&#xff0c;不过并没有投入太多时间和精力&#xff0c;其实还有一个消息我没太关注&#xff0c…

算法提升:图的最小生成树算法-克鲁斯卡尔(Kruskal)

目录 概念 思路 代码 概念 克鲁斯卡尔算法查找最小生成树的方法是&#xff1a;将连通网中所有的边按照权值大小做升序排序&#xff0c;从权值最小的边开始选择&#xff0c;只要此边不和已选择的边一起构成环路&#xff0c;就可以选择它组成最小生成树。对于 N 个顶点的连通网…

axios数据交互

目录 一、axios 概念 二、官方文档 三、下载命令 四、特点 五、基本语法 六、基本案例 一、axios 概念 axios 是基于promise创建的http库&#xff0c;可以用于客户端&#xff08;浏览器&#xff09;和 node.js ​ 官方概念&#xff1a; Axios 是一个基于 promise 的 HTT…

面向OLAP的列式存储DBMS-13-[ClickHouse]的MergeTree表引擎原理解析

ClickHouse 中最重要的表引擎&#xff1a;MergeTree 的深度原理解析 首先我们了解了 MergeTree 的基础属性和物理存储结构&#xff1b;接着&#xff0c;依次介绍了数据分区、一级索引、二级索引、数据存储和数据标记的重要特性&#xff1b;最后总结了 MergeTree 上述特性一起协…

C++ Reference: Standard C++ Library reference: C Library: cwctype: iswdigit

C官网参考链接&#xff1a;https://cplusplus.com/reference/cwctype/iswdigit/ 函数 <cwctype> iswdigit int iswdigit (wint_t c); 检查宽字符是否为十进制数字 检查c是否为十进制数字字符。 十进制数字是0 1 2 3 4 5 6 7 8 9中的任意一个。 此函数是isdigit&#xff…

【Web前端基础进阶学习】HTML详解(下篇)

上篇学习到了HTML列表&#xff0c;现在从区块开始学习&#xff01; 一起学习下篇吧! 一.HTML区块 1.HTML区块元素2.HTML内联元素3.HTML的 div 元素4.HTML的 span 元素 二.HTML布局 1.使用div元素添加网页布局2.使用table元素添加网页布局 三.HTML表单和输入 1.文本域2.密码字…