疫情防控|Springboot+小程序+校园疫情防控系统设计与实现

news2024/11/26 9:31:30

作者主页:编程指南针

作者简介:Java领域优质创作者、CSDN博客专家 、掘金特邀作者、多年架构师设计经验、腾讯课堂常驻讲师

主要内容:Java项目、毕业设计、简历模板、学习资料、面试题库、技术互助

收藏点赞不迷路  关注作者有好处

文末获取源码 

前言:

校园疫情防控系统是针对学校疫情防控管理的要求,为学校疫情防控设计的一款微信小程序,可以用于学生每日健康信息上报统计,助手于数字化疫情管理,包括健康信息上报、班级学生离校申请审批、校园通知、疫情地区可视化图表。

本文利用Spring Boot与uniapp技术,设计开发出的一个基于C/S架构的校园疫情防控微信小程序。在整个系统的开发周期中,系统后端选用Spring Boot框架,前端选用uniapp框架,持久层选用MYSQL数据库来实现。主要完成以下几个方面的研究:

1.分析在程序开发过程中所采用的C/S结构和B/S结构的优缺点,并确定系统的基本实行方案。

2.对功能需求详细分析,并且也对非功能需求以及系统运行环境进行简单分析,分析各个功能模块的设计和实现。

3.实现了学生打卡、学生请假、辅导员管理学生健康填报、辅导员审批学生假条、校园通知、班级信息管理、疫情可视化图表等功能。

一,项目简介

全国疫情频发,点多面广,形势很严峻,在这样的形势下,校园严格执行省、市的疫情防控政策。学生返校后,实行封闭式管理,学生非必要不准出校,学生长期封闭在校园难免会有不理解、抱怨、烦躁等负面情绪,为了让学生理解目前封校管理政策的正确性,也为了让学生积极配合学校防疫的措施,在学生处领导下,各班级积极组织学生配合学校疫情的防控工作开展。

疫情防控的意义,是为了使疫情更加稳定,了解更多防控意识,有能力去参加疫情防控的志愿者,帮助更多的人。防控意义在于保护好自己,保护好身边的人。疫情时刻牵动着大家的心,疫情是命令,防控就是责任,自愿积极投入到疫情防控工作当中去,用实际行动为打赢疫情防控阻击战贡献志愿的力量。

让大学生能够深刻认识战胜一切艰难险阻的根本保障,是实现中华民族伟大复兴的希望所在。引导大学生自觉拥护自觉成长,成为新时代社会主义的建设者和接班人;引导大学生把满腔的爱国热情转化为建设社会主义现代化祖国的强大动力,刻苦学习、练就本领、报效祖国,担当起青年一代的强国使命[1]。

基于Spring Boot的校园疫情防控系统的设计与实现主要实现了首页、登录、注册、健康填报、请假、批假、校园通知、班级管理、疫情图表等功能模块,系统结构图如下图所示[9]。

 

学生/辅导员点击打卡按钮,进行每日健康填报,填报的表单会获取地理位置进行定位,然后通过上传健康码、行程码和填写表单信息提交数据到打卡记录表,教师端则可以浏览该打卡记录信息[10]。实例如下图4-2-1所示。

图4-2-1 健康打卡数据流图

学生请假需要填写离校时间、返校时间、请假事由、请假去向、请假总时长,最终提交到教师端等待审批。实例如下图4-2-2所示。

图4-2-2 学生请假数据流图

辅导员收到学生请假申请时,对学生的请假信息进行审核,审核状态分为:通过、不通过,并且辅导员有权限直接撤销学生的请假条。实例如下图4-2-3所示。

图4-2-3 辅导员批假数据流图

校园通知是用于公告全校最新的消息,用户浏览后可以了解到校内的最新状况信息。实例如下图4-2-4所示。

图4-2-4 校园通知数据流图

该功能是学生查看自己所在班级包括自己在内的其他同学打卡状态,如果是辅导员则查看自己所有管理的班级里面学生的打卡状态,并可以通过电话号码通知学生。实例如下图4-2-5所示。

图4-2-5 班级列表数据流图

该功能模块是通用功能模块,学生和教师都可以浏览疫情相关信息,该功能包括疫情定位、疫情分布、疫情分析,其中疫情定位采用的是腾讯地图API,疫情分布图为湖南境内的城市分布,疫情分析是使用数据可视化图表展示。实例如下图4-2-6所示。

