(免费分享)基于 SpringBoot 的高校宿舍管理系统带论文

news2024/11/15 8:20:17

项目描述

系统代码质量高,功能强大,带论文。

系统的功能主要有:

(1)基本信息管理

基本信息分为学生信息和宿舍信息两部分,其功能是负责维护这些信息,对

它们进行增删查改等操作。

(2)宿舍分配管理

根据给定的宿舍信息与学生信息,按照一定的规则自动地给还未分配宿舍的

学生分配宿舍,学生可在该宿舍内自选床位,最终的宿舍分配信息可以以文件形

式(如 Excel 表格)导出。

(3)宿舍日常管理

主要包括卫生管理、报修管理、留言管理等。

卫生管理:记录并维护卫生检查信息。

报修管理:添加、查看、修改报修单信息。

留言管理:包括发布公告、失物招领、普通留言以及对这些信息的维护。

(4)离返校管理

对节假日学生的去向、寒暑假学生的留校以及返校登记信息进行统计及管

理,并以图表形式呈现统计信息。

(5)综合查询管理

包括查找学生信息、各楼栋/专业的学生宿舍分配情况、卫生检查情况、学

生离返校及留校信息、指定类型的留言、查看宿舍成员等。 

运行环境

idea/eclipse+mysql5.7+jdk1.8+maven3

项目技术

springboot + layui

免费领取下载链接-关注底部gongzhonghao:033
免费领取下载链接-关注底部gongzhonghao:033
免费领取下载链接-关注底部gongzhonghao:033


package com.usc.lzh.doms.service.impl;


import com.alibaba.fastjson.JSONArray;
import com.alibaba.fastjson.JSONObject;
import com.usc.lzh.doms.entity.*;
import com.usc.lzh.doms.mapper.DorMMapper;
import com.usc.lzh.doms.service.DorMService;
import com.usc.lzh.doms.utils.MyStringUtil;
import com.usc.lzh.doms.vo.*;
import org.apache.commons.lang3.StringUtils;
import org.apache.ibatis.session.ExecutorType;
import org.apache.ibatis.session.SqlSession;
import org.apache.xmlbeans.impl.xb.xsdschema.All;
import org.mybatis.spring.SqlSessionTemplate;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;

import javax.annotation.Resource;
import java.text.SimpleDateFormat;
import java.util.ArrayList;
import java.util.Arrays;
import java.util.Date;
import java.util.List;
import java.util.stream.Collectors;

@Service
public class DorMServiceImpl implements DorMService {

    @Resource
    private DorMMapper dormMapper;

    @Autowired
    private SqlSessionTemplate sqlSessionTemplate;

    /**
     * 查找报修信息
     *
     * @param riVo 分页查询的参数,负责的楼栋编号
     * @return
     */
    @Override
    public List<RepairInfo> findRepairInfoListByPage(RepairInfoVo riVo) {
        List<RepairInfo> list = dormMapper.findRepairInfoListByPage(riVo);
        return dealString(list);
    }

    // 解析brcode填充brarea/brbid/brrid和格式化日期字符串
    private List<RepairInfo> dealString(List<RepairInfo> list) {
        for (int i = 0; i < list.size(); i++) {
            String brcode = list.get(i).getBrcode().trim();
            String subtime = list.get(i).getSubtime();
            // 截取空格前的字符串,使日期格式为yy-MM-dd
            String date = MyStringUtil.timeTodate(subtime);
            list.get(i).setSubtime(date);

            String[] brArr = brcode.split("#");
            list.get(i).setBrarea(MyStringUtil.getBrarea(brArr[0]));
            list.get(i).setBrbid(brArr[1]);
            list.get(i).setBrrid(brArr[2]);
        }
        return list;
    }


    /**
     * 导出报修信息
     *
     * @param brcode     宿舍楼编号
     * @param statusCode 报修状态
     * @return
     */
    public List<RepairInfo> exportRepairInfo(String brcode, String statusCode) {
        String status = transStatusCode(statusCode);
        List<RepairInfo> list = dormMapper.exportRepairInfo(brcode, status);
        return dealString(list);
    }

    // 转换statusCode为数据库中的status
    private String transStatusCode(String status) {
        if (status != null && !status.equals("")) {
            Integer statusCode = Integer.parseInt(status.trim());
            switch (statusCode) {
                case 1:
                    status = "已处理";
                    break;
                case 2:
                    status = "未处理";
                    break;
                case 3:
                    status = "正在处理";
                    break;
            }
        } else {
            status = "";
        }
        return status;
    }

    /**
     * 批量更改报修状态
     *
     * @param params ids和status
     */
    @Override
    public boolean batchEditRepairStatus(String params) {
        try {
            // 将前端json数据解析出来
            JSONArray jsonArray = JSONArray.parseArray(params);
            JSONObject jsonObject = jsonArray.getJSONObject(0);

            String statusCode = (String) jsonObject.get("status");
            String status = transStatusCode(statusCode);
            // ids为要更新状态的报修单编号
            String ids = jsonObject.get("ids").toString();
            // 去掉两边的[]
            ids = ids.substring(1, ids.length() - 1);
            // 转为String字符串
            String[] idsArray = ids.split(",");
            // 字符数组转为int数组
            int[] array = Arrays.stream(idsArray).mapToInt(Integer::parseInt).toArray();
            // int数组转为List,装箱
            List<Integer> list = Arrays.stream(array).boxed().collect(Collectors.toList());
            dormMapper.batchEditRepairStatus(list, status);
            return true;
        } catch (Exception e) {
            return false;
        }
    }

    /**
     * 查询卫生检查信息
     *
     * @param ciVo
     * @return
     */
    @Override
    public List<CleanInfo> findCleanInfoListByPage(CleanInfoVo ciVo) {
        List<CleanInfo> list = dormMapper.findCleanInfoListByPage(ciVo);
        for (int i = 0; i < list.size(); i++) {
            String brcode = list.get(i).getBrcode().trim();
            String time = list.get(i).getTime();
            // 截取空格前的字符串,使日期格式为yy-MM-dd
            String date = MyStringUtil.timeTodate(time);
            list.get(i).setTime(date);

            String[] brArr = brcode.split("#");
            list.get(i).setBrarea(MyStringUtil.getBrarea(brArr[0]));
            list.get(i).setBrbid(brArr[1]);
            list.get(i).setBrrid(brArr[2]);
        }
        return list;
    }

    /**
     * 更改卫生检查信息
     *
     * @param ci
     * @return
     */
    @Override
    public int updateCleanInfo(CleanInfo ci) {
        try {
            // 如果宿舍号改了
//            String brcode = ci.getBrcode();
//            if (StringUtils.isNotBlank(brcode)){
//                String brrid = brcode.split("#")[2];
//                ci.setBrbid(brrid);
//            }
            int result = dormMapper.updateCleanInfo(ci);
            return result;
        } catch (Exception e) {
            e.printStackTrace();
            return -1;
        }
    }

    /**
     * 删除卫生检查记录
     *
     * @param id
     * @return
     */
    @Override
    public int deleteCleanInfo(String id) {
        try {
            int actualId = Integer.parseInt(id);
            int result = dormMapper.deleteCleanInfo(actualId);
            return result;
        } catch (Exception e) {
            e.printStackTrace();
            return -1;
        }
    }

    /**
     * 批量添加卫生检查记录
     *
     * @param params  卫生检查信息的json数据
     * @param checker 检查人
     * @return
     */
    @Override
    public boolean batchInsertCleanInfo(String params, String checker) {
        String classPath = "com.usc.lzh.doms.mapper.DorMMapper.batchInsertCleanInfo";
        // 获取mysql的session并且关闭自动提交
        SqlSession sqlSession = sqlSessionTemplate.getSqlSessionFactory().openSession(ExecutorType.BATCH, false);
        try {
            List<CleanInfo> list = dealCleanInfoAddParams(params, checker);
            // 插入
            sqlSession.insert(classPath, list);
            // 提交
            sqlSession.commit();
            // 防止内存崩溃
            sqlSession.clearCache();
        } catch (Exception e) {
            e.printStackTrace();
            // 回滚
            sqlSession.rollback();
            return false;
        } finally {
            // 关闭
            sqlSession.close();
        }
        return true;
    }

