基于springboot+vue的便利店库存管理系统

news2024/11/14 19:00:23

基于springboot+vue的便利店库存管理系统

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

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


一、项目背景介绍:

我国便利店形成在20世纪90年代初期,现在已经成为我国零售业的一种重要形态,为国民经济的发展起发挥了极大的作用。随着便利店高速的发展,其经营管理也变得愈加复杂,早期的售货员站柜台的形式早已不能满足现有销售也的发展,这样就迫切地需要引入新的管理技术。
随着经济的高速发展,便利店的信息化工作也在紧锣密鼓地进行,与此同时伴随着便利店规模的不断扩大以及各种信息流量的日益增多,其经营管理也变得愈加复杂,而且以往在便利店日常管理中,商品进货、销售、库存等决策主要以经验为主,缺乏实时分析功能,并且伴随着商业运转的中间环节也越来越多,因此以前的手工操作方式就不能适应便利店快速的信息发展的需要,而在计算机科学技术日益发展和成熟的今天,依靠现代化的计算机信息处理技术来管理便利店日常工作中的各类商品及用户的信息数据,既节省了大量的人力、物力、改善了员工的工作条件,减轻了劳动强度,同时也能够快速反映出商品的进销存状况和各种反馈信息分析,使管理人员快速对市场的变化做出对应决策,加快便利店的发展。从而极大地提高便利店的工作效率。
关于库存管理,在美国,有些企业库存周期只有8天,但有些中国企业的库存周期长达51天,仅运输成本一项,占销售额的比例就高达20%-30%。从物流成本构成看,中国物流管理成本占总成本的14%,而美国只有3.8%。对物流企业进行库存管理,其实就是降低其成本。物流企业作为供应链的一部分,不管是对库存进行管理还是要降低成本,都要在供应链的角度上来实行。由于我国物流业发展还处于起步到成熟的阶段,整体的物流规划能力的经验尚不足,并且物流信息化程度不高,许多物流管理还是以人工管理,直接导致了仓储和库存成本居高不下。但从20世纪60年代以来企业信息化的趋势来看,物流企业的库存管理也需趋向于信息化、网络化和高度集成化,随着信息技术的高速发展和国外大型物流企业的纷纷涌入中国,作为现代企业的物流管理的核心部分——库存管理,也要适应时代的发展。

二、项目技术简介:

  1. JAVA:Java是一门面向对象编程语言,不仅吸收了C++语言的各种优点,还摒弃了C++里难以理解的多继承、指针等概念,因此Java语言具有功能强大和简单易用两个特征。Java语言作为静态面向对象编程语言的代表,极好地实现了面向对象理论,允许程序员以优雅的思维方式进行复杂的编程。
  2. Spring:Spring框架是一个开放源代码的J2EE应用程序框架,由Rod Johnson发起,是针对bean的生命周期进行管理的轻量级容器(lightweight container)。 Spring解决了开发者在J2EE开发中遇到的许多常见的问题,提供了功能强大IOC、AOP及Web MVC等功能。Spring可以单独应用于构筑应用程序,也可以和Struts、Webwork、Tapestry等众多Web框架组合使用,并且可以与 Swing等桌面应用程序AP组合。因此, Spring不仅仅能应用于J2EE应用程序之中,也可以应用于桌面应用程序以及小应用程序之中。Spring框架主要由七部分组成,分别是 Spring Core、 Spring AOP、 Spring ORM、 Spring DAO、Spring Context、 Spring Web和 Spring Web MVC。
  3. SpringBoot:Spring Boot是由Pivotal团队提供的全新框架,其设计目的是用来简化新Spring应用的初始搭建以及开发过程。该框架使用了特定的方式来进行配置,从而使开发人员不再需要定义样板化的配置。通过这种方式,Spring Boot致力于在蓬勃发展的快速应用开发领域(rapid application development)成为领导者。
  4. Mybatis:MyBatis本是apache的一个开源项目iBatis,2010年这个项目由apache software foundation迁移到了google code,并且改名为MyBatis。2013年11月迁移到Github。
    iBATIS一词来源于“internet”和“abatis”的组合,是一个基于Java的持久层框架。iBATIS提供的持久层框架包括SQL Maps和Data Access Objects(DAOs)。
  5. Jsp:JSP(全称JavaServer Pages)是由Sun Microsystems公司主导创建的一种动态网页技术标准。JSP部署于网络服务器上,可以响应客户端发送的请求,并根据请求内容动态地生成HTML、XML或其他格式文档的Web网页,然后返回给请求者。JSP技术以Java语言作为脚本语言,为用户的HTTP请求提供服务,并能与服务器上的其它Java程序共同处理复杂的业务需求。
    JSP将Java代码和特定变动内容嵌入到静态的页面中,实现以静态页面为模板,动态生成其中的部分内容。JSP引入了被称为“JSP动作”的XML标签,用来调用内建功能。另外,可以创建JSP标签库,然后像使用标准HTML或XML标签一样使用它们。标签库能增强功能和服务器性能,而且不受跨平台问题的限制。JSP文件在运行时会被其编译器转换成更原始的Servlet代码。JSP编译器可以把JSP文件编译成用Java代码写的Servlet,然后再由Java编译器来编译成能快速执行的二进制机器码,也可以直接编译成二进制码。
  6. Spring-Mvc:Spring MVC属于SpringFrameWork的后续产品,已经融合在Spring Web Flow里面。Spring 框架提供了构建 Web 应用程序的全功能 MVC 模块。使用 Spring 可插入的 MVC 架构,从而在使用Spring进行WEB开发时,可以选择使用Spring的Spring MVC框架或集成其他MVC开发框。
  7. Html:HTML的全称为超文本标记语言,是一种标记语言。它包括一系列标签.通过这些标签可以将网络上的文档格式统一,使分散的Internet资源连接为一个逻辑整体。HTML文本是由HTML命令组成的描述性文本,HTML命令可以说明文字,图形、动画、声音、表格、链接等。
    超文本是一种组织信息的方式,它通过超级链接方法将文本中的文字、图表与其他信息媒体相关联。这些相互关联的信息媒体可能在同一文本中,也可能是其他文件,或是地理位置相距遥远的某台计算机上的文件。这种组织信息方式将分布在不同位置的信息资源用随机方式进行连接,为人们查找,检索信息提供方便。

三、系统功能模块介绍:

功能模块图

四、数据库设计:

1:‘系统用户表’(sys_emp)

字段名类型默认值列注释
idbigintNULL主键
user_namevarcharNULL用户名
pass_wordvarcharNULL密码
namevarcharNULL姓名
sexintNULL性别[1:男,2:女]
head_imgvarcharNULL头像
statusintNULL状态[1:可用,2:禁用]
typeintNULL类型[1:老板,2:员工]
create_timedatetimeNULL创建时间
telvarcharNULL联系方式
emailvarcharNULLqq邮箱

2:‘员工操作记录表’(sys_emp_logs)

字段名类型默认值列注释
idbigintNULL主键
emp_idbigintNULL员工ID
goods_idbigintNULL商品ID
typeintNULL类型[1:入库,2:出库,3:下架]
contenttextNULL详细内容
create_timedatetimeNULL创建时间

3:‘商品表’(sys_goods)

字段名类型默认值列注释
idbigintNULL主键
goods_namevarcharNULL商品名称
goods_imgvarcharNULL商品
statusintNULL商品状态[1:上架,2:下架]
pricevarcharNULL单价
create_timedatetimeNULL创建时间
type_idbigintNULL商品所属分类
valid_timedatetimeNULL商品有效时间

4:‘商品库存表’(sys_goods_stock)

字段名类型默认值列注释
idbigintNULL主键
goods_idbigintNULL商品ID
stockintNULL库存数量
create_timedatetimeNULL创建时间

5:‘商品类型表’(sys_goods_type)

字段名类型默认值列注释
idbigintNULL主键
type_namevarcharNULL分类名称
create_timedatetimeNULL创建时间

6:‘商品预警值配置’(sys_goods_warn)

字段名类型默认值列注释
idbigintNULL主键
goods_idbigintNULL商品ID
stock_warn_numintNULL商品预警值
create_timedatetimeNULL创建时间

7:‘预警记录表’(sys_warn_records)

