图书管理系统项目PPT文稿
封面页
- 标题:Java图书管理系统 - 从0到1实现方案
- 副标题:整合设计模式与Java基础的实战项目
- 制作者:2502_90907501
- 日期:2025-12-14
目录页
1.项目概述
2.核心技术与设计模式
3.系统架构与模块划分
4.核心类设计
5.业务功能实现
6.项目测试与扩展
7.总结
第一部分:项目概述
项目背景
- 整合Java基础语法(类与对象、封装/继承/多态、异常处理)
- 落地三大设计模式,提升代码可扩展性与可维护性
- 实现图书管理核心流程,完成数据持久化存储
项目目标
- 掌握项目从框架搭建到功能落地的完整流程
- 理解设计模式在实际开发中的应用场景
- 实现管理员与普通用户的权限分离与业务闭环
核心功能
|------|-----------------------------|
| 角色 | 核心功能 |
| 管理员 | 图书上架/更新/下架、借阅统计、热门图书查询、库存管理 |
| 普通用户 | 图书借阅/归还、个人借阅记录查询、图书搜索 |
| 共用功能 | 图书查找、显示所有图书、退出系统 |
第二部分:核心技术与设计模式
1. 单例模式
- 核心思想:确保类只有一个实例,提供全局访问点
- 项目应用:ScannerSingleton(输入工具)、LibrarySingleton(图书管理核心)
-
代码实现(懒汉式):
javapublic class ScannerSingleton { private static Scanner scanner; private ScannerSingleton() {} // 私有构造防止实例化 public static Scanner getInstance() { if (scanner == null) { scanner = new Scanner(System.in); } return scanner; } }
2. 工厂模式
- 核心思想:分离对象创建与使用,降低耦合
- 项目应用:通过工厂类创建管理员/普通用户对象
-
代码实现:
java// 抽象工厂接口 public interface IUserFactory { User createUser(String name, int userID); } // 管理员工厂 public class AdminUserFactory implements IUserFactory { @Override public User createUser(String name, int userID) { return new AdminUser(name, userID); } } // 普通用户工厂 public class NormalUserFactory implements IUserFactory { @Override public User createUser(String name, int userID) { return new NormalUser(name, userID); } }
3. 代理模式
- 核心思想:通过代理对象控制对真实对象的访问,实现权限校验
- 项目应用:ProxyUser类代理AdminUser与NormalUser的业务方法
- 代码实现(权限校验):
java
// 管理员权限校验
private void checkRealUserWhetherAdminUser(String exceptionMessage) {
if(!(realUser instanceof AdminUser)){
throw new PermissionException(exceptionMessage);
}
}
// 普通用户权限校验
private void checkRealUserWhetherNormalUser(String exceptionMessage) {
if(!(realUser instanceof NormalUser)){
throw new PermissionException(exceptionMessage);
}
}
4. 其他技术
- 数据持久化:通过FileUtils.jar实现文件读写
- JSON序列化:对象与字符串互转,用于文件存储
- 日期处理:LocalDate、Instant实现时间计算
第三部分:系统架构与模块划分
整体架构
- 入口层:LibrarySystem(程序入口,角色选择)
- 代理层:ProxyUser(权限控制与业务分发)
- 业务层:AdminUser(管理员业务)、NormalUser(普通用户业务)
- 数据层:Library(图书数据管理)、Book(图书实体)
- 工具层:utils(单例工具、文件解析工具)
- 常量层:Constant(配置常量定义)
模块划分(src目录结构)
src/
├─ book/ // 图书相关(Book、PairOfUidAndBookId)
├─ constant/ // 常量定义(Constant)
├─ user/ // 用户相关
│ ├─ factory/ // 工厂类
│ ├─ AdminUser.java
│ ├─ NormalUser.java
│ └─ User.java
├─ utils/ // 工具类
│ ├─ ScannerSingleton.java
│ ├─ LibrarySingleton.java
│ └─ AnalyzingBook.java
└─ LibrarySystem.java // 程序入口
第四部分:核心类设计
1. User类体系
抽象父类User:
java
public abstract class User {
protected String name;
protected int userID;
protected String role;
public User(String name, int userID, String role) {
this.name = name;
this.userID = userID;
this.role = role;
}
public abstract int display(); // 显示操作菜单
}
管理员子类AdminUser(关键方法):
java
public class AdminUser extends User {
private Scanner scanner;
private Library library;
public AdminUser(String name, int userID) {
super(name, userID, "管理员");
scanner = ScannerSingleton.getInstance();
library = LibrarySingleton.getInstance();
}
@Override
public int display() {
// 管理员菜单实现(10个操作选项)
}
// 核心业务方法:addBook、updateBook、removeBook等
}
用户子类NormalUser(关键方法):
java
public class NormalUser extends User {
private PairOfUidAndBookId[] pairOfUidAndBookIds; // 借阅记录
private int borrowedCount; // 借阅数量
private Scanner scanner;
private Library library;
public NormalUser(String name, int userID) {
super(name, userID, "普通用户");
scanner = ScannerSingleton.getInstance();
library = LibrarySingleton.getInstance();
}
@Override
public int display() {
// 普通用户菜单实现(6个操作选项)
}
// 核心业务方法:borrowBook、returnBook、viewBorrowBooks等
}
2. Book类(图书实体)
java
public class Book implements Comparable<Book> {
private int bookId; // 图书ID(自增)
private String title; // 书名
private String author; // 作者
private String category; // 类别
private int publishYear; // 出版年份
private boolean isBorrowed; // 借阅状态(默认false)
private int borrowCount; // 借阅次数(默认0)
private LocalDate shelfDate;// 上架时间
// 构造方法(不含bookId、isBorrowed、borrowCount)
public Book(String title, String author, String category,
int publishYear, LocalDate shelfDate) {
this.title = title;
this.author = author;
this.category = category;
this.publishYear = publishYear;
this.isBorrowed = false;
this.borrowCount = 0;
this.shelfDate = shelfDate;
}
// 借阅次数增减方法
public void incrementBorrowCount() { this.borrowCount++; }
public void decreaseBorrowCount() { this.borrowCount--; }
// 排序方法(按借阅次数降序)
@Override
public int compareTo(Book o) {
return o.getBorrowCount() - this.getBorrowCount();
}
// getter/setter与toJSON方法
}
3. Library类(图书数据管理)
java
public class Library {
private Book[] books; // 图书数组
private int bookCount; // 实际图书数量
private final AnalyzingBook analyzingBook = new AnalyzingBook();
public Library() {
loadAllBook(); // 初始化时加载文件数据
}
// 核心方法
private void loadAllBook() {} // 从文件加载图书
private void storeBook() {} // 图书数据写入文件
public void addBook(Book book) {} // 添加图书
public void updateBook(Book book) {} // 更新图书
public void removeBook(int bookId) {} // 删除图书
public Book searchById(int bookId) {} // 按ID查询图书
}
4. 常量类Constant
java
public class Constant {
// 图书数组默认容量
public static final int CAPACITY = 5;
// 数据文件路径
public static final String ALL_BOOK_FILE_NAME = "allbook.txt";
public static final String BORROWED_BOOK_FILE_NAME = "borrowedbook.txt";
// 管理员操作常量
public static final int SEARCH_BOOK = 1;
public static final int DISPLAY_BOOK = 2;
public static final int EXIT = 3;
public static final int ADD_BOOK = 4;
// 其他操作常量...
// 普通用户操作常量
public static final int BORROWED_BOOK = 4;
public static final int RETURN_BOOK = 5;
public static final int VIEW_BORROW_HISTORY_BOOK = 6;
}
第五部分:业务功能实现
一、管理员核心业务
1. 图书上架(addBook)
- 流程:权限校验 → 输入图书信息 → 构建Book对象 → Library添加 → 写入文件
-
关键代码(AdminUser):
javapublic void addBook() { scanner.nextLine(); System.out.println("请输入书名:"); String title = scanner.nextLine(); System.out.println("请输入作者:"); String author = scanner.nextLine(); System.out.println("请输入类别:"); String category = scanner.nextLine(); System.out.println("请输入出版年份:"); int year = scanner.nextInt(); scanner.nextLine(); LocalDate shelfDate = LocalDate.now(); Book newBook = new Book(title, author, category, year, shelfDate); library.addBook(newBook); }
2. 图书更新(updateBook)
- 流程:显示所有图书 → 输入图书ID → 校验存在性 → 输入新信息 → 更新数据 → 写入文件
-
关键代码(Library):
javapublic void updateBook(Book book) { int index = searchByIdReturnIndex(book.getBookId()); books[index] = book; storeBook(); // 持久化更新 }
3. 热门图书查询(generateBook)
- 流程:输入K值 → 校验合法性 → 加载图书 → 按借阅次数排序 → 输出前K本
-
关键代码(Library):
javapublic void generateBook(int k) { loadAllBook(); Book[] tmp = new Book[getBookCount()]; System.arraycopy(books, 0, tmp, 0, getBookCount()); Arrays.sort(tmp); // 调用Book的compareTo方法 // 输出前K本图书信息 }
二、普通用户核心业务
1. 图书借阅(borrowBook)
- 流程:权限校验 → 输入图书ID → 校验图书存在性 → 校验未借阅 → 更新借阅状态 → 记录借阅信息
- 关键代码(NormalUser):
java
public void borrowBook() {
scanner.nextLine();
System.out.println("请输入你要借阅图书的id:");
int bookId = scanner.nextInt();
scanner.nextLine();
if (library.getBookCount() == 0) {
System.out.println("书架没有书籍暂且不能借阅");
return;
}
loadBorrowedBook();
Book book = library.searchById(bookId);
if(book == null) {
System.out.println("没有该id的相关书籍:"+bookId);
return;
}
// 校验是否已被借阅
for (int i = 0; i < borrowedCount; i++) {
PairOfUidAndBookId pair = pairOfUidAndBookIds[i];
if (pair.getBookId() == book.getBookId()) {
// 提示已借阅信息
return;
}
}
// 借阅成功:更新状态+存储记录
library.borrowBook(bookId);
PairOfUidAndBookId newPair = new PairOfUidAndBookId(userID, book.getBookId());
pairOfUidAndBookIds[borrowedCount++] = newPair;
storeBorrowedBook();
System.out.println("借阅成功!");
}
2. 图书归还(returnBook)
- 流程:加载借阅记录 → 输入图书ID → 校验借阅归属 → 更新图书状态 → 删除借阅记录
- 关键代码(Library):
java
public void returnBook(int bookId) {
loadAllBook();
for (int i = 0; i < getBookCount(); i++) {
Book book = books[i];
if(book.getBookId() == bookId) {
book.setBorrowed(false);
book.decreaseBorrowCount();
}
}
storeBook();
}
三、共用业务
- 图书查找(按书名):
java
public void searchBook() {
scanner.nextLine();
System.out.println("请输入你要查找的图书的名称:");
String title = scanner.nextLine();
Book book = search(title);
if(book == null) {
System.out.println("没有你要找的这本书,你查找的书名为:"+title);
} else {
System.out.println("找到了你要查找的书,书的详细信息如下:");
System.out.println(book);
}
}
第六部分:项目测试与扩展
测试流程
1.环境准备:导入FileUtils.jar包
2.程序启动:运行LibrarySystem.java
3.角色选择:管理员(刘备,ID=1)/普通用户(关羽ID=2/张飞ID=3)
4.功能测试:
管理员:上架图书→更新图书→查询热门图书→移除超期图书
普通用户:借阅图书→查看借阅记录→归还图书
5.数据验证:检查allbook.txt(图书数据)、borrowedbook.txt(借阅记录)
项目扩展方向
1.功能扩展:添加用户注册/登录、图书预约、逾期提醒
2.数据存储:替换文件存储为MySQL数据库
3.性能优化:使用集合替代数组存储,支持动态扩容
4.界面优化:开发GUI图形界面(Swing/JavaFX)
5.权限细化:添加操作员角色,分配部分管理员权限
第七部分:总结
项目亮点
- 完整实现设计模式落地,解决实际开发问题
- 严格遵循面向对象设计原则,代码结构清晰
- 实现数据持久化,确保数据不丢失
- 权限控制严谨,业务逻辑闭环
关键收获
- 掌握Java基础语法与设计模式的结合应用
- 理解项目从框架搭建到功能实现的完整流程
- 学会数据持久化与文件操作的实际应用
- 提升代码设计与问题解决能力