zoukankan      html  css  js  c++  java
  • JAVA-循环体小练习——ATM取款机

    需求描述:

    假设一个简单的ATM机的取款过程为:
    首先提示用户输入密码,假设默认密码为111111,最多只能输入3次,
    超过3次则提示用户“密码错误,请取卡”,结束交易。

    如果用户密码正确,再提示用户选择金额,
    “请输入0到6中任意数字选择对应钱数:0-手动输入金额,1-100元, 2-300元,
    3-500元, 4-1000元, 5-3000元, 6-5000元”。

    输入数字如果错误,提示“输入错误,是否继续 Y/N”,选择Y重新提示输入钱数编号,
    选择N提示“输入错误,请取卡!”。选择数字为1到6,打印对应钱数,
    并提示“是否继续 Y/N”。选择数字0,ATM机只能输出100元纸币,
    自定义钱数要求最低为100元,最高为1000元。如果用户输入的金额符合上述要求,
    则打印输出用户取的钱数,并提示“取款完成,是否继续Y/N”;否则输出一句话“金额错误,
    是否继续 Y/N”,如果用户输入Y,提示用户重新选择取款金额,如果用户输入 N,
    打印“交易取消,请取卡!”

    ps:取款成功后,应该提示用户是否继续,总取款金额不能超过2万

    【解题思路】
     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

    代码:

     1        Scanner sc=new Scanner(System.in);
     2             int i;
     3             for(i=0;i<3;i++){                                
     4                 System.out.print("请输入密码:");
     5                 int pwd=sc.nextInt();
     6                 if(pwd==111111){                    
     7                     break;
     8                 }
     9             }
    10             if(i>=3){
    11                 System.out.print("密码错误,请取卡!");
    12                 return;
    13             }
    14             System.out.println("***********请根据序号进行取款********");
    15             //取款操作
    16             int moneysum=0;//取款总金额
    17             int money=0;//本次取款金额
    18             boolean isGo=true;
    19             while (isGo){                
    20                 System.out.println("0-手动输入金额");
    21                 System.out.println("1-100元		2-300元		3-500元");
    22                 System.out.println("4-1000元		5-3000元		6-5000元");
    23                 System.out.print("请选择:");
    24                 int choosenum=sc.nextInt();
    25                 moneysum+=money;
    26                 //根据取款编号,进行取款操作                
    27                 switch(choosenum){
    28                 case 1:
    29                     money=100;        
    30                     break;
    31                 case 2:
    32                     money=300;
    33                     break;
    34                 case 3:
    35                     money=500;
    36                     break;
    37                 case 4:
    38                     money=1000;
    39                     break;
    40                 case 5:
    41                     money=3000;
    42                     break;
    43                 case 6:
    44                     money=5000;
    45                     break;
    46                 case 0:
    47                     System.out.print("请输入金额:");
    48                     int shoudong=sc.nextInt();                    
    49                     if(shoudong%100==0&&shoudong>=100&&shoudong<=1000){
    50                         money=shoudong;                        
    51                     }else{
    52                         System.out.print("金额错误,只能输入100到1000中100整数倍的金额");
    53                     }                
    54                     break;
    55                 default:
    56                     System.out.println("输入错误,");
    57                     break;
    58                 }
    59                 //验证总取款金额是否超过20000
    60                 if(moneysum+money>20000){
    61                     System.out.print("取款已超出单日上限,本次取款失败,本日剩余可取款金额为"+(20000-moneysum)+",");    
    62                     moneysum-=money;
    63                 }else if(moneysum+money==20000){
    64                     System.out.println("您共取出20000元,已达到单日取钱上限,请取卡");
    65                     return;
    66                 }else{        
    67                     System.out.print("您共取出"+(moneysum+money)+"元,");                    
    68                 }
    69                 //验证是否继续    
    70                 while(true){
    71                     System.out.print("是否继续(y/n):");
    72                     // 输入字符: 先输入字符串,再截取字符串的第0个字符
    73                     char c = sc.next().charAt(0);
    74                     System.out.println();
    75                     if(c=='n' || c=='N'){
    76                         // 当输入为n时,修改标志变量,终止外层大循环。
    77                         isGo = false;            
    78                         break;
    79                     }else if(c=='y' || c=='Y'){
    80                         break;
    81                     }else{
    82                         System.out.print("输入有误,");
    83                     }
    84                 }
    85             }                
    86             System.out.println("感谢您的使用!");
  • 相关阅读:
    二进制位运算
    Leetcode 373. Find K Pairs with Smallest Sums
    priority_queue的用法
    Leetcode 110. Balanced Binary Tree
    Leetcode 104. Maximum Depth of Binary Tree
    Leetcode 111. Minimum Depth of Binary Tree
    Leetcode 64. Minimum Path Sum
    Leetcode 63. Unique Paths II
    经典的递归练习
    案例:java中的基本排序
  • 原文地址:https://www.cnblogs.com/hjcblog/p/8638818.html
Copyright © 2011-2022 走看看