字段名类型默认值列注释
idbigintNULL主键
goods_idbigintNULL商品ID
warn_numintNULL预警值
current_warn_numintNULL当前数量
create_timedatetimeNULL创建时间

五、功能模块:

  1. 登录模块:前端实现主要是员工登录以及商品相关界面的显示实现。基于Web界面实现的可上下滑动翻页的界面,主要展示便利店的商品信息和库存信息

    登录模块

  2. 库存管理: 员工登录成功后,即可进入库存管理界面,可以进行商品的库存信息修改,包括出入库信息的编辑和删除。

    库存管理

  3. 分类管理:员工在添加商品成功后,即可进入分类管理界面,可以进行商品的分类信息的修改和保存,便于商品的分类管理以及相关商品的分类查询。

    分类管理

  4. 商品管理: 员工在登录成功后,即可进入商品管理界面,可以进行商品的信息的修改和保存,便于商品的分类管理以及相关商品的库存信息编辑。

    商品管理

  5. 后端实现:后端实现主要是老板用户进行员工操作记录编辑以及相关商品的库存信息查询时进行的数据交互实现。为了直观地展示后端实现地具体内容,分别展示数据库加载信息的操作记录界面、预警记录界面、预警值管理界面和员工管理界面

    后端实现

六、代码示例:

登录模块
    @PostMapping()
    public ReturnMsg login(@RequestBody SysEmpDTO sysEmpDTO) throws Exception {
        Assert.isTrue(StrUtil.isNotEmpty(sysEmpDTO.getUserName())
                && StrUtil.isNotEmpty(sysEmpDTO.getPassWord()), "账号或密码不能为空!");

        LambdaQueryWrapper<SysEmpDTO> queryWrapper = Wrappers.lambdaQuery();

        queryWrapper.eq(SysEmpDTO::getUserName,sysEmpDTO.getUserName()).
                eq(SysEmpDTO::getPassWord,sysEmpDTO.getPassWord()).last(BaseConstant.LIMIT_ONE);
        SysEmpDTO loginUser = sysEmpService.getOne(queryWrapper);
        Assert.notNull(loginUser,"账号或密码错误!");
        if(loginUser.getStatus() != 1) {
            throw new Exception("账号被冻结!");
        }
        return ReturnMsg.ok(loginUser);
    }

    @GetMapping("/{id}")
    public ReturnMsg getUserInfo(@PathVariable("id") Long id) {
        List<String> roles = new ArrayList<>();
        Map<String, Object> map = new HashMap<>();
        roles.add("admin");
        map.put("roles", roles);
        map.put("introduction", "打工人...");
        SysEmpDTO userInfo = sysEmpService.getById(id);
        map.put("name", userInfo.getName());
        map.put("avatar", StrUtil.isNotEmpty(userInfo.getHeadImg()) ? userInfo.getHeadImg() : "http://www.elitetest.cn/img/logo.png");
        return ReturnMsg.ok(map);
    }

    @DeleteMapping()
    public ReturnMsg logOut() {
        return ReturnMsg.ok();
    }
库存管理
    /**
     * 默认分页查询
     *
     * @param sysGoodsDTO
     * @return
     * @throws IOException
     */
    @PostMapping("/page")
    public ReturnMsg page(@RequestBody SysGoodsDTO sysGoodsDTO) {
        return ReturnMsg.ok(baseService.basePage(sysGoodsDTO));
    }

    @Override
    protected void beforeSaveOrUpdate(SysGoodsDTO entity) throws Exception {
        boolean flag = false;
        if (entity.getId() == null) {
            LambdaQueryWrapper<SysGoodsDTO> queryWrapper = new LambdaQueryWrapper<>();
            queryWrapper.eq(SysGoodsDTO::getGoodsName,entity.getGoodsName());
            if(CollectionUtil.isNotEmpty( this.baseService.list(queryWrapper))) throw new Exception("商品名称不能重复");
            flag = true;
        }
        entity.setFlag(flag);
        super.beforeSaveOrUpdate(entity);

    }

    @Override
    protected ReturnMsg afterSaveOrUpdate(SysGoodsDTO entity, boolean flag, String msg) throws Exception {
        if (entity.getFlag()) {
            SysEmpLogsDTO sysEmpLogsDTO = new SysEmpLogsDTO();
            sysEmpLogsDTO.setCreateTime(new Date());
            sysEmpLogsDTO.setEmpId(entity.getEmpId());
            sysEmpLogsDTO.setGoodsId(entity.getId());
            SysGoodsDTO goodsInfo = this.baseService.getById(entity.getId());
            SysEmpDTO empInfo = sysEmpService.getById(entity.getEmpId());
            String concent = "员工【" + empInfo.getName() + "】对商品:【" + goodsInfo.getGoodsName() + "】进行入库操作";
            sysEmpLogsDTO.setContent(concent);
            sysEmpLogsDTO.setType(1);
            sysEmpLogsService.save(sysEmpLogsDTO);
        }
        return super.afterSaveOrUpdate(entity, flag, msg);
    }
