java基礎:模擬ATM取款機


package com.atm;

import java.util.Scanner;

/**
 * ATM類實現
 * 
 * @author 向往的生活
 */
public class ATM {

    public static void main(String[] args) {
        String[] user = new String[2];
        String[] password = new String[2];
        double[] amount = new double[2];

        loginSelect(user, password, amount);

    }

    /**
     * 登錄業務的菜單選擇
     * 
     * @param user
     * @param password
     */
    public static void loginSelect(String[] user, String[] password,
            double[] amount) {
        System.out.println("#####歡迎#####");

        int n = 1;
        while (true) {
            System.out.println("A.開戶");
            System.out.println("B.登錄");
            System.out.println("C.退出");
            System.out.println("D.修改密碼");

            Scanner scanner = new Scanner(System.in);
            System.out.println("選擇菜單:");
            String number = scanner.nextLine();
            number = number.toUpperCase();

            char[] chr = number.toCharArray();
            switch (chr[0]) {
            case 'A':
                openAnAccount(user, password);
                loginSelect(user, password, amount);
                break;
            case 'B':
                int index = login(user, password);// 記錄登錄人的下標
                if (index != -1) {
                    select(user, password, amount, index);
                } else {
                    n++;// 登錄3次失敗,則退出
                    if (n == 3) {
                        break;
                    }
                }
                break;
            case 'C':
                System.out.println("退出ATM");
                System.exit(-1);
                break;
            case 'D':
                updatePassword(user, password);
                System.out.println("修改密碼");
                break;
            default:
                System.out.println("錄入的操作錯誤!");
                break;
            }
        }
    }

    /**
     * 核心業務菜單選擇
     * 
     * @param user
     * @param password
     */
    public static void select(String[] user, String[] password,
            double[] amount, int index) {

        while (true) {
            System.out.println("###########您好:" + user[index] + "#########");
            System.out.println("A.存款");
            System.out.println("B.取款");
            System.out.println("C.轉賬");
            System.out.println("D.查詢賬戶余額");
            System.out.println("E.返回主菜單");

            Scanner scanner = new Scanner(System.in);
            System.out.println("選擇菜單:");
            String input = scanner.nextLine();
            input = input.toUpperCase();
            
            char chr = input.toCharArray()[0];

            switch (chr) {
            case 'A':
                saveMoney(user, amount, index);
                break;
            case 'B':
                getMoney(user, amount, index);
                break;
            case 'C':
                transferAccounts(user, amount, index);
                break;
            case 'D':
                query(user, amount, index);
                break;
            case 'E':
                loginSelect(user, password, amount);
                break;
            default:
                System.out.println("操作錯誤請重新輸入!");
                break;
            }
        }
    }

    /**
     * 登錄
     * 
     * @return
     */
    public static int login(String[] user, String[] password) {

        Scanner input = new Scanner(System.in);
        System.out.println("請輸入用戶名:");
        String userName = input.nextLine();

        System.out.println("請輸入密碼:");
        String pwd = input.nextLine();

        // 通過userName數據,找到user下標,
        int index = -1;
        for (int i = 0; i < user.length; i++) {
            if (user[i] == null) {
                System.out.println("請去開戶,您沒有注冊卡號!");
                loginSelect(user, password, null);
                return -1;
            } else {
                if (user[i].equals(userName)) {
                    index = i;
                    break;
                }
            }
        }
        // 然后通過user下標找到password中相應的密碼。
        if (password[index].equals(pwd)) {
            return index;
        } else {
            System.out.println("用戶名或者密碼輸入錯誤,請從新輸入!");
        }
        return -1;// 因為密碼不匹配因此返回-1
    }

    /**
     * 開戶
     * 
     * @return
     */
    public static void openAnAccount(String[] user, String[] password) {
        int index = -1;
        // 搜索下標
        for (int i = 0; i < user.length; i++) {
            if (user[i] == null) {
                index = i;
                break;
            }
        }
        if (index == -1) {// 如果存儲空間滿了,則提示聯系管理員處理
            System.out.println("系統存儲已經滿了,請聯系管理員處理!");
            return;
        }

        // 新增用於與密碼
        Scanner scanner = new Scanner(System.in);
        System.out.println("輸入登錄名:");
        String loginName = scanner.nextLine();

        user[index] = loginName;
        System.out.println("輸入密碼:");
        String pwdValue = scanner.nextLine();

        password[index] = pwdValue;
    }

    /***************************************************************************
     * 查詢賬戶余額
     * 
     * @return
     */
    public static void query(String[] user, double[] amount, int index) {
        System.out.println(user[index] + "您的余額為:" + amount[index]);
    }