图4-2-6 疫情状况数据流图

该功能用于用户修改自己的个人信息,用户可以通过此功能修改自己的姓名、性别、头像、班级。实例如下图4-2-7所示。

图4-2-7 编辑个人信息数据流图

二,环境介绍

语言环境:Java:  jdk1.8

数据库:Mysql: mysql5.7

应用服务器:Tomcat:  tomcat8.5.31

开发工具:IDEA或eclipse

后台开发:Springboot+mybatis

前端开发:微信小程序

三,系统展示

本次校园疫情防控系统的实现基于C/S结构模式,http超文本传输协议,MySQL数据库引擎采用默认的innodb,接口规范采用Restful API风格[14]。

该系统实现分为登录、注册、首页、健康填报(打卡)、打卡记录、学生请假、请假记录、请假处理、校园通知、班级、疫情定位、疫情分布、疫情分析、个人信息[15]。

5.1  登录

用户通过输入电话号码和密码进行登录,调用LoginController类下的loginByPhone方法来实现登录,当输入格式都正确,该账号已存在的状态下,并且数据查询校验成功,即可登录成功到小程序首页界面。其登录界面展示如图5-1所示。

图5-1 登录界面展示图

5.2  注册

用户通过输入手机号码、姓名、密码、性别、年级、班级、辅导员进行注册,调用UserController类下的addUserInfo方法来实现注册,当输入格式都正确,点击注册,并且后台插入数据成功,即可注册成功并跳转到小程序登录界面。其注册界面展示如图5-2所示。

图5-2 注册界面展示图

5.3  首页

如果是学生端首页展示打卡、打卡记录、请假、请假记录、校园通知,如果是教师端首页展示打卡、打卡记录、请假处理、学生打卡记录、校园通知。其首页界面展示如图5-3所示。

       

图5-3 首页界面展示图

5.4  健康填报(打卡)

学生或者教师可以每日进行健康打卡,系统会记录每天健康填报信息。当进入打卡界面时,系统自动获取当前地理位置,然后用户需要输入体温,选择健康码颜色,上传健康码和行程码即可进行每日的健康打卡。其打卡界面展示如图5-4所示。

图5-4 打卡界面展示图

5.5  打卡记录

用户可以指定日期查看自己的健康填报记录,默认查看所有的健康填报记录,健康填报记录信息包括用户姓名,打卡地点,体温,健康码,行程码。其打卡记录界面展示如图5-5所示。

图5-5 打卡记录界面展示图

5.6  学生请假

学生外出请假需要通过此功能进行请假审核,当学生请假申请后该请假条会发送给教师端进行审核处理,外出请假报备表单内容包括离校时间,返校时间,请假事由,请假去向,请假时长。其学生请假界面展示如图5-6所示。

图5-6 学生请假界面展示图

5.7  请假记录

请假记录功能用于记录学生的请假历史记录,默认为查看所有的请假记录,主要内容包括假条创建时间,申请人,请假去向,请假事由,学生年级,请假开始时间,请假结束时间,请假总时长。其请假记录界面展示如图5-7所示。

图5-7 请假记录界面展示图

5.8  请假处理

请假处理为教师端的功能,教师可以通过此功能审核学生端发来的请假申请,教师有权限进行审核,审核状态分为未审批,同意,不同意,并且教师可以直接撤销指定的请假申请。其请假处理界面展示如图5-8所示。

图5-8 请假处理界面展示图

5.9  校园通知

校园通知功能模块展示校园内最新的通告通知,多条信息列表分页展示,通过word文档转图片在页面展示。其校园通知界面展示如图5-9所示。

       

图5-9 校园通知界面展示图

5.10  班级

在教师端班级界面展示教师所管理的班级,在学生端则展示该学生自己所在班级,班级信息包括姓名、学号、电话、打卡状态,当选择仅查看未打卡人员时,会显示所有未打卡的成员,若当前用户角色是教师,则该用户可以通过选择指定的年级和班级查看班级信息,若当前用户角色是学生,则该用户无法选择年级和班级。其班级界面展示如图5-10所示。

图5-10 班级界面展示图

5.11  疫情定位

疫情定位功能使用腾讯地图API实现,在获取全国疫情数据后,通过地点调用腾讯地图API获取经度、纬度,然后在地图上标记出高风险城市。其疫情定位界面展示如图5-11所示。

图5-11 疫情定位界面展示图

5.12  疫情分布

