Java中國銀行系統ATM機自助實現登入、開戶、存款、取款、轉賬、查詢餘額、修改預留手機號、登出賬號等功能(Ziph)

Ziph發表於2020-02-15

@Java

最全功能的銀行ATM機自助(嚴謹)

大家好,我是Ziph!

此小專案的體會真是,為了實現功能是不擇手段啊,為了實現和完善功能,碼了一遍又一遍(找Bug),測試了N多次功能,測試好了發個博。OK,點個讚唄!哈哈,廢話少說向下看吧!

題目:

中國銀行系統ATM機自助實現登入、開戶、存款、取款、轉賬、查詢餘額、修改預留手機號、登出賬號等功能

此小專案主要是運用了增刪改查知識、迴圈結構知識、陣列的擴容、陣列的元素移動、函式中的代參和函式與函式之間的互相呼叫等知識

因為是個簡單的小專案沒有具體劃分多個包,請見諒!

大體分為三部分:User類(使用者類)、TestBank(測試類)和Bank(邏輯運算核心)主體類

每個部分都標有註釋,需要哪一部分直接找,不廢話直接貼程式碼:

User類(使用者類)

//類的組成:私有屬性、公共訪問方法、無參構造方法
//實體類:Entity,作用:儲存資料

public class User {
    private int cardNo;                 //卡號
    private String identity;            //身份證號碼
    private String userName;            //姓名
    private String passWord;            //密碼
    private String phone;               //預留手機號
    private double balance;             //餘額

    public User() {
    }

    public User(int cardNo, String identity, String userName, String passWord, String phone, double balance) {
        this.cardNo = cardNo;
        this.identity = identity;
        this.userName = userName;
        this.passWord = passWord;
        this.phone = phone;
        this.balance = balance;
    }

    public int getCardNo() {
        return cardNo;
    }

    public void setCardNo(int cardNo) {
        this.cardNo = cardNo;
    }

    public String getIdentity() {
        return identity;
    }

    public void setIdentity(String identity) {
        this.identity = identity;
    }

    public String getUserName() {
        return userName;
    }

    public void setUserName(String userName) {
        this.userName = userName;
    }

    public String getPassWord() {
        return passWord;
    }

    public void setPassWord(String passWord) {
        this.passWord = passWord;
    }

    public String getPhone() {
        return phone;
    }

    public void setPhone(String phone) {
        this.phone = phone;
    }

    public double getBalance() {
        return balance;
    }

    public void setBalance(double balance) {
        this.balance = balance;
    }
}

Bank(邏輯運算核心)主體類

import java.util.Arrays;
import java.util.Scanner;

//中國銀行類
public class Bank {
    Scanner input = new Scanner(System.in);

    //儲存已註冊的使用者資料
    User[] users = new User[3];

    int cardNo = 4;//卡號
    int size = 3;//陣列中使用者下標

    //初始方法(如果存在一些程式起始時必須要執行的程式碼,則寫入初始化方法initial中)
    public Bank() {

        User user = new User();
        user.setCardNo(1);
        user.setIdentity("131000199811111234");
        user.setUserName("Ziph");
        user.setPassWord("12345678");
        user.setPhone("12345670000");
        user.setBalance(1000.00);
        users[0] = user;

        users[1] = new User();
        users[1].setCardNo(2);
        users[1].setIdentity("131000111111114567");
        users[1].setUserName("小王");
        users[1].setPassWord("12345678");
        users[1].setPhone("12345670001");
        users[1].setBalance(2000.00);

        users[2] = new User(3, "131000199811115678"
                , "小明", "12345678"
                , "12345670002", 3000.00);
    }

    //登入
    public void login() {
        System.out.print("請輸入卡號:");
        int no = input.nextInt();
        System.out.print("請輸入密碼(8~16位):");
        String pwd = input.next();
        User check = loginCheck(no, pwd);

        if (check != null) {
            this.showMenu(check);
        } else {
            System.out.println("使用者名稱或密碼錯誤!請重新輸入!");
            this.login();
        }
    }

    //開戶
    public void register() {
        System.out.print("請輸入姓名:");
        String userName = input.next();
        String identity;
        do {
            System.out.print("請輸入身份證號碼:");
            identity = input.next();
        } while (identity.length() != 18);
        String phone;
        do {
            System.out.print("請輸入預存手機號碼:");
            phone = input.next();
        } while (phone.length() != 11);
        String passWord;
        do {
            System.out.print("請輸入密碼:");
            passWord = input.next();
        } while (passWord.length() < 8 || passWord.length() > 16);//密碼8~16位
        double money;
        do {
            System.out.print("請輸入預存金額(大於等於10元):");
            money = input.nextInt();
        } while (money < 10);


        User user = new User();
        user.setCardNo(cardNo);
        user.setUserName(userName);
        user.setIdentity(identity);
        user.setPhone(phone);
        user.setPassWord(passWord);
        user.setBalance(money);
        System.out.println("開戶成功!您的卡號為:" + cardNo);
        cardNo++;
        //將該物件儲存到users陣列中
        //擴容判斷
        if (size > (users.length - 1)) {
            User[] newUsers = Arrays.copyOf(users, size + 1);
            users = newUsers;
            users[size] = user;
        }
        size++;
    }

    //登入驗證
    public User loginCheck(int no, String pwd) {
        for (int i = 0; i < size; i++) {
            //驗證卡號、密碼
            if (users[i] != null) {//非空判斷
                if ((no == users[i].getCardNo() && pwd.equals(users[i].getPassWord()))) {
                    return users[i];
                }
            }
        }
        return null;
    }

    //轉賬驗證
    public User transferCheck(int no) {
        for (int i = 0; i < users.length; i++) {
            //校驗卡號
            if (users[i] != null) {
                if (no == users[i].getCardNo()) {
                    return users[i];
                }
            }
        }
        return null;
    }

    //歡迎頁面選單
    public void welcomeMenu() {
        System.out.println("-------歡迎使用中國建設銀行ATM自助服務-------");
        System.out.println("---      1.登入    2.開戶    0.退出     ---");
        System.out.println("------------------------------------------");
        System.out.print("請輸入操作編碼:");
        int choice = input.nextInt();
        switch (choice) {
            case 1:
                this.login();
                break;
            case 2:
                this.register();
                this.welcomeMenu();
                break;
            case 0:
                exit();
            default:
                System.out.println("輸入有誤!請重新輸入!");
        }
    }

    //退出
    public void exit() {
        System.exit(0);
    }

    //顯示選單
    public void showMenu(User user) {
        int choice;
        do {
            System.out.println("-------------------------歡迎使用中國建設銀行ATM自助服務-------------------------");
            System.out.println("1.存款  2.取款  3.轉賬  4.查詢餘額  5.修改密碼  6.修改預留手機號  7.登出賬戶  0.退出");
            System.out.println("------------------------------------------------------------------------------");
            System.out.print("請輸入操作編碼:");
            choice = input.nextInt();
            switch (choice) {
                case 1:
                    this.deposit(user);
                    break;
                case 2:
                    this.withdraw(user);
                    break;
                case 3:
                    this.transfer(user);
                    break;
                case 4:
                    this.inquire(user);
                    break;
                case 5:
                    this.changePwd(user);
                    break;
                case 6:
                    this.changePhone(user);
                    break;
                case 7:
                    this.cancel(user);
                    this.welcomeMenu();
                    break;
                case 0:
                    System.out.println("謝謝使用!");
                    //結束該方法,執行該方法以下的語句
                    this.welcomeMenu();
                default:
                    System.out.println("輸入有誤!請重新輸入!");
            }
        } while (true);
    }

    //取款
    public void withdraw(User user) {
        System.out.print("請輸入取款金額:");
        double money = input.nextDouble();
        if (money <= user.getBalance()) {
            user.setBalance(user.getBalance() - money);
            System.out.println("取款成功!當前餘額為:" + user.getBalance() + "元!");
        } else {
            System.out.println("餘額不足!");
        }
    }

    //存款
    public void deposit(User user) {
        System.out.print("請輸入存款金額:");
        double money = input.nextDouble();
        user.setBalance(user.getBalance() + money);
        System.out.println("存款成功!");
    }

    //轉賬
    public void transfer(User user) {
        System.out.print("請輸入卡號:");
        int no = input.nextInt();
        User check = transferCheck(no);
        //對卡號校驗
        if (check != null) {
            System.out.print("請輸入轉賬金額:");
            Double money = input.nextDouble();
            if (user.getBalance() >= money) {
                user.setBalance(user.getBalance() - money);
                for (int i = 0; i < size; i++) {
                    if (users[i].getCardNo() == no) {
                        users[i].setBalance(users[i].getBalance() + money);
                    }
                }
                System.out.println("轉賬成功!");
            } else {
                System.out.println("餘額不足!");
            }
        } else {
            System.out.println("輸入的卡號有誤!");
        }
    }

    //查詢餘額
    public void inquire(User user) {
        System.out.println("賬戶餘額為:" + user.getBalance() + "元!");
    }

    //修改密碼
    public void changePwd(User user) {
        String newPwd1;
        do {
            System.out.print("請輸入8~16位新密碼:");
            newPwd1 = input.next();
        } while (newPwd1.length() < 8 || newPwd1.length() > 16);
        System.out.print("請再次輸入新密碼:");
        String newPwd2 = input.next();
        if (newPwd1.equals(newPwd2)) {
            user.setPassWord(newPwd2);
            System.out.println("修改成功!");
        } else {
            System.out.println("兩次密碼輸入不同!");
        }
    }

    //修改預留手機號
    public void changePhone(User user) {
        System.out.print("請輸入正確的原預留手機號:");
        String oldPhone = input.next();
        if (oldPhone.equals(user.getPhone())) {
            String newPhone;
            do {
                System.out.print("請輸入正確的新手機號:");
                newPhone = input.next();
            } while (newPhone.length() != 11);
            user.setPhone(newPhone);
            System.out.println("預留手機號修改成功!");
        } else {
            System.out.println("原預留手機號不正確!");
        }
    }

    //登出賬戶
    public void cancel(User user) {
        int index = size + 1;
        for (int i = 0; i < size; i++) {
//            size不需要非空判斷
//            if (users[i] != null) {
            if (users[i] == user) {
                index = i;
                break;
            }
//            }
        }
        //移動該元素之後的每個元素
        for (int i = index; i < size - 1; i++) {
            users[i] = users[i + 1];
        }
        size--;
        System.out.println("登出成功!");
    }
}

TestBank(測試類)

//銀行案例的測試類

public class TestBank {
    public static void main(String[] args) {
        Bank bank = new Bank();//建立了一家中國銀行網點
        bank.welcomeMenu();
    }
}

執行結果:

注意:第一張執行結果證明登入、取款、存款和查詢餘額沒有問題
在這裡插入圖片描述
第二張執行結果修改密碼、修改預留手機號正確
在這裡插入圖片描述
第三張執行結果證明轉賬功能OK(退出賬戶是0,我登出是為了第四張執行結果看是否還有1卡使用者)
在這裡插入圖片描述
第五張執行結果證實了登出賬戶有效(剛才修改了密碼登入過沒有問題,登出後沒有了賬戶登入失敗)在這裡插入圖片描述
第六張執行結果那就是開戶(輸入的數值不符合實際,主要是為了證實控制號碼的位數,請諒解!)
在這裡插入圖片描述

為了證實我自己的功能實現,只能貼了這麼多圖。看到最後的全是人才呀!哈哈。 不開玩笑了,謝謝大家!有錯誤請提出!!!請提出!

知識點持續更新…

有問題求留言回覆!

拜拜

相關文章