    private List<CleanInfo> dealCleanInfoAddParams(String params, String checker) throws Exception {
        List<CleanInfo> list = new ArrayList<>();
        if (StringUtils.isNotBlank(params)) {
            // json数据转为JSONArray对象
            JSONArray jsonArray = JSONArray.parseArray(params);
            // 遍历json数组,将json对象转为CleanInfo对象并且存到list中
            for (int i = 0; i < jsonArray.size(); i++) {
                CleanInfo ci = new CleanInfo();
                JSONObject obj = jsonArray.getJSONObject(i);
                String brarea = obj.get("brarea").toString().trim();
                String brbid = obj.get("brbid").toString().trim();
                String brrid = obj.get("brrid").toString().trim();
                String brcode = MyStringUtil.getBrcode(brarea, brbid, brrid);
                ci.setBrarea(brarea);
                ci.setBrbid(brbid);
                ci.setBrrid(brrid);
                ci.setBrcode(brcode);
                ci.setTime(obj.get("time").toString().trim());
                String grade = obj.get("grade").toString().trim();
                if (StringUtils.isNotBlank(grade)) {
                    ci.setGrade(Integer.parseInt(grade));
                }
                ci.setContent(obj.get("content").toString().trim());
                ci.setChecker(checker);
                list.add(ci);
            }
        }
        return list;
    }

    /**
     * 查找宿舍信息
     *
     * @param biVo
     * @return
     */
    @Override
    public List<RepairInfo> findBuildRoomInfoListByPage(BuildRoomInfoVo biVo) {
        List<RepairInfo> list = dormMapper.findBuildRoomInfoListByPage(biVo);
        return list;
    }


    /**
     * 修改宿舍信息
     *
     * @param bi
     * @return
     */
    @Override
    public int updateBuildRoomInfo(BuildRoomInfo bi) {
        try {
            int result = dormMapper.updateBuildRoomInfo(bi);
            return result;
        } catch (Exception e) {
            e.printStackTrace();
            return -1;
        }
    }

    /**
     * 删除宿舍信息
     *
     * @param brcode 宿舍编号
     * @return
     */
    @Override
    public int deleteBuildRoomInfo(String brcode) {
        try {
            int result = dormMapper.deleteBuildRoomInfo(brcode);
            return result;
        } catch (Exception e) {
            e.printStackTrace();
            return -1;
        }
    }

    /**
     * 添加宿舍信息
     *
     * @param list
     * @return
     */
    @Override
    public boolean addBuildRoomInfo(List<BuildRoomInfo> list) {
        String classPath = "com.usc.lzh.doms.mapper.DorMMapper.addBuildRoomInfo";
        // 获取mysql的session并且关闭自动提交
        SqlSession sqlSession = sqlSessionTemplate.getSqlSessionFactory().openSession(ExecutorType.BATCH, false);
        try {
            // 插入
            sqlSession.insert(classPath, list);
            // 提交
            sqlSession.commit();
            // 防止内存崩溃
            sqlSession.clearCache();
        } catch (Exception e) {
            e.printStackTrace();
            // 回滚
            sqlSession.rollback();
            return false;
        } finally {
            // 关闭
            sqlSession.close();
        }
        return true;
    }

    /**
     * 查看自己发布的公告/失物招领信息
     *
     * @param mbVo
     * @return
     */
    @Override
    public List<MessageBoard> findMessageListByPage(MessageBoardVo mbVo) {
        System.out.println(mbVo.getType());
        List<MessageBoard> list = dormMapper.findMessageListByPage(mbVo);
        for (int i = 0; i < list.size(); i++) {
            // 截取日期
            String time = list.get(i).getTime();
            String date = MyStringUtil.timeTodate(time);
            list.get(i).setTime(date);

            // 解析type
            Integer type = list.get(i).getType();
            list.get(i).setTypeValue(MyStringUtil.mbTypeToValue(type));

            // 解析brcode
            String brcode = list.get(i).getBrcode();
            System.out.println(brcode);
            if (StringUtils.isNotBlank(brcode)) {
                String[] split = brcode.split("#");
                switch (split.length) {
                    case 1:
                        list.get(i).setBrarea(MyStringUtil.getBrarea(split[0]));
                        break;
                    case 2:
                    case 3:
                        list.get(i).setBrarea(MyStringUtil.getBrarea(split[0]));
                        list.get(i).setBrbid(split[1]);
                        break;
                }
            }
        }
        return list;
    }

    /**
     * 添加公告信息
     *
     * @param mb
     * @return
     */
    @Override
    public int addMessage(MessageBoard mb) {
        try {
            // time是当前时间
            Date date = new Date();
            SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
            mb.setTime(sdf.format(date));

            // 拼接brcode
            String brcode = MyStringUtil.getBrcode(mb.getBrarea(), mb.getBrbid(), "");
            mb.setBrcode(brcode);

            System.out.println(mb);

            int result = dormMapper.addMessage(mb);
            return result;
        } catch (Exception e) {
            e.printStackTrace();
            return -1;
        }
    }