疫情分布可查看湖南境内最新的疫情状况信息,界面顶部文字播报当日现有确诊病例的疫情信息,当点击每个城市地区时,可以显示该城市的现有确诊病例。其疫情分布界面展示如图5-12所示。

图5-12 疫情分布界面展示图

5.13  疫情分析

疫情分析使用数据可视化的方式,清晰地展示疫情数据信息的变化趋势,使得用户能够可观地分析疫情数据的变化,可视化图表包括山峰图、折线图,其中山峰图主要功能是统计湖南近五个月的疫情确诊数量,折线图主要功能是统计湖南近五个月的疫情确诊数量变化趋势。其疫情分析界面展示如图5-13所示。

 

图5-13 疫情分析界面展示图

5.14  个人信息

个人信息可以查看当前用户的主要信息,并可以修改当前用户的信息。其个人信息界面展示如图5-14所示。

图5-14 个人信息界面展示图

四,核心代码展示

package com.qzdl.controller;

import com.qzdl.entity.SchoolRole;
import com.qzdl.response.Result;
import com.qzdl.service.LoginService;
import com.qzdl.util.JwtUtil;
import com.qzdl.util.RedisUtil;
import com.qzdl.vo.LoginUserVO;
import io.swagger.annotations.ApiOperation;
import org.springframework.beans.BeanUtils;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.PostMapping;
import org.springframework.web.bind.annotation.RequestBody;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;
import org.springframework.web.multipart.MultipartFile;

import java.util.HashMap;
import java.util.Map;

@RestController
@RequestMapping("/user")
public class LoginController {

    @Autowired
    private LoginService loginService;
    @Autowired
    private RedisUtil redisUtil;

    @PostMapping("/hello")
    public Result doHello(){
        return Result.success();
    }

    /**
     * 通过学号/工号登录
     * @param loginUserVO
     * @return
     */
    @ApiOperation(value = "通过学号/工号登录")
    @PostMapping("/login")
    public Result doUserLogin(@RequestBody LoginUserVO loginUserVO){
        SchoolRole schoolRole = new SchoolRole();
        BeanUtils.copyProperties(loginUserVO,schoolRole);
        SchoolRole user = loginService.login(schoolRole.getStudentId(), schoolRole.getPassword());
        String token = JwtUtil.getToken(user.getStudentId().toString());
        redisUtil.hset("token",schoolRole.getStudentId().toString(),token,60*60*24*2);
        Map<String,Object> data = new HashMap<>();
        data.put("user",user);
        data.put("token",token);
        return Result.success().data(data);
    }

    /**
     * 通过电话号码登录
     * @param schoolRole
     * @return
     */
    @ApiOperation(value = "通过电话号码登录")
    @PostMapping("/loginByPhone")
    public Result doUserLoginByPhone(@RequestBody SchoolRole schoolRole){
        SchoolRole user = loginService.loginByPhone(schoolRole.getPhone(), schoolRole.getPassword());
        if (user == null) {
            return Result.failure();
        }
        String token = JwtUtil.getToken(user.getStudentId().toString());
        redisUtil.hset("token",user.getStudentId().toString(),token,60*60*24*2);
        Map<String,Object> data = new HashMap<>();
        data.put("user",user);
        data.put("token",token);
        return Result.success().data(data);
    }

    public Result doAddImg(MultipartFile multipartFile){
        return Result.success();
    }
}
package com.qzdl.system.controller;

import com.qzdl.entity.SchoolRole;
import com.qzdl.response.Result;
import com.qzdl.system.service.ClassService;
import io.swagger.annotations.ApiOperation;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.*;
import java.text.Collator;
import java.util.List;
import java.util.Locale;

@RequestMapping("/classinfo")
@RestController
public class ClassController {
    @Autowired
    private ClassService classService;

    /**
     * 根据教师tid查询学生信息
     * @param studentId
     * @return
     */
    @ApiOperation(value = "根据教师tid查询学生信息")
    @GetMapping("/selectStudentInfoByTid")
    public Result selectStudentInfoByTid(Integer studentId) {
        List<SchoolRole> result = classService.selectStudentInfoByTid(studentId);
        result.sort((o1, o2) -> Collator.getInstance(Locale.CHINA).compare(o1.getStudentName(), o2.getStudentName()));
        return Result.success().data("result", result);
    }

    /**
     * 根据教师id、年级id、班级id查询学生信息
     */
    @ApiOperation(value = "根据教师id、年级id、班级id查询学生信息")
    @PostMapping("/selectStudentInfoBySidGidCid")
    public Result selectStudentInfoBySidGidCid(@RequestBody SchoolRole schoolRole) {
        List<SchoolRole> result = classService.selectStudentInfoBySidGidCid(schoolRole);
        result.sort((o1, o2) -> Collator.getInstance(Locale.CHINA).compare(o1.getStudentName(), o2.getStudentName()));
        return Result.success().data("result", result);
    }

    /**
     * selectStudentInfoByGidCid
     */
    @ApiOperation(value = "根据年级id、班级id查询学生信息")
    @GetMapping("/selectStudentInfoByGidCid")
    public Result selectStudentInfoByGidCid(Integer gradeId, Integer classid) {
        List<SchoolRole> result = classService.selectStudentInfoByGidCid(gradeId,classid);
        result.sort((o1, o2) -> Collator.getInstance(Locale.CHINA).compare(o1.getStudentName(), o2.getStudentName()));
        return Result.success().data("result", result);
    }
}

package com.qzdl.system.controller;

import cn.hutool.core.util.StrUtil;
import cn.hutool.json.JSONArray;
import cn.hutool.json.JSONObject;
import com.qzdl.response.Result;
import com.qzdl.util.RedisUtil;
import io.swagger.annotations.ApiOperation;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.http.ResponseEntity;
import org.springframework.scheduling.annotation.Scheduled;
import org.springframework.web.bind.annotation.*;
import org.springframework.web.client.RestTemplate;
import java.util.ArrayList;
import java.util.List;
import java.util.stream.Collectors;

@RequestMapping("/epidemic")
@RestController
public class EpidemicController {

    private final String key = "e4aee1f5e8b01103606a4d61cb98232d";

    @Autowired
    private RestTemplate restTemplate;

    @Autowired
    private RedisUtil redisUtil;

    /**
     * 获取湖南境内的疫情数据
     * @return
     */
    @GetMapping("/getEpidemicDataInHunan")
    public Result getEpidemicDataInHunan() {
        if(redisUtil.sGet("jsonData").size() > 0){
            System.out.println("jsonData缓存...");
            return Result.success().data("jsonData", redisUtil.sGet("jsonData").toArray()[0]);
        }
        String url = "https://interface.sina.cn/news/wap/fymap2020_data.d.json";
        ResponseEntity<String> forEntity = restTemplate.getForEntity(url, String.class);
        JSONObject jsonObject = new JSONObject(forEntity.getBody());
        JSONArray jsonArray = jsonObject.getJSONObject("data").getJSONArray("list");
        //过滤得到湖南的数据
        JSONArray jsonData = jsonArray.stream().filter(o -> ((JSONObject) o).get("ename").equals("hunan")).collect(Collectors.toCollection(JSONArray::new));
        redisUtil.sSetAndTime("jsonData", 60*60*3, jsonData);
        return Result.success().data("jsonData", jsonData);
    }

    /**
     * 获取湖南境内的历史数据
     * @return
     */
    @GetMapping("/getEpidemicDataInHunanHistory")
    public Result getEpidemicDataInHunanHistory() {
        if(redisUtil.sGet("shanfengData").size() > 0){
            System.out.println("shanfengData缓存...");
            return Result.success().data("shanfengData", redisUtil.sGet("shanfengData").toArray()[0]);
        }
        String url = "https://voice.baidu.com/newpneumonia/getv2?from=mola-virus&stage=publish&target=trend&isCaseIn=1&area=湖南&callback=jsonp_1660908362757_64109";
        ResponseEntity<String> forEntity = restTemplate.getForEntity(url, String.class);
        String[] strArr = StrUtil.subBetweenAll(forEntity.getBody(), "(", ")");
        JSONObject jsonObject = new JSONObject(strArr[0]);
        JSONArray jsonArray = ((JSONObject) jsonObject.getJSONArray("data").get(0))
                .getJSONObject("trendMonth").getJSONArray("list");
        //monthData:每个月的数据
        JSONArray monthData = ((JSONObject) jsonObject.getJSONArray("data").get(0))
                .getJSONObject("trendMonth").getJSONArray("updateMonth");
        //shanfengData:新增本土数据
        JSONArray bentuData = ((JSONObject) jsonArray.stream().filter(item -> {
            return "新增本土".equals(((JSONObject) item).get("name"));
        }).collect(Collectors.toCollection(JSONArray::new)).get(0)).getJSONArray("data");
        //新建一个jsonObject,用来存放每个月的数据
        JSONArray shanfengData = new JSONArray();
        for (int i = 0; i < monthData.size(); i++) {
            String jsonStr = "{\"name\":\"" + monthData.get(i) + "\",\"value\":" + bentuData.get(i) + "}";
            //jsonStr转json对象
            shanfengData.add(i, new JSONObject(jsonStr));
        }
        redisUtil.sSetAndTime("shanfengData", 60*60*3, shanfengData);
        return Result.success().data("shanfengData", shanfengData);
    }

