首頁 > 軟體

基於Java開發實現ATM系統

2022-08-12 14:04:59

本文範例為大家分享了Java開發實現ATM系統的具體程式碼,供大家參考,具體內容如下

一.業務分析

通過使用Java物件導向的基礎知識,開發一個ATM系統,實現存款,取款,轉賬,修改密碼,登出賬戶等功能。

二.開發準備

首先,建立一個使用者類,為建立使用者物件做準備,使用者類主要包括使用者卡號(系統隨機生成),使用者名稱,賬戶密碼,餘額,取現額度。並搭建構造器,以及get,set。

public class user {
    private String cardId ;     //卡號
    private String username;    //使用者名稱
    private String password;    //密碼
    private double money;       //餘額
    private double qumoney;     //取現額度
 
 
    public user(String cardId, String username, String password,  double qumoney) {
        this.cardId = cardId;
        this.username = username;
        this.password = password;
        this.qumoney = qumoney;
    }
 
    public user() {
    }
 
    public String getCardId() {
        return cardId;
    }
 
    public void setCardId(String cardId) {
        this.cardId = cardId;
    }
 
    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 double getMoney() {
        return money;
    }
 
    public void setMoney(double money) {
        this.money = money;
    }
 
    public double getQumoney() {
        return qumoney;
    }
 
    public void setQumoney(double qumoney) {
        this.qumoney = qumoney;
    }
}

三.建立測試類,寫入main方法

public class ATMSystem {
    public static void main(String[] args) {
        ArrayList<user> users = new ArrayList<>();
        Main(users);
    }

四.將主介面設定成Main方法,設計主介面,包括登入賬戶,註冊賬戶,並且設定登入方法,註冊方法,再呼叫。

public static void Main(ArrayList<user> users) {
        System.out.println("==========歡迎進入xx銀行ATM系統==========");
        while (true) {
            System.out.println("請選擇操作:");
            System.out.println("1.登入賬戶");
            System.out.println("2.註冊賬戶");
            Scanner sc = new Scanner(System.in);
            int command = sc.nextInt();
            switch (command) {
                case 1:                 //登入
                    denglu(users, sc);
                    break;
                case 2:                 //註冊
                    zhuce(users, sc);
                    break;
                default:
                    System.out.println("功能不存在!");
            }
        }
    }

執行結果:

五.將註冊賬戶寫成方法 

public static void zhuce(ArrayList<user> users, Scanner sc) {
        System.out.println("==========註冊賬戶==========");
        String password = "";
        String password2 = "";
        System.out.println("請輸入您的賬號名稱:");
        sc = new Scanner(System.in);
        String name = sc.next();
        while (true) {
            System.out.println("請輸入您的賬號密碼:");
            password = sc.next();
            System.out.println("請您再次輸入密碼:");
            password2 = sc.next();
            if (password2.equals(password)) {
                break;
            } else {
                System.out.println("兩次密碼輸入不一致!,請重新輸入");
            }
        }
        //生成卡號
        System.out.println("請輸入賬號當次限額");
        double qumoney = sc.nextDouble();
        String cardId = kahao(users);
        user u1 = new user(cardId, name, password, qumoney);
        users.add(u1);
        System.out.println("恭喜開戶成功!,您的卡號是" + u1.getCardId() + ",請您保管");
 
    }

其中,涉及到生成卡號,以及查詢系統生成的卡號是否相同,需要再寫兩個方法:

//生成卡號
    public static String kahao(ArrayList<user> users) {
        while (true) {
            Random rs = new Random();
            String cardId = "";
            for (int i = 0; i < 8; i++) {
                cardId += rs.nextInt(10);
            }
            user a = getcardId(cardId, users);
            if (a == null) {
                //無重複
                return cardId;
            }
        }
    }
//查詢卡號
    public static user getcardId(String kahao, ArrayList<user> users) {
        for (int i = 0; i < users.size(); i++) {
            user a = users.get(i);
            if (a.getCardId().equals(kahao)) {
                return a;
            }
        }
        return null;
    }

六.將登入賬戶寫成方法,並設計主介面

public static void denglu(ArrayList<user> users, Scanner sc) {
        System.out.println("==========登入賬戶==========");
        if (users.size() == 0) {
            System.out.println("系統中無賬戶!請先註冊");
            return;
        }
        while (true) {
            System.out.println("請輸入您的卡號:");
            String cardId = sc.next();
            String password = "";
            user acc = getcardId(cardId, users);
            if (acc != null) {
                while (true) {
                    System.out.println("請輸入您的密碼:");
                    password = sc.next();
                    //判斷密碼是否正確
                    if (acc.getPassword().equals(password)) {
                        System.out.println("登入成功!,歡迎卡號" + acc.getCardId() + "的貴賓" + acc.getUsername() + "進入系統");
                        //展示系統登入後的操作介面
                        jiemian(sc, acc, users);
                        return;
                    } else {
                        System.out.println("密碼錯誤!請重新輸入");
                    }
                }
            } else {
                System.out.println("不存在該卡號!");
            }
        }
    }

六.1編寫 展示主介面方法

public static void jiemian(Scanner sc, user acc, ArrayList<user> users) {
        while (true) {
            System.out.println("==========歡迎進入xx銀行使用者操作介面===========");
            System.out.println("請您輸入操作命令:");
            System.out.println("1.查詢:");
            System.out.println("2.存款:");
            System.out.println("3.取款:");
            System.out.println("4.轉賬:");
            System.out.println("5.修改密碼:");
            System.out.println("6.退出:");
            System.out.println("7.登出當前賬戶");
            sc = new Scanner(System.in);
            int commend = sc.nextInt();
            switch (commend) {
                case 1:
                    atm1(acc);
                    break;
                case 2:
                    atm2(acc, sc);
                    break;
                case 3:
                    atm3(acc, sc);
                    break;
                case 4:
                    atm4(users, acc, sc);
                    break;
                case 5:
                    atm5(acc, sc);
                    return;
                case 6:
                    System.out.println("歡迎下次來到ATM系統");
                    return;
                case 7:
                    System.out.println("是否確認登出賬戶?按1確認,按2取消登出");
                    int tf = sc.nextInt();
                    if (tf == 1) {
                        users.remove(acc);
                        System.out.println("登出成功!");
                        return;
                    } else {
                        System.out.println("取消登出");
                        break;
                    }
                default:
                    System.out.println("不存在該功能!");
            }
        }
 
    }

七.接下來,依次編寫各個功能的方法

//查詢功能
    private static void atm1(user acc) {
        System.out.println("========當前賬戶詳情=========");
        System.out.println("卡號:" + acc.getCardId());
        System.out.println("姓名:" + acc.getUsername());
        System.out.println("餘額:" + acc.getMoney());
        System.out.println("當次取款限額:" + acc.getQumoney());
    }
 
