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

Java 簡易圖書管理系統:檔案儲存版完整實作

     編輯:Java 相關知識

專案定位

純 Java 控制台應用,以文字檔 res/Book.txt 作為資料存儲,實作「顯示全部、新增、查詢」三大核心功能。無資料庫依賴,適合初學者理解檔案 IO、集合、分層架構基本概念。

系統架構三層

  • Menu(視圖層): 顯示選單、接收使用者輸入、驗證選項合法性。
  • Book(業務/資料存取層): 封裝檔案讀寫、資料解析、查詢邏輯。
  • ManageBook(主程式/控制層): 協調選單與業務邏輯的無限迴圈。

核心程式碼解析

1. 資料格式約定

Book.txt 每行一筆,欄位以 # 分隔:

編號#書名#作者
B001#Java入門#張三
B002#Spring實戰#李四

2. Menu 類別

public class Menu {
    private final int MIN = 1, MAX = 3;
    public void showMain() { System.out.println("1、顯示/2、新增/3、查詢"); }
    public void showFind() { System.out.println("1、編號/2、書名/3、作者"); }
    public int getChoice() {
        Scanner sc = new Scanner(System.in);
        System.out.print("輸入選項:");
        int n = sc.nextInt();
        return (n >= MIN && n <= MAX) ? n : -1;
    }
}

3. Book 類別核心方法

public class Book {
    private static final String FILE = "res/Book.txt";

    // 顯示全部
    public void listAll() {
        try (Scanner in = new Scanner(new File(FILE))) {
            while (in.hasNextLine()) parseAndPrint(in.nextLine());
        } catch (FileNotFoundException e) { e.printStackTrace(); }
    }

    // 新增書籍(含編號唯一性檢查)
    public void add() {
        String record = buildRecord(); // 互動式輸入編號/書名/作者,檢查編號不重複
        if (record.equals("@@!!")) return; // 重複則放棄
        try (FileOutputStream fos = new FileOutputStream(FILE, true)) {
            fos.write(record.getBytes());
            System.out.println("新增成功");
        } catch (IOException e) { e.printStackTrace(); }
    }

    // 多條件查詢
    public void find() {
        Menu m = new Menu(); m.showFind();
        int type = m.getChoice();
        Scanner sc = new Scanner(System.in);
        String keyword = "";
        switch (type) {
            case 1: System.out.print("輸入編號:"); keyword = sc.next(); search(0, keyword); break;
            case 2: System.out.print("輸入書名:"); keyword = sc.next(); search(1, keyword); break;
            case 3: System.out.print("輸入作者:"); keyword = sc.next(); search(2, keyword); break;
        }
    }

    private void search(int fieldIndex, String keyword) {
        try (Scanner in = new Scanner(new File(FILE))) {
            while (in.hasNextLine()) {
                String[] fields = in.nextLine().trim().split("#");
                if (fields[fieldIndex].equals(keyword)) print(fields);
            }
        } catch (FileNotFoundException e) { e.printStackTrace(); }
    }

    private String buildRecord() {
        Scanner sc = new Scanner(System.in);
        System.out.print("輸入編號:"); String id = sc.next();
        if (exists(0, id)) { System.out.println("編號已存在"); return "@@!!"; }
        System.out.print("輸入書名:"); String name = sc.next();
        System.out.print("輸入作者:"); String author = sc.next();
        return id + "#" + name + "#" + author + "#\n";
    }

    private boolean exists(int idx, String val) {
        try (Scanner in = new Scanner(new File(FILE))) {
            while (in.hasNextLine()) if (in.nextLine().split("#")[idx].equals(val)) return true;
        } catch (FileNotFoundException e) { e.printStackTrace(); }
        return false;
    }

    private void parseAndPrint(String line) {
        for (String s : line.trim().split("#")) System.out.println(s);
        System.out.println("*********************");
    }
}

4. 主程式 ManageBook

public class ManageBook {
    public static void main(String[] args) {
        Menu menu = new Menu();
        Book book = new Book();
        while (true) {
            menu.showMain();
            switch (menu.getChoice()) {
                case 1: book.listAll(); break;
                case 2: book.add(); break;
                case 3: book.find(); break;
                default: System.out.println("輸入錯誤");
            }
        }
    }
}

設計亮點與不足

總結

這個「粗糙」的系統其實包含了 Java 基礎開發的精髓:檔案持久化、集合操作、輸入驗證、分層解耦、資源管理。適合作為進階學習 JDBC、JPA、Spring Data 等持久化框架前的墊腳石。建議嘗試加上「修改、刪除、模糊查詢、分頁」等功能進行擴充練習。

  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved
亮點不足/可改進
分層清晰,職責單一檔案鎖/併發無處理
檔案 IO 操作規範無修改/刪除功能
編號唯一性檢查查詢僅支援精確匹配
資源 try-with-auto-close無異常統一處理機制