超市结算系统|Springboot+Vue通用超市结算收银系统

news2024/11/25 3:07:55

作者主页:编程千纸鹤

作者简介:Java、前端、Pythone开发多年,做过高程,项目经理,架构师

主要内容:Java项目开发、毕业设计开发、面试技术整理、最新技术分享

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

项目编号:BS-XX-154

前言:

信息数据从传统到当代,是一直在变革当中,突如其来的互联网让传统的信息管理看到了革命性的曙光,因为传统信息管理从时效性,还是安全性,还是可操作性等各个方面来讲,遇到了互联网时代才发现能补上自古以来的短板,有效的提升管理的效率和业务水平。传统的管理模式,时间越久管理的内容越多,也需要更多的人来对数据进行整理,并且数据的汇总查询方面效率也是极其的低下,并且数据安全方面永远不会保证安全性能。结合数据内容管理的种种缺点,在互联网时代都可以得到有效的补充。结合先进的互联网技术,开发符合需求的软件,让数据内容管理不管是从录入的及时性,查看的及时性还是汇总分析的及时性,都能让正确率达到最高,管理更加的科学和便捷。本次开发的通用超市结算系统实现了操作日志管理、字典管理、供应商信息管理、商品管理、出入库管理、出入库详情管理、收银管理、收银详情管理、用户管理、员工管理、用户表管理等功能。系统用到了关系型数据库中王者MySql作为系统的数据库,有效的对数据进行安全的存储,有效的备份,对数据可靠性方面得到了保证。并且程序也具备程序需求的所有功能,使得操作性还是安全性都大大提高,让通用超市结算系统更能从理念走到现实,确确实实的让人们提升信息处理效率。

一,项目简介

在管理员功能模块确定下来的基础上,对管理员各个功能进行设计,确定管理员功能的详细模块。绘制的管理员功能结构见下图。

分析程序的流程,涉及到程序的整体操作流程,通过分析与设计,绘制的程序操作流程图见下图。此程序为了确保安全,会让使用者通过登录模块验证信息,符合要求的使用者才有权限操作程序。

图3-1 程序操作流程图

程序处理数据会涉及到数据的录入环节,绘制的添加流程见下图。程序录入数据过程中,始终与数据库保持同步。

图3-2 信息添加流程图

程序里面的数据也会出现错误,因此就有相应的修改数据的功能,绘制的程序修改流程见下图。此过程也是跟后台数据库进行数据同步显示。

图3-3信息修改流程图

程序数据存放于数据仓库,有时也会涉及到数据删除,此过程对应的流程图见下图。数据信息被删除之后,数据库里面也就没有了该数据信息了。

图3-4 信息删除流程图

二,环境介绍

语言环境:Java:  jdk1.8

数据库:Mysql: mysql5.7

应用服务器:Tomcat:  tomcat8.5.31

开发工具:IDEA或VSCODE

后台开发技术:Springboot+mybatis+springmvc

前台开发技术:Node+vue+ElementUI

特色应用:支付宝沙箱

三,系统展示

3.1.1 商品管理

此页面让管理员管理商品的数据,商品管理页面见下图。此页面主要实现商品的增加、修改、删除、查看的功能。

图5-1 商品管理页面

3.1.2 供应商信息管理

供应商信息管理页面提供的功能操作有:新增供应商,修改供应商,删除供应商操作。下图就是供应商信息管理页面。

图5.3 供应商信息管理页面

3.1.2供应商类型管理

供应商类型管理页面显示所有供应商类型,在此页面既可以让管理员添加新的供应商信息类型,也能对已有的供应商类型信息执行编辑更新,失效的供应商类型信息也能让管理员快速删除。下图就是供应商类型管理页面。

图5.4 供应商类型列表页面

3.1.4 会员级别管理

 3.1.5 商品管理

 3.1.6 商品出入库管理

  3.1.7 员工管理

 3.1.6 收银管理

 会员收银支付直接从充值卡中扣款

非会员支付使用支付宝沙箱完成支付功能

四,核心代码展示


package com.controller;

import java.io.File;
import java.math.BigDecimal;
import java.net.URL;
import java.text.SimpleDateFormat;
import com.alibaba.fastjson.JSONObject;
import java.util.*;
import org.springframework.beans.BeanUtils;
import javax.servlet.http.HttpServletRequest;
import org.springframework.web.context.ContextLoader;
import javax.servlet.ServletContext;
import com.service.TokenService;
import com.utils.*;
import java.lang.reflect.InvocationTargetException;

import com.service.DictionaryService;
import org.apache.commons.lang3.StringUtils;
import com.annotation.IgnoreAuth;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.*;
import com.baomidou.mybatisplus.mapper.EntityWrapper;
import com.baomidou.mybatisplus.mapper.Wrapper;
import com.entity.*;
import com.entity.view.*;
import com.service.*;
import com.utils.PageUtils;
import com.utils.R;
import com.alibaba.fastjson.*;

/**
 * 操作日志
 * 后端接口
 * @author
 * @email
*/
@RestController
@Controller
@RequestMapping("/caozuorizhi")
public class CaozuorizhiController {
    private static final Logger logger = LoggerFactory.getLogger(CaozuorizhiController.class);

    private static final String TABLE_NAME = "caozuorizhi";

    @Autowired
    private CaozuorizhiService caozuorizhiService;


    @Autowired
    private TokenService tokenService;
    @Autowired
    private DictionaryService dictionaryService;

    @Autowired
    private YonghuService yonghuService;
    @Autowired
    private YuangongService yuangongService;


    /**
    * 后端列表
    */
    @RequestMapping("/page")
    public R page(@RequestParam Map<String, Object> params, HttpServletRequest request){
        logger.debug("page方法:,,Controller:{},,params:{}",this.getClass().getName(),JSONObject.toJSONString(params));
        String role = String.valueOf(request.getSession().getAttribute("role"));
        if(false)
            return R.error(511,"永不会进入");
        else if("用户".equals(role))
            params.put("yonghuId",request.getSession().getAttribute("userId"));
        else if("员工".equals(role))
            params.put("yuangongId",request.getSession().getAttribute("userId"));
        CommonUtil.checkMap(params);
        PageUtils page = caozuorizhiService.queryPage(params);

        //字典表数据转换
        List<CaozuorizhiView> list =(List<CaozuorizhiView>)page.getList();
        for(CaozuorizhiView c:list){
            //修改对应字典表字段
            dictionaryService.dictionaryConvert(c, request);
        }
        return R.ok().put("data", page);
    }

    /**
    * 后端详情
    */
    @RequestMapping("/info/{id}")
    public R info(@PathVariable("id") Long id, HttpServletRequest request){
        logger.debug("info方法:,,Controller:{},,id:{}",this.getClass().getName(),id);
        CaozuorizhiEntity caozuorizhi = caozuorizhiService.selectById(id);
        if(caozuorizhi !=null){
            //entity转view
            CaozuorizhiView view = new CaozuorizhiView();
            BeanUtils.copyProperties( caozuorizhi , view );//把实体数据重构到view中
            //修改对应字典表字段
            dictionaryService.dictionaryConvert(view, request);
            return R.ok().put("data", view);
        }else {
            return R.error(511,"查不到数据");
        }

    }

    /**
    * 后端保存
    */
    @RequestMapping("/save")
    public R save(@RequestBody CaozuorizhiEntity caozuorizhi, HttpServletRequest request){
        logger.debug("save方法:,,Controller:{},,caozuorizhi:{}",this.getClass().getName(),caozuorizhi.toString());

        String role = String.valueOf(request.getSession().getAttribute("role"));
        if(false)
            return R.error(511,"永远不会进入");

        Wrapper<CaozuorizhiEntity> queryWrapper = new EntityWrapper<CaozuorizhiEntity>()
            .eq("caozuorizhi_this_biao", caozuorizhi.getCaozuorizhiThisBiao())
            .eq("caozuorizhi_caozuobiao", caozuorizhi.getCaozuorizhiCaozuobiao())
            .eq("caozuorizhi_caozuozhanghu", caozuorizhi.getCaozuorizhiCaozuozhanghu())
            .eq("caozuorizhi_caozuoleixing", caozuorizhi.getCaozuorizhiCaozuoleixing())
            .eq("caozuorizhi_text", caozuorizhi.getCaozuorizhiText())
            ;

        logger.info("sql语句:"+queryWrapper.getSqlSegment());
        CaozuorizhiEntity caozuorizhiEntity = caozuorizhiService.selectOne(queryWrapper);
        if(caozuorizhiEntity==null){
            caozuorizhi.setInsertTime(new Date());
            caozuorizhi.setCreateTime(new Date());
            caozuorizhiService.insert(caozuorizhi);

            return R.ok();
        }else {
            return R.error(511,"表中有相同数据");
        }
    }

    /**
    * 后端修改
    */
    @RequestMapping("/update")
    public R update(@RequestBody CaozuorizhiEntity caozuorizhi, HttpServletRequest request) throws NoSuchFieldException, ClassNotFoundException, IllegalAccessException, InstantiationException {
        logger.debug("update方法:,,Controller:{},,caozuorizhi:{}",this.getClass().getName(),caozuorizhi.toString());
        CaozuorizhiEntity oldCaozuorizhiEntity = caozuorizhiService.selectById(caozuorizhi.getId());//查询原先数据

        String role = String.valueOf(request.getSession().getAttribute("role"));
//        if(false)
//            return R.error(511,"永远不会进入");
        //根据字段查询是否有相同数据
        Wrapper<CaozuorizhiEntity> queryWrapper = new EntityWrapper<CaozuorizhiEntity>()
            .notIn("id",caozuorizhi.getId())
            .andNew()
            .eq("caozuorizhi_this_biao", caozuorizhi.getCaozuorizhiThisBiao())
            .eq("caozuorizhi_caozuobiao", caozuorizhi.getCaozuorizhiCaozuobiao())
            .eq("caozuorizhi_caozuozhanghu", caozuorizhi.getCaozuorizhiCaozuozhanghu())
            .eq("caozuorizhi_caozuoleixing", caozuorizhi.getCaozuorizhiCaozuoleixing())
            .eq("caozuorizhi_text", caozuorizhi.getCaozuorizhiText())
            ;

        logger.info("sql语句:"+queryWrapper.getSqlSegment());
        CaozuorizhiEntity caozuorizhiEntity = caozuorizhiService.selectOne(queryWrapper);
        if(caozuorizhiEntity==null){
            caozuorizhiService.updateById(caozuorizhi);//根据id更新
            return R.ok();
        }else {
            return R.error(511,"表中有相同数据");
        }
    }



    /**
    * 删除
    */
    @RequestMapping("/delete")
    public R delete(@RequestBody Integer[] ids, HttpServletRequest request){
        logger.debug("delete:,,Controller:{},,ids:{}",this.getClass().getName(),ids.toString());
        List<CaozuorizhiEntity> oldCaozuorizhiList =caozuorizhiService.selectBatchIds(Arrays.asList(ids));//要删除的数据
        caozuorizhiService.deleteBatchIds(Arrays.asList(ids));

        return R.ok();
    }


    /**
     * 批量上传
     */
    @RequestMapping("/batchInsert")
    public R save( String fileName, HttpServletRequest request){
        logger.debug("batchInsert方法:,,Controller:{},,fileName:{}",this.getClass().getName(),fileName);
        Integer yonghuId = Integer.valueOf(String.valueOf(request.getSession().getAttribute("userId")));
        SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
        try {
            List<CaozuorizhiEntity> caozuorizhiList = new ArrayList<>();//上传的东西
            Map<String, List<String>> seachFields= new HashMap<>();//要查询的字段
            Date date = new Date();
            int lastIndexOf = fileName.lastIndexOf(".");
            if(lastIndexOf == -1){
                return R.error(511,"该文件没有后缀");
            }else{
                String suffix = fileName.substring(lastIndexOf);
                if(!".xls".equals(suffix)){
                    return R.error(511,"只支持后缀为xls的excel文件");
                }else{
                    URL resource = this.getClass().getClassLoader().getResource("static/upload/" + fileName);//获取文件路径
                    File file = new File(resource.getFile());
                    if(!file.exists()){
                        return R.error(511,"找不到上传文件,请联系管理员");
                    }else{
                        List<List<String>> dataList = PoiUtil.poiImport(file.getPath());//读取xls文件
                        dataList.remove(0);//删除第一行,因为第一行是提示
                        for(List<String> data:dataList){
                            //循环
                            CaozuorizhiEntity caozuorizhiEntity = new CaozuorizhiEntity();
//                            caozuorizhiEntity.setCaozuorizhiThisBiao(data.get(0));                    //操作人所在表 要改的
//                            caozuorizhiEntity.setCaozuorizhiCaozuobiao(data.get(0));                    //操作表 要改的
//                            caozuorizhiEntity.setCaozuorizhiCaozuozhanghu(data.get(0));                    //操作账户 要改的
//                            caozuorizhiEntity.setCaozuorizhiCaozuoleixing(data.get(0));                    //操作类型 要改的
//                            caozuorizhiEntity.setCaozuorizhiText(data.get(0));                    //操作内容 要改的
//                            caozuorizhiEntity.setInsertTime(date);//时间
//                            caozuorizhiEntity.setCreateTime(date);//时间
                            caozuorizhiList.add(caozuorizhiEntity);


                            //把要查询是否重复的字段放入map中
                        }

                        //查询是否重复
                        caozuorizhiService.insertBatch(caozuorizhiList);
                        return R.ok();
                    }
                }
            }
        }catch (Exception e){
            e.printStackTrace();
            return R.error(511,"批量插入数据异常,请联系管理员");
        }
    }






}


package com.controller;


import java.util.Arrays;
import java.util.Map;

import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.PathVariable;
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.RequestParam;
import org.springframework.web.bind.annotation.RestController;

import com.annotation.IgnoreAuth;
import com.baomidou.mybatisplus.mapper.EntityWrapper;
import com.entity.ConfigEntity;
import com.service.ConfigService;
import com.utils.PageUtils;
import com.utils.R;
import com.utils.ValidatorUtils;

/**
 * 登录相关
 */
@RequestMapping("config")
@RestController
public class ConfigController{
	
	@Autowired
	private ConfigService configService;

	/**
     * 列表
     */
    @RequestMapping("/page")
    public R page(@RequestParam Map<String, Object> params,ConfigEntity config){
        EntityWrapper<ConfigEntity> ew = new EntityWrapper<ConfigEntity>();
    	PageUtils page = configService.queryPage(params);
        return R.ok().put("data", page);
    }
    
	/**
     * 列表
     */
    @IgnoreAuth
    @RequestMapping("/list")
    public R list(@RequestParam Map<String, Object> params,ConfigEntity config){
        EntityWrapper<ConfigEntity> ew = new EntityWrapper<ConfigEntity>();
    	PageUtils page = configService.queryPage(params);
        return R.ok().put("data", page);
    }

    /**
     * 信息
     */
    @RequestMapping("/info/{id}")
    public R info(@PathVariable("id") String id){
        ConfigEntity config = configService.selectById(id);
        return R.ok().put("data", config);
    }
    
    /**
     * 详情
     */
    @IgnoreAuth
    @RequestMapping("/detail/{id}")
    public R detail(@PathVariable("id") String id){
        ConfigEntity config = configService.selectById(id);
        return R.ok().put("data", config);
    }
    
    /**
     * 根据name获取信息
     */
    @RequestMapping("/info")
    public R infoByName(@RequestParam String name){
        ConfigEntity config = configService.selectOne(new EntityWrapper<ConfigEntity>().eq("name", "faceFile"));
        return R.ok().put("data", config);
    }
    
    /**
     * 保存
     */
    @PostMapping("/save")
    public R save(@RequestBody ConfigEntity config){
//    	ValidatorUtils.validateEntity(config);
    	configService.insert(config);
        return R.ok();
    }

    /**
     * 修改
     */
    @RequestMapping("/update")
    public R update(@RequestBody ConfigEntity config){
//        ValidatorUtils.validateEntity(config);
        configService.updateById(config);//全部更新
        return R.ok();
    }

    /**
     * 删除
     */
    @RequestMapping("/delete")
    public R delete(@RequestBody Long[] ids){
    	configService.deleteBatchIds(Arrays.asList(ids));
        return R.ok();
    }
}

五,项目总结

程序软件的开发阶段也包括了系统测试,这个部分就是程序质量评定的一个重要环节,如果说程序通过编码实现功能之后,不通过测试检查程序中出现的错误,那么程序一旦投入生活中运行使用时,就会产生许多大大小小的错误,这个时候去解决问题已经晚了,所以一个程序在被交付给使用者使用之前,开发者就需要使用多种测试方法反复进行测试,也是对程序的一个负责表现。程序进入系统测试阶段,在讲究策略进行测试时,也需要对时效性进行把控。当开发者测试完程序,并解决完测试期间程序产生的各种错误时,就需要程序的验收方来对程序进行验收测试,这也是程序测试的最后一个操作步骤。验收测试也是对程序的质量以及可交付性方面起到关键的作用。

5.1系统测试方法

程序软件进入到系统测试这一个环节时,也需要根据测试的方法进行规范化测试操作,测试方法以及使用顺序分别是:首先是单元测试,接着是集成测试和系统测试,最后才是验收测试,下面将描述系统测试方法。

单元测试:这个部分需要涉及到程序的代码方面的知识,这个操作环节是程序的开发者进行的,当程序开发者通过代码编写程序的子功能模块时,就会进行单元级别的测试,通常这个环节的测试也会被称作是白盒测试。

集成测试:这个步骤的前提是程序的所有功能模块都已完成开发,这个时候需要把程序所有的子功能模块集成到一起,形成一个完整的系统,此测试的主要目的就是检查这些功能模块集成在一起时的兼容性,也就是检测它们是否按照预期正常运行。

系统测试:当程序测试进入到这个环节时,就意味着程序测试工作已经进行到一半了,这个部分的测试也有另外一个名字,称作是黑盒测试,主要用于测试系统的功能是否按照预期进行运行。

验收测试:开发的程序已经通过了前面的单元测试,集成测试,以及系统测试环节时,就需要进行验收了,这个环节的操作用户就是程序面临的最终用户或者是客户。测试主要目的就是验证开发完成的程序是不是能够符合用户对其的期望,以及程序的所有功能是否符合用户的真正需求。

5.2 系统功能测试

5.2.1 用户登录测试

登录模块主要还是验证使用者的信息,判断使用者是否具备使用权限。测试的数据见下表,这里主要针对管理员进行测试。

表6-1 管理员登录测试数据表

选取的功能

具体步骤

填写的数据

预测结果

最终结果

管理员登录

依照页面提示依次填写账号,密码,然后点击登录按钮

保持账号与密码这两项数据,其中一个有误,另一个正确,进行测试

失败

失败

保持账号与密码都正确

成功

成功

5.2.2 添加账户功能测试

此部分主要测试程序的“添加账户”功能。测试信息使用数据表展示。

表6-2 添加新闻功能测试数据表

选取的功能

具体步骤

填写的数据

预测结果

最终结果

添加账户功能

管理员在添加账户页面根据提示填写数据并提交

标题和内容为null或数据格式有误

失败

失败

标题和内容填写无误

成功

成功

6.3 系统测试分析

通用超市结算系统在经历了一系列测试步骤之后,可以确定该系统可以交付给使用者进行使用了,在系统的功能主界面上可以清晰展示各个功能,并且各个功能的超链接也是正常跳转,能够实现用户要求的功能。在程序的稳定性,可靠性,验证逻辑以及操作流程方面跟需求文档很贴合。所以,开发完成的通用超市结算系统符合用户需求,它在用户电脑上运行使用带给用户的便利是显而易见的。

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

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

相关文章

JavaScript基础语法(变量)

JavaScript基础语法&#xff08;变量&#xff09; 学习路线&#xff1a;JavaScript基础语法&#xff08;输出语句&#xff09;->JavaScript基础语法&#xff08;变量&#xff09;->JavaScript基础语法&#xff08;数据类型&#xff09;->JavaScript基础语法&#xff…

(一)DepthAI-python相关接口:OAK Device

消息快播&#xff1a;OpenCV众筹了一款ROS2机器人rae&#xff0c;开源、功能强、上手简单。来瞅瞅~ 编辑&#xff1a;OAK中国 首发&#xff1a;oakchina.cn 喜欢的话&#xff0c;请多多&#x1f44d;⭐️✍ 内容可能会不定期更新&#xff0c;官网内容都是最新的&#xff0c;请查…

SuperMap iPortal 与独立代理服务的 session 共享通过redis配置实现

作者&#xff1a;yx 文章目录前言一、支持的Tomcat系列二、使用步骤1.将 /lib 中所有的 jar 拷贝到 tomcat/lib 目录2.给 tomcat 添加一个系统环境变量 "catalina.base"&#xff0c;变量取值为 tomcat 的根目录3、修改 redis 的相关配置4、在 【SuperMap iPortal / i…

Dreamweaver简单网页——HTML+CSS小米官网首页的设计与实现

常见网页设计作业题材有 个人、 美食、 公司、 学校、 旅游、 电商、 宠物、 电器、 茶叶、 家居、 酒店、 舞蹈、 动漫、 服装、 体育、 化妆品、 物流、 环保、 书籍、 婚纱、 游戏、 节日、 戒烟、 电影、 摄影、 文化、 家乡、 鲜花、 礼品、 汽车、 其他等网页设计题目, A…

数字化时代,中小企业如何落地数字化转型

大数据时代&#xff0c;各行各业的行业龙头和大型集团都已经开始了数据管理&#xff0c;让数据成为数据资产。但是在我国&#xff0c;中小企业的数量巨大&#xff0c;很多管理者忽视了这一点&#xff0c;今天我们就来聊一聊中小企业的数字化转型。 中小企业需要数字化转型 首…

博客系统【前后端分离版本】

笔记【博客系统】 测试网站&#xff1a;小孙的博客系统 测试&#xff1a;admin 测试&#xff1a;123456 实现一个网站&#xff0c;有两种典型的风格&#xff1a; 服务器渲染客户端渲染&#xff08;前后端分离&#xff09; 所谓渲染&#xff0c;就是把一个动态页面给构造出来 页…

性能测试fangan

XX 5.0系统 性能测试方案 修订历史记录 1 项目概述 1.1 背景说明 1.2 测试目的 为保证在日常运行及大型活动期间&#xff0c;稳定运行、应用快速&#xff0c;对进行性能测试&#xff0c;验证系统是否能够达到业务所需的性能指标&#xff0c;同时发现系统中存在的性能瓶颈&a…

对辊柱塞式成型机总体设计

目 录 摘 要 I Abstract II 第一章 绪论 1 1.1选题背景及意义 1 1.2国内外型秸秆谷物发展概况 2 1.2.1国外发展现状 2 1.2.2国内发展现状 2 1.3对辊柱塞式成型机的发展概况 6 1.3.1对辊柱塞式成型机的发展展状况 6 1.3.2对辊柱塞式成型机的成型机理 7 1.3研究主要内容 9 第二章…

UGUI性能优化学习笔记(一)网格重建

一、基本概念 在正式学习UGUI性能优化之前&#xff0c;需要先了解一些基本的概念 网格 无论是3D物体还是2D物体&#xff0c;都是由网格绘制而成。需要绘制的网格越多&#xff0c;性能消耗越大。 将Unity编译器调整到Wireframe模式&#xff0c;可以查看当前场景元素的网格组成…

冯诺依曼体系结构及操作系统的认识

目录1.前言2.冯诺依曼体系结构2.1.结构构成2.2.硬件分析2.2.1存储器的作用2.2.2CPU2.3.实际分析3.操作系统3.1.是什么3.2.为什么3.3.操作系统怎么进行管理3.3.1管理的本质3.3.2管理的方法3.4.系统调用3.5.最终体系1.前言 为什么现代计算机都被称为冯诺依曼结构计算机&#xff1…

C#运算符执行顺序对照表

C#运算符执行顺序对照表&#xff1a;在线查看C#运算符执行优先级别 窍门&#xff1a; CtrlF 快速查找 C#运算符优先级&#xff0c;是描述在计算机计算表达式时执行运算的先后顺序。 先执行具有较高优先级的运算&#xff0c;然后执行较低优先级的运算。 例如&#xff0c;我们常说…

k8s整合kong

k8s整合kong Kong网关的发展历程 ​ Kong网关起源于2007年&#xff0c;由Augusto、Marco、Michele三人在意大利的一个小车库中开发&#xff0c;当时命名为Mashup平台。在随后7年的时间里&#xff0c;Mashup平台逐渐占据API网关市场的主导地位。2017年10月&#xff0c;Mashup平台…

引擎入门 | Unity UI简介–第2部分(2)

本期我们继续为大家进行Unity UI简介&#xff08;第二部分&#xff09;的后续教程 本篇内容 3.动画按钮滑入 文章末尾可免费获取教程源代码 本篇本篇Unity UI简介&#xff08;第二部分&#xff09;篇幅较长&#xff0c;分为八篇&#xff0c;本篇为第二篇。 3.动画按钮滑入…

如何安装Torch7在Ubuntu20.04 ( CUDA10.1 和 CUDNN7.6.5)

先展示安装成果&#xff0c;东西没啥&#xff0c;就是很麻烦&#xff0c;特别是安装torch7库&#xff0c;下载不下来&#xff0c;断断续续的。 1. 首先&#xff0c;安装CUDA 10.1CUDNN7.6.5。切记&#xff1a;cudnn不要装cudnn8.X&#xff0c;好像跟torch不是很匹配。另外就是g…

省市县:数十万数据集PM2.5面板数据柵格数据(1998-2019)

1、数据来源&#xff1a; https://sites.wustl.edu/acag/datasets/surface-pm2-5/ 2、时间跨度&#xff1a;1998-2019 3、区域范围&#xff1a;中国各省、各城市、各区县 4、指标说明&#xff1a; 根据Global/Regional Estimates (V5.GL.02)&#xff0c;计算出国内PM2.5数…

车载电子专用DC-DC方案PL5501

PL5501是一个同步4开关Buck-Boost能够调节输出电压的控制器高于或低于输入电压。PL5501运作输入电压范围从3.6 V到32 V (36 V Maximum)以支持各种应用程序。PL5501 buck采用恒ON时间控制&#xff0c;上位机采用升压和升压两种操作方式负荷和线路调节。开关频率可以设置为150kHz…

在字符串两侧填充指定字符ljust()与rjust()方法

【小白从小学Python、C、Java】 【计算机等级考试500强双证书】 【Python-数据分析】 在字符串两侧填充指定字符 ljust()与rjust()方法 选择题 以下python代码输出正确的一项是? str"abc" print("【显示】str原始数据&#xff1a;") print("【执行】…

Spark框架

Spark计算速度 Hadoop的多个job之间的数据通信是基于磁盘的 Hadoop偏存储&#xff0c;其MR框架&#xff0c;是基于磁盘的计算&#xff0c;多个MR作业之间的数据交互&#xff0c;依赖于磁盘的IO&#xff0c;这会影响计算性能。 job1&#xff1a;读取磁盘文件&#xff0c;MR计算…

网页JS自动化脚本(三)查找定位页面元素的多种方法

当然定位元素不止一个方法,下面总结一些常用的方法 父元素定位 a.undertips-link>span我们看到父元素是第8代的a,那么先定位到a,然后再通过a定位到子元素span,可以看到1 of 1 ,匹配上了唯一的元素 祖父元素定位 div#lm-new>a>span可以看到进对第7代的div元素进行定位…

承上启下:基于全域漏斗分析的主搜深度统一粗排

1. 背景 1.1 概述 淘宝主搜索是一个典型的多阶段检索系统&#xff0c;主要分为召回、粗排、精排等阶段。召回阶段&#xff0c;由文本召回、个性化等多路召回构成&#xff0c;输出商品量级约10^5&#xff1b;粗排阶段&#xff0c;需要从三路召回集合中分别进行筛选&#xff0c…