基于SpringBoot+Vue的超市货物管理系统

news2024/11/28 20:41:14

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

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


一、项目背景介绍:

在1990年代初期,计算机和网络开始在全球范围内普及。斯坦福大学的学生于1991年建立了世界上第一个万维网服务器,这一事件的发生标志着世界互联网的诞生。在这种时代背景下依然还有许多超市的货物管理方式是依赖传统的手工记录和人工管理的方式,这种方式不仅存在记录的据不正确、工作人员的工作量虚高还存在着管理效率低下等问题。
因此本文旨在研究一种基于互联网方式的的货物管理系统,以此来为超市管理提供了一种更加高效、准确和便捷的方式。未来的研究方向可以包括进一步的功能扩展和性能优化,以满足不断变化的市场需求和用户需求。

二、项目技术简介:

  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:‘管理员’(admins)

字段名类型默认值列注释
idbigintNULL主键ID
user_namevarcharNULL用户名(select)
pass_wordvarcharNULL密码
head_imgvarcharNULL头像(img)
nick_namevarcharNULL姓名
create_timedatetimeNULL创建时间

2:‘报损管理’(breakage)

字段名类型默认值列注释
idbigintNULL报损编号
pro_idbigintNULL货品编号
numbigintNULL数量
detailtextNULL详细信息
create_timedatetimeNULL创建时间
create_idbigintNULL创建人
handle_idbigintNULL处理人编号
statusintNULL状态[0:未处理,1:已处理]

3:‘入库盘点’(checks)

字段名类型默认值列注释
idbigintNULL盘点编号
records_idbigintNULL入库编号
create_timedatetimeNULL创建时间
update_timedatetimeNULL盘点时间
handle_idbigintNULL盘点人编号
statusintNULL当前状态[0:未盘点,1:已入库,2:货品有误]
remarktextNULL备注信息

4:‘生产商管理’(manufacturer)

字段名类型默认值列注释
idbigintNULL生产商编号
manu_namevarcharNULL生产商名称
manu_locationvarcharNULL所在地址
manu_manvarcharNULL负责人名称
manu_telvarcharNULL联系方式
manu_remarktextNULL详细信息
create_timedatetimeNULL创建时间

5:‘出库记录’(out_storage)

字段名类型默认值列注释
idbigintNULL出库编号
pro_idbigintNULL货品编号
numbigintNULL出库数量
infotextNULL备注
create_timedatetimeNULL创建时间
handle_idbigintNULL操作人

6:‘货品信息’(produce)

字段名类型默认值列注释
idbigintNULL货品编号
pro_namevarcharNULL货品名称
pro_supplier_idbigintNULL货品供应商编号
pro_producer_idbigintNULL货品生产商编号
pro_birthdaydatetimeNULL生产日期
pro_monthintNULL保质期(月)
pro_detailtextNULL型号规格
pro_imgvarcharNULL货品图片
pro_remarkvarcharNULL货物说明
create_timedatetimeNULL创建时间
stockintNULL当前库存
pricevarcharNULL价格

7:‘入库记录’(put_storage)

字段名类型默认值列注释
idbigintNULL入库编号
pro_idbigintNULL货品编号
pricevarcharNULL进货价
numintNULL数量
create_timedatetimeNULL入库时间
admin_idbigintNULL负责人编号
handle_idbigintNULL经手人编号

8:‘退货记录’(sales_return)

字段名类型默认值列注释
idbigintNULL退货编号
pro_idbigintNULL货品编号
casestextNULL退货原因
numbigintNULL退货数量
create_timedatetimeNULL创建时间

9:‘供应商管理’(supplier)

字段名类型默认值列注释
idbigintNULL供应商编号
sup_namevarcharNULL供应商名称
sup_locationvarcharNULL所在地址
sup_manvarcharNULL负责人名称
sup_telvarcharNULL联系方式
sup_remarktextNULL详细信息
create_timedatetimeNULL创建时间

10:‘用户管理’(users)