    /**
     * 定时获取全国疫情数据
     * @return
     */
    @ApiOperation(value = "定时获取全国疫情数据")
    @PostMapping("/getEpidemicCity")
    @Scheduled(cron = "0 10 20 * * ?")
    public void getEpidemicCity() throws InterruptedException {
        System.out.println("正在更新全国城市疫情数据...");
        String url = "https://interface.sina.cn/news/wap/fymap2020_data.d.json";
        ResponseEntity<String> forEntity = restTemplate.getForEntity(url, String.class);
        JSONObject jsonObject = new JSONObject(forEntity.getBody());
        JSONArray jsonArray = jsonObject.getJSONObject("data").getJSONArray("list");
        //定义一个列表存储城市
        List<String> province = new ArrayList<>();
        for (Object o1 : jsonArray) {
            for (Object o2 : ((JSONObject)o1).getJSONArray("city")) {
                if (Integer.parseInt(((JSONObject) o2).get("econNum").toString()) > 0 && !"".equals(((JSONObject) o2).get("citycode").toString())){
                    String mapName = ((JSONObject) o2).get("mapName").toString();
                    province.add(mapName);
                }
            }
        }
        System.out.println("城市数量=》" + province.size());
        //存储经纬度
        List<String> locationList = new ArrayList<String>();
        for (Object o : new JSONArray(province)) {
            Thread.sleep(50);
            String city = (String)o;
            String url2 = "https://restapi.amap.com/v3/geocode/geo?address=" + city + "&output=JSON&key=" + key;
            ResponseEntity<String> forEntity2 = restTemplate.getForEntity(url2, String.class);
            String jsonStr = forEntity2.getBody();
            System.out.println("jsonStr = " + jsonStr);
            JSONObject jsonObject2 = new JSONObject(jsonStr);
            String location = (String) ((JSONObject)jsonObject2.getJSONArray("geocodes").get(0)).get("location");
            locationList.add(location);
        }
        System.out.println("定时更新locationList=》" + locationList);
        //将获取的数据放到redis中
        redisUtil.sSet("locationList",locationList);
        System.out.println("更新成功!!!...");
    }

    @ApiOperation(value = "从缓存中获取全国疫情数据")
    @PostMapping("/getEpidemicCityByCache")
    public Result getEpidemicCityByCache(){
        if(redisUtil.sGet("locationList").size() > 0){
            return Result.success().data("locationList", redisUtil.sGet("locationList"));
        }
        return Result.failure();
    }
}

五,项目总结

疫情防控是我国基层治理能力的一次重要检验。我国的高校校园内外通常有明显的边界线,可以被视为一个大型的难以分割的管理单元。然而,高校校园普遍拥有普通居民社区的居住属性和其他机关社会企事业单位作为社会生产单位的生产属性,需要承担起相对较高的疫情防控压力,高校拥有的特点也正是防疫所面临的巨大挑战。

校园人员数量多,人员密度大。相比较于其他机关和企事业单位,高校需要管理大量的学生和教职工。尽管高校土地占地面积相对比较大,但呈现出所管辖范围内,整体人员高密度的特点。

同时,高校的主要实践活动都在校园内完成,教学工作的开展、日常办公、食堂用餐、宿舍休息通常都是在封闭性较强的环境中进行,不利于保持空气的流通。不仅如此,校园内的人员活动在校园中并不是平均分布的,而是高度集中分布的,如白天的教学时间,多数师生集中于教室当中,为保证教学的工作开展,大多数课堂里的每个人员相邻就坐,每间教室的人数从数十人到百人不等;晚上则集中于每间寝室中,一个房间内人员数量往往在4人以上,高于普通社区住宅人数。这一系列的特点决定了在高校开展疫情防控工作最有效的手段仍然是将病毒拒之校门外[2]。

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

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

