一、前言:
关于上次我写的博客文章中"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)测试当输入的账号和密码都正确时,进入选择不同的自助服务:
下面是:接着上面没有结束的进程进行测试: