2016/08/01 升级版ATM机取款过程

升级版ATM机取款过程


需求描述:假设一个简单的ATM机的取款过程为:
首先提示用户输入密码(password),假设默认密码为111111,最多只能输入3次,
超过3次则提示用户“密码错误,请取卡”,结束交易。
如果用户密码正确,再提示用户选择金额(amount),“请输入0到6中任意数字选择对应钱数:0à手动输入金额:1.100元, 2.300元, 3.500元, 4.1000元, 5.3000元, 6.5000元”。
输入数字如果错误,提示“输入错误,是否继续 Y/N”,选择Y重新提示输入钱数编号,
选择N提示“输入错误,请取卡!”。选择数字为1到6,打印对应钱数,并提示“交易完成,请取卡”。
选择数字0,ATM机只能输出100元纸币,
自定义钱数要求最低为100元,最高为1000元。如果用户输入的金额符合上述要求,则打印输出用户取的钱数,并提示“取款完成,是否继续Y/N”;否则输出一句话“金额错误,是否继续 Y/N”,如果用户输入Y,提示用户重新选择取款金额,如果用户输入 N,打印“交易取消,请取卡!”
ps:取款成功后,应该提示用户是否继续,总取款金额不能超过2万

下面是我的代码:

package com.jerehedu.ch03;
import java.util.Scanner;
public class ATM1 {
    public static void main(String[] args) {
        // TODO Auto-generated method stub
        int password=111111,count=1;
        Scanner input = new Scanner(System.in);

        while (true) {
            System.out.println("请输入密码:");
            int pw = input.nextInt();
            if (pw==password){
                System.out.println("密码输入正确!");
                break;
            }       
            count++;
            if (count>3) {
                System.out.println("密码错误,请取卡!");
                return;
            }
        }

        int num = 0;
        int money = 0;
        int sum=0;
        while (true) {
            System.out.println("请输入序号:\n0. 手动输入金额\t1. 100元\t2. 300元\t3. 500元\t4. 1000元\t5. 3000元\t6. 5000元");   
            num = input.nextInt();
            switch (num) {
            case 0:
                System.out.println("手动输入金额");
                while (true) {
                    money = input.nextInt();
                    if (money%100!=0||money>1000) {
                        System.out.println("您输入的金额不合法,请重新输入: ");
                        continue;
                    }else {
                        System.out.println("您取了"+money+"元");
                        sum+=money;
                        if (sum>20000) {
                            sum-=money;
                            System.out.println("余额不足,您剩余的取款额度为: "+(20000-sum));break;
                        }
                        break;
                    }
                }
                break;
            case 1:
                sum+=100;
                if (sum>20000) {
                    sum-=100;
                    System.out.println("余额不足,您剩余的取款额度为: "+(20000-sum));break;
                }
                System.out.println("您取了100元。");
                break;
            case 2:
                sum+=300;
                if (sum>20000) {
                    sum-=300;
                    System.out.println("余额不足,您剩余的取款额度为: "+(20000-sum));break;
                }
                System.out.println("您取了300元。");
                break;
            case 3:
                sum+=500;
                if (sum>20000) {
                    sum-=500;
                    System.out.println("余额不足,您剩余的取款额度为: "+(20000-sum));break;
                }
                System.out.println("您取了500元。");
                break;
            case 4:
                sum+=1000;
                if (sum>20000) {
                    sum-=1000;
                    System.out.println("余额不足,您剩余的取款额度为: "+(20000-sum));break;
                }
                System.out.println("您取了1000元。");
                break;
            case 5:
                sum+=3000;
                if (sum>20000) {
                    sum-=3000;
                    System.out.println("余额不足,您剩余的取款额度为: "+(20000-sum));break;
                }
                System.out.println("您取了3000元。");
                break;
            case 6:
                sum+=5000;
                if (sum>20000) {
                    sum-=5000;
                    System.out.println("余额不足,您剩余的取款额度为: "+(20000-sum));break;
                }
                System.out.println("您取了5000元。");
                break;
            default:
                System.out.println("输入错误,是否继续(Y/N)");
                break;
            }
            System.out.println("交易完成,是否继续Y/N: ");
            char c = input.next().charAt(0);
            if (c=='Y') {
                continue;
            }else if(c=='N'){
                System.out.println("交易结束,请取卡");
                return;
            }else {
                System.out.println("输入错误,请重新输入:");
                c = input.next().charAt(0);
            }
            if (20000-sum==0) {
                System.out.println("剩余取款额度为0,交易结束,请取卡");
                return;
            }
            System.out.println("您取出了"+sum+"元");
        }
        }
    }


下面是老师的讲解以及代码:

/** 【解题思路】
* 1、验证密码
* ① 密码正确,继续执行下面操作;
* ② 密码错误3次,return;
*
* 2、取款操作。全部包含在 while循环内部。
* ① 提示选择编号;
* ② 根据编号,给money赋值。用switch结构实现。
* 1~6:直接给money赋固定值,0:手动赋值操作;
* ③ 验证取款是否成功。money-本次取款金额,moneySum-本次取款之前的总金额
* 判断moneySum+money是否>20000,3种情况:
* >2000 本次取款超额,但moneySum之前并不足20000,继续下次循环;
* =2000 取完本次money后,刚好满额。money可以加到sum上,然后return;
* <2000 取完本次money后,仍未上限。money可以加到sum上,继续下次循环。
* ④ 验证是否继续,while-if结构实现,有3种情况:
* Y/y 将小循环break,继续执行取款大循环;
* N/n 直接return,停止所有操作;
* 其他 continue,继续执行小循环,重复输入Y/N
*/

Scanner in = new Scanner(System.in);
        System.out.println("***********欢迎使用ATM机取款业务**********");
        //验证密码
        int i = 1;
        for (; i <= 3; i++) {
            System.out.print("请输入密码:");
            int pwd = in.nextInt();
            if (pwd == 111111) {
                System.out.println("密码输入正确!");
                break;
            }
        }
        if (i>3) {
            //如果i大于3,表示3次输入密码全部错误。
            System.out.println("密码错误3次!请取卡!");
            return;
        }
        System.out.println("************请根据序号进行取款************");
        //取款操作
        int moneySum = 0;//取款总金额
        int money = 0;//本次取款金额
        while (true) {
            System.out.println("0-手动输入金额");
            System.out.println("1-100元\t\t2-300元\t\t3-500元");
            System.out.println("4-1000元\t\t5-3000元\t\t6-5000元");
            System.out.print("请选择:");
            int chooseNum = in.nextInt();
            switch (chooseNum) {
            case 1:
                money = 100;
                break;
            case 2:
                money = 300;
                break;
            case 3:
                money = 500;
                break;
            case 4:
                money = 1000;
                break;
            case 5:
                money = 3000;
                break;
            case 6:
                money = 5000;
                break;
            case 0:
                while (true) {
                    System.out.print("请输入取款金额:");
                    money = in.nextInt();
                    if (money>=100&&money<=1000&&money%100==0) {
                        break;
                    }else{
                        System.out.print("您输入的金额不合法,");
                        continue;
                    }
                }
                break;
            default:
                System.out.println("序号选择错误!");
                break;
            }

            //验证总取款金额是否超过20000
            if (moneySum+money<20000) {
                System.out.print("取款成功,本次取款"+money+"元,");
                moneySum += money;
                System.out.println("总取款"+moneySum+"元");
            }else if(moneySum+money == 20000){
                System.out.print("取款成功,本次取款"+money+"元,");
                moneySum += money;
                System.out.println("总取款"+moneySum+"元");
                System.out.print("今日取款已达上限,情取卡!");
                break;
            }else{
                System.out.println("取款失败!每日取款上限20000元,您已取"
                        +moneySum+"元,还可取"+(20000-moneySum)+"元");
            }

            //验证是否继续
            while (true) {
                System.out.print("\n是否继续(Y/N):");
                char isGoON = in.next().charAt(0);
                if(isGoON=='y'||isGoON=='Y'){
                    break;
                }else if(isGoON=='n'||isGoON=='N'){
                    return;
                }else{
                    System.out.print("输入有误,请选择Y-继续,N-退出,");
                }
            }
        }

        System.out.println("感谢您的使用!");
    }
}
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值