    /**
     * 修改公告信息
     *
     * @param mb
     * @return
     */
    @Override
    public int updateMessage(MessageBoard mb) {
        try {
            int result = dormMapper.updateMessage(mb);
            return result;
        } catch (Exception e) {
            e.printStackTrace();
            return -1;
        }
    }

    /**
     * 批量删除公告/失物招领信息
     *
     * @param list id数组
     * @return
     */
    @Override
    public boolean deleteMessage(List<Integer> list) {
        try {
            dormMapper.deleteMessage(list);
            return true;
        } catch (Exception e) {
            e.printStackTrace();
            return false;
        }
    }

    /**
     * 查找留校信息列表
     *
     * @param stVo
     * @return
     */
    @Override
    public List<StayInfo> findStayInfoListByPage(StayInfoVo stVo) {
        stVo.setApprovetype(1);
        List<StayInfo> list = dormMapper.findStayInfoListByPage(stVo);
        return list;
    }

    /**
     * 导出学生留校信息
     *
     * @param brarea
     * @param brbid
     * @return
     */
    @Override
    public List<StayInfo> exportStayInfo(String brarea, String brbid) {
        StayInfoVo stVo = new StayInfoVo();
        stVo.setBrbid(brbid);
        stVo.setBrarea(brarea);
        stVo.setApprovetype(1);
        List<StayInfo> list = dormMapper.findStayInfoListByPage(stVo);
        return list;
    }

    /**
     * 获取留校学生的统计数据
     *
     * @param brarea
     * @param brbid
     * @return
     */
    @Override
    public JSONObject getStayInfoEchartsData(String brarea, String brbid) {
        // 最后返回的数据
        JSONObject data = new JSONObject();
        // 宿舍区
        JSONArray bsArray = new JSONArray();
        // 宿舍区及人数
        JSONArray countArray = new JSONArray();
        List<String> brareas = new ArrayList<>();
        if (StringUtils.isNotBlank(brarea)) {
            brareas.add(brarea);
        } else {
            brareas = dormMapper.getStayInfoBrareas();
        }
        for (String item : brareas) {
            bsArray.add(item);
            Integer count = dormMapper.getStayInfoOnBrareaCount(item, brbid, 1);
            JSONObject obj = new JSONObject();
            obj.put("name", item);
            obj.put("value", count);
            countArray.add(obj);
        }
        data.put("data", bsArray);
        data.put("series", countArray);
        return data;
    }

    /**
     * 查找宿舍分配信息
     *
     * @param aiVo 按专业、班级、宿舍区、楼栋进行查找
     * @return
     */
    @Override
    public List<AllocationInfo> findAllocationInfoListByPage(AllocationInfoVo aiVo) {
        List<AllocationInfo> list = dormMapper.findAllocationInfoListByPage(aiVo);
        return list;
    }

    /**
     * 导出宿舍分配信息
     *
     * @param brarea
     * @param brbid
     * @return
     */
    public List<AllocationInfo> exportAllocationInfo(String brarea, String brbid) {
        List<AllocationInfo> list = dormMapper.exportAllocationInfo(brarea, brbid);
        return list;
    }

    /**
     * 查找空余寝室
     *
     * @param biVo
     * @return
     */
    public List<BuildRoomInfo> findFreeRoomListByPage(BuildRoomInfoVo biVo) {
        return dormMapper.findFreeRoomListByPage(biVo);
    }

    /**
     * 查找未分配寝室的学生
     *
     * @param siVo
     * @return
     */
    public List<StudentInfo> findNotAllocateStudentListByPage(StudentInfoVo siVo) {
        return dormMapper.findNotAllocateStudentListByPage(siVo);
    }

    private List<StudentInfo> MsiList = null;//男生
    private List<StudentInfo> FsiList = null;//女生
    private List<BuildRoomInfo> MbiList = null;//男生寝室
    private List<BuildRoomInfo> FbiList = null;//女生寝室
    private List<AllocationInfo> aiList = new ArrayList<>();
    private List<BuildRoomInfo> updateList = new ArrayList<>();

