需求描述:
假设一个简单的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("感谢您的使用!");