需求描述:
假設一個簡單的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("感謝您的使用!");