    //存款功能
    private static void atm2(user acc, Scanner sc) {
        System.out.println("=========存款操作=========");
        System.out.println("請您輸入存款金額:");
        double money = sc.nextDouble();
        acc.setMoney(acc.getMoney() + money);
        System.out.println("存款成功!");
        atm1(acc);
 
    }
 
    //取款
    private static void atm3(user acc, Scanner sc) {
        System.out.println("=========取款操作=========");
        if (acc.getMoney() < 100) {
            System.out.println("您的賬戶餘額不足100元!無法取款");
            return;
        } else {
            while (true) {
                System.out.println("請您輸入取款金額:");
                double money = sc.nextDouble();
                if (money > acc.getMoney()) {
                    System.out.println("賬戶餘額不足!");
                    System.out.println("繼續取款按1,退出取款按2");
                    int commend = sc.nextInt();
                    switch (commend) {
                        case 1:
                            break;
                        case 2:
                            return;
                    }
                } else if (money > acc.getQumoney()) {
                    System.out.println("超過了當次取款限額!,每次最多可以取" + acc.getQumoney() + "元");
                } else {
                    System.out.println("取款成功!");
                    acc.setMoney(acc.getMoney() - money);
                    atm1(acc);
                    return;
                }
            }
        }
    }
 
    //轉賬
    private static void atm4(ArrayList<user> users, user acc, Scanner sc) {
        System.out.println("=========轉賬操作=========");
        //判斷系統中是否有兩個以上賬戶
        if (users.size() < 2) {
            System.out.println("系統中無其他賬戶,不可以轉賬!");
            return;
        } else {
            if (acc.getMoney() == 0) {
                System.out.println("您的賬戶餘額為0,無法轉賬");
                return;
            } else {
                while (true) {
                    System.out.println("請輸入對方的卡號:");
                    String dui = sc.next();
                    user c = getcardId(dui, users);
                    if (c != null) {
                        //判斷賬戶物件是否為自己
                        if (c.getCardId().equals(acc.getCardId())) {
                            System.out.println("不能給自己轉賬!");
                        } else {
                            //確認對方姓氏
                            String name = "*" + c.getUsername().substring(1);
                            System.out.println("請您確認[" + name + "]的姓氏");
                            String xingshi = sc.next();
                            if (c.getUsername().startsWith(xingshi)) {
                                System.out.println("輸入正確!");
                                while (true) {
                                    System.out.println("請您輸入轉賬金額:");
                                    double money = sc.nextDouble();
                                    if (money > acc.getMoney()) {
                                        System.out.println("餘額不足!");
                                        System.out.println("繼續轉賬按1,退出轉賬按2");
                                        int commend = sc.nextInt();
                                        switch (commend) {
                                            case 1:
                                                break;
                                            case 2:
                                                return;
                                        }
                                    } else {
                                        acc.setMoney(acc.getMoney() - money);
                                        c.setMoney(c.getMoney() + money);
                                        System.out.println("為" + c.getUsername() + "使用者" + "轉賬成功");
                                        atm1(acc);
                                        return;
                                    }
                                }
                            } else {
                                System.out.println("對不起,您輸入的資訊有誤!");
                            }
                        }
 
                    } else {
                        System.out.println("對不起,您輸入卡號有誤!");
                    }
                }
            }
        }
    }
 
    //修改密碼操作
    private static void atm5(user acc, Scanner sc) {
        System.out.println("=========修改密碼操作=========");
        while (true) {
            System.out.println("請輸入您的舊密碼:");
            String oldpassword = sc.next();
            String newpassword = "";
            if (oldpassword.equals(acc.getPassword())) {
                while (true) {
                    System.out.println("請輸入新密碼:");
                    newpassword = sc.next();
                    if (newpassword.equals(oldpassword)) {
                        System.out.println("新密碼不能與舊密碼重複!");
                    } else {
                        System.out.println("請再次輸入密碼:");
                        String okpassword = sc.next();
                        if (newpassword.equals(okpassword)) {
                            System.out.println("修改密碼成功!");
                            acc.setPassword(newpassword);
                            return;
                        } else {
                            System.out.println("兩次密碼輸入不一致!");
                        }
                    }
                }
            }
                else{
                        System.out.println("舊密碼輸入錯誤!");
                    }
        }
    }

至此,所有功能完成。

以上就是本文的全部內容,希望對大家的學習有所幫助,也希望大家多多支援it145.com。


IT145.com E-mail:sddin#qq.com