字段名类型默认值列注释
idbigintNULL用户编号
usernamevarcharNULL用户名
passwordvarcharNULL密码
nick_namevarcharNULL昵称
header_imgvarcharNULL头像
create_timedatetimeNULL创建时间

五、功能模块:

  1. 管理员登录功能实现:管理员可以在后台管理系统登录页面中输入自己的账号密码进入到超市货物管理系统的后台管理界面,当输入的账号密码有误时系统会给出对应的提示如账号不存在、密码错误、账号或者密码不能为空等提示。

    管理员登录功能实现

  2. 货品信息管理功能实现:管理员在登录系统后可以在货品信息管理界面中对系统内的货品进行管理,后续的入库信息管理、报损信息管理等功能都会查找当前功能界面中添加的货品信息,在入库管理中管理员可以对超市内的货品进行进行登记录入,同时管理员还能对登记错误的货品信息进行管理,如管理员可以在当前页面对货品进行进行删除、出库等功能,另外管理员还能根据关键字快速定位到指定的货品信息从而更好的进行管理。

    货品信息管理功能实现

  3. 入库信息管理功能实现:管理员在登录系统后可以在入库信息管理界面中对系统内的入库信息进行管理,货品信息在货品信息管理中已经进行登记了故当前管理界面只能针对已经登记的货品信息进行入库,不能入库尚未登记的货品信息。另外管理员还能根据关键字来快速定位入库的信息。

    入库信息管理功能实现

  4. 应商信息管理功能实现:管理员在登录系统后可以在供应商信息管理界面中对系统内的供应商进行管理,可以对新的供应商信息进行登记,根据关键字快速定位数据并且对有变动的供应商信息进行修改和删除。

    应商信息管理功能实现

  5. 生产商信息管理功能实现:管理员在登录系统后可以在生产商信息管理界面中对系统内的生产商进行管理,可以对新的生产商信息进行登记,根据关键字快速定位数据并且对有变动的供应商信息进行修改和删除。

    生产商信息管理功能实现

  6. 报损信息管理功能实现:管理员在登录系统后可以在报损信息管理界面中对系统的报损信息进行管理,当货品出现损坏和过期等情况可在当前页面进行登记,保证库存数据与可出售的商品数据保持一致这样便不会出现客户需要购买溢出库存量数据的情况,在当前页面登记损坏的数据后可以对登记的信息进行进一步的修改在确认数据无误后,在处理完损坏的货品后点击已处理按钮后库存数会自定减去报损数,当然当库存数少于报损数时系统会给出对应的提示,并且数据状态不变,这种情况便是出现了登记错误,可以选择修改或者删除当前报损记录,当数据较多时可以根据关键字快速定位报损数据。

    报损信息管理功能实现

  7. 管理员信息管理功能实现:管理员在登录系统后可以在管理员信息管理界面中对可以登录系统后台管理的用户进行管理即系统管理员信息进行管理,在当前页面可以登记新的管理员,对已有的管理员信息进行维护保持数据的一致性,也能删除管理员信息,在删除后被删除的管理员便不能再登录当前系统了,因为系统已经不存在当前管理员了,在当前页面也无法通过关键字来快速定位到数据了,因为数据已经不存在了。

    管理员信息管理功能实现

  8. 退货信息管理功能实现:管理员在登录系统后可以在退货信息记录界面中对系统内的退货信息进行管理,当进货的数量较多或者存在过期的货品管理员便可以对货品进行退货,点击登记按钮后便可以对退货信息进行登录,退货数量是无法超出库存数的,当出现这种情况系统会给出提示并且无法保存当前退货信息,在成功点击后列表中会渲染新的退货记录,管理员可以选择删除退货记录。当数据的数据较多时管理员可以通过关键字来快速定位数据进行删除节省管理员的时间。

    退货信息管理功能实现

  9. 出库记录信息管理功能实现:管理员在登录系统后可以在用户信息管理界面中对系统可以登录系统前台页面的用户进行管理即系统用户信息进行管理,在当前页面可以登记新的用户信息,用户也能在页面上面点击注册按钮自行进行注册,对已有的用户信息进行维护保持数据的一致性,也能删除已有用户信息,在删除后被删除的用户便不能再登录当前系统了,因为系统已经不存在当前用户了,在当前页面也无法通过关键字来快速定位到数据了,因为数据已经不存在了。

    出库记录信息管理功能实现

  10. 用户登录注册功能实现:用户可以在系统页面中输入账号密码登录进入超市货物管理系统的用户端中,如没有账号的人员可以点击注册按钮在登记对应的基本信息后可进行注册,注册完以后可以重新登录,输入刚注册的账号密码后可进入系统内。

    用户登录注册功能实现

  11. 系统首页功能实现:在用户登录进超市货物管理系统用户端以后首先看到的便是系统首页,在系统首页中用户可以查看商店点的库存分析统计图,该统计图支持图形查看与文字描述查看,并且可以点击下载按钮,下载当前页面的显示内容,还能点击刷新按钮实时查看系统内的库存分析。

    系统首页功能实现

  12. 库存查询功能实现:在用户登录进超市货物管理系统用户端以后可以点击库存查询菜单按钮可以进入库存查询页面,在库存查询页面用户可以查看当前 超市内的库存信息,系统还支持根据关键字快速定位到指定的商品库存信息。

    库存查询功能实现

  13. 前端开发目录结构及主要文件:在系统的前端开发使用的是现在很火热的Vue来进行的,在当前系统中下图是当前系统的前段开发的目录结构,SRC目录为开发的根目录,所有的开发都是在SRC目录下进行的,其中最为主要目录分别是api目录、component目录、router目录、views目录。
    api目录:用于存放和后端交互的接口。
    component目:用于保存一些公共的组件,其他地方只需要调用不需要再次编写。
    router目录:保存全局路由。
    views目录:用户存放各个部分的页面。

    前端开发目录结构及主要文件

  14. 后端开发目录结构及主要文件:在系统的后前端开发使用的SpringBoot结合Mybatis-plus来进行的开发,下图是系统后端开发的目录结构。下面我将详细介绍一下主要目录的功能和一些重要的文件。

    后端开发目录结构及主要文件