分类管理
    @Override
    @Transactional(rollbackFor = Exception.class)
    protected void beforeRemoveByIds(List<Long> idList) throws Exception {
        LambdaQueryWrapper<SysGoodsDTO> queryWrapper = new LambdaQueryWrapper<>();
        for (Long aLong : idList) {
            queryWrapper.eq(SysGoodsDTO::getTypeId,aLong);
            List<SysGoodsDTO> list = sysGoodsService.list(queryWrapper);
            if(CollectionUtil.isNotEmpty(list)) throw  new Exception("当前分类下存在商品,不能删除该分类!");
        }
        super.beforeRemoveByIds(idList);
    }

    /**
     *
     * @param entity
     * @throws Exception
     */

    @Override
    protected void beforeSaveOrUpdate(SysGoodsTypeDTO entity) throws Exception {
        if (entity.getId() == null) {
            LambdaQueryWrapper<SysGoodsTypeDTO> queryWrapper = new LambdaQueryWrapper<>();
            queryWrapper.eq(SysGoodsTypeDTO::getTypeName,entity.getTypeName());
            if(CollectionUtil.isNotEmpty( this.baseService.list(queryWrapper)))
                throw new Exception("分类名称不能重复");
        }
        super.beforeSaveOrUpdate(entity);
    }
商品管理
 @Override
    protected ReturnMsg afterRemoveByIds(boolean flag, List<Long> list) {
        LambdaQueryWrapper<SysGoodsStockDTO> stockDTOLambdaQueryWrapper  = new LambdaQueryWrapper<>();
        stockDTOLambdaQueryWrapper.in(SysGoodsStockDTO::getGoodsId,list);
        sysGoodsStockService.remove(stockDTOLambdaQueryWrapper);
        LambdaQueryWrapper<SysGoodsWarnDTO> sysGoodsWarnDTOLambdaQueryWrapper  = new LambdaQueryWrapper<>();
        sysGoodsWarnDTOLambdaQueryWrapper.in(SysGoodsWarnDTO::getGoodsId,list);
        sysGoodsWarnService.remove(sysGoodsWarnDTOLambdaQueryWrapper);
        LambdaQueryWrapper<SysEmpLogsDTO> sysEmpLogsDTOLambdaQueryWrapper  = new LambdaQueryWrapper<>();
        sysEmpLogsDTOLambdaQueryWrapper.in(SysEmpLogsDTO::getGoodsId,list);
        sysEmpLogsService.remove(sysEmpLogsDTOLambdaQueryWrapper);
        LambdaQueryWrapper<SysWarnRecordsDTO> sysWarnRecordsDTOLambdaQueryWrapper  = new LambdaQueryWrapper<>();
        sysWarnRecordsDTOLambdaQueryWrapper.in(SysWarnRecordsDTO::getGoodsId,list);
        sysWarnRecordsService.remove(sysWarnRecordsDTOLambdaQueryWrapper);
        return super.afterRemoveByIds(flag, list);
    }

    /**
     * 上下架操作
     *
     * @param sysGoodsDTO
     * @return
     */
    @PostMapping("/on")
    public ReturnMsg on(@RequestBody SysGoodsDTO sysGoodsDTO) {
        this.baseService.updateById(sysGoodsDTO);
        SysEmpLogsDTO sysEmpLogsDTO = new SysEmpLogsDTO();
        sysEmpLogsDTO.setCreateTime(new Date());
        sysEmpLogsDTO.setEmpId(sysGoodsDTO.getEmpId());
        sysEmpLogsDTO.setGoodsId(sysGoodsDTO.getId());
        SysGoodsDTO goodsInfo = this.baseService.getById(sysGoodsDTO.getId());
        SysEmpDTO empInfo = sysEmpService.getById(sysGoodsDTO.getEmpId());
        String type = sysGoodsDTO.getStatus() == 1 ? "上架" : "下架";
        String concent = "员工" + empInfo.getName() + "对商品:【" + goodsInfo.getGoodsName() + "】进行" + type + "操作";
        sysEmpLogsDTO.setContent(concent);
        sysEmpLogsDTO.setType(sysGoodsDTO.getStatus() == 1 ? 4: 3);
        sysEmpLogsService.save(sysEmpLogsDTO);
        return ReturnMsg.ok(baseService.basePage(sysGoodsDTO));
    }
后端实现
    @Override
    public Page<SysEmpDTO> basePage(SysEmpDTO sysEmpDTO) {
        if (null != sysEmpDTO.getCurrent() && null != sysEmpDTO.getPageSize())
            sysEmpDTO.setCurrent((sysEmpDTO.getCurrent() - 1) * sysEmpDTO.getPageSize());
        List<SysEmpDTO> list = this.baseMapper.findList(sysEmpDTO);
        int count = this.baseMapper.findPageCount(sysEmpDTO);
        Page<SysEmpDTO> page = new Page<>();
        page.setTotal(count);
        page.setRecords(list);
        return page;
    }

七、论文参考:

八、项目总结:

便利店库存管理系统主要用来记录便利店商品的库存以及商品的出库和入库记录信息。这种基于数据库实现的数据管理系统能够准确记录便利店的商品类型以及操作记录,能够有利于现代便利店的信息化管理。
整个系统操作简单方便,系统界面安全良好,简单明了的页面布局,可以很方便进行信息查询以及记录统计。其次,员工登录后可以编辑个人信息,将个人信息加载到系统管理员用户管理的界面中,老板打开用户管理界面后即时可见便利店库存管理系统中信息,处理时会立刻在对应地点实时刷新。
在系统实现过程中,遇到了页面显示不规范、数据库连接无法实现参数的传递等问题,这些问题通过在网上寻找有关资料以及在同学的帮助下得到了解决。在此过程中,不仅学到了很多编程技巧,也提高了自己解决实际问题的能力,学会如何从大量的信息中筛选出所需有用的信息。
这次基于WEB的便利店库存管理系统的开发,参考了很多相关系统,取长补短,吸取了其他系统的优秀设计方案对该系统进行完善,但是该系统还是有很多的不足之处,有待以后进一步学习。例如商品信息内容的来源在系统中采用特定信息条目,希望后续可以通过Java实现网络信息的即时获取,将信息的其他数据也加载到系统的主页进行显示。
综上所述,便利店库存管理系统经过测试运行,各项功能都基本完善,界面布局优化完整,使用方便,操作容易,本次系统设计与实现顺利完成。

九、源码获取:

大家点赞、收藏、关注、评论啦 、查看👇🏻👇🏻👇🏻获取联系方式👇🏻👇🏻👇🏻

能力,学会如何从大量的信息中筛选出所需有用的信息。
这次基于WEB的便利店库存管理系统的开发,参考了很多相关系统,取长补短,吸取了其他系统的优秀设计方案对该系统进行完善,但是该系统还是有很多的不足之处,有待以后进一步学习。例如商品信息内容的来源在系统中采用特定信息条目,希望后续可以通过Java实现网络信息的即时获取,将信息的其他数据也加载到系统的主页进行显示。
综上所述,便利店库存管理系统经过测试运行,各项功能都基本完善,界面布局优化完整,使用方便,操作容易,本次系统设计与实现顺利完成。

九、源码获取:

大家点赞、收藏、关注、评论啦 、查看👇🏻👇🏻👇🏻获取联系方式👇🏻👇🏻👇🏻

链接点击直达:下载链接

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

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

相关文章

C++面向对象(上)

文章目录前言1.面向过程和面向对象初步认识2.引入类的概念1.概念与用法2.类的访问限定符及封装3.类的作用域和实例化4.类的大小计算8.this指针3.总结前言 本文将对C面向对象进行初步介绍&#xff0c;引入类和对象的概念。围绕类和对象介绍一些基础知识&#xff0c;为以后深入学…

【数据结构】————栈

文章目录前言栈是什么&#xff0c;栈的特点实现栈的基本操作栈的相关操作声明1.创建栈2.对栈进行初始化3.销毁栈4.判断栈是否为空5.压栈操作6.删除栈顶元素7.取出栈顶元素8.计算栈内存放多少个数据总结前言 本文主要讲述特殊的线性表——栈&#xff1a; 栈是什么&#xff0c;栈…

学生信息管理系统(通讯录)----------通俗易懂、附源码、C语言实现

绪论&#xff1a; 本篇文章使结构体章节后的习题&#xff0c;如果你对C语言有问题&#xff0c;或者结构体有什么问题不妨看看我之前所写的文章&#xff08;章回体&#xff09;,对于文件管理和内存分配问题我将在后面补上&#xff0c;对于这个学生信息管理系统我用了多种方法和…

五【Spring】控制反转(IOC)

目录一 Ioc控制反转1.1 概述1.2 依赖注入二 传统依赖的问题2.1 在传统的项目中三 引入Spring解决3.1 Spring配置文件中Bean属性3.2 Bean的作用域3.3 项目案例四 基于xml的依赖注入&#xff08;注意有参 无参的构建&#xff09;4.1 设置注入4.2 构造注入&#xff08;依赖有参构造…

【Java面试总结】MySQL篇·优化篇

【Java面试总结】MySQL篇SQL优化篇1.该如何优化MySQL的查询&#xff1f;2.怎样插入数据才能更高效&#xff1f;3.表中包含几千万条数据该怎么办&#xff1f;4.MySQL的慢查询优化有了解吗&#xff1f;5.说一说你对explain的了解6.explain你一般关注什么&#xff1f;1.该如何优化…

【Linux】网络编程 - Socket套接字/基于UDP的网络通信

目录 一.套接字 1.什么是套接字/Socket套接字 2.套接字的分类 3.Socket套接字的常见API 二.网络字节序 1.什么是网络字节序 2.网络字节序和主机字节序的转换接口 三.IP地址形式上的转换 四.客户端的套接字不由程序员bind 1.为什么客户端套接字不能由程序员bind 2.OS…

【题外话】如何拯救小米11Pro这款工业垃圾

1 背景媳妇用小米11Pro手机&#xff0c;某日不慎摔落&#xff0c;幸好屏幕未碎&#xff0c;然而WiFi却怎样都无法打开&#xff0c;初以为是系统死机&#xff0c;几天依旧故障无法使用。现在的手机没有WiFi功能&#xff0c;就无法刷抖音、看视频&#xff0c;就是鸡肋了。后抽空去…

全栈之路-前端篇 | 第三讲.基础前置知识【前端标准与研发工具】学习笔记

欢迎关注「全栈工程师修炼指南」公众号点击 &#x1f447; 下方卡片 即可关注我哟!设为「星标⭐」每天带你 基础入门 到 进阶实践 再到 放弃学习&#xff01;涉及 企业运维、网络安全、应用开发、物联网、人工智能、大数据 学习知识“ 花开堪折直须折&#xff0c;莫待无花空折…

【2.19】算法题2:贪心算法、动态规划、分治

题目&#xff1a;给你一个整数数组 nums &#xff0c;请你找出一个具有最大和的连续子数组&#xff08;子数组最少包含一个元素&#xff09;&#xff0c;返回其最大和。子数组 是数组中的一个连续部分。方法一&#xff1a;贪心算法原理&#xff1a;若当前指针所指元素之前的和小…

学生和老师-课后程序(JAVA基础案例教程-黑马程序员编著-第四章-课后作业)

【案例4-4】学生和老师 【案例介绍】 1.案例描述 在班级中上课时&#xff0c;老师在讲台上讲课&#xff0c;偶有提问&#xff0c;会点名学生回答问题。虽然老师和学生都在讲话&#xff0c;但讲话的具体内容却不相同。本案例要求使用抽象类的知识编写一个程序实现老师上课的情…

Allegro如何快速清除多余的规则设置操作指导

Allegro如何快速清除多余的规则设置操作指导 在用Allegro做PCB设计的时候,会给PCB设置一些规则,在PCB设计完成之后,可能会有一些没有使用到的规则,如下图 Physical规则中的45OHM的规则是多余的 单独某个规则可以直接在规则管理器中删除,如果比较多可以用下面方法批量删除…

真实景观渲染技巧【Three.js】

受到一些很棒的 three.js 演示、与 covid 相关的旅行禁令以及可能在 pinterest 上花太多时间看美丽的旅行照片的启发——我开始看看我是否可以使用 three.js 和r3f在浏览器中渲染一个令人信服的风景场景。 推荐&#xff1a;将 NSDT场景编辑器 加入你的3D开发工具链。 在过去一个…

AnLogicFPGA设计的时序约束及时序收敛

本篇博文讲了三个内容&#xff1a;时序约束基本概念、时序约束命令、时序收敛技巧 时序约束基本概念 时序设计的实质就是满足每一个触发器的建立&#xff08;setup&#xff09;时间和保持&#xff08;hold&#xff09;时间。 建立时间(Tsu) 触发器的时钟信号沿到来以前&…

零信任-新华三H3C零信任介绍(12)

​目录 ​新华三零信任是什么&#xff1f; 新华三零信任架构特点 新华三零信任架构 新华三零信任架构适用场景 新华三零信任的未来发展展望 新华三零信任是什么&#xff1f; 建立新边界 全面身份化。新华三贯彻“永不信任&#xff0c;始终验证”的原则&#xff0c;通过对…

JavaWeb7-线程状态(生命周期)及转换过程

目录 1.所有线程状态&#xff08;共6种&#xff09; ①NEW-新建状态 ②RUNNABLE-运行状态 RUNNABLE&#xff08;得到时间片运行中状态&#xff09; READY&#xff08;已经保存了上下文&#xff0c;但还未得到时间片的就绪状态&#xff09;。 ③BLOCKED-阻塞状态 ④WAITI…

使用NutUI创建小程序和H5界面

做开发的时间长了&#xff0c;技术都是通用的&#xff0c;创建小程序和H5界面有很多的UI&#xff0c;本章节演示使用NutUI来创建&#xff0c;官网&#xff0c;NutUI - 移动端 Vue3 小程序组件库 1.使用HBuilder X创建一个uni-app的程序&#xff0c;如图所示 2. 安装UniNutUI …

nvm的使用与坑

1、nvm 介绍 Node Version Manager - 符合 POSIX 标准的 bash 脚本&#xff0c;用于管理多个活动的 node.js 版本 官网为 nvm-windows&#xff0c;点击这里进行下载 2、使用场景 比如有几个项目&#xff0c;这些项目的需求都不太一样&#xff0c;导致了这些个项目需要依赖的…

论文投稿指南——中文核心期刊推荐(管理学)

【前言】 &#x1f680; 想发论文怎么办&#xff1f;手把手教你论文如何投稿&#xff01;那么&#xff0c;首先要搞懂投稿目标——论文期刊 &#x1f384; 在期刊论文的分布中&#xff0c;存在一种普遍现象&#xff1a;即对于某一特定的学科或专业来说&#xff0c;少数期刊所含…

多彩的声音-课后程序(JAVA基础案例教程-黑马程序员编著-第四章-课后作业)

【案例4-3】多彩的声音 记得 关注&#xff0c;收藏&#xff0c;评论哦&#xff0c;作者将持续更新。。。。 【案例介绍】 案例描述 设计和实现一个Soundable发声接口&#xff0c;该接口具有发声功能&#xff0c;同时还能调节声音大小。 Soundable接口的这些功能将由有3种声音…

【C++的OpenCV】第一课-opencv的介绍和安装(Linux环境下)

第一课-目录一、基本介绍1.1 官网1.2 git源码1.3 介绍二、OpenCV的相关部署工作2.1 Linux平台下部署OpenCV一、基本介绍 1.1 官网 opencv官网 注意&#xff1a;官网为英文版本&#xff0c;可以使用浏览器自带的翻译插件进行翻译&#xff0c;真心不推荐大家去看别人翻译的&am…