    /**
     * 判断床位够不够
     *
     * @return
     */
    public boolean judgeIsEnough() {
        initList();//初始化列表
        int mbed = 0;//男寝床位
        int fbed = 0;//女寝床位
        for (int i = 0; i < MbiList.size(); i++) {
            mbed += MbiList.get(i).getFree();
        }
        for (int i = 0; i < FbiList.size(); i++) {
            fbed += FbiList.get(i).getFree();
        }
        int mstucount = MsiList.size();//男生人数
        int fstucount = FsiList.size();//女生人数
        System.out.println(mbed + "--" + mstucount);
        System.out.println(fbed + "--" + fstucount);
        if (mbed >= mstucount && fbed >= fstucount) {
            return true;
        }
        return false;
    }

    /**
     * 初始化列表
     */
    private void initList() {
        StudentInfoVo msi = new StudentInfoVo();
        msi.setStusex("男");
        StudentInfoVo fsi = new StudentInfoVo();
        fsi.setStusex("女");
        MsiList = dormMapper.findNotAllocateStudentListByPage(msi);
        FsiList = dormMapper.findNotAllocateStudentListByPage(fsi);

        BuildRoomInfoVo mbi = new BuildRoomInfoVo();
        mbi.setSex("男");
        BuildRoomInfoVo fbi = new BuildRoomInfoVo();
        fbi.setSex("女");
        MbiList = dormMapper.findFreeRoomListByPage(mbi);
        FbiList = dormMapper.findFreeRoomListByPage(fbi);
    }

    /**
     * 分配宿舍(全部分配)
     *
     * @return
     */
    @Override
    public boolean doAssignAll() {
        try {
            clearList();
            initList();
            AllocateRoomToStudent(MbiList, MsiList);//分配女寝
            AllocateRoomToStudent(FbiList, FsiList);//分配男寝
            if (aiList.size() != 0) {
                boolean result = batchInsertAllocationInfo(aiList);// 批量插入宿舍分配信息
                // 插入失败,抛异常
                if (!result) {
                    throw new Exception();
                }
                dormMapper.batchUpdateBuildRoomInfo(updateList);
                updateList.clear();
            }
            return true;
        } catch (Exception e) {
            e.printStackTrace();
            return false;
        }
    }

    /**
     * 分配宿舍给学生
     *
     * @param biList 宿舍列表
     * @param siList 学生列表
     */
    public void AllocateRoomToStudent(List<BuildRoomInfo> biList, List<StudentInfo> siList) {
        int index = 0;//第几个学生
        int biLen = biList.size();
        int siLen = siList.size();
        //遍历宿舍,若宿舍或学生已分配完,退出循环
        for (int i = 0; i < biLen && index < siLen; i++) {
            BuildRoomInfo room = biList.get(i);//取一间宿舍
            int free = room.getFree();//获取它的容量
            String brcode = room.getBrcode();
            int j = 1;
            for (; j <= free && index < siLen; j++) {
                StudentInfo si = siList.get(index);
                index++;
                String stuid = si.getStuid();
                AllocationInfo ai = new AllocationInfo();
                ai.setBrcode(brcode);
                ai.setStuid(stuid);
                aiList.add(ai);
                System.out.println(ai);
            }
            //为更新空宿舍表做准备
            updateList.add(new BuildRoomInfo(brcode, free - j + 1));
        }
    }

    /**
     * 显示分配结果
     *
     * @param aiVo
     * @return
     */
    @Override
    public List<AllocationInfo> viewAllocateResult(AllocationInfoVo aiVo) {
//        int page = aiVo.getPage();
//        int row = aiVo.getLimit();
//        int start = (page - 1) * row;
        if (aiList == null || aiList.size() == 0) {
            return null;
        }
        return dormMapper.viewAllocateResult(aiList);
//        return dormMapper.viewAllocateResult(aiList, start, row);
    }

    /**
     * 批量插入宿舍分配信息
     *
     * @param list
     * @return
     */
    public boolean batchInsertAllocationInfo(List<AllocationInfo> list) {
        String classPath = "com.usc.lzh.doms.mapper.DorMMapper.batchInsertAllocationInfo";
        // 获取mysql的session并且关闭自动提交
        SqlSession sqlSession = sqlSessionTemplate.getSqlSessionFactory().openSession(ExecutorType.BATCH, false);
        try {
            // 插入
            sqlSession.insert(classPath, list);
            // 提交
            sqlSession.commit();
            // 防止内存崩溃
            sqlSession.clearCache();
        } catch (Exception e) {
            e.printStackTrace();
            // 回滚
            sqlSession.rollback();
            return false;
        } finally {
            // 关闭
            sqlSession.close();
        }
        return true;
    }

