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("感谢您的使用!");
原文地址:https://www.cnblogs.com/hjcblog/p/8638818.html