怀才不遇的不只是李白,可能下一个就是你

上周二我们进行了第一次考试,虽然总体挺满意,但是还是发现了很多自己的问题,例如做单选题太慢太粗心,机试能很快的想出思路,并且能很快写出来,这一点还是对自己挺满意的,这一周我们结束了Javaoo的学习,感觉自己还有很多地方没有搞懂,希望自己周末能克制住自己不去玩,多复习复习,不懂的问问老师,问问同学。周五的时候自己讲了自己写的PPT,是关于如何保持来良好的学习心态的,虽然自己讲的不是很好,也不敢保证能对同学们起得了作用但是还是希望能对自己起作用。保持好学习心态,用饱满的热情跟充实的精力迎接每一堂课,学习好每一个知识点。也把其他同学讲的PPT内容付诸实际,让学习变得轻松一点,快乐一点。

以下是我又写了一个bug版本的ATM机:

public class ATM {
    // 常量在定义时就应该赋值
    final int MAX_MONEY = 100000;// ATM最大值

    int ATM_money = 50000;// ATM机当前余额

    final int MAX_GET_MONEY = 2000;// 每次取钱最大值

    final int MAX_SAVE_MONEY = 5000;// 每次存钱最大值

    // 存储的用户信息--构造器中创建出相应的用户信息数组
    User[] user;

    // 当前用户--当登录成功时需要赋值
    User user1;

    public ATM() {// 依次给user数组的每个元素赋值
        user = new User[5];
        user[0] = new User("杨航", "666", 1200);
        user[1] = new User("小艳", "222", 8000);
        user[2] = new User("小强", "233", 30000);
        user[3] = new User("小涛", "123456", 10000);
        user[4] = new User("小黎", "110", 100);
        run();// 调用run()方法
    }

    // ATM的行为
    // 登录--登录成功需要将该对象赋值给user1
    public boolean login() {// 定义了一个登陆的方法,需要返回一个boolean值
        Scanner sc = new Scanner(System.in);
        String account;
        String password;
        for (int i = 1;; i++) {
            System.out.println("请输入帐号");
            account= sc.next();//保存用户输入到account
            System.out.println("请输入密码");
            password= sc.next();//保存用户输入到password
            for (int j = 0; j < user.length; j++) {// 在每一次输入都去将数组的用户信息进行对比
                if (account.equals(user[j].account) && password.equals(user[j].password)) {
                    this.user1 = user[j];
                    return true;
                }
            }
        }
    }

    // 查询--不需要传值,直接输出当前对象的Money值
    public void checkMoney() {// 定义了一个查询余额的方法
        System.out.println("当前余额为" + this.user1.money);
    }

    public void getMoney() {
        int money;
        while (true) {// 定义一个死循环,如果用户输入的金额不满足规范就无限循环
            Scanner sc = new Scanner(System.in);
            try {
                System.out.println("请输入你要取的金额(整数)");
                money = sc.nextInt();
            } catch (InputMismatchException in) {
                System.out.println("输入不匹配,请重新输入");
                continue;
            }
            if (money % 100 != 0) {
                System.out.println("只能输入100的倍数");
                continue;
                // 如果不满足上面的条件就判断是否小于0,小于0就执行里面的语句,ATM机不能取负数
            } else if (money < 0) {
                System.out.println("只能是>=0的数");
                continue;
                // 如果不满足上面的条件就判断用户输入的金额是否大于了余额,如果是,则执行语句
            } else if (money > this.user1.money) {
                System.out.println("账户余额不足");
                continue;
                // 如果不满足上面的条件就判断用户输入的金额是否大于ATM余额,如果是,执行语句
            } else if (money > this.ATM_money) {
                System.out.println("ATM余额不足");
                continue;
                // 如果不满足上面的条件就判断用户输入的金额是否大于每次取钱的上限,是则执行语句
            } else if (money > this.MAX_GET_MONEY) {
                System.out.println("每次只能取最多:" + this.MAX_GET_MONEY);
                continue;
            } else {// 如果以上条件都不满足则证明用户输入的金额满足要求
                System.out.println("取款成功");
                this.user1.money -= money;// 用户的账户余额减去取的金额
                this.ATM_money -= money;// ATM机的余额减去取的金额
                return;//结束整个方法
            }
        }
    }

