JAVASE练手项目-ATM

news2024/11/18 11:28:06

此项目使用到的技术主要是面向对象和JAVA的常用API和ArrayList实现。可以用来做JAVA的基础练手或者是期末作业。

主要功能是:用户开户,登录,存钱,取钱,转账,注销,修改密码。

注:下面的演示图片都是用户输入成功的,方便笔者展示,大家可以运行笔者的代码,来演示用户输入错误后提示的错误。

 1.先创建一个账户类

这个类主要用于表示银行账户信息。主要是封装了用户的卡号,用户名,性别,密码,余额,额度。

public class Account {
    private String CarId;//卡号
    private String UserName;//用户名
    private char sex;//性别
    private String password;//密码
    private double money;//余额
    private double limit;//额度

    // 获取卡号
    public String getCarId() {
        return CarId;
    }

    // 设置卡号
    public void setCarId(String carId) {
        CarId = carId;
    }

    // 获取用户名
    public String getUserName() {
        return UserName;
    }

    // 设置用户名
    public void setUserName(String userName) {
        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.创建ATM的显示页面

用于显示ATM的页面

public void start() {
        // 用户交互循环,提供ATM机功能选择
        while (true) {
            System.out.println("-------欢迎您使用ATM机使用!--------");
            System.out.println("1.用户登录");
            System.out.println("2.用户开户");
            System.out.println("请选择:");
            int commond = scanner.nextInt();
            switch (commond) {
                case 1:
                  // 调用登录方法
	               login();
                    break;
                case 2:
                  // 调用开户方法
                openAccount();
                    break;
                default:
                    System.out.println("输入错误,请重新输入!");
            }
        }
    }

3.用户开户操作

用户开户方法,用来创建新的账户并添加到账户列表中。

这里需要注意的是,用户的账号不是自己输入的,而是由系统自动生成的。

这里有三个方法,一个是开户的主要方法(openAccount),一个是生成一个不重复的卡号(createCardId),一个是根据卡号查询账户对象返回,查询生成的卡号是否存在(getAccountByCarId),注释笔者在代码中做了详细的解释。

 /**
     * 用户开户方法,用来创建新的账户并添加到账户列表中。
     * 这里需要注意的是,用户的账号不是自己输入的,而是由系统自动生成的。
     */
    private void openAccount() {
        //创建一个账户对象,用于封装用户的开户信息
        Account account = new Account();
        //输入用户信息,赋值给账户对象
        System.out.print("请输入您的姓名:");
        account.setUserName(scanner.next());
        // 在循环中提示用户输入性别,并验证输入是否为'男'或'女',将合法的性别设置到account对象中
        while (true) {
            System.out.print("请输入您的性别:");
            char sex = scanner.next().charAt(0);
            if (sex == '男' || sex == '女') {
                account.setSex(sex);
                break;
            } else {
                System.out.println("您输入的性别有误,请重新输入!");
            }
        }
        // 在无限循环中要求用户输入密码,并确认密码,直到两次输入密码一致后才跳出循环
        while (true) {
            System.out.print("请输入您的密码:");
            String password = scanner.next();
            System.out.print("请确认您的密码:");
            String confirmPassword = scanner.next();
            // 如果两次输入的密码不一致,则提示用户重新输入密码
            if (!password.equals(confirmPassword)) {
                System.out.println("两次输入的密码不一致,请重新输入!");
            } else {
                // 如果两次输入的密码一致,则将密码设置到账户中并跳出循环
                account.setPassword(password);
                break;
            }
        }
        /**
         * 以上代码段用于循环提示用户输入取款额度,并验证输入的合法性。
         * 当用户输入的取款额度大于零时,将该值设置到账户对象中;
         * 否则,循环继续,直到用户输入合法的取款额度为止。
         * 其主要功能是确保用户输入的取款额度合法,并将合法的额度设置到账户对象中
         */
        while (true) {
            //设置用户的取款额度
            System.out.print("请输入取款额度:");
            double limitMoney = scanner.nextDouble();
            if (limitMoney > 0) {
                account.setLimit(limitMoney);
                break;
            } else {
                System.out.println("取款额度不能为负数,请重新输入!");
            }
        }
        //生成用户的账号,并设置到账户对象中
        /**
         * 卡号必须是八位,且不能和其他人的卡号相同
         */
        String newCarID = createCardId();
        account.setCarId(newCarID);
        //并设置到账户对象中
        accounts.add(account);
        System.out.println("恭喜您:" + account.getUserName() + "开户成功" + ",您的卡号是:" + newCarID);
    }


    //生成一个不重复的卡号
    private String createCardId() {
        while (true) {
            String carId = "";
            for (int i = 0; i < 8; i++) {
                int num = (int) (Math.random() * 10);
                carId += num;
            }
            //判断卡号是否重复
            Account accountByCarId = getAccountByCarId(carId);
            if (accountByCarId == null) {
                return carId;
            }
        }
    }

    //根据卡号查询账户对象返回,查询生成的卡号是否存在
    private Account getAccountByCarId(String carId) {
        //遍历循环账户列表,查找卡号是否存在
        for (int i = 0; i < accounts.size(); i++) {
            //每遍历一个账户,就用一个Account对象来封装,然后判断卡号是否相同
            Account acc = accounts.get(i);
            if (acc.getCarId().equals(carId)) {
                return acc;
            }
        }
        return null;
    }

 

4.登录功能

登录方法,用来验证用户输入的卡号和密码是否正确

//登录方法,用来验证用户输入的卡号和密码是否正确
    private void login() {
        System.out.println("=========ATM系统登录===============");
        if (accounts.size() == 0) {
            System.out.println("当前没有用户,请先开户!");
            return;
        }

        while (true) {
            System.out.print("请输入您的卡号:");
            String carId = scanner.next();
            //判断这个卡号是否存在
            Account accountByCarId = getAccountByCarId(carId);
            if (accountByCarId == null) {
                System.out.println("卡号不存在,请重新输入!");
            } else {
                while (true) {
                    //如果卡号存在,则提示用户输入密码
                    System.out.print("请输入您的密码:");
                    String password = scanner.next();
                    if (accountByCarId.getPassword().equals(password)) {
                        //如果密码正确,则提示用户登录成功,并进入用户界面
                        System.out.println("恭喜您," + accountByCarId.getUserName() + "登录成功!" + "您的卡号是:" + accountByCarId.getCarId());
                    } else {
                        System.out.println("密码错误,请重新输入!");
                    }
                }
            }
        }

5.创建用户操作的页面

 //设计登录后的界面
    private void showUserCommand() {
        while (true) {
            System.out.println("==================请选择如下功能进行对账户的处理================");
            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("6.注销当前账户");
            int command = scanner.nextInt();
            System.out.print("请选择:");
            switch (command) {
                case 1:
                    //查询账户
                    showAccountInfo();
                    break;
                case 2:
                    //存款
                    deposit();
                    break;
                case 3:
                    //取款
                    withdraw();
                    break;
                case 4:
                    //转账
                    transfer();
                    break;
                case 5:
                    //修改密码
                    modifyPassword();
                    break;
                case 6:
                    //退出
                    System.out.println("退出登录成功!");
                    loginAccount = null;
                    return;
                case 7:
                    //注销当前账户
                    break;
                default:
                    System.out.println("输入错误,请重新输入!");
            }
        }
    }

6.用户存钱操作

  //进行存钱操作
    private void deposit() {
        System.out.println("============存钱操作============");
        System.out.print("请你输入存款金额:");
        double money = scanner.nextDouble();
        if (money > 0) {
            //这里特别要注意,不要直接把money加到loginAccount的money上,而是应该加上原来的钱
            loginAccount.setMoney(loginAccount.getMoney() + money);
            System.out.println("存款成功!");
        } else {
            System.out.println("存款金额不能为负数,请重新输入!");
        }
    }

7.取钱操作

如果用户的前不足100元,则不能取款。

 //取钱操作
    private void withdraw() {
        System.out.println("==============现在进行的是取钱操作=========");
        //只能取100元
        if (loginAccount.getMoney() < 100) {
            System.out.println("对不起,您的余额不足一百元,不能进行取款操作!");
            return;
        }
        //用户输入取款金额
        while (true) {
            System.out.print("请输入取款金额:");
            double money = scanner.nextDouble();
            if (money <= loginAccount.getMoney()) {
                if (money <= loginAccount.getLimit()) {
                    //这里特别要注意,不要直接把money减到loginAccount的money上,而是应该减去原来的钱
                    loginAccount.setMoney(loginAccount.getMoney() - money);
                    System.out.println("取款成功!您取款了" + money + "元,余额为" + loginAccount.getMoney() + "元!");
                    break;
                } else {
                    System.out.println("您的取款额度已超出限制,请重新输入!");
                }

            } else {
                System.out.println("取款金额有误,余额不足或超出取款限额,您的余额是" + loginAccount.getMoney() + "请重新输入!");
            }
        }
    }

8.转账操作

转账:
     * 要判断系统中是否存在其他用户,然后判断自己的账户是否有钱,然后提示用户输入对方的卡号,
     * 然后输入对方的姓氏进行验证,然后输入转账金额,
     * 然后判断金额是否超过余额,然后减去原来的钱,然后加上新的钱,然后提示转账成功。
     * 这里需要注意的是,转账时,需要判断对方账户的姓氏是否正确,如果正确,才可以进行转账操作。

 /**
     * 转账:
     * 要判断系统中是否存在其他用户,然后判断自己的账户是否有钱,然后提示用户输入对方的卡号,
     * 然后输入对方的姓氏进行验证,然后输入转账金额,
     * 然后判断金额是否超过余额,然后减去原来的钱,然后加上新的钱,然后提示转账成功。
     * 这里需要注意的是,转账时,需要判断对方账户的姓氏是否正确,如果正确,才可以进行转账操作。
     */
    private void transfer() {
        System.out.println("==========用户转账============");
        //判断系统中是否存在其他用户
        if (accounts.size() < 2) {
            System.out.println("当前系统中只有一个用户,不能进行转账操作!");
            return;
        }
        //判断自己的账户是否有钱
        if (loginAccount.getMoney() == 0) {
            System.out.println("对不起,您的账户余额不足,不能进行转账");
            return;
        }
        while (true) {
            //开始转账
            System.out.print("请您输入对方的账号:");
            String CarId = scanner.next();
            //判断这个卡号是否正确
            Account accountByCarId = getAccountByCarId(CarId);


            if (accountByCarId == null) {
                System.out.println("对方账号不存在,请重新输入!");
                return;
            } else {
                //判断这个卡号是否是自己
                if (accountByCarId.getCarId().equals(loginAccount.getCarId())) {
                    System.out.println("不能给自己转账!");
                    break;
                }
                //代表不是自己的账户,是对方的账户,开始进行转账操作
                //接下来,我们需要认证对方账户的姓式。
                String userName = "*" + accountByCarId.getUserName().substring(1);
                System.out.println("请输入【" + userName + "】的姓氏进行验证:");
                String verifyName = scanner.next();
                //判断这个姓氏是否正确
                if (accountByCarId.getUserName().startsWith(verifyName)) {
                    //如果姓氏正确,则开始进行转账操作
                    System.out.print("请输入转账金额:");
                    double money = scanner.nextDouble();
                    //判断这个金额是否超过自己的余额
                    while (true) {
                        if (money > loginAccount.getMoney()) {
                            System.out.println("您的余额不足,请重新输入!最多可以转账" + loginAccount.getMoney() + "元");
                            break;
                        } else {
                            //如果金额没有超过余额,则开始进行转账
                            //这里特别要注意,不要直接把money加到loginAccount的money上,而是应该减去原来的钱
                            //这里更新自己的账户余额
                            //首先把money减到自己的账户上
                            loginAccount.setMoney(loginAccount.getMoney() - money);
                            //然后把money加到对方账户的money上
                            accountByCarId.setMoney(accountByCarId.getMoney() + money);
                            System.out.println("转账成功!您转账了" + money + "元,您的账户余额为" + loginAccount.getMoney() + "元!");
                            return;
                        }
                    }
                } else {
                    System.out.println("对不起,您输入的姓氏有误,请重新输入!");
                }
            }
        }
    }

 9.注销账户

        销户方法,用来删除当前登录的账户
     * 想要询问用户是否要删除当前账户,如果用户输入'y',则删除当前账户,否则,不删除。
     * 这里需要注意的是,删除账户时,需要判断当前账户是否有余额,如果有余额,则不能删除。
     * 如果没钱就可以删除,如果有余额,则提示用户不能删除。

  /**
     * 销户方法,用来删除当前登录的账户
     * 想要询问用户是否要删除当前账户,如果用户输入'y',则删除当前账户,否则,不删除。
     * 这里需要注意的是,删除账户时,需要判断当前账户是否有余额,如果有余额,则不能删除。
     * 如果没钱就可以删除,如果有余额,则提示用户不能删除。
     */
    private boolean deleteAccount() {
        System.out.println("==========ATM系统注销账户==========");
        //判断用户是否确定注销账户
        System.out.print("是否确定注销账户?(y/n):");
        String confirm = scanner.next();
        if (confirm.equals("y")) {
            //判断当前账户是否有余额
            if (loginAccount.getMoney() > 0) {
                System.out.println("您的账户有余额,不能注销!");
                return false;
            } else {
                //如果没有余额,则删除当前账户
                accounts.remove(loginAccount);
                System.out.println("注销账户成功!");
                return true;
            }
        } else {
            System.out.println("您取消了注销账户!");
            return false;
        }
    }

 10.修改密码

修改密码方法,用来修改当前登录的账户的密码。
     * 需要认证用户的身份,然后提示用户输入新的密码,然后再次确认密码,然后将新的密码设置到账户对象中

  /**
     * 修改密码方法,用来修改当前登录的账户的密码。
     * 需要认证用户的身份,然后提示用户输入新的密码,然后再次确认密码,然后将新的密码设置到账户对象中。
     */
    private void modifyPassword() {
        System.out.println("==========修改密码========");
        //用户认证当前密码
        while (true) {
            System.out.println("您好:" + loginAccount.getUserName() + ",请输入您的密码:");
            String password = scanner.next();
            if (!loginAccount.getPassword().equals(password)) {
                System.out.println("密码错误,请重新输入!");
                return;
            } else {
                while (true) {
                    //如果密码正确,则提示用户输入新的密码
                    System.out.println("请输入新的密码:");
                    String newPassword = scanner.next();
                    System.out.println("请确认新的密码:");
                    String confirmPassword = scanner.next();
                    //如果两次输入的密码不一致,则提示用户重新输入密码
                    if (!newPassword.equals(confirmPassword)) {
                        System.out.println("两次输入的密码不一致,请重新输入!");
                    } else {
                        //如果两次输入的密码一致,则将密码设置到账户中并提示修改成功
                        loginAccount.setPassword(newPassword);
                        System.out.println("密码修改成功~~~~~~~~");
                        return;
                    }
                }
            }
        }
    }

11.显示用户的信息

这个功能相对简单。

   //展示当前登录的账户信息
    private void showAccountInfo() {
        System.out.println("卡号:" + loginAccount.getCarId());
        System.out.println("户主:" + loginAccount.getUserName());
        System.out.println("性别:" + loginAccount.getSex());
        System.out.println("余额:" + loginAccount.getMoney());
        System.out.println("取款限额:" + loginAccount.getLimit());
    }

12.结束语

亲爱的读者们,

        感谢你们如星光般璀璨,陪我走过这一段充满思考与探索的旅程。每一篇博客的字里行间,都蕴藏着你们无声的陪伴和默默的支持,它们是我继续前行的动力,也是我不断追求卓越的光芒。

        在此,我向你们表达最真挚的感谢。是你们的关注、鼓励和建议,让我的博客之旅更加丰富多彩。愿我们的友谊如同这博客中的文字,永远流淌着温暖与真诚,长存于彼此的心间。

        同时,我也深知自己的能力和知识有限。因此,如果你们在阅读或浏览代码的过程中发现了任何错误或不足之处,我恳请你们能在评论区留下宝贵的意见。你们的每一个建议,我都会珍视如宝,并在第一时间进行修正和完善。

        再次感谢你们的陪伴与支持,愿我们的博客之旅能够继续携手前行,共同分享更多的知识与美好。

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

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

相关文章

【消息队列】RabbitMQ五种消息模式

RabbitMQ RabbitMQRabbitMQ安装 常见的消息模型基本消息队列SpringAMQPWorkQueue消息预取发布订阅模式Fanout ExchangeDirectExchangeTopicExchange 消息转换器 RabbitMQ RabbitMQ是基于Erlang语言开发的开源消息通信中间件 官网地址&#xff1a;https://www.rabbitmq.com/ R…

python 反引号怎么打

切换到英文输入法模式下。 找到电脑键盘 Esc 下面的键。 敲两下就出现反引号了。

在一台交换机上配置VLAN

实验环境 实验拓扑图结构如图12.12所示&#xff0c;其中PC1和PC3属于VLAN 2&#xff0c;PC2属于 VLAN 3&#xff0c;PC1的IP地址为192.168.0.2/24&#xff0c;PC2的IP地址为192.168.1.2/24&#xff0c;PC3的 IP地址为192.168.0.3/24。 图12.12 需求描述 要求处于相同VLAN中的主…

正版Office-Word使用时却提示无网络连接请检查你的网络设置 然后重试

这是购买电脑时自带的已经安装好的word。看纸箱外壳有office标记&#xff0c;但是好像没有印系列号。 某天要使用。提示&#xff1a;无网络连接请检查你的网络设置。 经过网上高手的提示&#xff1a; 说要勾选勾选ssl3.0、TLS1.0、1.1、1.2。 我的截图 我电脑进去就缺1.2. …

【数据结构】串?在计算机中还有这样一种数据结构

串的基本概念与基本操作 导言一、串的定义及其重要术语1.1 串的定义1.2 串的重要术语1.3 ASCII码值1.4 转义字符 二、串的三要素2.1 串的逻辑结构2.2 串的存储结构2.3 串的运算 结语 导言 大家好&#xff0c;很高兴又和大家见面啦&#xff01;&#xff01;&#xff01; 看到今…

手把手实现一个简约酷美美的版权声明模块

1. 导语 版权声明在很多网站都有用到&#xff0c;出场率还是很高的。所以今天就实现一个属于自己分风格的版权声明模块&#xff0c;技术上采用原生的前端三剑客: HTMLCSSJavaScript(可能会用到) 比如CSDN的版权声明是这样的 2. 需求分析 先看看成品吧&#xff0c;这篇文字结…

初始计算机网络

TCP/IP TCP/IP模型 TCP/IP网络模型&#xff1a;对于不同设备之间的通信&#xff0c;就需要网络通信&#xff0c;而设备是多样性的&#xff0c;所以要兼容多种多样的设备&#xff0c;就协商出了一套通用的网络协议。 TCP/IP分层 这个网络协议是分层的&#xff0c;每一层都有…

向gitee推送项目

步骤很详细&#xff0c;直接上教程 在gitee新建项目并复制链接 在当前项目目录打开git bash 输入以下指令进行初始化 git init配置个人信息 git config --global user.name 你的昵称 git config --global user.email 账号绑定的邮箱 5. 绑定远程仓库地址 git remote add ori…

机器人正反向运动学(FK和IK)

绕第一个顶点可以沿Z轴转动&#xff0c;角度用alpha表示 绕第二个点沿X轴转动&#xff0c;角度为Beta 第三个点沿X轴转动&#xff0c;记作gama 这三个点构成姿态&#xff08;pose&#xff09; 我们记第一个点为P0&#xff0c;画出它的本地坐标系&#xff0c;和世界坐标系一样红…

Java面试八股之Java中数组有没有length()方法?String呢?为什么?

Java中数组有没有length()方法&#xff1f;String呢&#xff1f;为什么&#xff1f; 数组&#xff1a; 数组没有名为length()的方法&#xff0c;但有一个属性叫做length。可以通过数组名直接访问这个属性来获取数组的长度&#xff08;即元素个数&#xff09;。这是一个整数值&…

3-2 STM32c8t6实现流水灯

实物接线如下&#xff1a; 软件代码 #include "stm32f10x.h" // Device header #include "delay.h" int main(void) {RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOA,ENABLE); //开启时钟GPIO_InitTypeDef GPIO_InitStructure;GPIO_Init…

中国移动首批12个智算中心节点投产暨移动云智算产品体系正式发布

4月28日&#xff0c;中国移动在苏州隆重举办了2024中国移动算力网络大会。其中&#xff0c;以“智算凌云 慧联九州”为主题的一体化算力网络新基建论坛上&#xff0c;中国移动重磅发布了首批12个智算中心节点投产和智算产品体系。 中国移动响应国家号召&#xff0c;依托算力网络…

深度学习之基于YOLOv5智慧交通拥挤预警检测系统

欢迎大家点赞、收藏、关注、评论啦 &#xff0c;由于篇幅有限&#xff0c;只展示了部分核心代码。 文章目录 一项目简介 二、功能三、系统四. 总结 一项目简介 一、项目背景 随着城市化进程的加速和人口规模的不断增长&#xff0c;交通拥挤问题日益严重。传统的交通拥挤预警方…

goget配置多个golang 运行环境

一台主机安装多个golang 运行环境 本环境 windows10 为 基础 mac linux也可以按照此方法操作 背景 开发不同的运维工具会用到不同版本的golang&#xff0c;但是开发者不能一直进行重装来处理 &#xff0c;因此 需要一个工具进行golang版本的管理 go管理工具介绍 gvm (Go V…

【报错处理】ib_write_bw执行遇到Couldn‘t listen to port 18515原因与解决办法?

要点 要点&#xff1a; ib默认使用18515端口 相关命令&#xff1a; netstat -tuln | grep 18515 ib_write_bw --help |grep port# server ib_write_bw --ib-devmlx5_1 --port88990 # client ib_write_bw --ib-devmlx5_0 1.1.1.1 --port88990现象&#xff1a; 根因&#xff…

蓝桥杯如何准备国赛?

目录 一、赛前准备 1、如何刷题&#xff0c;刷哪些题&#xff1f; 2、记录&#xff08;主要看个人习惯&#xff09; CSDN博客 写注释 3、暴力骗分 4、从出题人的角度出发&#xff0c;应该如何骗分 二、赛中注意事项 一、赛前准备 1、如何刷题&#xff0c;刷哪些题&…

24.什么是跨域?解决方案有哪些?

为什么会出现跨域问题 存在浏览器同源策略&#xff0c;所以才会有跨域问题。那么浏览器是出于何种原因会有跨域的限制呢。其实不难想到&#xff0c;跨域限制主要的目的就是为了用户的上网安全。 同源策略导致的跨域是浏览器单方面拒绝响应数据&#xff0c;服务器端是处理完毕…

OPC UA与IEC61499 在分布式智能电网中的应用

储能系统的系统架构 CMC &#xff1a;Cell Management Controller 储能设备中的电池芯包与电池均衡系统构成电池模组&#xff0c;国内的电池芯包通常使用被动均衡技术&#xff0c;被动均衡芯片通常通过SPI 接口连接到CMC 控制器&#xff0c;CMC 以单片机为主构建&#xff0c;具…

C语言——单链表实现数据增删查改

一.前言 嗨嗨嗨&#xff0c;我们又见面了。前面我们已经学习了关于数据结构中的顺序表&#xff0c;今天我们来学习数据结构中的单链表。废话不多说让我们直接开始吧。 二.正文 1.1链表的概念 链表是一种物理存储结构上非连续、非顺序的存储结构&#xff0c;数据元素的逻辑顺…

“云卷数潮”云原生数据库分论坛亮点回顾!

4月29日&#xff0c;2024中国移动算力网络大会“云卷数潮”云原生数据库分论坛在江苏苏州举行。本次论坛不仅是技术交流的盛宴&#xff0c;更是行业发展趋势的风向标。论坛汇聚了众多企业领袖、专家学者及行业精英&#xff0c;共话云原生数据库技术发展&#xff0c;探讨行业最新…