图书管理系统项目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基础语法与设计模式的结合应用
  • 理解项目从框架搭建到功能实现的完整流程
  • 学会数据持久化与文件操作的实际应用
  • 提升代码设计与问题解决能力
相关推荐
Georgeviewer6 小时前
商业落地评测|实体门店GEO优化性价比与服务体系深度复盘
大数据·人工智能
Scott9999HH7 小时前
【IIoT流量实战】蒸汽管道阀门全关却仍有流量?用 Python 实现涡街信号 FFT 频谱分析与温压全补偿积算网关,深度拆解靠谱的涡街流量计厂家硬核技术标准
开发语言·python
腻害兔7 小时前
【若依项目-产品经理视角】深度拆解 RuoYi-Vue-Pro 商城模块:从商品管理到交易引擎,50 张表撑起一整套电商系统
java·大数据·vue.js·产品经理·ai编程
GIR1237 小时前
官方出品 | 多通道土壤呼吸测量系统市场现状与十五五规划深度报告:行业分析+趋势预测全收录
大数据·人工智能·机器学习
码智社8 小时前
AES加密原理详解及Java实现加解密实战
java·开发语言
AI云海8 小时前
python 列表、元组、集合和字典
开发语言·python
2501_916008899 小时前
iOS应用开发工具全面解析:如何选择与优化开发效率
ide·vscode·ios·objective-c·个人开发·swift·敏捷流程
南讯股份Nascent9 小时前
洽洽全域会员项目启动会圆满召开
大数据·人工智能
大郭鹏宇9 小时前
基于 LangGraph 构建智能分诊系统(一):项目概述与环境搭建
大数据·人工智能·microsoft·langchain
萧瑟余晖9 小时前
JDK 26 新特性详解
java·开发语言