六、代码示例:

    /**
     * 生成验证码
     */
    @GetMapping("/captchaImage")
    public AjaxResult getCode(HttpServletResponse response) throws IOException
    {
        AjaxResult ajax = AjaxResult.success();
        boolean captchaEnabled = configService.selectCaptchaEnabled();
        ajax.put("captchaEnabled", captchaEnabled);
        if (!captchaEnabled)
        {
            return ajax;
        }

        // 保存验证码信息
        String uuid = IdUtils.simpleUUID();
        String verifyKey = CacheConstants.CAPTCHA_CODE_KEY + uuid;

        String capStr = null, code = null;
        BufferedImage image = null;

        // 生成验证码
        String captchaType = RuoYiConfig.getCaptchaType();
        if ("math".equals(captchaType))
        {
            String capText = captchaProducerMath.createText();
            capStr = capText.substring(0, capText.lastIndexOf("@"));
            code = capText.substring(capText.lastIndexOf("@") + 1);
            image = captchaProducerMath.createImage(capStr);
        }
        else if ("char".equals(captchaType))
        {
            capStr = code = captchaProducer.createText();
            image = captchaProducer.createImage(capStr);
        }

        redisCache.setCacheObject(verifyKey, code, Constants.CAPTCHA_EXPIRATION, TimeUnit.MINUTES);
        // 转换流信息写出
        FastByteArrayOutputStream os = new FastByteArrayOutputStream();
        try
        {
            ImageIO.write(image, "jpg", os);
        }
        catch (IOException e)
        {
            return AjaxResult.error(e.getMessage());
        }

        ajax.put("uuid", uuid);
        ajax.put("img", Base64.encode(os.toByteArray()));
        return ajax;
    }
    /**
     * 通用的本地文件上传
     *
     * @param multipartFile 文件对象
     * @return 文件访问链接URL
     */
    @PostMapping("/file")
    public SimpleResponse uploadImg(@RequestParam("file") MultipartFile file) {
        // 文件后缀
        String suffix = file.getOriginalFilename().substring(file.getOriginalFilename().lastIndexOf(".") + 1);
        File savePathFile = new File(newTomcatFolder);
        if (!savePathFile.exists()) {
            // 若不存在该目录,则创建目录
            savePathFile.mkdir();
        }
        // 通过UUID生成唯一文件名
        String filename = UUID.randomUUID() + "." + suffix;
        try {
            // 将文件保存指定目录
            file.transferTo(new File(newTomcatFolder + filename));
        } catch (Exception e) {
            e.printStackTrace();
            return SimpleResponse.error("保存文件异常");
        }
        // 返回访问链接
        return SimpleResponse.success(newTomcatHost + filename);
    }
    @PostMapping("/login")
    public ReturnMsg manageLogin(@RequestBody Map<String, String> param) {
        if (StrUtil.isEmpty(param.get("username")) || StrUtil.isEmpty(param.get("password"))) {
            return ReturnMsg.error("用户名或密码错误!");
        }
        ManageDTO manageDTO = new ManageDTO();
        manageDTO.setUserName(param.get("username"));
        manageDTO.setPassWord(param.get("password"));
        QueryWrapper<ManageDTO> manageDTOQueryWrapper = new QueryWrapper<>(manageDTO);
        manageDTOQueryWrapper.last("limit 1");
        ManageDTO adminDTOS = manageService.getOne(manageDTOQueryWrapper);
        if (adminDTOS == null) return ReturnMsg.error("用户名或密码错误!");
        Map<String, Object> map = new HashMap<>();
        map.put("avatar", StrUtil.isNotBlank(adminDTOS.getPhotoImg()) ? adminDTOS.getPhotoImg() : "https://wpimg.wallstcn.com/f778738c-e4f8-4870-b634-56703b4acafe.gif");
        map.put("introduction", adminDTOS.getName() + ",你好!");
        map.put("name", adminDTOS.getName());
        map.put("roles", Arrays.asList("admin"));
        map.put("type", adminDTOS.getStatus());
        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);
    }

