Java开发中的------修改密码+忘记密码

news2025/1/14 18:24:33

目录

1.修改密码

客户端响应

 前端vue

后端

controller层

ServiceImpl实现层

2.忘记密码

客户端响应

后端

controller层

serviceImpl实现层


本章需要准备:springcloud项目,依赖,数据库....

数据库SQL

 
SET FOREIGN_KEY_CHECKS=0;
 
-- ----------------------------
-- Table structure for mbs_member
-- ----------------------------
DROP TABLE IF EXISTS `mbs_member`;
CREATE TABLE `mbs_member` (
  `id` int NOT NULL AUTO_INCREMENT COMMENT '会员客户ID',
  `username` varchar(255) CHARACTER SET utf8 COLLATE utf8_general_ci DEFAULT NULL COMMENT '账号',
  `password` varchar(255) CHARACTER SET utf8 COLLATE utf8_general_ci DEFAULT NULL COMMENT '密码',
  `pw_salt` varchar(255) CHARACTER SET utf8 COLLATE utf8_general_ci DEFAULT NULL COMMENT '盐值列',
  `status` int DEFAULT NULL COMMENT '账号状态(帐号启用状态:0->启用;1->禁用)',
  `id_type` varchar(255) CHARACTER SET utf8 COLLATE utf8_general_ci DEFAULT NULL COMMENT '(身份证,护照,军官证,台胞证,港澳台来往内地通行证)',
  `path_front` varchar(255) CHARACTER SET utf8 COLLATE utf8_general_ci DEFAULT NULL COMMENT '正面',
  `path_reverse` varchar(255) CHARACTER SET utf8 COLLATE utf8_general_ci DEFAULT NULL COMMENT '反面',
  `name` varchar(255) CHARACTER SET utf8 COLLATE utf8_general_ci DEFAULT NULL COMMENT '客户名字',
  `contact_name` varchar(255) CHARACTER SET utf8 COLLATE utf8_general_ci DEFAULT NULL COMMENT '联系人',
  `contact_phone` varchar(255) CHARACTER SET utf8 COLLATE utf8_general_ci DEFAULT NULL COMMENT '联系电话',
  `contact_address` varchar(255) CHARACTER SET utf8 COLLATE utf8_general_ci DEFAULT NULL COMMENT '联系地址',
  `license_no` varchar(255) CHARACTER SET utf8 COLLATE utf8_general_ci DEFAULT NULL COMMENT '驾照号',
  `sex` varchar(255) CHARACTER SET utf8 COLLATE utf8_general_ci DEFAULT NULL COMMENT '性别',
  `phone_num` varchar(255) CHARACTER SET utf8 COLLATE utf8_general_ci DEFAULT NULL COMMENT '电话',
  `address` varchar(255) CHARACTER SET utf8 COLLATE utf8_general_ci DEFAULT NULL COMMENT '地址',
  `email` varchar(255) CHARACTER SET utf8 COLLATE utf8_general_ci DEFAULT NULL COMMENT '邮箱',
  `member_level_id` int DEFAULT NULL COMMENT '会员级别(普通,金卡,白金,钻石)',
  `Account_Balance` double DEFAULT '0' COMMENT '账户余额',
  `integration` int DEFAULT '0' COMMENT '积分',
  `growth` double DEFAULT NULL COMMENT '成长值',
  `history_integration` varchar(255) CHARACTER SET utf8 COLLATE utf8_general_ci DEFAULT NULL COMMENT '历史积分数量(只加不减)',
  `open_id` int DEFAULT NULL COMMENT '微信返回ID',
  `token` varchar(255) CHARACTER SET utf8 COLLATE utf8_general_ci DEFAULT NULL COMMENT '登录验证token',
  `id_card` varchar(18) CHARACTER SET utf8 COLLATE utf8_general_ci DEFAULT NULL COMMENT '证件编号',
  `head_pic` varchar(255) CHARACTER SET utf8 COLLATE utf8_general_ci DEFAULT NULL COMMENT '头像',
  PRIMARY KEY (`id`) USING BTREE
) ENGINE=InnoDB AUTO_INCREMENT=89 DEFAULT CHARSET=utf8;
 
-- ----------------------------
-- Records of mbs_member
-- ----------------------------
INSERT INTO `mbs_member` VALUES ('71', 'zhanghaojie', 'f5455390512559851fdffdc9dc71e1debe7261c41509579a3cb8d8085b86bee95d3808d9345e79790a2b2a153effe2615b1b4302694018d0d369f13a4a6e5005', '8efbe27a-4', '0', '1', null, null, '小浩杰', null, null, null, '410100123457', null, '15136204889', null, '222222@qq.com', '1', '11240', '5610', '3760', '2260', null, null, null, 'https://wangzherongyao.oss-cn-beijing.aliyuncs.com/upload/files/1605770604552-7c5b7014-09cb-4d0a.jpg');
INSERT INTO `mbs_member` VALUES ('78', 'test111', '111591072d3b1a693158b77a16df045daf87fca20ea7fc00c32411b6ace2d2c7ac0a70777619883fac37417ca9a09593465c51e7ab56cfb2b1debc174e2ffb3a', 'fcba1cda-2ce7-4d49-9658-976ff2b5aa9d', '0', '1', null, null, 'test111', null, null, null, '511621200011011212', null, '18398591677', null, '1111@11.cc', '3', '94620.96000000002', '1000', '65790.4', '0', null, null, '51162******212', 'https://qy002-bookstore.oss-cn-hangzhou.aliyuncs.com/staff_headicon/9ddb6b4b-8332-47a6-84ae-d5b9234e5065bg5.jpg');
INSERT INTO `mbs_member` VALUES ('88', 'cjj', '836bac861900ae9df5bf390ede7c2a45c1287f346139d3d3576300be822e1f17746c95d622955cc292427748dc12959447a28ba46ce13eb3c41fdcab09956161', 'c5546504-f2a1-4494-a738-8297e786acee', '0', '1', null, null, '成JJ', null, null, null, null, null, '13645678922', null, null, '1', '200', '50', '10500', '500', null, null, null, 'https://qy002-bookstore.oss-cn-hangzhou.aliyuncs.com/staff_headicon/29727801-0855-484d-bf5d-c6f69e8a72ad111.jpg');

1.修改密码

客户端响应

 

 前端vue

<template>
  <div class="surechange">
    <head_><h1>修改密码</h1></head_>

    <div class="inp">
      <label for="oldpw">旧密码</label>
      <input
        type="text"
        placeholder="请输入旧密码"
        id="oldpw"
        v-model="oldpw"
        @blur="checkpw"
      />
    </div>

    <div class="inp">
      <label for="newpwd">新密码</label>
      <input
        v-model="newpw"
        :type="flas ? tests : pass"
        placeholder="请输入新密码"
        id="newpwd"
      />
      <van-icon
        @click="eye_active"
        :class="flas ? 'eye_active' : ''"
        name="eye-o"
        size="0.36rem"
      />
    </div>

    <div class="inp">
      <label for="sure">确认</label>
      <input
        :type="flas2 ? tests : pass"
        v-model="surepw"
        placeholder="再次输入新密码"
        id="sure"
      />
      <van-icon
        @click="eye_active2"
        :class="flas2 ? 'eye_active' : ''"
        name="eye-o"
        size="0.36rem"
      />
    </div>

    <div class="submit">
      <button
        @click="submit"
        :disabled="submitdisplay"
        :class="[submitcolor == true ? 'submit_active' : '']"
      >
        确认修改
      </button>
    </div>
  </div>
</template>

<script>
  //导入请求
import{changePwd,backPwd,checkPwd} from "../../request/userinfo/userinfo"
import head_ from '../jingtai_/header'
export default {
  props: {},
  data() {
    return {
      oldpw: "",
      newpw: "",
      surepw: "",
      flas: false,
      pass: "password",
      tests: "text",
      flas2: false,
      submitdisplay: true,
      submitcolor: false,
      regpw: /^[\w]{6,16}$/,
      
    };
    
  },
  methods: {
    //校验密码
    checkpw(){
      checkPwd({oldpw: this.oldpw}).then((res) => {
        if (res.code == 200) {
          if(!res.data){
              this.$toast.fail("请输入正确的密码!");
              this.oldpw='';
          }
        }else {
          this.$toast.fail("出错了!");
        }
      });
    },
    eye_active() {
      this.flas = !this.flas;
    },
    eye_active2() {
      this.flas2 = !this.flas2;
    },
    submit() {
      if (this.regpw.test(this.newpw) == false) {
        this.$toast.fail("6~16位,包含大小写字母和数字的组合");
      } else if (this.newpw != this.surepw) {
        this.$toast.fail("两次密码输入不一致");
      } else {
        changePwd({ password: this.newpw }).then((res) => {
          if (res.code == 200 && res.data) {
            this.$toast.success("修改成功");
            window.localStorage.removeItem("token");
            this.$router.push("/login");
          } else {
            this.$toast.success("修改失败");
          }
        });
        
      }
    },
  },
  updated() {
    if (this.oldpw != "" && this.newpw != "" && this.surepw != "") {
      this.submitdisplay = false;
      this.submitcolor = true;
    } else {
      this.submitcolor = false;
      this.submitdisplay = true;
    }
  },
  components: {head_},
};
</script>

<style scoped lang="less">
.surechange {
  padding: 0 0.24rem;
  .title {
    display: flex;
    align-items: center;
    height: 0.88rem;
    span {
      flex: 1;
      text-align: center;
      font-size: 0.34rem;
      font-weight: bolder;
    }
  }
  .inp {
    display: flex;
    justify-content: space-between;
    align-items: center;
    margin-top: 0.29rem;
    position: relative;
    label {
      font-size: 0.26rem;
      font-weight: bolder;
    }
    input {
      width: 5.48rem;
      height: 0.66rem;
      font-size: 0.22rem;
      padding-left: 0.19rem;
      border: 2px solid #e4e4e4;
      border-radius: 0.04rem;
      &::placeholder {
        color: #999;
      }
    }
    .van-icon-eye-o {
      position: absolute;
      top: 0.2rem;
      right: 0.19rem;
    }
    .eye_active {
      color: #2094ff;
    }
  }

  .submit {
    margin-top: 2.27rem;
    text-align: center;
    button {
      width: 5rem;
      height: 1rem;
      color: #999;
      background: #f2f2f2;
      font-size: 0.34rem;
      text-align: center;
      line-height: 1rem;
      border: none;
      outline: none;
    }
    .submit_active {
      background: #43a5ff;
      color: #fff;
    }
  }
}
</style>
// 检验密码
export function checkPwd(data){
    return req({
        url:'/member/queryByPassword?password='+data.oldpw,
        method:'get',
        data:data
    })
}

// 修改密码
export function changePwd(data){
    // console.log(data)
    return req({
        url:'/member/alterPassword?pass='+data.password,
        method:'post',
        data:data
    })
}

// 找回密码
export function backPwd(data){
    // console.log(data)
    return req({
        url:'/mbs/client/BackPwd',
        method:'post',
        data:data
    })
   
}

后端

实体类

package com.fifth.entity;


import com.baomidou.mybatisplus.annotation.IdType;
import com.baomidou.mybatisplus.annotation.TableField;
import com.baomidou.mybatisplus.annotation.TableId;
import com.baomidou.mybatisplus.annotation.TableName;
import io.swagger.annotations.ApiModel;
import io.swagger.annotations.ApiModelProperty;
import lombok.Data;

import java.io.Serializable;

/**
 * 客户信息表
 *
 * @TableName mbs_member
 */
@TableName("mbs_member")
@Data
@ApiModel("客户信息实体类")
public class Member implements Serializable {

    /**
     * 会员客户ID
     */
    @ApiModelProperty("会员客户ID")
    @TableId(type = IdType.AUTO)
    private Integer id;
    /**
     * 账号
     */
    @ApiModelProperty("账号")
    private String username;
    /**
     * 密码
     */
    @ApiModelProperty("密码")
    private String password;
    /**
     * 盐值列
     */
    @ApiModelProperty("盐值列")
    private String pwSalt;
    /**
     * 账号状态(帐号启用状态:0->启用;1->禁用)
     */
    @ApiModelProperty("账号状态(帐号启用状态:0->启用;1->禁用)")
    private Integer status;
    /**
     * (身份证,护照,军官证,台胞证,港澳台来往内地通行证)
     */
    @ApiModelProperty("(身份证,护照,军官证,台胞证,港澳台来往内地通行证)")
    private String idType;
    /**
     * 正面
     */
    @ApiModelProperty("正面")
    private String pathFront;
    /**
     * 反面
     */
    @ApiModelProperty("反面")
    private String pathReverse;
    /**
     * 客户名字
     */
    @ApiModelProperty("客户名字")
    private String name;
    /**
     * 联系人
     */
    @ApiModelProperty("联系人")
    private String contactName;
    /**
     * 联系电话
     */
    @ApiModelProperty("联系电话")
    private String contactPhone;
    /**
     * 联系地址
     */
    @ApiModelProperty("联系地址")
    private String contactAddress;
    /**
     * 驾照号
     */
    @ApiModelProperty("驾照号")
    private String licenseNo;
    /**
     * 性别
     */
    @ApiModelProperty("性别")
    private String sex;
    /**
     * 电话
     */
    @ApiModelProperty("电话")
    private String phoneNum;
    /**
     * 地址
     */
    @ApiModelProperty("地址")
    private String address;
    /**
     * 邮箱
     */
    @ApiModelProperty("邮箱")
    private String email;
    /**
     * 会员级别(普通,金卡,白金,钻石)
     */
    @ApiModelProperty("会员级别(普通,金卡,白金,钻石)")
    private Integer memberLevelId;
    /**
     * 账户余额
     */
    @ApiModelProperty("账户余额")
    private Double accountBalance;
    /**
     * 积分
     */
    @ApiModelProperty("积分")
    private Integer integration;
    /**
     * 成长值
     */
    @ApiModelProperty("成长值")
    private Double growth;
    /**
     * 历史积分数量(只加不减)
     */
    @ApiModelProperty("历史积分数量(只加不减)")
    private String historyIntegration;
    /**
     * 微信返回ID
     */
    @ApiModelProperty("微信返回ID")
    private Integer openId;
    /**
     * 登录验证token
     */
    @ApiModelProperty("登录验证token")
    private String token;
    /**
     * 证件编号
     */
    @ApiModelProperty("证件编号")
    private String idCard;
    /**
     * 头像
     */
    @ApiModelProperty("头像")
    private String headPic;


}

controller层



@RestController
@RequestMapping("member")
@Api(tags = "客户管理--会员管理")
public class MemberController {

    @Autowired
    private MemberService memberService;

    //判断修改密码中输入的旧密码
    @GetMapping("queryByPassword")
    @ApiOperation("修改密码-旧密码判断")
    public Result<Boolean> queryByPassword(@RequestParam String password,@RequestParam String token) {
        return memberService.queryByPassword(password,token);
    }

    //确认修改密码
    @PostMapping("/alterPassword")
    @ApiOperation("修改密码-确认事件")
    public Result<Boolean> alterPassword(@RequestParam String pass, @RequestParam String token) {
        return memberService.alterPassword(pass, token);
    }
}

Service层


public interface MemberService {

    //修改密码-旧密码判断
    Result<Boolean> queryByPassword(String password, String token);
    //修改密码-确认事件
    Result<Boolean> alterPassword(String pass, String token);
}

ServiceImpl实现层


@Service
public class MemberServiceImpl implements MemberService {
    @Autowired
    private MemberDao memberDao;

    @Autowired
    private StringRedisTemplate redisTemplate;


    //修改密码-旧密码判断
    /**
     * 根据密码和用户令牌查询用户信息
     * @param password 用户输入的旧密码
     * @param token 用户令牌,用于从Redis中获取用户信息
     * @return 返回Result对象,包含查询结果和消息
     */
    @Override
    public Result<Boolean> queryByPassword(String password, String token) {
        // 从Redis中根据用户令牌获取用户信息
        String userInfoJson = redisTemplate.opsForValue().get("sso:member:" + token);

        if (userInfoJson == null) {
            // 未找到该令牌对应的用户信息
            return new Result<>(500, "令牌不存在", null);
        }

        // 将用户信息JSON转换成Member对象
        Member member = JSON.parseObject(userInfoJson, Member.class);

        if (member == null || member.getId() == null) {
            // Redis中存储的用户信息无效
            return new Result<>(500, "用户信息无效", null);
        }

        // 查询数据库该用户的真实密码
        Member member1 = memberDao.selectById(member.getId());

        if (member1 == null || member1.getPassword() == null || member1.getPwSalt() == null) {
            // 数据库中用户信息无效
            return new Result<>(500, "用户信息无效", null);
        }

        // 加密后的密码
        Md5Hash md5Hash = new Md5Hash(password, member1.getPwSalt());

        // 检查用户输入的旧密码是否与数据库中的密码匹配
        if (member1.getPassword().equals(md5Hash.toString())) {
            // 密码正确,返回结果为成功
            return new Result<>(200, "密码正确", true);
        } else {
            // 密码不正确,返回结果为失败
            return new Result<>(500, "旧密码错误", false);
        }
    }


    //修改密码-确认事件
    @Override
    public Result<Boolean> alterPassword(String pass, String token) {
        //1.获取当前登录用户的缓存信息
        String s = redisTemplate.opsForValue().get("sso:member:" + token);
        Member member = JSON.parseObject(s,Member.class);


        //2.修改用户密码,进行加密并更新到数据库
        String newPassword = new Md5Hash(pass, member.getPwSalt()).toString();
        member.setPassword(newPassword);
        int i = memberDao.updateById(member);

        if (i > 0) {
            return new Result<>(200, "修改成功", true);
        }
        return new Result<>(500, "修改密码未知错误", false);
    }

}

dao层

@Mapper
public interface MemberDao extends BaseMapper<Member> {
  
}

修改密码完成

2.忘记密码

客户端响应

 前端vue......(在上面"修改密码 "前端vue里)

后端

 MemberRegisterVo.java

@Data
@ApiModel("会员短信注册信息接收")
public class MemberRegisterVo {
    private String confirmPassword;
    private String password;
    private String phoneNum;

    //验证码
    private String verifyCode;

}

controller层



@RestController
@RequestMapping("member")
@Api(tags = "客户管理--会员管理")
public class MemberController {

    @Autowired
    private MemberService memberService;


    @GetMapping("/queryByUserName")
    @ApiOperation("根据会员电话(相当于用户名)查询会员")
    public Result<Boolean> queryByUserName(@RequestParam String userName) {
        return memberService.queryByUserName(userName);
    }

    @PostMapping("/backPassword")
    @ApiOperation("密码找回")
    public Result<String> backPassword(@RequestBody MemberRegisterVo memberRegisterVo, @RequestParam String token) {
        return memberService.backPassword(memberRegisterVo,token);
    }


}

service层

public interface MemberService {

    //根据会员电话查询会员信息
    Member getByPhoneNum(String num);

    //密码找回
    Result<String> backPassword(MemberRegisterVo memberRegisterVo,String token);


}

serviceImpl实现层


@Service
public class MemberServiceImpl implements MemberService {
    @Autowired
    private MemberDao memberDao;

    @Autowired
    private StringRedisTemplate redisTemplate;


    //根据会员电话查询信息
    @Override
    public Result<Boolean> queryByUserName(String userName) {
        QueryWrapper<Member> wrapper = new QueryWrapper<>();
        //会员手机号
        wrapper.eq("phone_num", userName);
        Member member = memberDao.selectOne(wrapper);
        if (member != null) {
            return new Result<>(200,"成功",true);
        }
        return new Result<>(200,"成功",false);
    }

    //密码找回
    @Override
    public Result<String> backPassword(MemberRegisterVo memberRegisterVo,String token) {
        //1.获取当前登录用户的缓存信息
        String s = redisTemplate.opsForValue().get("sso:member:" + token);
        Member member = JSON.parseObject(s,Member.class);

        //1.校验验证码输入是否正确
        String verifyCode = memberRegisterVo.getVerifyCode();
        //获取redis中的验证码
        String code = redisTemplate.opsForValue().get("code");

        if (!code.equals(verifyCode)) {
            return new Result<>(200, "验证码错误", "1");
        }

        //用户密码加密
        String password = memberRegisterVo.getPassword();

        Md5Hash md5password = new Md5Hash(password, member.getPwSalt());
        member.setPassword(md5password.toString());


        int i = memberDao.updateById(member);
        if (i > 0) {
            //清除验证码
            redisTemplate.delete("code");
            return new Result<>(200, "成功", "0");
        }
        return new Result<>(200, "失败", null);
    }

}

dao层


@Mapper
public interface MemberDao extends BaseMapper<Member> {

}

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

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

相关文章

C++设计模式之责任链设计模式

C责任链设计模式 什么是责任链设计模式 责任链设计模式是一种行为型设计模式&#xff0c;它允许多个处理请求的对象串联起来&#xff0c;形成一个处理请求的链。每个对象都有机会处理请求&#xff0c;如果该对象不能处理请求&#xff0c;则将请求传递给链中的下一个对象。 该…

Inkscape 1.3 版开放源代码 SVG 编辑器发布,新增形状生成器工具和许多更改

导读Inkscape 是功能强大的开源、跨平台、免费 SVG&#xff08;可缩放矢量图形&#xff09;编辑器&#xff0c;今天已更新到稳定的 1.3 版&#xff0c;这是一个引入新功能和许多改进的重要版本。 Inkscape 1.3 是在 Inkscape 1.2 发布一年零两个月后推出的&#xff0c;它引入了…

[pymc3][python]pymc3安装后测试代码2

测试环境&#xff1a; pymc33.11.2 代码&#xff1a; import numpy as np import pymc3 as pm import matplotlib.pyplot as pltif __name__ __main__:# 生成随机数据np.random.seed(123)x np.linspace(0, 1, 100)y 0.5 * x np.random.normal(0, 0.1, size100)# 定义概率…

C/C++算法——散列表

1、散列表介绍 散列表的英文叫Hash Table&#xff0c;我们平时也叫它哈希表或者Hash 表。散列表用的是数组支持按照下标随机访问数据的特性&#xff0c;所以散列表其实就是数组的一种扩展&#xff0c;由数组演化而来。可以说&#xff0c;如果没有数组&#xff0c;就没有散列表。…

【C++】-二叉搜索树的详解(递归和非递归版本以及巧用引用)

&#x1f496;作者&#xff1a;小树苗渴望变成参天大树&#x1f388; &#x1f389;作者宣言&#xff1a;认真写好每一篇博客&#x1f4a4; &#x1f38a;作者gitee:gitee✨ &#x1f49e;作者专栏&#xff1a;C语言,数据结构初阶,Linux,C 动态规划算法&#x1f384; 如 果 你 …

JDBC案例

文章目录 案例1 &#xff1a;修改数据库中的数据案例2&#xff1a;查询数据库中的数据案例3&#xff1a;查询数据库中账户表数据&#xff0c;并将其封装成Account对象&#xff0c;&#xff0c;存储到ArrayList集合当中案例4&#xff1a;商品的增删改查1.准备环境2.查询3.添加4.…

1.微信小程序开发-快速上手

1.环境搭建 1.1 下载开发者工具 微信开发者工具下载地址与更新日志 | 微信开放文档微信开发者平台文档https://developers.weixin.qq.com/miniprogram/dev/devtools/download.html 1.2 注册小程序 获取小程序AppId 2.小程序组件 1.view&#xff1a;用于展示视图元素&#x…

WAF绕过-权限控制篇-后门免杀

WAF绕过主要集中在信息收集&#xff0c;漏洞发现&#xff0c;漏洞利用&#xff0c;权限控制四个阶段。 1、什么是WAF&#xff1f; Web Application Firewall&#xff08;web应用防火墙&#xff09;&#xff0c;一种公认的说法是“web应用防火墙通过执行一系列针对HTTP/HTTPS的安…

所有集群启动的命令

所有集群启动的命令 查询所有节点启动Hadoop集群(Yarn模式)关闭Hadoop集群Spark&#xff08;local模式&#xff09;启动Spark集群standalone模式(不用了)关闭standalone模式HA下的standalone模式关闭HA-standalone模式Yarn模式&#xff08;重点&#xff09; 关闭Spark集群启动f…

接口/Web自动化测试如何做?框架如何搭建封装?

目录&#xff1a;导读 前言一、Python编程入门到精通二、接口自动化项目实战三、Web自动化项目实战四、App自动化项目实战五、一线大厂简历六、测试开发DevOps体系七、常用自动化测试工具八、JMeter性能测试九、总结&#xff08;尾部小惊喜&#xff09; 前言 自动化测试怎么做…

数据可视化(5)热力图及箱型图

1.热力图 #基本热力图 #imshow&#xff08;x&#xff09; #x&#xff0c;数据 x[[1,2],[3,4],[5,6],[7,8],[9,10]] plt.imshow(x) plt.show() #使用热力图分析学生的成绩 dfpd.read_excel(学生成绩表.xlsx) #:表示行号 截取数学到英语的列数 xdf.loc[:,"数学":英语].…

技能生态链职业技能等级评价认定业务

一、项目背景 根据《关于公布广东省2022年第一批职业技能等级认定社会培训评价组织名单的通知》&#xff08;粤人社函〔2022〕76号&#xff09;&#xff0c;广东泰迪智能科技股份有限公司于2022年入选广东省2022年第一批职业技能等级认定社会评价组织&#xff0c;并根据《关于…

《水经注地图服务》发布的影像数据如何在OsgEarth中调用

OsgEarth 是一个用于OpenSceneGraph (OSG)的可扩展地形渲染工具包&#xff0c;它是一个开源、高性能、3D 图形工具包。 只需创建一个简单的 XML 文件&#xff0c;将其指向您的图像、高程和矢量数据&#xff0c;将其加载到您最喜欢的 OSG 应用程序中&#xff0c;然后开始&#…

蓝桥云课ROS机器人旧版实验报告-05导航功能

项目名称 实验五 导航功能 成绩 内容&#xff1a;创建变换、发布传感器消息、里程数据信息、创建基础控制器、创建地图&#xff0c;机器人配置、全局和局部代价地图、rviz详细配置、自适应蒙特卡洛定位&#xff0c;避障&#xff0c;目标发送 实验记录&#xff08;70分&…

Jenkins工具系列 —— 插件 实现用户权限分配与管理

文章目录 安装插件 Role-based Authorization Strategy添加用户注册配置权限查看当前使用者&#xff0c;获取user id配置管理员权限配置普通用户权限&#xff08;非管理员权限&#xff09; 小知识 安装插件 Role-based Authorization Strategy 点击 左侧的 Manage Jenkins —&…

[LeetCode]只出现一次的数字相关题目(c语言实现)

文章目录 LeetCode136. 只出现一次的数字ⅠLeetCode137. 只出现一次的数字 IILeetCode260. 只出现一次的数字 IIILeetCode268. 丢失的数字 LeetCode136. 只出现一次的数字Ⅰ 题目: 给你一个 非空 整数数组 nums &#xff0c;除了某个元素只出现一次以外&#xff0c;其余每个元…

使用MyBatis(2){使用myBatis操作增删改查/动态SQL}

目录 一、定义接口、实体类、创建XML文件实现接口&#xff09; 二、MyBatis的增删改查 &#x1f345;1、MyBatis传递参数查询 &#x1f388;写法一 &#x1f388;写法二 &#x1f388;两种方式的区别 &#x1f345;2、删除操作 &#x1f345;3、根据id修改用户名 &#…

Java 基础进阶总结(一)反射机制学习总结

文章目录 一、初识反射机制1.1 反射机制概述1.2 反射机制概念1.3 Java反射机制提供的功能1.4 反射机制的优点和缺点 二、反射机制相关的 API2.1 一、初识反射机制 1.1 反射机制概述 JAVA 语言是一门静态语言&#xff0c;对象的各种信息在程序运行时便已经确认下来了&#xff0…

延长周末体验感

延长周末体验感 写在最前面周末的时间规划题外话善解人意的chatgpt 提升周末体验感的好方法随机选择一个周末活动 怎样才能获得充分的休息 写在最前面 话题征文~ https://activity.csdn.net/creatActivity?id10533&spm1011.2432.3001.9644 工作以后常常容易感到疲于奔命…

python简单小游戏代码100行,python小游戏程序源代码

大家好&#xff0c;小编来为大家解答以下问题&#xff0c;python简单小游戏代码100行&#xff0c;python小游戏代码能用的&#xff0c;现在让我们一起来看看吧&#xff01; Python编写简易猜数字小游戏&#xff08;附完整代码&#xff09; 猜数字游戏是一款非常经典的小游戏&am…