本系列將帶領大家從零構建一個基於 Java SE 的單機版書店管理系統,涵蓋從需求分析、數據庫設計、分層架構到核心代碼實現的完整過程,適合鞏固 Java 基礎、掌握項目分層與面向對象設計的開發者。
admin 擁有全部權限五大業務模塊:用戶、圖書、進貨、銷售、庫存
user、book、in、out、storeui(表現層)、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:庫存表
FileIoUtilpackage 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);
}
}
}
UserModelpackage 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 略
}
UserQueryModelpackage cn.hncu.bookStore.user.vo;
public class UserQueryModel extends UserModel {
// 僅繼承,作為查詢條件載體,符合規範
}
UserDaopackage 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 界面,敬請期待。