    /**
     * 清空列表
     */
    private void clearList() {
        if (updateList != null) {
            updateList.clear();
        }
        if (MbiList != null) {
            MbiList.clear();
        }
        if (FbiList != null) {
            FbiList.clear();
        }
        if (MsiList != null) {
            MsiList.clear();
        }
        if (FsiList != null) {
            FsiList.clear();
        }
        if (aiList != null) {
            aiList.clear();
        }
    }
}

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

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

相关文章

UART通讯简介

UART全称Universal AsynchronousReceiver/Transmitter&#xff0c;通用异步收发传输器。 一、工作原理 和其它串口一样&#xff0c;数据按照二进制从低位到高位一位一位的传输&#xff0c;能将要传输的数据在串行通信与并行通信之间加以转换&#xff0c;能够灵活地与外部设备进…

网络编程(未完待续)

网络编程 文章目录网络编程前置概念1- 字节序高低地址与高低字节高低地址&#xff1a;高低字节字节序大端小端例子代码判断当前机器是大端还是小端为何要有字节序字节序转换函数需要字节序转换的时机例子一例子二2- IP地址转换函数早期(不用管)举例现在与字节序转换函数相比:**…

Open Street Map—2023年水系数据

之前文章我们给大家分享了从OSM地图下载的道路数据&#xff08;可查看之前推送的文章&#xff09;&#xff0c; 这一篇我们给大家带来的是从OSM地图下载的水系数据&#xff01;我们下载了全国范围&#xff08;包括港澳台&#xff09;的水系数据&#xff0c;下载时间为2023年2月…

硬件篇-配置

写在最前 这已经可以成为垃圾佬配置了。。。 机箱->239元 机箱选用的itx迷你机箱&#xff0c;为了后期nas方便拓展选了4盘位&#xff0c;该机箱还是比较符合我的预期的&#xff0c;颇有种麻雀虽小五脏俱全的感觉&#xff0c;机箱可以安装matx主板和itx主板&#xff0c;还是…

聊聊MySQL中的事务,MVCC

事务我们知道&#xff0c;事务具有四大特性——ACIDA atomicity 指的是原子性C consistency 指的是一致性I isolation 指的是隔离性D durability 指的是持久性四大特性的实现原理原子性原子性在这指的是整个事务操作&#xff0c;要么同时成功要么同时失败。让它变成一个整体。同…

若依管理系统搭建运行环境--基于SpringBootVue前端分离版

若依框架搭建运行环境-如何下载一、技术支持&#xff1a;二、Redis安装及运行三 目录结构四、导入数据库五 修改配置文件1.application-druid.yml文件 &#xff08;路径&#xff1b;RuoYi-Vue-master\ruoyi-admin\src\main\resources\application-druid.yml&#xff09;2.appli…

越界访问数组

越界访问是指访问&#xff08;操作修改&#xff09;了不属于自己的空间 我们以如下代码为例&#xff1a;此代码在vs中进行 #include <stdio.h> int main() {int i 0;int arr[] {1,2,3,4,5,6,7,8,9,10};for(i0; i<12; i){arr[i] 0;printf("hello\n");}r…

阿里云平台与MQTTX软件通信

阿里云平台与MQTTX软件通信 上一篇文章介绍了如何创建阿里云物联网平台以及MQTT.fx软件通信配置&#xff1a;https://blog.csdn.net/weixin_46251230/article/details/128993864 但MQTT.fx软件需要许可证才能使用&#xff0c;所以使用另一款软件MQTTX来代替 MQTTX软件下载 官…

【C++】类与对象(二)

前言 在前一章时我们已经介绍了类与对象的基本知识&#xff0c;包括类的概念与定义&#xff0c;以及类的访问限定符&#xff0c;类的实例化&#xff0c;类的大小的计算&#xff0c;以及C语言必须传递的this指针&#xff08;C中不需要我们传递&#xff0c;编译器自动帮我们实现&…

CSP-《I‘m stuck!》-感悟