相关文章

【刷题笔记】之牛客面试必刷TOP101(二分查找-I + 二维数组中的查找 + 寻找峰值 + 数组中的逆序对 + 旋转数组的最小数字 + 比较版本号)

目录 1. 二分查找-I 2. 二维数组中的查找 3. 寻找峰值 4. 数组中的逆序对 5. 旋转数组的最小数字 6. 比较版本号 1. 二分查找-I 题目链接&#xff1a;二分查找-I_牛客题霸_牛客网 (nowcoder.com) 题目要求&#xff1a; 上代码 import java.util.*;public class Solut…

Spring MVC学习 | 视图RESTFul

文章目录一、视图1.1 视图对象View1.2 ThymeleafView1.3 转发视图1.4 重定向视图1.5 视图控制器二、RESTFul2.1 简介2.2 PUT和DELETE请求的实现2.2.1 HiddenHttpMethodFilter过滤器2.2.2 实现PUT请求2.2.3 实现DELETE请求学习视频&#x1f3a5;&#xff1a;https://www.bilibil…

Python 元组(Tuple)操作详解

Python的元组与列表类似&#xff0c;不同之处在于元组的元素不能修改,元组使用小括号,列表使用方括号,元组创建很简单,只需要在括号中添加元素,并使用逗号隔开即可 一、创建元组 代码如下: 1 2 3 tup1 (physics, chemistry, 1997, 2000); tup2 (1, 2, 3, 4, 5 ); tup3 &qu…

Redis实现朋友圈,微博等Feed流功能,实现Feed流微服务(业务场景、实现思路和环境搭建)

文章目录业务场景Feed流相关概念Feed流特征Feed流分类实现思路环境搭建数据库表结构新建Feeds功能微服务ms-feeds配置类 RedisTemplateConfigurationREST配置类 RestTemplateConfigurationFeeds 实体类FeedsVO 响应类业务场景 在互联网领域&#xff0c;尤其现在的移动互联网时…

Linux环境下MySQL的安装与使用

目录 一&#xff1a;安装MYSQL说明 1.1 查看是否安装过MySQL 1.2 MYSQL的卸载 二&#xff1a;MySQL在Linux下的安装 三&#xff1a;MYSQL登录 3.1 首次登录 3.2 修改密码 3.3 设置远程登录 一&#xff1a;安装MYSQL说明 1.1 查看是否安装过MySQL 检查rpm安装包 rpm -…

JAVA毕业设计——基于ssm高校共享单车管理系统 (源代码+数据库)604

代码地址 https://github.com/ynwynw/webike-public 毕业设计所有选题地址 https://github.com/ynwynw/allProject 基于ssm高校共享单车管理系统 (源代码数据库)604 一、系统介绍 用户管理&#xff0c;服务点管理&#xff0c;单车管理&#xff0c;分类管理&#xff0c;学生管…

基于java+springboot+mybatis+vue+mysql的大学生体质测试管理系统

项目介绍 随着我国大学生数量的不断增加&#xff0c;个个高校对大学生的体质也开始高度的进行重视&#xff0c;只有拥有了高强健康体质的大学生才能够全身心的投入到学习和工作中&#xff0c;为了能够更好的对大学生的体质进行检测我们通过java编程语言&#xff0c;后端采用sp…

redis之哨兵机制

0. 前言 我们知道&#xff0c;只有主库才能有写操作&#xff0c;而从库只能进行读操作&#xff0c;那么当主库宕机后&#xff0c;如何保证服务的正常进行呢&#xff1f; 本文主要介绍的是 Redis 提供的哨兵机制&#xff0c;通过哨兵监控主库的状况&#xff0c;如果发现主库下…

Python迭代法Iteration的讲解及求解海藻问题、方程问题实战(超详细 附源码)

一、迭代法简介 迭代法&#xff08;iteration&#xff09;是现代计算机求解问题的一种基本形式。迭代法与其说是一种算法&#xff0c;更是一种思想&#xff0c;它不像传统数学解析方法那样一步到位得到精确解&#xff0c;而是步步为营&#xff0c;逐次推进&#xff0c;逐步接近…

[附源码]Python计算机毕业设计高校本科毕业及资料存档管理系统Django(程序+LW)