    public void saveMoney() {
        int money;
        while (true) {// 与取钱一样,定义一个无限循环
            Scanner sc = new Scanner(System.in);
            try {
                System.out.println("请输入要存的金额(整数)");
                money = sc.nextInt();// 保存用户输入到money
            } catch (InputMismatchException in) {
                System.out.println("输入不匹配,请重新输入");
                continue;
            }
            if (money < 0) {// 判断是否小于0,是则执行其中语句
                System.out.println("只能是>=0的值");
                continue;
            } else if (money % 100 != 0) {// 判断用户输入模100是否不等于0,是则执行其中语句
                System.out.println("只能是100的倍数");
                continue;
            } else if (money > this.MAX_SAVE_MONEY) {// 判断用户要存的金额是否大于上限,是则执行其中语句
                System.out.println("一次最多存:" + this.MAX_SAVE_MONEY);
                continue;
            } else if (money + this.ATM_money > this.MAX_MONEY) {
                // 判断用户存的金额加上ATM余额是否大于ATM能存的最大限度,是则执行其中语句
                System.out.println("ATM存满了,本次失败");
                continue;
            } else {// 如果不进入上面的语句则说明用户输入的金额满足条件
                System.out.println("存款成功");
                this.user1.money += money;// 用户余额加上存的金额
                this.ATM_money += money;// ATM余额加上存的金额
                return;//结束整个方法
            }
        }
    }

    public void printMenu() {// 定义了一个打印菜单的方法
        System.out.println("请选择你要的业务:");
        System.out.println("1.查询当前余额");
        System.out.println("2.取款");
        System.out.println("3.存款");
        System.out.println("4.退出");
    }

    // 启动
    public void run() {// 定义了一个启动方法

        System.out.println("欢迎使用ATM");
        boolean boo = this.login();// 调用登陆方法并将返回的boolean值赋值给boo
            while (true) {// 定义一个无限循环
                int num ;// 定义一个num
                while (true) {// 一个无限循环
                    Scanner sc = new Scanner(System.in);
                    try {
                        printMenu();// 调用打印菜单的方法
                        num = sc.nextInt();// 获取用户输入给num赋值
                    } catch (InputMismatchException in) {
                        System.out.println("输入不匹配,请重新输入");
                        continue;
                    }
                    // 如果num保存的值等于1或者2或者3或者4就进入该if
                    if (num == 1 || num == 2 || num == 3 || num == 4) {
                        break;// 跳出内循环
                    }
                }
                switch (num) {// 把num的值与与下面的case一次比较,如果与case后的值一致就执行后面的语句知道遇到break
                case 1:
                    checkMoney();// 调用查询方法
                    break;// 跳出switch继续循环
                case 2:
                    this.getMoney();// 调用取钱方法
                    break;// 跳出switch继续循环
                case 3:
                    saveMoney();// 调用存钱方法
                    break;// 跳出switch继续循环
                case 4:
                    System.out.println("欢迎下次再来");
                    return;// 结束整个方法
                }
            }
        }
    }
用户类和测试类跟上周发的一样,运用了try{}catch(){}语句,让我的ATM怎么输入都不会把异常抛出。try{}语句中放入可能出现异常的代码,如果出现异常可以让程序停止在出现异常的地方并把异常对象依次和下面catch(){}语句的小括号内的进行比较(可以有多个catch语句,try只能有一个),找到能抓捕异常对象的catch(){}语句,并执行其中的语句,执行完了之后继续执行try{}catch(){}以外的语句

转载于:https://www.cnblogs.com/101213-/p/7788164.html

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值