一、前言:
关于上次我写的博客文章中"Java之《ATM自动取款机》(面向对象)",里面还不够完善,因为在各个服务功能相互跳转时,会出现混乱问题。这次我对其进行了修改和改进,若还有其它在大家测试时出现的bug请及时评论联系,谢谢!
二、代码:
(1)关于用户类"User"的代码基本没变。
package com.fs.demo;public class User {public String accountNumber;public String password;public double sum;public User(){this.accountNumber="1234";this.password="5678";this.sum=8888.0;}public User(String accountNumber,String password,double sum){this.accountNumber=accountNumber;this.password=password;this.sum=sum;}
}
(2) 测试类发生很多变化(其实就是新添加一个功能:用它来判断当输入的服务选项不匹配时,进行提示并要求重新输入)。当然这里可以用一写方法来把它分为几个功能,这样代码能简化很多,这里交给大家去修改了哈哈!
package com.fs.test;
import com.fs.demo.*;
import java.util.*;
public class Test01 {public static void main(String[] args) {Scanner sc =new Scanner(System.in);User user =new User();System.out.println("********欢迎使用中国民生银行自动取款服务********");System.out.println("** 请输入你的账号: **");String accountNum= sc.next();while(!accountNum.equals(user.accountNumber)){System.out.println("该账号输入有误,请重新输入正确账号:");accountNum=sc.next(); //只有当账号输入正确时,才会跳转到输入密码环节}System.out.println("** 请输入你的密码: **");String password=sc.next();int i=1;//记录输入错误密码次数while(!password.equals(user.password)){ //只要第一次输入的密码不是正确密码,就会进人循环:判断下一次输入的密码是否正确if(i==1||i==2) {System.out.println("你已连续输入错误密码" + i + "次。若连续三次密码输入错误,该账号将被冻结!");System.out.println("请你重新输入正确密码:");password = sc.next();if(!password.equals(user.password)) {i++;}}if(i==3){System.out.println("你已连续输入错误密码3次,该账号将已被冻结!");break;}}if(password.equals(user.password)){System.out.println("银行卡账号登录成功!");System.out.println("********欢迎使用中国民生银行自动取款服务********");System.out.println("** 1.查询 2.取款 **");System.out.println("** 3.转账 4.退卡 **");System.out.println("请选择您需要的服务:");int select=sc.nextInt();while(true) {if (select == 1) {System.out.println("********欢迎使用中国民生银行自动取款服务********");System.out.println("******** 查询成功!! ********");System.out.println("您查询的账号的总余额为:" + user.sum + "元");System.out.println();System.out.println("********返回请选择5****************");int flag1=sc.nextInt();if(flag1==5){System.out.println("********欢迎使用中国民生银行自动取款服务********");System.out.println("** 1.查询 2.取款 **");System.out.println("** 3.转账 4.退卡 **");System.out.println("请选择您需要的服务:");select=sc.nextInt();}if(flag1!=5){ //用来判断当输入服务不是"5"返回时,要重新输入while(flag1!=5) {System.out.println("抱歉!你的输入有误,返回失败!请重新输入");System.out.println();System.out.println("********返回请选择5****************");flag1 = sc.nextInt();if(flag1==5){System.out.println("********欢迎使用中国民生银行自动取款服务********");System.out.println("** 1.查询 2.取款 **");System.out.println("** 3.转账 4.退卡 **");System.out.println("请选择您需要的服务:");select=sc.nextInt();break;}}}}if (select == 2) {System.out.println("********欢迎使用中国民生银行自动取款服务********");System.out.println("** 请输入您要取款的金额:");double sum = sc.nextDouble();System.out.println("******** 取款成功!! ********");System.out.println("您的账号余额还剩:" + (user.sum - sum) + "元");user.sum=(user.sum-sum);System.out.println();System.out.println("********返回请选择5****************");int flag1=sc.nextInt();if(flag1==5){System.out.println("********欢迎使用中国民生银行自动取款服务********");System.out.println("** 1.查询 2.取款 **");System.out.println("** 3.转账 4.退卡 **");System.out.println("请选择您需要的服务:");select=sc.nextInt();}if(flag1!=5){while(flag1!=5) {System.out.println("抱歉!你的输入有误,返回失败!请重新输入");System.out.println();System.out.println("********返回请选择5****************");flag1 = sc.nextInt();if(flag1==5){System.out.println("********欢迎使用中国民生银行自动取款服务********");System.out.println("** 1.查询 2.取款 **");System.out.println("** 3.转账 4.退卡 **");System.out.println("请选择您需要的服务:");select=sc.nextInt();break;}}}}if (select == 3) {System.out.println("********欢迎使用中国民生银行自动取款服务********");System.out.println("** 请分别输入您要转账的目的银行卡的账号和密码:");User user1 = new User(sc.next(), sc.next(), 4000.0);System.out.println("** 请输入您要转账的金额:");double sum = sc.nextDouble();System.out.println("******** 转账成功!! ********");System.out.println("您的账号余额还剩:" + (user.sum - sum) + "元");System.out.println("目的银行卡账号:" + user1.accountNumber + ",的余额还剩:" + (user1.sum + sum) + "元");user.sum=(user.sum - sum);System.out.println();System.out.println("********返回请选择5****************");int flag1=sc.nextInt();if(flag1==5){System.out.println("********欢迎使用中国民生银行自动取款服务********");System.out.println("** 1.查询 2.取款 **");System.out.println("** 3.转账 4.退卡 **");System.out.println("请选择您需要的服务:");select=sc.nextInt();}if(flag1!=5){while(flag1!=5) {System.out.println("抱歉!你的输入有误,返回失败!请重新输入");System.out.println();System.out.println("********返回请选择5****************");flag1 = sc.nextInt();if(flag1==5){System.out.println("********欢迎使用中国民生银行自动取款服务********");System.out.println("** 1.查询 2.取款 **");System.out.println("** 3.转账 4.退卡 **");System.out.println("请选择您需要的服务:");select=sc.nextInt();break;}}}}if (select == 4) {System.out.println("********欢迎使用中国民生银行自动取款服务********");System.out.println("******** 退卡成功!! ********");return;}if(select != 1 && select != 2 && select != 3){ //判断进来选择服务的时候,只能是选择已有的1或者2或者3服务,或者直接退卡,不然就要重新输入选择System.out.println("你选择的服务有误!请重新输入:");select=sc.nextInt();}}}}
}
补充:这里面的一些导包:是因为"User"用户类与测试类"Test01" 它们不在同一个包,要用到就要导入它这个类所在的包,当然要在声明本包的下面进行导包。且注意,银行卡账号和密码都是系统提前办理好的,也就是已经在"User"类初始化 (相当于我们测试时是要输入用户注册的账号和密码才行),所以这个项目还能进行改进就是:注册银行卡账号,并存入初始本金,然后再测试服务。
三、代码测试结果:
(1)测试当账号输入与密码输入分别错误的情景:
(2)测试当输入的账号和密码都正确时,进入选择不同的自助服务:
下面是:接着上面没有结束的进程进行测试: