Java实现ATM系统

效果:

在这里插入图片描述
在这里插入图片描述

目录结构

在这里插入图片描述

Account 账户类

package com.mytest;

public class Account {
    private String cardId;
    private String userName;
    private char sex;
    private String password;
    private double balance;
    private double limit; //限额

    public String getCardId() {
        return cardId;
    }

    public void setCardId(String cardId) {
        this.cardId = cardId;
    }

    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 getBalance() {
        return balance;
    }

    public void setBalance(double balance) {
        this.balance = balance;
    }

    public double getLimit() {
        return limit;
    }

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

Atm类

package com.mytest;

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

public class Atm {
    private ArrayList<Account> accounts = new ArrayList<Account>();
    private Scanner sc = new Scanner(System.in);
    private Account loginAcc;//记住当前登录的账户

    /**
     * 启动ATM系统 展示欢迎界面
     */
    public void start() {
        while (true) {
            System.out.println("===欢迎您进入ATM系统===");
            System.out.println("1. 用户登录");
            System.out.println("2. 用户开户");
            System.out.println("请选择:");
            int command = sc.nextInt();
            switch (command) {
                case 1:
                    // 用户登录
                    login();
                    break;
                case 2:
                    // 用户开户
                    createAccount();
                    break;
                default:
                    System.out.println("输入错误,请重新选择");
                    break;
            }
        }
    }

    /**
     * 完成用户登录操作
     */
    private void login() {
        System.out.println("==系统登录操作==");
        if (accounts.size() == 0) {
            System.out.println("对不起,ATM系统目前没有用户,请先进行开户操作");
            return;
        }
        while (true) {
            System.out.println("请输入您的卡号:");
            String cardId = sc.next();
            Account acc = getAccountByCardId(cardId);
            if (acc == null) {
                System.out.println("对不起,您输入的卡号不存在");
            } else {
                while (true) {
                    System.out.println("请输入您的密码:");
                    String password = sc.next();
                    if (acc.getPassword().equals(password)) {
                        System.out.println("欢迎您," + acc.getUserName() + "您的卡号是:" + acc.getCardId());
                        loginAcc = acc;
                        showUserCommond();
                        return;
                    } else {
                        System.out.println("对不起,您输入的密码错误");
                    }
                }
            }
        }

    }