七、论文参考:

论文参考···论文参考图

八、项目总结:

本次项目开发是一个基于互联网的货物管理系统,旨在解决传统的手工记录和人工管理的方式带来的数据准确性、工作量和管理效率等问题。
在开发过程中,我们采用了SpringBoot和Vue作为总体框架前后端的总体框架,并使用了MySQL数据库用于数据存储与管理。同时,在开发过程中使用ElementUI和Mybatis-Plus来提高开发过程中的效率与质量。在本次项目中,我们设计了一个测试用例管理系统,通过系统的用户管理、角色管理、菜单管理、部门管理、岗位管理、操作日志管理、登录日志管理等模块,实现了对测试用例进行管理的功能。在技术方面,我们使用了Spring Boot框架、MyBatis框架、MySQL数据库以及ElementUI等技术进行开发,并且在开发过程中遵循了敏捷开发和测试驱动开发的原则,保证了开发效率和软件质量。
该项目的优点在与数据准确性高:系统通过网络实时更新库存信息,有效避免手工记录带来的数据错误。工作量减少:系统可以自动完成部分复杂的管理工作,减少了人工的工作量。管理效率提高:系统提供了多种管理功能,使得超市管理人员可以更加高效地管理货物。

九、源码获取:

大家点赞、收藏、关注、评论啦 、查看👇🏻👇🏻👇🏻获取项目下载链接,博主联系方式👇🏻👇🏻👇🏻

链接点击直达:下载链接

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

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

相关文章

ELK【elasticsearch+logstash+kibana】企业级日志分析系统

文章目录 一、ELK概述1. ELK简介2.ElasticSearch3. Logstash4.Kiabana5.Filebeat6.为什么要用ELK&#xff08;思考一下&#xff09;7.ELK的工作原理 二、ELK实验&#xff08;部署ELK日志分析系统&#xff09;1.关闭防火墙2.安装 Elasticsearch-head 插件 总结 一、ELK概述 1. …

第六章 Matlab的复数数据、字符数据和附加画图类型

在第二章中,我们学习了 MATLAB 基础数据类型:double 和 char。MATLAB 还有许 多的附加数据类型,在本章,我们将会了解它们中的一个。我们要讨论的附加数据类型是 MATLAB 支持的复数数据。我们也将学习如何使用 char 数据类型,以及如何把 MATLAB 数组扩展为多维数组。 本章…

如何使用wireShark的追踪流功能抓取并还原文件

简介 WireShark的追踪流功能可以帮我们抓取从网络上下载的各种文件&#xff0c;接下来就演示下如何抓取并且进行还原。 使用Nginx搭建文件存储服务器 只要是通过http网站下载的包&#xff0c;都可以通过追踪流工具进行抓取。这里为了演示&#xff0c;临时搭建一个Nginx文件存…

Redis的全局命令及相关误区

Redis中所说的数据结构是针对key-value中的value而言的。主要的结构包括String、哈希表、列表、集合等等在redis中存在16个库&#xff0c;涉及到后期的集群搭建只能使用0号库最为方便 查看所有键&#xff08;支持通配符&#xff09; keys * keys S*返回当前数据库中的键总数 …

设计原则-开闭原则

世界上没有任何一个项目是不需要迭代的&#xff0c;随着项目的发展壮大&#xff0c;会有越来越多的功能代码会被修改、添加、删除。据统计线上的生产事故90%都有由于变更引起的&#xff0c;因此为保证项目的迭代稳定性&#xff0c;我们需尽可能的遵守开闭原则。那开闭原则到底是…

Jeston Orin Nano Sdkmanager 自动化安装部署官网CUAD环境

大家好&#xff0c;我是虎哥&#xff0c;入手一块Jeston Orin nano 8G模块&#xff0c;这个模块因为是英伟达未来5年左右主推的模块&#xff0c;所以我逐步会将之前所有的应用都在这个模块环境上做适配&#xff0c;本章内容&#xff0c;我将主要围绕烧写安装系统后&#xff0c;…

R7-13 小明找前缀100000(假)

题目背景 小明最近上课天天睡觉&#xff0c;于是啥都不会。 一天&#xff0c;老师终于点兵点将点到他回答问题&#xff0c;你能帮他渡过难关吗&#xff1f; 现在老师给了小明 n 个由 0、1 构成的字符串&#xff0c;然后有 m 次询问&#xff0c; 每次询问给出一个由 0、1 构…

关于Vue3 ,看这一篇文档你就会用了

随着Vue3的到来&#xff0c;公司的新项目全部进行了升级&#xff0c;相比于Vue2&#xff0c;语法上个人觉得更简洁&#xff0c;更容易通俗易懂。首先安装vue3项目&#xff0c;这里我使用vite进行安装&#xff08;强烈推荐&#xff0c;启动速度贼快&#xff09; npm create vit…

Android 12.0状态栏居中显示时间和修改时间显示样式

1.概述 在12.0的系统rom定制化开发中,在systemui状态栏系统时间默认显示在左边和通知显示在一起,但是客户想修改显示位置,想显示在中间,所以就要修改SystemUI 的Clock.java 文件这个就是管理显示时间的,居中显示的话就得修改布局文件了 效果图如下: 在这里插入图片描述 …

算法基础学习笔记——⑩DFS与BFS\树与图

✨博主&#xff1a;命运之光 ✨专栏&#xff1a;算法基础学习 目录 DFS与BFS\树与图 ✨DFS ✨BFS &#x1f353;宽搜流程图如下&#xff1a; &#x1f353;宽搜流程&#xff1a; &#x1f353;广搜模板 ✨树与图 &#x1f353;树是特殊的图&#xff08;连通无环的图&am…

第09讲:SkyWalking Agent 启动流程剖析,领略微内核架构之美

