升级版ATM机取款过程
需求描述:假设一个简单的ATM机的取款过程为:
首先提示用户输入密码(password),假设默认密码为111111,最多只能输入3次,
超过3次则提示用户“密码错误,请取卡”,结束交易。
如果用户密码正确,再提示用户选择金额(amount),“请输入0到6中任意数字选择对应钱数:0à手动输入金额:1.100元, 2.300元, 3.500元, 4.1000元, 5.3000元, 6.5000元”。
输入数字如果错误,提示“输入错误,是否继续 Y/N”,选择Y重新提示输入钱数编号,
选择N提示“输入错误,请取卡!”。选择数字为1到6,打印对应钱数,并提示“交易完成,请取卡”。
选择数字0,ATM机只能输出100元纸币,
自定义钱数要求最低为100元,最高为1000元。如果用户输入的金额符合上述要求,则打印输出用户取的钱数,并提示“取款完成,是否继续Y/N”;否则输出一句话“金额错误,是否继续 Y/N”,如果用户输入Y,提示用户重新选择取款金额,如果用户输入 N,打印“交易取消,请取卡!”
ps:取款成功后,应该提示用户是否继续,总取款金额不能超过2万
下面是我的代码:
package com.jerehedu.ch03;
import java.util.Scanner;
public class ATM1 {
public static void main(String[] args) {
// TODO Auto-generated method stub
int password=111111,count=1;
Scanner input = new Scanner(System.in);
while (true) {
System.out.println("请输入密码:");
int pw = input.nextInt();
if (pw==password){
System.out.println("密码输入正确!");
break;
}
count++;
if (count>3) {
System.out.println("密码错误,请取卡!");
return;
}
}
int num = 0;
int money = 0;
int sum=0;
while (true) {
System.out.println("请输入序号:\n0. 手动输入金额\t1. 100元\t2. 300元\t3. 500元\t4. 1000元\t5. 3000元\t6. 5000元");
num = input.nextInt();
switch (num) {
case 0:
System.out.println("手动输入金额");
while (true) {
money = input.nextInt();
if (money%100!=0||money>1000) {
System.out.println("您输入的金额不合法,请重新输入: ");
continue;
}else {
System.out.println("您取了"+money+"元");
sum+=money;
if (sum>20000) {
sum-=money;
System.out.println("余额不足,您剩余的取款额度为: "+(20000-sum));break;
}
break;
}
}
break;
case 1:
sum+=100;
if (sum>20000) {
sum-=100;
System.out.println("余额不足,您剩余的取款额度为: "+(20000-sum));break;
}
System.out.println("您取了100元。");
break;
case 2:
sum+=300;
if (sum>20000) {
sum-=300;
System.out.println("余额不足,您剩余的取款额度为: "+(20000-sum));break;
}
System.out.println("您取了300元。");
break;
case 3:
sum+=500;
if (sum>20000) {
sum-=500;
System.out.println("余额不足,您剩余的取款额度为: "+(20000-sum));break;
}
System.out.println("您取了500元。");
break;
case 4:
sum+=1000;
if (sum>20000) {
sum-=1000;
System.out.println("余额不足,您剩余的取款额度为: "+(20000-sum));break;
}
System.out.println("您取了1000元。");
break;
case 5:
sum+=3000;
if (sum>20000) {
sum-=3000;
System.out.println("余额不足,您剩余的取款额度为: "+(20000-sum));break;
}
System.out.println("您取了3000元。");
break;
case 6:
sum+=5000;
if (sum>20000) {
sum-=5000;
System.out.println("余额不足,您剩余的取款额度为: "+(20000-sum));break;
}
System.out.println("您取了5000元。");
break;
default:
System.out.println("输入错误,是否继续(Y/N)");
break;
}
System.out.println("交易完成,是否继续Y/N: ");
char c = input.next().charAt(0);
if (c=='Y') {
continue;
}else if(c=='N'){
System.out.println("交易结束,请取卡");
return;
}else {
System.out.println("输入错误,请重新输入:");
c = input.next().charAt(0);
}
if (20000-sum==0) {
System.out.println("剩余取款额度为0,交易结束,请取卡");
return;
}
System.out.println("您取出了"+sum+"元");
}
}
}
下面是老师的讲解以及代码:
/** 【解题思路】
* 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
*/
Scanner in = new Scanner(System.in);
System.out.println("***********欢迎使用ATM机取款业务**********");
//验证密码
int i = 1;
for (; i <= 3; i++) {
System.out.print("请输入密码:");
int pwd = in.nextInt();
if (pwd == 111111) {
System.out.println("密码输入正确!");
break;
}
}
if (i>3) {
//如果i大于3,表示3次输入密码全部错误。
System.out.println("密码错误3次!请取卡!");
return;
}
System.out.println("************请根据序号进行取款************");
//取款操作
int moneySum = 0;//取款总金额
int money = 0;//本次取款金额
while (true) {
System.out.println("0-手动输入金额");
System.out.println("1-100元\t\t2-300元\t\t3-500元");
System.out.println("4-1000元\t\t5-3000元\t\t6-5000元");
System.out.print("请选择:");
int chooseNum = in.nextInt();
switch (chooseNum) {
case 1:
money = 100;
break;
case 2:
money = 300;
break;
case 3:
money = 500;
break;
case 4:
money = 1000;
break;
case 5:
money = 3000;
break;
case 6:
money = 5000;
break;
case 0:
while (true) {
System.out.print("请输入取款金额:");
money = in.nextInt();
if (money>=100&&money<=1000&&money%100==0) {
break;
}else{
System.out.print("您输入的金额不合法,");
continue;
}
}
break;
default:
System.out.println("序号选择错误!");
break;
}
//验证总取款金额是否超过20000
if (moneySum+money<20000) {
System.out.print("取款成功,本次取款"+money+"元,");
moneySum += money;
System.out.println("总取款"+moneySum+"元");
}else if(moneySum+money == 20000){
System.out.print("取款成功,本次取款"+money+"元,");
moneySum += money;
System.out.println("总取款"+moneySum+"元");
System.out.print("今日取款已达上限,情取卡!");
break;
}else{
System.out.println("取款失败!每日取款上限20000元,您已取"
+moneySum+"元,还可取"+(20000-moneySum)+"元");
}
//验证是否继续
while (true) {
System.out.print("\n是否继续(Y/N):");
char isGoON = in.next().charAt(0);
if(isGoON=='y'||isGoON=='Y'){
break;
}else if(isGoON=='n'||isGoON=='N'){
return;
}else{
System.out.print("输入有误,请选择Y-继续,N-退出,");
}
}
}
System.out.println("感谢您的使用!");
}
}