    /**
     * 取款
     * 
     * @return
     */
    public static void getMoney(String[] user, double[] amount, int index) {
        
        System.out.println("A 100    B 200 ");
        System.out.println("C 300    D 500 ");
        System.out.println("E 1000   F 2000 ");
        System.out.println("G 其他金額       ");
        
        Scanner scanner = new Scanner(System.in);
        System.out.println("選擇取款金額:");
        String money = scanner.nextLine();
        money = money.toUpperCase();
        
        
        double number = 0.0;
        char chr = money.toCharArray()[0];
        switch (chr) {
        case 'A':
            number = 100;
            break;
        case 'B':
            number = 200;
            break;
        case 'C':
            number = 300;
            break;
        case 'D':
            number = 500;
            break;
        case 'E':
            number = 1000;
            break;
        case 'F':
            number = 2000;
            break;
        case 'G':
            Scanner input = new Scanner(System.in);
            System.out.println("輸入取款金額:");
            number = input.nextDouble();
            break;
        default:
            System.out.println("您輸入的金額錯誤!");
            break;
        }

        // 檢查存款的金額校驗
        if (!checkMoney(number)) {
            return;
        }

        if(amount[index] < number) {
            System.out.println("您賬戶余額不足,不能取款!");
            return;
        }
        amount[index] = amount[index] - number;
        System.out.println("取款成功,余額為:" + amount[index]);// 顯示余額
        return;
    }

    /**
     * 檢查存款的金額校驗
     * 
     * @param number
     * @return
     */
    public static boolean checkMoney(double number) {
        if (number < 100) {
            System.out.println("取款失敗:只能取出大於等100的金額!");
            return false;
        }

        // 只能存入100的整數
        if (number % 100 != 0) {
            System.out.println("取款失敗:只能取出100的整數!");
            return false;
        }
        return true;
    }

    /**
     * 存款
     */
    public static void saveMoney(String[] user, double[] amount, int index) {

        Scanner scanner = new Scanner(System.in);
        System.out.println("輸入存款金額:");
        double number = scanner.nextDouble();

        // 檢查存款的金額校驗
        if (!checkMoney(number)) {
            return;
        }
        amount[index] = amount[index] + number;
        System.out.println("存款成功,余額為:" + amount[index]);// 顯示余額
        return;
    }

    /**
     * 轉賬
     * 
     * @return
     */
    public static void transferAccounts(String[] user, double[] amount,
            int index) {
        int tragetIndex = -1;
        for (int i = 0; i < 3; i++) {
            tragetIndex = ifHaveUser(user);
            if (tragetIndex != -1) {
                break;
            } else {// 沒找到相應的用戶
                System.out.println("" + (i + 1) + "次,您輸入的用戶不存在!");
            }
        }

        if (tragetIndex == -1) {
            System.out.println("超過3次返回上級菜單!");
            return;
        }

        if (tragetIndex == index) {// 如果下標相等提示您不能給自己轉賬
            System.out.println("您不能給自己轉賬");
        } else {
            for (int i = 0; i < amount.length; i++) {
                Scanner scanner = new Scanner(System.in);
                System.out.println("輸入您的轉賬金額:");
                double tranAmount = scanner.nextDouble();

                // 檢查存款的金額校驗
                if (!checkMoney(tranAmount)) {
                    return;
                }
                if (tranAmount > amount[index]) {// 如果轉賬金額大於,賬戶余額提示
                    System.out.println("您余額不足!");
                    break;
                } else {
                    amount[index] = amount[index] - tranAmount;
                    amount[tragetIndex] = tranAmount;
                    break;
                }
            }
        }
        System.out.println("您的余額為:" + amount[index]);
    }

    /***************************************************************************
     * 
     * @return
     */
    public static int ifHaveUser(String[] user) {
        Scanner scanner = new Scanner(System.in);
        System.out.println("輸入轉賬用戶:");
        String userName = scanner.nextLine();
        int index = -1;
        for (int i = 0; i < user.length; i++) {
            if (userName.equals(user[i])) {
                index = i;
            }
        }
        return index;
    }

    /***************************************************************************
     * 修改密碼
     * 
     * @return
     */
    public static void updatePassword(String[] user, String[] password) {

        Scanner input = new Scanner(System.in);
        System.out.println("請輸入用戶名:");
        String userName = input.nextLine();
        while (true) {
            int index = -1;
            String oldPwd = null;
            for (int i = 0; i < user.length; i++) {//首先要找到當前用戶
                if (userName.equals(user[i])) {
                    index = i;
                    oldPwd = password[i];
                }
            }
            if(index == -1) {
                System.out.println("還沒有開戶,請開戶后再來修改密碼!");
                return ;
            }
            System.out.println("請輸入舊密碼:");
            String inputOldPwd = input.nextLine();

            System.out.println("請輸入新密碼:");
            String newpwd = input.nextLine();
            
            System.out.println("請輸入確認密碼:");
            String confimpwd = input.nextLine();
            
            if(!inputOldPwd.equals(oldPwd)) {//如果輸入的舊密碼不等於新密碼,則重新輸入
                System.out.println("您輸入的舊密碼不正確!");
                continue;
            }
            if(!newpwd.equals(confimpwd)) {//新密碼與確認密碼不匹配
                System.out.println("新密碼與確認密碼不匹配!");
                continue;
            }
            password[index] = newpwd;
            System.out.println("密碼修改成功!");
            break;
        }
    
    }
}

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM