图书管理系统项目PPT文稿

图书管理系统项目PPT文稿

封面页

  • 标题:Java图书管理系统 - 从0到1实现方案
  • 副标题:整合设计模式与Java基础的实战项目
  • 制作者:2502_90907501
  • 日期:2025-12-14

目录页

1.项目概述

2.核心技术与设计模式

3.系统架构与模块划分

4.核心类设计

5.业务功能实现

6.项目测试与扩展

7.总结

第一部分:项目概述

项目背景

  • 整合Java基础语法(类与对象、封装/继承/多态、异常处理)
  • 落地三大设计模式,提升代码可扩展性与可维护性
  • 实现图书管理核心流程,完成数据持久化存储

项目目标

  • 掌握项目从框架搭建到功能落地的完整流程
  • 理解设计模式在实际开发中的应用场景
  • 实现管理员与普通用户的权限分离与业务闭环

核心功能

|------|-----------------------------|
| 角色 | 核心功能 |
| 管理员 | 图书上架/更新/下架、借阅统计、热门图书查询、库存管理 |
| 普通用户 | 图书借阅/归还、个人借阅记录查询、图书搜索 |
| 共用功能 | 图书查找、显示所有图书、退出系统 |

第二部分:核心技术与设计模式

1. 单例模式

  • 核心思想:确保类只有一个实例,提供全局访问点
  • 项目应用:ScannerSingleton(输入工具)、LibrarySingleton(图书管理核心)
  • 代码实现(懒汉式):

    java 复制代码
    public 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):

    java 复制代码
    public 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):

    java 复制代码
    public void updateBook(Book book) {
        int index = searchByIdReturnIndex(book.getBookId());
        books[index] = book;
        storeBook(); // 持久化更新
    }

3. 热门图书查询(generateBook)

  • 流程:输入K值 → 校验合法性 → 加载图书 → 按借阅次数排序 → 输出前K本
  • 关键代码(Library):

    java 复制代码
    public 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基础语法与设计模式的结合应用
  • 理解项目从框架搭建到功能实现的完整流程
  • 学会数据持久化与文件操作的实际应用
  • 提升代码设计与问题解决能力
相关推荐
爱笑的眼睛112 小时前
超越 `assert`:深入 Pytest 的高级测试哲学与实践
java·人工智能·python·ai
爱笑的眼睛112 小时前
超越静态图表:Bokeh可视化API的实时数据流与交互式应用开发深度解析
java·人工智能·python·ai
前端小端长2 小时前
项目里满是if-else?用这5招优化if-else让你的代码清爽到飞起
开发语言·前端·javascript
懂AI的老郑2 小时前
深入理解C++中的堆栈:从数据结构到应用实践
java·数据结构·c++
胡萝卜3.02 小时前
现代C++特性深度探索:模板扩展、类增强、STL更新与Lambda表达式
服务器·开发语言·前端·c++·人工智能·lambda·移动构造和移动赋值
音符犹如代码2 小时前
深入解析 Apollo:微服务时代的配置管理利器
java·分布式·后端·微服务·中间件·架构
兩尛2 小时前
java基础八股
java·开发语言
_OP_CHEN2 小时前
【Git原理与使用】(六)Git 企业级开发模型实战:从分支规范到 DevOps 全流程落地
大数据·linux·git·gitee·项目管理·devops·企业级组件
【非典型Coder】2 小时前
JVM G1 和 CMS 详解与对比
java·jvm