首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
您现在的位置: 程式碼之家 >> 編程語言 >  >> 更多程式語言 >> 程式設計綜合問答

Java Swing 實作圖形化自動販賣機:完整需求分析與程式架構設計

     編輯:程式設計綜合問答

需求規格書

項目規格
介面Swing GUI,顯示飲料名稱、價格、庫存、投幣區、找零區、管理員模式切換
商品可樂、芬達、紅茶、綠茶 (各自價格、庫存可配置)
貨幣僅接受 1 元、5 元硬幣/紙鈔
用戶模式選擇商品 → 投幣 → 出貨/找零 → 可選退幣
管理員模式密碼驗證 → 查看總營收/各商品剩餘庫存 → 補貨/加鈔
持久化檔案/資料庫儲存庫存與營收,重啟不丟失

核心類別設計

// 領域模型
enum Drink { COKE(5), FANTA(5), BLACK_TEA(4), GREEN_TEA(4); ... }
class Product { Drink type; int price; int stock; }
class CoinHopper { Map<Integer, Integer> count; // 面額->數量
    void insert(int denom); int change(int amount); void refill(int denom, int cnt); }
class VendingMachine {
    List<Product> products;
    CoinHopper hopper;
    int balance; // 當前投幣餘額
    boolean adminMode;
    // 核心操作
    boolean select(Drink d);
    void insertCoin(int denom);
    void refund();
    void adminLogin(String pwd);
    void restock(Drink d, int cnt);
    void addCash(int denom, int cnt);
}

GUI 架構 (MVC 簡化版)

  • Model: VendingMachine 單例,持有狀態與業務邏輯,提供 PropertyChangeSupport 通知 UI 更新。
  • View: JFrame 主視窗,包含 JPanel 商品網格 (GridLayout)、投幣面板、訊息顯示區、管理員登入對話框。
  • Controller: 各按鈕 ActionListener 呼叫 Model 方法,再 SwingUtilities.invokeLater 刷新 View。

關鍵邏輯流程圖

  1. 購買流程: 使用者點選商品 → 檢查庫存 > 0 → 進入「待投幣」狀態 → 使用者點 1/5 元按鈕 → 累加餘額 → 餘額 ≥ 價格 → 自動出貨 (庫存-1、營收+價格、找零邏輯) → 顯示「取貨」訊息 → 重置餘額。
  2. 找零演算法: 貪婪法由大面額到小面額找零,若零錢不足提示「請聯繫管理員」並退還投幣。
  3. 管理員流程: 點選「管理」按鈕 → JOptionPane.showInputDialog 輸入密碼 → 驗證成功 → 開啟 JDialog 顯示統計表格 (JTable) → 提供補貨/加鈔輸入欄 → 確認寫回 Model 與持久化。

持久化建議

  • 輕量級:JSON (Jackson/Gson) 或 Properties 檔案,儲存 Map<Drink, Integer> 库存與 CoinHopper 狀態。
  • 正規:SQLite (零配置) 或 H2 嵌入式資料庫,建立 products, coins, transactions 資料表。

原答案截圖補充說明

自動販賣機 GUI 示意圖
圖:包含商品按鈕、投幣按鈕、管理員登入、庫存修改介面

原答案提到「增加了修改商品數量功能」,符合管理員補貨需求。

進階擴充方向

  • 掃碼支付模擬 (生成 QR Code、輪詢訂單狀態)
  • 多語言國際化 (ResourceBundle)
  • 單元測試覆蓋核心邏輯 (JUnit 5 + Mockito)
  • JavaFX 重構現代化 UI (FXML + CSS)

這個專案是練習 狀態機設計、事件驅動 GUI、領域模型封裝、持久化策略 的絕佳載體,建議從最簡單的「單一商品、固定價格」開始遞增實作。

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