    /**
     * 展示登录后的操作
     */
    private void showUserCommond() {
        while (true) {
            System.out.println(loginAcc.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 command = sc.nextInt();
            switch (command) {
                case 1:
                    // 查询账户信息
                    showLoginAccount();
                    break;
                case 2:
                    // 存款
                    depositMoney();
                    break;
                case 3:
                    // 取款
                    withdrawMoney();
                    break;
                case 4:
                    // 转账
                    transferMoney();
                    break;
                case 5:
                    // 密码修改
                    updatePassword();
                    return;
                case 6:
                    // 退出
                    System.out.println(loginAcc.getUserName() + ",您退出系统成功");
                    return; //跳出并结束当前方法
                case 7:
                    // 注销当前账户
                    if (deleteAccount()) {
                        return;
                    }
                    break;
                default:
                    System.out.println("您当前选择的操作不正确,请重新选择");
            }
        }

    }

    /**
     * 密码修改
     * */
    private void updatePassword() {
        System.out.println("==密码修改操作==");
        while (true) {
            System.out.println("请输入您当前密码:");
            String password = sc.next();
            if (!loginAcc.getPassword().equals(password)) {
                System.out.println("对不起,您输入的密码错误");
            } else {
                while (true) {
                    System.out.println("请输入您的新密码:");
                    String newPassword = sc.next();
                    System.out.println("请再次输入您的新密码:");
                    String okNewPassword = sc.next();
                    if (!newPassword.equals(okNewPassword)) {
                        System.out.println("两次输入的新密码不一致,请重新输入");
                    }else{
                        loginAcc.setPassword(newPassword);
                        System.out.println("恭喜您,密码修改成功");
                        return;
                    }
                }
            }
        }
    }

    /**
     * 销户
     * */
    private boolean deleteAccount() {
        System.out.println("==注销账户操作==");
        System.out.println("您确定要注销您的账户吗?y/n");
        String yn = sc.next();
        if (yn.equals("y")) {
           if (loginAcc.getBalance() > 0) {
               System.out.println("对不起,您账户中有余额,不允许销户");
               return false;
           } else {
               accounts.remove(loginAcc);
               System.out.println("恭喜您,注销成功");
               return true;
           }
        }
        System.out.println("好的,您的账户保留");
        return false;
    }

    /**
     * 转账
     */
    private void transferMoney() {
        System.out.println("==转账操作==");
        // 判断系统中是否存在其他账户
        if (accounts.size() < 2) {
            System.out.println("当前系统中只有你一个账户,无法为其他账户转账--");
            return;
        }
        if (loginAcc.getBalance() == 0) {
            System.out.println("您自己都没钱就别转了");
            return;
        }
        while (true) {
            System.out.println("请输入您要转账到的卡号:");
            String cardId = sc.next();
            Account acc = getAccountByCardId(cardId);
            if (acc == null) {
                System.out.println("对不起,您输入的卡号不存在");
            }else if(acc.getCardId().equals(loginAcc.getCardId())){
                System.out.println("对不起,自己不能给自己转账");
            } else {
                String name = "*" + acc.getUserName().substring(1);
                System.out.println("请输入【" + name + "】的姓氏:");
                String preName = sc.next();
                if (acc.getUserName().startsWith(preName)) {
                    System.out.println("请输入您要转账的金额:");
                    double money = sc.nextDouble();
                    if (money > loginAcc.getBalance()) {
                        System.out.println("对不起,您的余额不足,最多可以转账"+loginAcc.getBalance());
                    } else {
                        // 转账成功
                        loginAcc.setBalance(loginAcc.getBalance() - money);
                        acc.setBalance(acc.getBalance() + money);
                        System.out.println("恭喜您,转账成功!您的余额剩余:" + loginAcc.getBalance());
                        return;
                    }
                } else {
                    System.out.println("对不起,您认证的姓氏有问题--");
                }
            }
        }


    }

    /**
     * 取款
     */
    private void withdrawMoney() {
        System.out.println("==取钱操作==");
        if (loginAcc.getBalance() < 100) {
            System.out.println("对不起,您的余额不足,请充值后进行取款");
            return;
        }
        while (true) {
            System.out.println("请输入您要取出的金额:");
            double money = sc.nextDouble();

            if (loginAcc.getBalance() >= money) {
                if (money > loginAcc.getLimit()) {
                    System.out.println("对不起,每次取现额度为:" + loginAcc.getLimit());
                } else {
                    loginAcc.setBalance(loginAcc.getBalance() - money);
                    System.out.println("恭喜您,取款" + money + "成功!您的余额剩余:" + loginAcc.getBalance());
                    break;
                }
            } else {
                System.out.println("余额不足,您的账户余额是:" + loginAcc.getBalance() + "请充值后进行取款");
            }
        }
    }

    /**
     * 存钱
     */
    private void depositMoney() {
        System.out.println("==存钱操作==");
        System.out.println("请输入您要存入的金额:");
        double money = sc.nextDouble();
        loginAcc.setBalance(loginAcc.getBalance() + money);
        System.out.println("恭喜您,存钱成功!您的余额是:" + loginAcc.getBalance());
    }

    /**
     * 展示当前登陆的账户信息
     */
    private void showLoginAccount() {
        System.out.println("==您的账户信息如下==");
        System.out.println("卡号:" + loginAcc.getCardId());
        System.out.println("户主:" + loginAcc.getUserName());
        System.out.println("性别:" + loginAcc.getSex());
        System.out.println("余额:" + loginAcc.getBalance());
        System.out.println("每次取现额度:" + loginAcc.getLimit());
    }

    /**
     * 完成用户开户操作
     */
    private void createAccount() {
        System.out.println("==系统开户操作==");
        // 1、创建账户对象。用于封装用户的开户信息
        Account acc = new Account();

        // 2、获取用户输入的开户信息,赋值给账户对象
        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(password);
                break;
            } else {
                System.out.println("您两次输入的密码不一致,请重新输入");
            }
        }

        System.out.println("请输入您的取现额度:");
        double limit = sc.nextDouble();
        acc.setLimit(limit);

        // 为账户生成卡号
        String newCardId = createCardId();
        acc.setCardId(newCardId);

        // 将账户对象添加到ATM系统中
        accounts.add(acc);
        System.out.println("恭喜您,开户成功" + acc.getUserName() + ",您的卡号是:" + acc.getCardId());
    }

