ATM

//ATM机
public class ATMMachine {

private UserInfo[] allUsers;// ATM中的用户信息

private UserInfo theUser; // 当前操作用户

private int cash;// 现金

public final int MAX_CASH = 200000;// 最大现金额

// 构造方法
public ATMMachine() {
    this.allUsers = new UserInfo[5]; // 用一个数组来装五个用户的信息
    for (int i = 0; i < this.allUsers.length; i++) {
        this.allUsers[i] = new UserInfo("12345" + i, "12345" + i, 10000 + i * 1000); // 用循环来表示每个人的账户和密码
    }

    this.cash = 100000; // 给现金赋值
}

// 运行--控制ATM机的运行流程
public void run() {
    this.welcome(); // 调用欢迎的方法
    if (this.login()) { // 调用login方法,并判断
        System.out.println("欢迎您,登录成功!");
        while (true) { // 用一个循环来使我们可以一直操作
            switch (this.choiceMenu()) {
            case 1:
                this.query();
                break;
            case 2:
                this.getMoney();
                break;
            case 3:
                this.storeMoney();
                break;
            case 4:
                this.changePwd();
                break;
            case 5:
                this.exit();
                break;
            default:
                System.out.println("没有该选项");
            }
        }

    } else {
        System.out.println("三次登录失败,您的卡已经被没收!");
        System.out.println("请在工作日带上有效证件,到柜台处理!");
    }

}

// 欢迎
private void welcome() {
    System.out.println("***************************");
    System.out.println("**********欢**迎**********");
    System.out.println("**********使**用**********");
    System.out.println("***********ICBC***********");
    System.out.println("***************************");
}

// 登录
private boolean login() {
    for (int i = 0; i < 3; i++) { // 循环给用户三次输入的机会
        Scanner scan = new Scanner(System.in);
        System.out.println("请输入用户名:");
        String inputName = scan.next();
        System.out.println("请输入密   码:");
        String inputPwd = scan.next();

        for (int j = 0; j < this.allUsers.length; j++) { // 嵌套一个循环判断用户输入的正误
            if (inputName.equals(this.allUsers[j].getUsername())
                    && inputPwd.equals(this.allUsers[j].getPassword())) {
                this.theUser = this.allUsers[j]; // 若正确,返回一个true
                return true;
            }
        }

        System.out.println("用户名密码有误,您还有" + (2 - i) + "次机会!");
    }
    return false;
}

// 选择菜单
private int choiceMenu() {
    while (true) {
        try { // 异常处理
            System.out.println("请选择您要执行的操作:");
            System.out.println("1、查询;2、取款;3、存款;4、修改密码;5、退出");
            Scanner scan = new Scanner(System.in);
            int choice = scan.nextInt(); // 接收选择

            return choice;
        } catch (InputMismatchException i) {
            // TODO: handle exception
            System.out.println("请输入有效数字!");
        }
    }
}

// 查询
private void query() {
    System.out.println("您当前的余额是:" + this.theUser.getAccount() + "元!"); // 调用theuser的getAccount
}

// 取款
private void getMoney() {
    try {
        System.out.println("请输入取款金额:");
        Scanner scan = new Scanner(System.in);
        int inputMoney = scan.nextInt(); // 取款金额

        if (inputMoney <= 0) { // 以下都是判断取款金额是否符合要求
            System.out.println("你见过哪家银行取负数的钱?");
        } else if (inputMoney % 100 != 0) {
            System.out.println("本ATM只支持100的整数!");
        } else if (inputMoney >= this.theUser.getAccount()) { // 要取的钱和他账户上有的钱进行判断
            System.out.println("您账户的余额不足!");
        } else if (inputMoney > this.cash) { // 要取的钱和ATM机上的钱进行判断
            System.out.println("本ATM现金不足!");
        } else {
            this.theUser.setAccount(this.theUser.getAccount() - inputMoney); // 取款成功后的账户上所剩的钱
            this.cash -= inputMoney;
            System.out.println("取款成功!现在余额是:" + this.theUser.getAccount());
        }
    } catch (InputMismatchException i) {
        // TODO: handle exception
        System.out.println("请输入有效的取款金额!");
    }
}

// 存款
private void storeMoney() {
    try {
        System.out.println("请输入存款金额:");
        Scanner scan = new Scanner(System.in);
        int inputMoney = scan.nextInt();

        if (inputMoney <= 0) { // 以下都是判断存款金额是否符合要求
            System.out.println("取款金额不能为负数!");
        } else if (inputMoney % 100 != 0) {
            System.out.println("本ATM只支持100的整数!");
        } else if (inputMoney + this.cash > this.MAX_CASH) {
            System.out.println("本ATM现金存放空间不足!");
        } else {
            this.cash += inputMoney; // 存了钱过后ATM机上的钱会增加
            this.theUser.setAccount(this.theUser.getAccount() + inputMoney); // 账户的钱也会变化
            System.out.println("存款成功!现在余额是:" + this.theUser.getAccount());
        }
    } catch (InputMismatchException i) {
        // TODO: handle exception
        System.out.println("请输入有效的存款金额!");
    }

}

// 修改密码
private void changePwd() {

    Scanner scan = new Scanner(System.in);
    System.out.println("请输入原密码:");
    String oldPwd = scan.next();

    try {
        if (oldPwd.equals(this.theUser.getPassword())) {
            System.out.println("请输入新密码:");
            String newPwd1 = scan.next();   
            int x = Integer.parseInt(newPwd1); // 将输入的string类型转换为 int类型,赋值给x,如果不能赋值一个整形变量,catch就捕捉这个异常
            System.out.println("请确认新密码:");
            String newPwd2 = scan.next();
            int y = Integer.parseInt(newPwd2);
            if (newPwd1.length() != 6 && newPwd2.length() != 6) {
                System.out.println("密码需为六位数!");
            } else if (newPwd1.equals(this.theUser.getPassword())) {
                System.out.println("新密码与原来密码一致,修改失败");
            } else if (x == y && newPwd1.length() == 6 && newPwd2.length() == 6) {
                this.theUser.setPassword(newPwd1);
                System.out.println("密码修改已经成功!");
                this.run();
            } else {
                System.out.println("两次密码不一致,不予修改!");
            }

        } else {
            System.out.println("密码输入错误!");
        }
    } catch (NumberFormatException i) {
        // TODO: handle exception
        System.out.println("密码必须是由 0—9 组成的六位数字!");
    }
}

// 退出
private void exit() {
    System.out.println("谢谢使用,期待下次光临!");
    System.exit(0);
}

}

你可能感兴趣的:(ATM)