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("感谢您的使用!");
  • 相关阅读:
    Topshelf的使用
    ref和out的区别
    .NET编码解码(HtmlEncode与HtmlDecode)
    查询表中某字段有重复记录个数的方法
    ActiveReports 报表应用教程 (8)---交互式报表之动态过滤
    ActiveReports 报表应用教程 (7)---交叉报表及数据透视图实现方案
    ActiveReports 报表应用教程 (6)---分组报表
    ActiveReports 报表应用教程 (5)---解密电子商务领域首张电子发票的诞生(套打报表)
    ActiveReports 报表应用教程 (4)---分栏报表
    ActiveReports 9 新功能:借助目录(TOC)控件为报表添加目录功能
  • 原文地址:https://www.cnblogs.com/hjcblog/p/8638818.html
Copyright © 2011-2022 走看看