微内核架构 SkyWalking Agent 采用了微内核架构&#xff08;Microkernel Architecture&#xff09;&#xff0c;那什么是微内核架构呢&#xff1f;微内核架构也被称为插件化架构&#xff08;Plug-in Architecture&#xff09;&#xff0c;是一种面向功能进行拆分的可扩展性架构…

英文论文(sci)解读复现【NO.8】基于注意机制和感受野的YOLOv5在唐卡图像缺陷识别中的应用

此前出了目标检测算法改进专栏&#xff0c;但是对于应用于什么场景&#xff0c;需要什么改进方法对应与自己的应用场景有效果&#xff0c;并且多少改进点能发什么水平的文章&#xff0c;为解决大家的困惑&#xff0c;此系列文章旨在给大家解读发表高水平学术期刊中的 SCI论文&a…

【Unity100个实用小技巧】世界Canvas自动隐藏,包含子物体

☀️博客主页&#xff1a;CSDN博客主页&#x1f4a8;本文由 萌萌的小木屋 原创&#xff0c;首发于 CSDN&#x1f4a2;&#x1f525;学习专栏推荐&#xff1a;面试汇总❗️游戏框架专栏推荐&#xff1a;游戏实用框架专栏⛅️点赞 &#x1f44d; 收藏 ⭐留言 &#x1f4dd;&#…

【JavaEE】JUC(java.util.concurrent)的常见类以及线程安全的集合类

目录 1、JUC&#xff08;java.util.concurrent&#xff09;的常见类 1.1、Callable接口的用法&#xff08;创建线程的一种写法&#xff09; 1.2、ReentrantLock可重入互斥锁 1.2.1、ReentrantLock和synchronized的区别 1.2.2、如何选择使用哪个锁 1.3、Semaphore信号量 1…

pta(浙大第四版)五道经典练习题③

目录 ①7-4 IP地址转换 ②、查找日期 ③藏头词 四、IP地址转换 五、删除链表值为偶数的节点 ①7-4 IP地址转换 题述&#xff1a;IP地址转换&#xff1a;一个IP地址是用四个字节&#xff08;每个字节8个位&#xff09;的二进制码组成。输入32位二进制字符串&#xff0c;输…

探索iOS转场动画

iOS提供图像转场动画&#xff0c;可实现酷炫的转场特效。动画包括&#xff1a;溶解、折叠、复印机、暴露、翻页、波纹、滑动等等。 一、溶解动画 CIDissolveTransition提供溶解动画&#xff0c;我们来看看对应的转场动画效果&#xff1a; 在CIFilter指定CIDissolveTransition…

Qt线程基础,多线程使用注意点,目前支持的线程种类。

Qt线程基础 一、什么是线程&#xff1f;二、GUI线程和工作线程三、同时访问数据四、使用线程1、何时使用线程的替代品2、应该用哪种Qt线程技术&#xff1f; 六、Qt中的多线程技术1、QThread:带有可选事件循环的低级API2、QThreadPool和QRunnable:重用线程 七、Qt Concurrent:使…

集成学习以及随机森林介绍

一、集成学习简介 1.什么是集成学习&#xff1f; 集成学习&#xff08;Ensemble Learning&#xff09;是一种机器学习方法&#xff0c;通过将多个弱学习器&#xff08;weak learner&#xff09;组合在一起来构建一个更强大的学习器&#xff08;strong learner&#xff09;。 …

C语言进阶——字符函数和字符串函数(下)

在前面我们已经学习了strlen、strcpy、strcat、strcmp几个库函数&#xff0c;今天我们继续学习剩余的库函数。 上期链接&#xff1a; C语言进阶——字符函数和字符串函数&#xff08;上&#xff09;_wangjiushun的博客-CSDN博客 目录&#xff1a; 3、长度受限制的字符串函数…

Redis(四)持久化策略

文章目录 持久化策略1、为什么Redis需要持久化2、Redis提供的两种持久化方式(1)RGB持久化详解概述RGB持久化的两种触发策略手动触发实例测试&#xff1a;自动触发实例测试&#xff1a; 查看rdb的状态信息info Persistence rdb模式的优缺点 (2)AOF持久化详解AOF持久化步骤&#…