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元\t\t2-300元\t\t3-500元");
22                 System.out.println("4-1000元\t\t5-3000元\t\t6-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("感謝您的使用!");

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM