Java之面向对象《ATM自动取款机》

一、前言:

  关于上次我写的博客文章中"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)测试当账号输入与密码输入分别错误的情景:

Java之面向对象《ATM自动取款机》_第1张图片

(2)测试当输入的账号和密码都正确时,进入选择不同的自助服务:

Java之面向对象《ATM自动取款机》_第2张图片

下面是:接着上面没有结束的进程进行测试:

 Java之面向对象《ATM自动取款机》_第3张图片

你可能感兴趣的:(java,开发语言)