java每日一题——ATM系统编写(答案及编程思路)

前言:

基础语句学完,也可以编写一些像样的程序了,现在要做的是多加练习,巩固下知识点,打好基础,daydayup!

题目:模仿银行ATM系统,可以创建用户,存钱,转账,修改密码注销账户等操作

思路:利用面向对象编程:1,定义一个账户类Account,至少需要包含(卡号、姓名、性别、密码、余额、每次取现额度);2,定义一个ATM类,用来代表ATM系统,负责提供所有的业务需求;3,定义一个测试类Test,负责对我们开发的ATM系统进行测试。

1,创建实体类:

创建一个实体类,用来记录姓名、卡号、性别、密码、余额、每次取现额度等信息。

public class Account {
    private String card;
    private String username ;
    private  char sex;
    private  String password;
    private double money;
    private  double limit;

    public Account() {
    }

    public String getCard() {
        return card;
    }

    public void setCard(String card) {
        this.card = card;
    }

    public String getUsername() {
        return username + (sex=='男'? "先生":"女士");
    }

    public void setUsername(String username) {
        this.username = username;
    }

    public char getSex() {
        return sex;
    }

    public void setSex(char sex) {
        this.sex = sex;
    }

    public String getPassword() {
        return password;
    }

    public void setPassword(String password) {
        this.password = password;
    }

    public double getMoney() {
        return money;
    }

    public void setMoney(double money) {
        this.money = money;
    }

    public double getLimit() {
        return limit;
    }

    public void setLimit(double limit) {
        this.limit = limit;
    }
}

2,创建操作类:

1,创建界面 

通过选择1,或选择2进入系统

  public void start(){
        Scanner sc =new Scanner(System.in);
        while (true) {
            System.out.println("======欢迎来到ATM=======");
            System.out.println("1,用户登陆");
            System.out.println("2,用户开户");
            System.out.println("请选择");
            int id =sc.nextInt();
            switch (id){
                case 1:
                    //用户登陆
                    login();
                    break;
                case 2:
                    //用户开户
                    Operator();
                    break;
                default:
                    System.out.println("请重新输入");
            }
        }
    }

2,用户开户 

运用Scanner输入来记入需要记录的信息,值得一提的是:由于Scanner没办法记录char变量,所以使用charAt来取第一个值。

   private  void Operator(){
        Account acc = new Account();

        System.out.println("请输入姓名");
        String name = sc.next();
        acc.setUsername(name);
        while (true) {
            System.out.println("请输入性别(男/女)");
            char sex = sc.next().charAt(0);

            if (sex == '男'|| sex == '女'){
                acc.setSex(sex);
                break;
            }else{
                System.out.println("请输入(男/女)");
            }
        }
        while (true) {
            System.out.println("请设置你的密码");
            String password = sc.next();
            System.out.println("请再次输入你的密码");
            String okpassword = sc.next();
            if (password.equals(okpassword)){
                acc.setPassword(okpassword);
                break;
            }else{
                System.out.println("两次密码不一致,请重新输入");
            }
        }

        System.out.println("请设置每日取款限额");
        double limit = sc.nextDouble();
        acc.setLimit(limit);

        String id =card();
        acc.setCard(id);

        accounts.add(acc);
        System.out.println("恭喜"+acc.getUsername()+"开户成功,您的卡号为:"+acc.getCard());

    }
2.1系统输入卡号 

由于卡号需要随机生成8位数字,并且不能与其他人的号码重复,所以需要建立两个方法来做调试。一个方法用于生成8位随机数字,一个方法用于检测号码是否重复

private String card(){
        Random r = new Random();
        while (true) {
            String id = "";
            for (int i = 0; i < 8; i++) {
               int data=  r.nextInt(10);
                    id +=data;
            }
            Account acc= vs(id);
            if (acc == null){
                return id;
            }
        }
    }
    private  Account vs (String card){

        for (int i = 0; i <accounts.size(); i++) {
              Account acc= accounts.get(i);
              if (acc.getCard().equals(card)){
                  return acc;
              }
        }
        return null;

 这样一来,开户也就成功了。接下来是登陆的操作。

3,用户登陆

需要注意的是:当系统中没有账号时,要提示没有账号。登陆时需要注意号码的匹对。

 private void login(){
        if (accounts.size()==0){
            System.out.println("请先创建账号");
            return;
        }
        while (true) {
            System.out.println("请输入卡号");
           String card = sc.next();
            Account acc = vs(card);
            if(acc == null){
                System.out.println("没有该账号,请重新输入");
            }else if(acc.getCard().equals(card)){
                while (true) {
                    System.out.println("请输入密码");
                    String password =sc.next();
                    if (acc.getPassword().equals(password)){
                             acco = acc;
                            check();
                         return;
                    }else{
                        System.out.println("密码不正确,请重新输入");
                    }
                }
            }
        }
    }

4,业务界面

登陆成功后,便可进行业务选择。运用switch语句可以精准选择业务需求

private void check(){
        while (true) {

            System.out.println(acco.getUsername()+"你可以办理以下业务");
            System.out.println("1.查询账户");
            System.out.println("2.存款");
            System.out.println("3.取款");
            System.out.println("4.转账");
            System.out.println("5.修改密码");
            System.out.println("6.退出");
            System.out.println("7.注销账户");
            System.out.println("请选择");
            int check= sc.nextInt();
            switch (check){
                case 1:
                    idcheck();
                    break;
                    case 2:
                        moenycheck();
                    break;
                case 3:
                    moneyleave();
                    break;
                    case 4:
                    transmoney();
                    break;
                    case 5:
                        changepassword();
                    return;

                    case 6:
                        System.out.println("你已经退出");
                   return;
                    case 7:
                   if (deleteid());
                    return;
                default:
                    System.out.println("你输入的数字有误,请重新输入");
            }
        }
    }
4.1账户确认

建议独立一个方法,其他没什么需要注意的

private  void idcheck(){
        System.out.println("号码:"+acco.getCard());
        System.out.println("性别:"+acco.getSex());
        System.out.println("存款:"+acco.getMoney());
        System.out.println("每日限额:"+acco.getLimit());
    }
4.2存款 

 熟用switch语句及死循环能够很好的解决问题

private void moenycheck() {
        while (true) {
            System.out.println("欢迎来到存款界面");
            System.out.println("存款请按1");
            System.out.println("退出请按2");
            int sd = sc.nextInt();
            switch (sd){
                case 1:
                    System.out.println("请输入你要存多少");
                    double money= sc.nextDouble();
                    System.out.println("请问你确定要存入"+money+"么");
                    System.out.println("确定请按1");
                    System.out.println("返回请按2");
                    int cc =sc.nextInt();
                    switch (cc){
                        case 1:
                            acco.setMoney(acco.getMoney()+money);
                            System.out.println("您的余额为"+acco.getMoney());
                            break;
                        case 2:
                            return;
                        default:
                            System.out.println("请重新输入");
                    }
                    break;
                case 2:
                    return;
                default:
                    System.out.println("请重新输入");
            }

        }
    }
4.3取款 

一连串的switch语句和if问句,解决每一项逻辑

 private void moneyleave() {
        while (true) {
            System.out.println("欢迎来到取款界面");
            System.out.println("取款请按1");
            System.out.println("退出请按2");
            int sd = sc.nextInt();
            switch(sd){
                case 1:
                    System.out.println("你目前的存款为" + acco.getMoney());
                    if (acco.getMoney() < 100) {
                        System.out.println("最低取款金额为100,您的余额不足");
                        break;
                    } else {
                        System.out.println("请输入你要取走的金额");
                        double money = sc.nextDouble();
                        if (acco.getMoney()<money){
                            System.out.println("您的余额不足,请重新输入");
                           break;
                        }else{
                            if (money>acco.getLimit()){
                                System.out.println("您已超过限额,请重新输入");
                                break;
                            }else{
                                System.out.println("您已取走"+money+"元");
                                acco.setMoney(acco.getMoney()- money);
                                System.out.println("您的余额为:"+acco.getMoney());
                            }
                        }
                    }
                    break;
                case 2:
                    return;
                default:
                    System.out.println("请重新输入");
            }
        }
    }
4.4转账

选要注意的是:这里需要判断对方的姓氏,采用的方法为“*”加上第二位开始的名字。转账者需要填写姓氏后运用startwith语句进行匹配。

private void transmoney() {
        while (true) {
        System.out.println("欢迎来到转账界面");
        System.out.println("转账请按1");
        System.out.println("退出请按2");
        int sd = sc.nextInt();
        switch (sd){
            case 1:
                if (accounts.size()<2){
                    System.out.println("当前系统中只有一个账号,请创建新的账号");
                    break;
                }
                if (acco.getMoney()==0){
                    System.out.println("您的余额不足,不能转账");
                    break;
                }

                    System.out.println("请输入对方的账号");
                    String id =sc.next();
                    Account acc =vs(id);
                    if (acc == null){
                        System.out.println("没有该账号,请重新输入");
                    }else{
                        String name ="*"+acc.getUsername().substring(1);
                        System.out.println("请输入【"+name+"】的姓氏");
                        String trname =sc.next();
                        if (acc.getUsername().startsWith(trname)){
                        System.out.println("请输入转账金额");
                        double money =sc.nextDouble();
                        if (acco.getMoney() >= money){
                            acco.setMoney(acco.getMoney()-money);
                            acc.setMoney(acc.getMoney()+ money);
                            System.out.println("您已转账"+money+"元,您的余额为"+acco.getMoney());
                            break;
                        }else{
                            System.out.println("您的余额不足,不能转账");
                        }
                    }else {
                            System.out.println("姓氏认证有问题");
                        }
                    }
                break;
            case 2:
                return;
        }}
    }
4.5 更换密码

使用if语句询问即可,需要注意的是,最后要用return返回,不能用break,(return是退出方法,break是退出循环)

 private void changepassword() {
        while (true) {
            System.out.println("欢迎来到更换密码界面");
            System.out.println("输入当前密码");
            String pass =sc.next();
            if (acco.getPassword().equals(pass)){
                System.out.println("输入新密码");
                String okpass =sc.next();
                System.out.println("再一次输入新密码");
                String okkpass =sc.next();
                if (okkpass.equals(okpass)){
                    acco.setPassword(okkpass);
                    System.out.println("修改密码成功");
                    return;
                }else{
                    System.out.println("密码有误");
                }
            }else {
                System.out.println("密码有误");
            }
        }
    }
4.6退出系统  

用return即可

  case 6:
                        System.out.println("你已经退出");
                   return;
4.7删除账户 

删除当前账户即可。当前账户和创建账户的实体类是同一个地址,删除当前账户就是在ArrayList中删除了当前账户实体类的地址

  private boolean deleteid() {
        while (true) {
            System.out.println("确定删除么(y/n)");
            String sd =sc.next();
            switch (sd){
                case "y":
                    if (acco.getMoney()==0){
                        accounts.remove(acco);
                        return true;

                    }else{
                        System.out.println("还有存款,不能销户");
                        return false;
                    }

                default:
                    System.out.println("删除失败");
                    return false;
            }
        }
    }

操作完整版在这里 

这样操作类就完成了,有需要的可以复制这个完整版


import java.util.ArrayList;
import java.util.Random;
import java.util.Scanner;

public class ATMOperator {
    private ArrayList<Account> accounts = new ArrayList<>();
    private Scanner sc = new Scanner(System.in);
    private  Account acco = new Account();

    public void start(){
        Scanner sc =new Scanner(System.in);
        while (true) {
            System.out.println("======欢迎来到ATM=======");
            System.out.println("1,用户登陆");
            System.out.println("2,用户开户");
            System.out.println("请选择");
            int id =sc.nextInt();
            switch (id){
                case 1:
                    //用户登陆
                    login();
                    break;
                case 2:
                    //用户开户
                    Operator();
                    break;
                default:
                    System.out.println("请重新输入");
            }
        }
    }
    private void login(){
        if (accounts.size()==0){
            System.out.println("请先创建账号");
            return;
        }
        while (true) {
            System.out.println("请输入卡号");
           String card = sc.next();
            Account acc = vs(card);
            if(acc == null){
                System.out.println("没有该账号,请重新输入");
            }else if(acc.getCard().equals(card)){
                while (true) {
                    System.out.println("请输入密码");
                    String password =sc.next();
                    if (acc.getPassword().equals(password)){
                             acco = acc;
                            check();
                         return;
                    }else{
                        System.out.println("密码不正确,请重新输入");
                    }
                }
            }
        }
    }
    private void check(){
        while (true) {

            System.out.println(acco.getUsername()+"你可以办理以下业务");
            System.out.println("1.查询账户");
            System.out.println("2.存款");
            System.out.println("3.取款");
            System.out.println("4.转账");
            System.out.println("5.修改密码");
            System.out.println("6.退出");
            System.out.println("7.注销账户");
            System.out.println("请选择");
            int check= sc.nextInt();
            switch (check){
                case 1:
                    idcheck();
                    break;
                    case 2:
                        moenycheck();
                    break;
                case 3:
                    moneyleave();
                    break;
                    case 4:
                    transmoney();
                    break;
                    case 5:
                        changepassword();
                    return;

                    case 6:
                        System.out.println("你已经退出");
                   return;
                    case 7:
                   if (deleteid());
                    return;
                default:
                    System.out.println("你输入的数字有误,请重新输入");
            }
        }
    }

    private void changepassword() {
        while (true) {
            System.out.println("欢迎来到更换密码界面");
            System.out.println("输入当前密码");
            String pass =sc.next();
            if (acco.getPassword().equals(pass)){
                System.out.println("输入新密码");
                String okpass =sc.next();
                System.out.println("再一次输入新密码");
                String okkpass =sc.next();
                if (okkpass.equals(okpass)){
                    acco.setPassword(okkpass);
                    System.out.println("修改密码成功");
                    return;
                }else{
                    System.out.println("密码有误");
                }
            }else {
                System.out.println("密码有误");
            }
        }
    }
    private boolean deleteid() {
        while (true) {
            System.out.println("确定删除么(y/n)");
            String sd =sc.next();
            switch (sd){
                case "y":
                    if (acco.getMoney()==0){
                        accounts.remove(acco);
                        return true;

                    }else{
                        System.out.println("还有存款,不能销户");
                        return false;
                    }

                default:
                    System.out.println("删除失败");
                    return false;
            }
        }
    }

    private void transmoney() {
        while (true) {
        System.out.println("欢迎来到转账界面");
        System.out.println("转账请按1");
        System.out.println("退出请按2");
        int sd = sc.nextInt();
        switch (sd){
            case 1:
                if (accounts.size()<2){
                    System.out.println("当前系统中只有一个账号,请创建新的账号");
                    break;
                }
                if (acco.getMoney()==0){
                    System.out.println("您的余额不足,不能转账");
                    break;
                }

                    System.out.println("请输入对方的账号");
                    String id =sc.next();
                    Account acc =vs(id);
                    if (acc == null){
                        System.out.println("没有该账号,请重新输入");
                    }else{
                        String name ="*"+acc.getUsername().substring(1);
                        System.out.println("请输入【"+name+"】的姓氏");
                        String trname =sc.next();
                        if (acc.getUsername().startsWith(trname)){
                        System.out.println("请输入转账金额");
                        double money =sc.nextDouble();
                        if (acco.getMoney() >= money){
                            acco.setMoney(acco.getMoney()-money);
                            acc.setMoney(acc.getMoney()+ money);
                            System.out.println("您已转账"+money+"元,您的余额为"+acco.getMoney());
                            break;
                        }else{
                            System.out.println("您的余额不足,不能转账");
                        }
                    }else {
                            System.out.println("姓氏认证有问题");
                        }
                    }
                break;
            case 2:
                return;
        }}
    }

    private void moneyleave() {
        while (true) {
            System.out.println("欢迎来到取款界面");
            System.out.println("取款请按1");
            System.out.println("退出请按2");
            int sd = sc.nextInt();
            switch(sd){
                case 1:
                    System.out.println("你目前的存款为" + acco.getMoney());
                    if (acco.getMoney() < 100) {
                        System.out.println("最低取款金额为100,您的余额不足");
                        break;
                    } else {
                        System.out.println("请输入你要取走的金额");
                        double money = sc.nextDouble();
                        if (acco.getMoney()<money){
                            System.out.println("您的余额不足,请重新输入");
                           break;
                        }else{
                            if (money>acco.getLimit()){
                                System.out.println("您已超过限额,请重新输入");
                                break;
                            }else{
                                System.out.println("您已取走"+money+"元");
                                acco.setMoney(acco.getMoney()- money);
                                System.out.println("您的余额为:"+acco.getMoney());
                            }
                        }
                    }
                    break;
                case 2:
                    return;
                default:
                    System.out.println("请重新输入");
            }
        }
    }
    private void moenycheck() {
        while (true) {
            System.out.println("欢迎来到存款界面");
            System.out.println("存款请按1");
            System.out.println("退出请按2");
            int sd = sc.nextInt();
            switch (sd){
                case 1:
                    System.out.println("请输入你要存多少");
                    double money= sc.nextDouble();
                    System.out.println("请问你确定要存入"+money+"么");
                    System.out.println("确定请按1");
                    System.out.println("返回请按2");
                    int cc =sc.nextInt();
                    switch (cc){
                        case 1:
                            acco.setMoney(acco.getMoney()+money);
                            System.out.println("您的余额为"+acco.getMoney());
                            break;
                        case 2:
                            return;
                        default:
                            System.out.println("请重新输入");
                    }
                    break;
                case 2:
                    return;
                default:
                    System.out.println("请重新输入");
            }

        }
    }
    private  void idcheck(){
        System.out.println("号码:"+acco.getCard());
        System.out.println("性别:"+acco.getSex());
        System.out.println("存款:"+acco.getMoney());
        System.out.println("每日限额:"+acco.getLimit());
    }
    private  void Operator(){
        Account acc = new Account();

        System.out.println("请输入姓名");
        String name = sc.next();
        acc.setUsername(name);
        while (true) {
            System.out.println("请输入性别(男/女)");
            char sex = sc.next().charAt(0);

            if (sex == '男'|| sex == '女'){
                acc.setSex(sex);
                break;
            }else{
                System.out.println("请输入(男/女)");
            }
        }
        while (true) {
            System.out.println("请设置你的密码");
            String password = sc.next();
            System.out.println("请再次输入你的密码");
            String okpassword = sc.next();
            if (password.equals(okpassword)){
                acc.setPassword(okpassword);
                break;
            }else{
                System.out.println("两次密码不一致,请重新输入");
            }
        }

        System.out.println("请设置每日取款限额");
        double limit = sc.nextDouble();
        acc.setLimit(limit);

        String id =card();
        acc.setCard(id);

        accounts.add(acc);
        System.out.println("恭喜"+acc.getUsername()+"开户成功,您的卡号为:"+acc.getCard());

    }
    private String card(){
        Random r = new Random();
        while (true) {
            String id = "";
            for (int i = 0; i < 8; i++) {
               int data=  r.nextInt(10);
                    id +=data;
            }
            Account acc= vs(id);
            if (acc == null){
                return id;
            }
        }
    }
    private  Account vs (String card){

        for (int i = 0; i <accounts.size(); i++) {
              Account acc= accounts.get(i);
              if (acc.getCard().equals(card)){
                  return acc;
              }
        }
        return null;

    }
}

最后测试:

public class ATMDemo {
    public static void main(String[] args) {
        ATMOperator de = new ATMOperator();
            de.start();
    }

}

 测试效果:

总结:完美运行,有些语句需要在加强,熟用if语句和switch可以完成精准操作

整理结束撒花!!!! 

 

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

探索商超货架场景目标检测性能,基于YOLOv8【n/s/m/l/x】全系列参数模型开发构建商超货架场景下亨氏米粉食品种类检测识别系统

在前面的系列博文中&#xff0c;我们陆续应用实践开发了很多有趣的项目&#xff0c;但是在密集排布场景下如商超购物场所内货架上货物种类目标检测模型的开发我们则少有涉及&#xff0c;正值周末&#xff0c;本文的主要目的就是想要实践构建这一场景下的目标检测模型&#xff0…

QSpace:Mac上的简洁高效多窗格文件管理器

在Mac用户中&#xff0c;寻找一款能够提升文件管理效率的工具是常见的需求。QSpace&#xff0c;一款专为Mac设计的文件管理器&#xff0c;以其简洁的界面、高效的多窗格布局和丰富的功能&#xff0c;为用户提供了一个全新的文件管理体验。 QSpace&#xff1a;灵活与功能丰富的结…

MySQL面试题 | 05.精选MySQL面试题

&#x1f90d; 前端开发工程师&#xff08;主业&#xff09;、技术博主&#xff08;副业&#xff09;、已过CET6 &#x1f368; 阿珊和她的猫_CSDN个人主页 &#x1f560; 牛客高级专题作者、在牛客打造高质量专栏《前端面试必备》 &#x1f35a; 蓝桥云课签约作者、已在蓝桥云…

Qt打包程序

添加链接描述

Ps:何时需要转换为智能对象

智能对象 Smart Objects提供了广泛的灵活性和控制能力&#xff0c;特别是在处理复杂的合成、重复元素或需要非破坏性编辑的项目中。 ◆ ◆ ◆ 何时需要转换为智能对象 1、当需要对图像进行缩放、旋转等变换时。 涉及到的 Photoshop 命令包括&#xff1a;变换、自由变换、操控…

SwiftUI之深入解析如何使用SwiftUI Charts创建折线图

一、简单折线图 苹果在 WWWDC 2022 上推出了 SwiftUI 图表&#xff0c;这使得在 SwiftUI 视图中创建图表变得异常简单。图表是以丰富的格式呈现可视化数据的一种很好的方式&#xff0c;而且易于理解。本文展示了如何用比以前从头开始创建同样的折线图少得多的代码轻松创建折线…

【深度学习】Anaconda3 + PyCharm 的环境配置 3:GitHub 项目运行前的环境配置

前言 文章性质&#xff1a;实操记录 &#x1f4bb; 主要内容&#xff1a;主要记录了运行 GitHub 项目前的环境配置过程&#xff0c;包括创建并激活新的虚拟环境、安装 torch 和 torchvision&#xff0c;在 PyCharm 中使用新建的虚拟环境&#xff0c;根据项目源代码提供的 requi…

Xtuner大模型微调

Xtuner大模型微调 一、课程笔记 文档链接&#xff1a;https://github.com/InternLM/tutorial/blob/main/xtuner/README.md 视频链接&#xff1a; https://www.bilibili.com/video/BV1yK4y1B75J/ 大模型微调 大模型的训练利用了各类数据&#xff0c;可以说是一个通才&#xff…

Sqoop的增量数据加载策略与示例

当使用Apache Sqoop进行数据加载时&#xff0c;增量数据加载策略是一个关键的话题。增量加载可以仅导入发生变化的数据&#xff0c;而不必每次都导入整个数据集&#xff0c;这可以显著提高任务的效率。本文将深入探讨Sqoop的增量数据加载策略&#xff0c;提供详细的示例代码&am…

如何调整 Windows 11 任务栏位置、对齐方式,及自定义任务栏

更新于&#xff1a;2023-11-22 分类&#xff1a;Windows 阅读(115407) 评论(12) 如果你是 Windows 11 用户中的一员&#xff0c;一定在不断尝试它的新功能。Windows 11 操作系统采用了全新设计的外观&#xff0c;具有重新设计的 Windows 资源管理器、圆润的窗口边缘和默认将应用…

【期末不挂科-C++考前速过系列P5】大二C++实验作业-多态性(3道代码题)【解析,注释】

前言 大家好吖&#xff0c;欢迎来到 YY 滴C考前速过系列 &#xff0c;热烈欢迎&#xff01; 本章主要内容面向接触过C的老铁 主要内容含&#xff1a; 欢迎订阅 YY滴C专栏&#xff01;更多干货持续更新&#xff01;以下是传送门&#xff01; YY的《C》专栏YY的《C11》专栏YY的《…

六、新建窗体时,几种窗体的区别

新建窗体时&#xff0c;会有几种类型的选项&#xff0c;很多同学不明白其中的意思&#xff0c;我们在本章节中详细介绍一下几种窗体的区别。 窗体的类型分以下几种 Dialog with Buttons Bottom 带按钮的对话框&#xff0c;按钮在底部 Dialog with Buttons Right 带按钮的对话框…

MySQL面试题 | 06.精选MySQL面试题

&#x1f90d; 前端开发工程师&#xff08;主业&#xff09;、技术博主&#xff08;副业&#xff09;、已过CET6 &#x1f368; 阿珊和她的猫_CSDN个人主页 &#x1f560; 牛客高级专题作者、在牛客打造高质量专栏《前端面试必备》 &#x1f35a; 蓝桥云课签约作者、已在蓝桥云…

Open3D 计算点云质心和中心(18)

Open3D 计算点云质心和中心(18) 一、算法介绍二、算法实现1.代码2.结果一、算法介绍 质心和中心是有所区别的,点云质心可以看作每个点的坐标均值,点云中心可以看作点云所在包围盒的中心,这也是上一章坐标最值的常用方法,下面就两种方法进行实现(图例,大概就是这个意思…

SFP/SFP+/QSFP/QSFP+光模块和GTP/GTX/GTH/GTZ/GTY/GTM高速收发器

SFP/SFP/QSFP/QSFP光模块和GTP/GTX/GTH/GTZ/GTY/GTM高速收发器 SFP/SFP/QSFP/QSFP光模块概述SFPSFPQSFPQSFP关键参数说明 GTP/GTX/GTH/GTZ/GTY/GTM高速收发器区别XILINX 7系列FPGA中高速收发器使用 SFP/SFP/QSFP/QSFP光模块 概述 SFP&#xff08; small form-factor pluggabl…

部分城市公交站点数据,Shp+excel格式数据,2020年,几何类型为点

随着城市的发展和人口的增长&#xff0c;公共交通成为了人们出行的重要方式之一。而公交站点作为公共交通的重要组成部分&#xff0c;其数据信息的获取和分析对于城市规划和管理具有重要意义。 今天来分享一下部分城市公交站点数据&#xff1a; 首先先了解下该数据的基本信息 …

Error: error:0308010C:digital envelope routines::unsupported的解决方案

因为最近安装了pnpm对node版本有要求&#xff0c;升级了node版本是18以后&#xff0c;在运行之前的项目&#xff0c;就跑不起来了&#xff0c;报错如下&#xff1a; Error: error:0308010C:digital envelope routines::unsupported解决方案一&#xff1a; node版本切换到16版…

MATLAB - 机器人关节空间运动模型

系列文章目录 前言 关节空间运动模型描述了在闭环关节空间位置控制下机械手的运动&#xff0c;在关节空间运动模型&#xff08;jointSpaceMotionModel&#xff09;对象和关节空间运动模型块中使用。 机器人机械手是典型的位置控制设备。要进行关节空间控制&#xff0c;需要指…

LLVM系列(1): 在微软Visual Studio下编译LLVM

参考链接&#xff1a; Getting Started with the LLVM System using Microsoft Visual Studio — LLVM 18.0.0git documentation 1.安装visualstudio&#xff0c;版本需要大于vs2019 本机环境已安装visual studio2022&#xff0c;省略 2安装Makefile&#xff0c;版本需要大…

定时器问题(vue的问题)

我在a页面写一个定时&#xff0c;让他每秒钟打印一个1&#xff0c;然后跳转到b页面&#xff0c;此时可以看到&#xff0c;定时器依然在执行。这样是非常消耗性能的。如下图所示&#xff1a; 解决方法1 首先我在data函数里面进行定义定时器名称&#xff1a; data() {return {t…