该项目含有源码、文档、程序、数据库、配套开发软件、软件安装教程 项目运行 环境配置&#xff1a; Pychram社区版 python3.7.7 Mysql5.7 HBuilderXlist pipNavicat11Djangonodejs。 项目技术&#xff1a; django python Vue 等等组成&#xff0c;B/S模式 pychram管理等…

十二、JavaScript——其他数据类型

布尔值 &#xff08;boolean&#xff09;- 布尔值主要用于进行逻辑判断 - 布尔值只有两个 true 和 false (不用加引号) 空指 (null) - 空值用来表示空对象 - 空指只有一个 NULL - 用typeof检查空值时返回object 未定义 &…

二面蚂蚁金服(交叉面),已拿offer,Java岗定级阿里P6

记一次蚂蚁金服Java程序员面试经历&#xff08;均为交叉面&#xff09; ​ 编辑切换为居中 添加图片注释&#xff0c;不超过 140 字&#xff08;可选&#xff09; 一面 自我介绍 项目中的监控&#xff1a;那个监控指标常见的有哪些&#xff1f; 微服务涉及到的技术以及需要…

数据模型篇之大数据领域建模综述

第8章 大数据领域建模综述 1.为什么需要数据建模 为了更好的将数据进行有序、有结构地分类组织和存储。数据模型就是数据组织和存储方法&#xff0c;它强调从业务、数据存取和使用角度合理存储数据。 数据建模的好处&#xff1a; 性能&#xff1a;良好的数据模型能帮助我们快…

4款国产实用软件,只因功能强大,常被误认为是外国人开发的

过去常听说国外的XXX好&#xff0c;国外的月亮一定更圆&#xff0c;国产软件一样很良心&#xff0c;然而由于偏见&#xff0c;却被误认为是外国人开发的&#xff0c;闹出笑话。 1、Cruiser EXP Alpha 这是我见过最强大的电脑工具箱&#xff0c;没有之一&#xff0c;收纳了超120…

被新华社技术局点名!中国电信这个“黑盒子”干啥了?

全媒体时代&#xff0c;新闻报道又快又好&#xff0c;需要先进技术提供有力支撑。近日&#xff0c;中国电信收到新华社通信技术局感谢信&#xff0c;点赞中国电信5G商企专网产品&#xff0c;基于5G专线进行点对点快速组网&#xff0c;实现了前方报道重要节点物理线路的“空天备…

Springboot整合EasyExcel,实现Excel文件上传

一、概念 EasyExcel是一个基于Java的、快速、简洁、解决大文件内存溢出的Excel处理工具。 它能让你在不用考虑性能、内存的等因素的情况下&#xff0c;快速完成Excel的读、写等功能。EasyExcel是在尽可能节约内存的情况下支持读写百M的Excel。 二、Excel的上传(读Excel) 1.E…

Spring Batch 批处理-作业增量参数

引言 接着上篇&#xff1a;Spring Batch 批处理-作业参数校验&#xff0c;了解作业参数校验后&#xff0c;本篇就来了解一下Spirng Batch 作业增量参数。 作业增量参数 不知道大家发现了没有&#xff0c;每次运行作业时&#xff0c;都改动作业名字&#xff0c;或者改动作业的…

php就业招聘系统mysql数据库web结构计算机软件工程网页wamp

一、源码特点 PHP就业招聘系统 是一套完善的web设计系统&#xff0c;对理解php编程开发语言有帮助&#xff0c;系统具有完整的源代码和数据库&#xff0c;系统主要采用B/S模式开发。开发环 境为PHP APACHE&#xff0c;数据库为mysql5.0&#xff0c;使用php语言开发。 php就…

【C00098】基于SSM的校园疫情防控管理系统——可视化大屏

基于SSM的校园疫情防控管理系统——可视化大屏项目简介项目获取开发环境项目技术运行截图注意&#xff1a;2022年最新款&#xff0c;全网唯一&#xff01;&#xff01; 先到先得&#xff01;&#xff01; 项目简介 基于ssm框架开发的校园疫情防控管理系统共分为四个角色&…

非零基础自学Golang 第6章 Go语言内置容器 6.3 映射

非零基础自学Golang 文章目录非零基础自学Golang第6章 Go语言内置容器6.3 映射6.3.1 声明映射6.3.2 初始化映射6.3.3 遍历映射6.3.4 从映射中删除键值对第6章 Go语言内置容器 6.3 映射 映射&#xff08;map&#xff09;是一种无序的键值对的集合&#xff0c;map的键类似于索引…