首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
您现在的位置: 程式碼之家 >> 編程語言 >  >> Java 程式設計 >> Java 相關知識

Java 實作銀行 ATM 自助終端模擬系統完整教學

     編輯:Java 相關知識

專案概述

本專案使用 Java 語言模擬銀行自助終端機 (ATM) 的核心功能,包含開戶、查詢餘額、存款、提款等基本銀行業務操作。透過物件導向設計,展示如何建立一個具備完整業務邏輯的控制台應用程式。

系統功能需求

主選單介面

程式啟動後顯示主選單,提供五項功能選項:

  • 0. 開戶
  • 1. 查詢
  • 2. 存款
  • 3. 提款
  • 4. 結束

系統會驗證使用者輸入,若輸入非 0-4 範圍的數字,會提示「選單不存在」並要求重新輸入。

開戶功能 (選項 0)

  1. 輸入姓名
  2. 輸入 18 位身分證字號 (格式驗證,不符合需重新輸入)
  3. 設定 6 位數字密碼 (格式驗證,不符合需重新輸入)
  4. 系統自動產生 6 位隨機卡號
  5. 顯示「開戶成功」並回到主選單

查詢功能 (選項 1)

  1. 輸入查詢卡號 (不存在則提示重新輸入)
  2. 輸入 6 位密碼 (最多嘗試 3 次,超過則鎖定)
  3. 驗證通過後顯示帳戶資訊:姓名、身分證號、卡號、餘額
  4. 自動返回主選單

存款功能 (選項 2)

  1. 輸入存款卡號與密碼驗證 (邏輯同查詢)
  2. 顯示目前帳戶資訊
  3. 輸入存款金額 (需大於 0,否則提示錯誤並退出)
  4. 更新餘額並顯示「存款成功」

提款功能 (選項 3)

  1. 輸入提款卡號與密碼驗證
  2. 顯示目前帳戶資訊
  3. 輸入提款金額 (需大於 0 且不超過餘額,否則提示錯誤)
  4. 扣除金額並顯示「提款成功」

資料持久化

系統採用檔案儲存資料 (可參考物件序列化/反序列化或 JSON 格式),重新啟動程式時會從檔案讀取資料初始化到記憶體。

系統架構設計

套件一:com.bank.unionpay (銀聯核心層)

  • Yinhangka 介面:定義銀行卡通用操作 (查詢餘額、存款、提款)
  • Yinhang 列舉:四大銀行類型 (ABC 農行、ICBC 工行、CCB 建行、BOC 中行)
  • ATM 抽象類別:封裝查詢、存款、提款邏輯,定義抽象開戶方法
  • Zujiemian 類別:主選單顯示與使用者互動介面

套件二:com.bank.abc (農行實作層)

  • Yinhanglei 單例類別:管理銀行卡清單 (List) 與對應表
  • Cuxuka 儲蓄卡類別:實作 Yinhangka 介面,含屬性 (姓名、身分證、卡號、密碼、餘額) 及業務方法
  • ATM2 類別:繼承 ATM,實作開戶邏輯 (隨機產生 6 位卡號、驗證輸入格式)
  • Xinyongka 信用卡類別:繼承儲蓄卡,新增透支額度屬性,覆寫提款邏 (可透支至餘額+額度)

套件三:com.bank.test (測試執行層)

  • Test1 主程式:啟動主選單迴圈,根據使用者輸入呼叫對應功能,處理異常輸入

核心程式碼片段

銀行卡介面與列舉定義

package com.bank.unionpay;

public interface Yinhangka {
    public void cun();    // 存款
    public void qu();     // 提款
    public void getyu();  // 查詢餘額
}

public enum Yinhang {
    ABC("農行"), ICBC("工商"), CCB("建行"), BOC("中行");
    private final String yinhang;
    private Yinhang(String yinhang) { this.yinhang = yinhang; }
    public String getname() { return this.yinhang; }
}

ATM 抽象類別核心邏輯

public abstract class ATM {
    private Yinhanglei yhl;
    private double yue;

    public void yue() { System.out.println("卡上餘額為:" + this.yue); }
    
    public void cun(double cun) {
        if (cun < 0) System.out.println("輸入有誤");
        else { this.yue += cun; System.out.println("卡上餘額為:" + this.yue); }
    }
    
    public void qu(double qu) {
        if (qu > this.yue) System.out.println("餘額不足");
        else { this.yue -= qu; System.out.println("卡上餘額為:" + this.yue); }
    }
    
    public abstract void kaihu(); // 抽象開戶方法
}

農行 ATM 開戶實作

public class ATM2 extends ATM {
    private Yinhang yhl = Yinhang.ABC;
    
    @Override
    public void kaihu() {
        Cuxuka cxk = new Cuxuka();
        Scanner sc = new Scanner(System.in);
        
        // 輸入姓名
        System.out.println("請輸入您的姓名:");
        cxk.setName(sc.nextLine());
        
        // 驗證身分證格式 (18位)
        while (true) {
            System.out.println("請輸入您的身分證號:");
            String id = sc.nextLine();
            if (id.matches("\\d{15}|\\d{17}[\\dxX]")) {
                cxk.setShenfen(id); break;
            }
            System.out.println("輸入的身分證號不是18位身份號");
        }
        
        // 驗證密碼格式 (6位數字)
        while (true) {
            System.out.println("請輸入您的密碼:");
            String pwd = sc.nextLine();
            if (pwd.matches("\\d{6}")) {
                cxk.setPassword(pwd); break;
            }
            System.out.println("請輸入正確的6位數密碼");
        }
        
        // 產生6位隨機卡號
        Random rand = new Random();
        StringBuilder sb = new StringBuilder();
        for (int i = 0; i < 6; i++) sb.append(rand.nextInt(9));
        cxk.setCard(sb.toString());
        
        // 存入銀行管理容器
        Yinhanglei.getYinhangLei().list.add(cxk.getCard());
        Yinhanglei.getYinhangLei().map.put(cxk.getCard(), cxk);
        
        System.out.println("您的新卡號為:" + cxk.getCard());
        System.out.println("開戶成功,感謝使用");
    }
}

擴充功能建議

  • 實作工商銀行 (ICBC) 單例類別,支援跨行查詢與存提款
  • 加入交易紀錄查詢功能
  • 實作管理員後台功能 (帳戶凍結、解凍、利率設定)
  • 導入資料庫替代檔案儲存,提升效能與安全性
  • 建立圖形化介面 (Swing/JavaFX) 取代控制台介面

總結

本專案完整展示了 Java 物件導向設計在銀行系統模擬中的應用,涵蓋介面定義、抽象類別、繼承與多型、單例模式、列舉類型、例外處理、集合框架運用等核心概念。透過模組化套件設計,達成高內聚低耦合,便於後續擴充其他銀行業務邏輯。

  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved