Java

java笔记——模拟ATM机例子

2020-05-01  本文已影响0人  没昔

模拟ATM机,实现用户登录、查询、取款、存款和退出。

假定一个银行卡账户,程序执行的时候提示用户输入账号,然后输入密码,如果输入内容不符合规范,则程序会给出相应提示,连续3次输入有误,则退出系统。登录成功后,系统会出现4个选项:1.查询余额 2.取款 3.存款 4.退出。
用户如果选择1,则屏幕显示用户的余额;

用户如果选择2,则需要输入取款的金额,该金额必须大于0,必须是100的整数倍,必须是小于用户余额的,必须是小于ATM机中剩余的钱,而且每次取款都要小于2000;

用户如果选择3,则需要输入存款的数量,该存款数必须大于0,必须是100的整数,金额存入ATM机中不能超过ATM机的上限,而且每次最多存10000;

用户如果输入4,则直接结束操作,退出该系统

代码:

Main:

package com.company;

public class Main {

    public static void main(String[] args) {

//        ATM上限
        final int ATMMAXMONEY = 1000000;

        String account = "wy";//账号信息
        int password = 123456;//账户密码
        int mymoney = 30000;//账户余额
        int ATMKeepMoney = 900000;//当前ATM的余额
        Bank.run(ATMMAXMONEY,account,password,mymoney,ATMKeepMoney);
    }

}

Bank:

package com.company;

import java.util.Scanner;

public class Bank {

    /**
     * 启动方法
     */
    public static void run(int ATMMAXMONEY,String account,int password,int mymoney,int ATMKeepMoney){

        System.out.println("欢迎使用CWNU的ATM系统!");
        System.out.println("请插入您的银行卡!");
        Scanner scanner = new Scanner(System.in);
        //登录方法
        boolean status = login(account,password);
        //登录成功
        if(status){
            while (true){
                showMenu();
                int in = scanner.nextInt();

                switch (in){
                    case 1://查询余额
                        queryMoney(mymoney);
                        break;
                    case 2://取款
                        int balance = drawMoney(mymoney,ATMKeepMoney);//取钱并返回金额
                        mymoney -= balance;//从余额中扣除取钱的数目
                        ATMKeepMoney -= balance;//ATM的余额中,扣除取钱的数目
                        break;
                    case 3://存款
                        int saveMoney = saveMoney(ATMKeepMoney,ATMMAXMONEY);//存钱并返回金额
                        mymoney += saveMoney;//向账户余额中添加金额
                        ATMKeepMoney += saveMoney;//向ATM的余额中添加金额
                        break;

                    case 4://退出
                        System.out.println("欢迎下次使用!");
                        System.exit(1);//关闭JVM
                        break;

                    default:
                        System.out.println("你的输入有误,请重新输入!");
                        break;
                }
            }
        }
    }

    /**
     * 存钱
     * @param ATMKeepMoney ATM的余额
     * @param ATMMAXMONEY ATM的上限
     * @return 存入的金额
     */
    private static int saveMoney(int ATMKeepMoney, int ATMMAXMONEY) {
        Scanner scanner = new Scanner(System.in);
        int saveMoney = 0;//客户的输入
        while (true){
            System.out.println("请输入存款金额!");
            saveMoney = scanner.nextInt();
            if(saveMoney < 0 ){
                System.out.println("请输入大于0的金额!");
            }else if(saveMoney % 100 != 0){
                System.out.println("请输入100的整数倍!");
            }else if((saveMoney + ATMKeepMoney) > ATMMAXMONEY){
                System.out.println("存款金额超出ATM上限!");
            }else if(saveMoney > 10000){
                System.out.println("每次最多存10000!");
            }else{
                System.out.println("存款成功");
                break;
            }
            System.out.println("请重新输入!");
        }

        return  saveMoney;
    }

    /**
     * 取钱
     * @param mymoney 卡中的余额
     * @param ATMKeepMoney ATM中余额
     * @return 客户的输入
     */
    private static int drawMoney(int mymoney, int ATMKeepMoney) {
        Scanner scanner = new Scanner(System.in);
        int balance = 0;//客户的输入

        while (true){
            System.out.println("请输入取款金额");
            balance = scanner.nextInt();
            if(balance < 0){
                System.out.println("请输入大于0的数字!");
            }else if(balance % 100 != 0){
                System.out.println("请输入100的整数倍!");
            }else if(balance > mymoney){
                System.out.println("余额不足!");
            }else if(balance > ATMKeepMoney){
                System.out.println("ATM机余额不足!");
            }else if(balance > 2000){
                System.out.println("每次最多取2000!");
            }else{
                System.out.println("取钱成功!");
                break;
            }
            System.out.println("请重新输入取款金额!");
        }

        return balance;
    }

    /**
     * 查询余额
     * @param mymoney
     */
    private static void queryMoney(int mymoney) {

        System.out.println("你的余额是:" + mymoney);
    }

    /**
     * 显示菜单
     */
    private static void showMenu() {
        System.out.println("请选择以下操作:");
        System.out.println("1.查询余额    2.取款    3.存款    4.退出系统");
    }

    /**
     * 登录方法
     * 需求:可以实现登录3次  前2次可以提示密码不匹配,第3次直接退出系统
     * @param account
     * @param password
     */
    private static boolean login(String account, int password) {
        //控制台类
        Scanner scanner = new Scanner(System.in);
        boolean flag = false;
        for(int i = 1; i <= 3; i ++){
            System.out.println("请输入你的账号:");
            String acc = scanner.next();
            System.out.println("请输入你的密码:");
            int pass = scanner.nextInt();
            if(acc.equals(account) && pass == password){
                System.out.println("登录成功!");
                flag = true;
                return flag;
            }else{
                if(i != 3){
                    System.out.println("你的输入有误,请重新输入,你还有" +
                            (3 - i) + "次机会!");
                }
            }
        }

        return flag;
    }
}

效果如图:

上一篇 下一篇

猜你喜欢

热点阅读