题目 做题过程 注&#xff1a;黄色高亮表示需要注意的地方&#xff0c;蓝色粗体表示代码思路 好久没有写过代码了&#xff0c;今天做这道编程题&#xff0c;简直是灾难现场。 上午编程完后发现样例没有通过&#xff0c;检查发现算法思路出现了问题&#xff1a;我计数了S不能到…

【每日一题Day116】LC1138字母板上的路径 | 模拟

字母板上的路径【LC1138】 我们从一块字母板上的位置 (0, 0) 出发&#xff0c;该坐标对应的字符为 board[0][0]。 在本题里&#xff0c;字母板为board ["abcde", "fghij", "klmno", "pqrst", "uvwxy", "z"]&…

BFS的使用(acwing提高课之搜索)

bfsBFS1. 多源bfs2.最小步数模型1.魔板2.八数码问题3.双端队列广搜4.双向广搜5.A*算法BFS bfs是搜索算法里面最基础的算法&#xff0c;对于队首的点&#xff0c;每次搜索其周围所有的点&#xff0c;然后将其入队。队列里面的点具有两个特性&#xff1a; &#xff08;1&#xf…

OpenWrt路由器设置IPv6域名动态解析,同时实现IPv4设备访问IPv6节点

文章目录0、前言1、准备工作2、详细步骤2.1、OpenWrt路由器软件包安装2.2、防火墙放行入站数据&#xff08;修改为“接受”并保存应用&#xff09;2.3、路由器做好ipv6设置&#xff08;略&#xff09;2.4、域名解析服务商对域名的解析设置2.5、路由器中动态域名插件的设置3、关…

23.2.12 LC每日一题 —— 极尽地高效利用题目中所提供的有效信息

文章目录23.2.12 LC每日一题 —— 极尽地高效利用题目中所提供的有效信息题目链接&#xff1a;题目大意&#xff1a;注意&#xff1a;示例&#xff1a;参考代码&#xff08;py3&#xff09;&#xff1a;总结23.2.12 LC每日一题 —— 极尽地高效利用题目中所提供的有效信息 题目…

Redis内存存储效率问题

目录 内存碎片是如何形成的&#xff1f; 如何判断是否有内存碎片&#xff1f; 如何清理内存碎片&#xff1f; INFO命令 实习期间&#xff0c;了解到&#xff0c;企业级开发中多个项目使用Redis&#xff0c;运行Redis实例的有可能是同一台物理机器&#xff0c;那么&#xff…

【水文模型】评价指标

水文模型模拟效果评价指标1 皮尔逊相关系数&#xff08;Pearson’s correlation coefficient, PCC&#xff09;2 百分比偏差&#xff08;Percent bias, Pbias&#xff09;3 纳什效率系数&#xff08;the Nash-Sutcliffe efficiency coefficient, NSE&#xff09;4 克林-古普塔效…

【大前端 合集】包管理工具差异性

包管理工具 这里会对市场上使用最多的包管理工具 yarn/ npm 以及新秀 pnpm 做一个横向分析 1. 前言 在做分析以及学习之前&#xff0c;最好可以读下 pnpm 官网。可以理解下 pnpm 的核心宗旨 当使用 npm 或 Yarn 时&#xff0c;如果你有 100 个项目&#xff0c;并且所有项目都有…

matlab搭建IAE,ISE,ITAE性能指标

目录前言准备IAEISEITAE前言 最近在使用matlab搭建控制系统性能评价指标模型&#xff0c;记录一下 准备 MATLAB R2020 IAE IAE函数表达式如下所示&#xff1a; IAE函数模型如下所示&#xff1a; ISE ISE函数表达式如下所示&#xff1a; ISE函数模型如下所示&#xff…

来看看你的是否会正确的使用索引

索引&#xff0c;可以有效提高我们的数据库搜索效率&#xff0c;各种数据库优化八股文里都有相关的知识点可背&#xff0c;不过单纯的被条目其实很容易忘记。 所以我想和大家聊一聊这个索引的正确使用方法&#xff0c;结合一些具体的例子来帮助大家理解索引优化。 1、索引列独…

Redis使用方式

一、Redis基础部分: 1、redis介绍与安装比mysql快10倍以上 *****************redis适用场合**************** 1.取最新N个数据的操作 2.排行榜应用,取TOP N 操作 3.需要精确设定过期时间的应用 4.计数器应用 5.Uniq操作,获取某段时间所有数据排重值 6.实时系统,反垃圾系统7.P…