    /**
     * 返回一个8位数字的卡号并且不能与 已有卡号重复
     */
    private String createCardId() {
        while (true) {
            // 1、随机生成一个8位数字的卡号
            String cardId = "";
            Random r = new Random();
            for (int i = 0; i < 8; i++) {
                int data = r.nextInt(10);//0-9
                cardId += data;
            }
            // 2、判断该卡号是否已经存在,如果存在则重新生成
            Account acc = getAccountByCardId(cardId);
            if (acc == null) {
                return cardId;
            }
        }
    }

    /**
     * 根据卡号查询账户对象返回  accounts = [ca,c2,c3]
     */
    private Account getAccountByCardId(String cardId) {
        //遍历全部对象,判断卡号是否相同
        for (int i = 0; i < accounts.size(); i++) {
            Account acc = accounts.get(i);
            if (acc.getCardId().equals(cardId)) {
                return acc;
            }
        }
        return null;
    }
}

Test类

package com.mytest;

public class Test {
    public static void main(String[] args) {
        Atm atm = new Atm();
        atm.start();
    }
}

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

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

相关文章

imx6ull/linux应用编程学习(5)FrameBuffer的应用编程

什么是FrameBuffer&#xff1f; Frame 是帧的意思&#xff0c; buffer 是缓冲的意思&#xff0c;所以 Framebuffer 就是帧缓冲&#xff0c; 这意味着 Framebuffer 就是一块内存&#xff0c;里面保存着一帧图像。帧缓冲&#xff08;framebuffer&#xff09;是 Linux 系统中的一种…

存储请求地址但是使用时请求的是端口

baseURL默认全局加载一次&#xff0c;后续直接读取缓存 解决方案&#xff1a;

Ubuntu qemu虚拟机 NAT网络 第一次使用,VNC访问

比如Windows 7 虚拟机 要手工设置网络

AI大模型到底有没有智能?一篇文章给你讲明明白白

生成式人工智能 (GenAI[1] ) 和大语言模型 (LLM [2] )&#xff0c;这两个词汇想必已在大家的耳边萦绕多时。它们如惊涛骇浪般席卷了整个科技界&#xff0c;登上了各大新闻头条。ChatGPT&#xff0c;这个神奇的对话助手&#xff0c;也许已成为你形影不离的良师益友。 然而&…

2024夏促steam商店加载失败、steam无法加载活动怎么办

今年的夏季促销活动终于开始了&#xff0c;一般夏季促销大多是去年和今年的热门游戏&#xff0c;不过也会有不少经典游戏参与活动&#xff0c;都是较低的价格出售。因为最近高考结束&#xff0c;考虑到会有不少新玩家前来入手游戏&#xff0c;为了让大家能顺利找到喜欢的游戏&a…

TIA博途WinCC通过VB脚本从 Excel中读取数据的具体方法介绍

TIA博途WinCC通过VB脚本从 Excel中读取数据的具体方法介绍 添加 一个PLC,设置PLC的IP地址,如下图所示, 添加全局DB块,新建几个变量,如下图所示, 在数据块中添加了 tag1 …… tag6 ,共 6 个浮点数类型的变量,用来接收通过 WinCC 从 Excel 文件中读取的数据。 添加 HMI…

【C++】类和对象(六)

文章目录 二、static成员概念面试题一个题目 三、友元友元函数说明 友元类 四、内部类(了解)概念&#xff1a;注意&#xff1a;特性&#xff1a; 五、匿名对象 书接上回&#xff1a; 【C】类和对象&#xff08;五&#xff09;隐式类型转换 二、static成员 01_31 03 12 01 概…

电脑文件kernel32.dll缺失要怎么处理?怎么才能一键修复kernel32.dll文件

关键系统文件kernel32.dll的缺失&#xff0c;这种情况不仅会导致系统运行不稳定&#xff0c;甚至可能完全无法启动某些应用程序。kernel32.dll 是一个至关重要的动态链接库文件&#xff0c;它与Windows操作系统的多个基本操作相关联&#xff0c;包括内存管理、进程和线程的控制…

制造业包括哪些?需要堡垒机吗?

制造业-国民经济的主体&#xff0c;是立国之本、兴国之器、强国之基&#xff0c;一个关系着大家吃穿住行的行业&#xff0c;一个与大家息息相关的行业。但大家对于制造业还有很多不了解&#xff0c;有小伙伴在问&#xff0c;制造业包括哪些&#xff1f;需要堡垒机吗&#xff1f…

ZABBIX-7.0LTS在线部署部署教程

ZABBIX-7.0LTS在线部署部署教程 环境&#xff1a; 操作系统&#xff1a; ubuntu 22.04zabbix-server版本&#xff1a; 7.0LTS系统配置[需结合监控的业务量提供配置]&#xff1a; 建议2C(CPU)8G(运行) 100GB(存储)架构&#xff1a;LNMP 第一步&#xff1a; 系统初始化 1.配置…

虚拟机装入kali linux

VMware 首先需要先安装VMware Workstation Pro可以根据这篇文章来下载VMware 下载kali linux Installer Images VS Virtual Machines Installer Images&#xff08;安装镜像&#xff09;Virtual Machines&#xff08;虚拟机&#xff09; 直接访问硬件&#xff0c;定制内核…

数据结构03 链表的基本操作【C++数组模拟实现】

前言&#xff1a;本节内容主要了解链表的基本概念及特点&#xff0c;以及能够通过数组模拟学会链表的几种基本操作&#xff0c;下一节我们将通过STL模板完成链表操作&#xff0c;可以通过专栏进入查看下一节哦~ 目录 单链表及其特点 完整链表构成 完整链表简述 创建单链表 …

“实时数据大屏2k、4k、8k”这样做【高级前端必备技能之一】

&#x1f525;废话不多先上效果图 &#x1f525;划重点 新手程序员需要注意以下几点&#xff1a; 我们需要进行充分的技术调研&#xff0c;进行技术选型产品&#xff0c;UI&#xff0c;再三确认效果图是否确定&#xff0c;避免后续出现返工的情况 不能拿到效果图之后&#x…

『SD』AI绘画,不会写提示词怎么办?

提示词 有没有想过&#xff0c;为什么你用 SD 生成的猫是长这样的。 而其他人可以生成这样的猫。 虽然生成的都是猫&#xff0c;但猫与猫之间还是有差距的。 如果你的提示词只是“cat”&#xff0c;那大概率就会出现本文第一张图的那个效果。而如果你加上一些形容词&#xff…

【涵子来信】——社交宝典:克服你心中的内向,世界总有缺陷

内向&#xff0c;你是内向的吗&#xff1f;想必每个人不同&#xff0c;面对的情形也是不同的。 暑假是一个很好的机会&#xff0c;我是可以去多社交社交。但是&#xff0c;面对着CSDN上这么多技术人er&#xff0c;那么&#xff0c;我的宝典&#xff0c;对于大家&#xff0c;有…

【刷题】初步认识深搜(DFS)

送给大家一句话&#xff1a; 拥有希望的人&#xff0c;和漫天的星星一样&#xff0c;是永远不会孤独的。 -- 《星游记》 初步认识深搜&#xff08;DFS&#xff09; dfs算法二叉树中的深搜Leetcode 129. 求根节点到叶节点数字之和题目描述算法思路 Leetcode 814. 二叉树剪枝题…

poi-tl 生成 word 文件(插入文字、图片、表格、图表)

文章说明 本篇文章主要通过代码案例的方式&#xff0c;展示 poi-tl 生成 docx 文件的一些常用操作&#xff0c;主要涵盖以下内容 &#xff1a; 插入文本字符&#xff08;含样式、超链接&#xff09;插入图片插入表格引入标签&#xff08;通过可选文字的方式&#xff0c;这种方…

英国牛津大学博士后职位—统计学

牛津大学&#xff08;University of Oxford&#xff09;&#xff0c;简称“牛津”&#xff08;Oxford&#xff09;&#xff0c;位于英国牛津&#xff0c;是一所公立研究型大学&#xff0c;采用传统学院制。是罗素大学集团成员&#xff0c;被誉为“金三角名校”、“G5超级精英大…

python 第6册 辅助excel 002 批量创建非空白的 Excel 文件

---用教授的方式学习 此案例主要通过使用 while 循环以及 openpyxl. load_workbook()方法和 Workbook 的 save()方法&#xff0c;从而实现在当前目录中根据已经存在的Excel 文件批量创建多个非空白的Excel 文件。当运行此案例的Python 代码&#xff08;A002.py 文件&#xff0…

论文阅读_优化RAG系统的检索

英文名称: The Power of Noise: Redefining Retrieval for RAG Systems 中文名称: 噪声的力量&#xff1a;重新定义RAG系统的检索 链接: https://arxiv.org/pdf/2401.14887.pdf 作者: Florin Cuconasu, Giovanni Trappolini, Federico Siciliano, Simone Filice, Cesare Campag…
最新文章