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

Java 單機版書店管理系統實戰(一):需求分析與架構設計

     編輯:Java 綜合教學

Java 單機版書店管理系統實戰(一):需求分析與架構設計

本系列將帶領大家從零構建一個基於 Java SE 的單機版書店管理系統,涵蓋從需求分析、數據庫設計、分層架構到核心代碼實現的完整過程,適合鞏固 Java 基礎、掌握項目分層與面向對象設計的開發者。

專案練習目標

  • 掌握 Java 應用程序基本分析流程
  • 培養面向對象編程思想
  • 綜合應用常見設計模式
  • 掌握分層架構與接口設計原則
  • 構建合理的包結構
  • 綜合運用 Java SE 核心知識(集合、Swing、IO 流等)
  • 實現基本表現層機制
  • 培養良好編程習慣與調試能力

功能需求

  1. 用戶管理:註冊、修改信息、刪除、查詢
  2. 圖書管理:增刪改查基本信息
  3. 進貨管理:填寫進貨單(多條明細),書需存在於圖書庫,同步更新庫存
  4. 銷售管理:填寫銷售單(多條明細),書需存在且庫存足夠,同步扣減庫存
  5. 庫存查詢:查看明細、條件查找
  6. 權限控制:固定角色權限,含超級管理員 admin 擁有全部權限

系統架構設計

模塊劃分

五大業務模塊:用戶、圖書、進貨、銷售、庫存

三層架構 + 包結構

  • 第一層(按模塊):user、book、in、out、store
  • 第二層(按職責):ui(表現層)、business(邏輯層)、dao(數據層)、vo(值對象層)
  • 第三層(按細分):business 和 dao 內部可再按「鐵三角」建子包;ui、vo 一般不再細分

分層架構圖

數據存儲設計(文本文件模擬數據庫)

各模塊對應文件:

  • User.txt:用戶表(含 type 字段區分角色:1-admin, 2-圖書, 3-進貨, 4-銷售, 5-庫存)
    用戶表結構
  • Book.txt:圖書表
    圖書表結構
  • InMain.txt / InDetail.txt:進貨主/明細表
    進貨主表進貨明細表
  • OutMain.txt / OutDetail.txt:銷售主/明細表
    銷售主表銷售明細表
  • Stock.txt:庫存表
    庫存表

核心代碼片段

通用文件讀寫工具 FileIoUtil

package cn.hncu.bookStore.util;

import java.io.*;
import java.util.*;
import javax.swing.JOptionPane;

public class FileIoUtil {
    /** 讀取指定文件的所有對象列表 */
    @SuppressWarnings("unchecked")
    public static <E> List<E> readFormFile(String fileName, E ee) {
        List<E> list = new ArrayList<>();
        File file = new File(fileName);
        if (!file.exists()) {
            JOptionPane.showMessageDialog(null, "數據表不存在!");
            return list;
        }
        try (ObjectInputStream in = new ObjectInputStream(new FileInputStream(file))) {
            list = (List<E>) in.readObject();
        } catch (IOException | ClassNotFoundException e) {
            e.printStackTrace();
        }
        return list;
    }

    /** 將列表序列化寫入文件 */
    public static void write2File(List<?> list, String fileName) {
        try (ObjectOutputStream out = new ObjectOutputStream(new FileOutputStream(fileName))) {
            out.writeObject(list);
        } catch (IOException e) {
            throw new RuntimeException("寫入失敗", e);
        }
    }
}

用戶值對象 UserModel

package cn.hncu.bookStore.user.vo;

import java.io.Serializable;

public class UserModel implements Serializable {
    private String uuid;   // 主鍵
    private String name;
    private int type;      // 1-admin, 2-圖書, 3-進貨, 4-銷售, 5-庫存
    private String pwd;

    // 構造器、getter/setter、equals/hashCode、toString 略
}

查詢模型 UserQueryModel

package cn.hncu.bookStore.user.vo;

public class UserQueryModel extends UserModel {
    // 僅繼承,作為查詢條件載體,符合規範
}

數據層接口 UserDao

package cn.hncu.bookStore.user.dao.dao;

import java.util.List;
import cn.hncu.bookStore.user.vo.*;

public interface UserDao {
    boolean create(UserModel user);
    boolean delete(String uuid);
    boolean update(UserModel user);
    List<UserModel> getAll();
    List<UserModel> getByCondition(UserQueryModel uqm);
    UserModel getSingle(String uuid);
}

下一篇將實現具體 DAO、邏輯層與 Swing 界面,敬請期待。

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