这篇文章上次修改于 209 天前,可能其部分内容已经发生变化,如有疑问可询问作者。
图书馆管理系统项目说明
项目概述
我选择的是选题三图书馆:模拟一天的借阅过程,应该这个选题更加贴近现实开发,用于模拟图书馆日常的借阅管理流程。系统实现了图书馆基本的图书管理、读者管理、借阅管理等功能。
系统的架构设计如下:系统通过定义一个 Borrowable 接口,规范了可借阅物品的标准操作,包括借阅和归还等基本功能。LibraryItem 作为抽象类,实现了 Borrowable 接口,为所有可借阅物品提供了基础结构,包含标题、ID 等通用属性。具体类 Book 继承自 LibraryItem,扩展了图书特有的属性(如作者、ISBN)和行为。Reader 类负责管理读者信息,并跟踪读者的借阅记录。Library 类作为系统的核心管理类,负责处理图书和读者的注册,管理借阅和归还流程,并维护图书馆的开放状态。通过这种设计,系统实现了对图书馆资源和读者行为的高效管理。
为了理清思路,我先了画出类图,梳理各个类之间的关系。在编码阶段,我遇到了不少问题。例如,在使用 HashMap 管理图书时,我错误地将 ISBN 作为字符串拼接,导致查询时出现空指针异常。我按照教程编写了 borrowBook() 方法,但运行时发现同一本书可以被多次借出。经过仔细检查,我意识到问题出在没有为 Book 类添加 isAvailable 标志位。在修正了这一问题后,我特意编写了多个测试用例,验证了各种边界情况,确保了借阅逻辑的正确性。
系统架构
系统采用面向对象的设计方法,主要包含以下核心组件:
主要功能
技术特点
面向对象设计
- 使用继承(LibraryItem -> Book)
 - 使用接口(Borrowable)
 - 封装(private 属性 + getter/setter)
 - 多态(LibraryItem 的实现)
 
Java 语言特性
- 使用 
abstract类 - 使用 
interface - 使用 
@Override注解 - 使用 
static和final修饰符 
- 使用 
 集合框架应用
- 使用 
HashMap管理图书和读者 - 使用 
ArrayList存储借阅记录 
- 使用 
 
运行说明
- 编译方法
 
cd src
javac *.java
- 运行方法
 
java Main
项目结构
src/
├── Borrowable.java     // 可借阅接口
├── LibraryItem.java    // 图书馆物品抽象类
├── Book.java           // 图书类
├── Reader.java         // 读者类
├── Library.java        // 图书馆管理类
└── Main.java           // 主程序入口
注意事项
- 系统使用 ISBN 作为图书的唯一标识
 - 读者 ID 格式为”R”+ 序号
 - 图书 ID 格式为”B”+ 序号
 - 图书馆闭馆时无法进行借还操作
 
运行结果



Main 代码
public class Main {
    public static void main(String[] args) {
        _printHeader_("图书馆管理系统启动");
        // 创建图书馆
        Library library = new Library("我的图书馆");
        
        _printHeader_("初始化图书馆藏书");
        // 添加图书
        Book book1 = new Book("Java编程思想", "B001", "Bruce Eckel", "9787111213826");
        Book book2 = new Book("软件工程", "B002", "Erich Gamma", "9787111346365");
        Book book3 = new Book("算法导论", "B003", "Thomas H. Cormen", "9787111187776");
        Book book4 = new Book("计算机网络", "B004", "谢希仁", "9787302424645");
        Book book6 = new Book("深度学习", "B006", "Abraham Silberschatz", "9787111187776");
        Book comic1 = new Book("欢迎来到实力至上主义教室", "C007", "衣笠彰梧", "9784861994950");
        Book comic2 = new Book("进击的巨人", "C004", "谏山创", "9787115270532");
        // 添加图书到图书馆
        library.addItem(book1);
        library.addItem(book2);
        library.addItem(book3);
        library.addItem(book4);
        library.addItem(book6);
        library.addItem(comic1);
        library.addItem(comic2);
        System._out_.println("\n当前图书馆藏书总量:" + library.getTotalItems() + " 本");
        _printHeader_("注册读者信息");
        // 创建读者
        Reader reader1 = new Reader("R001", "张三");
        Reader reader2 = new Reader("R002", "李四");
        Reader reader3 = new Reader("R003", "王五");
        // 添加读者到图书馆
        library.addReader(reader1);
        library.addReader(reader2);
        library.addReader(reader3);
        System._out_.println("\n当前注册读者总数:" + library.getTotalReaders() + " 人");
        // 开馆
        _printHeader_("图书馆开始营业");
        library.openLibrary();
        // 测试借阅
        _printHeader_("借阅测试");
        System._out_.println("场景1: " + reader1.getName() + " 借阅《" + book1.getTitle() + "》");
        if (library.borrowItem("B001", "R001")) {
            _printSuccess_("借阅成功");
        } else {
            _printError_("借阅失败");
        }
        System._out_.println("\n场景2: " + reader2.getName() + " 尝试借阅已借出的《" + book1.getTitle() + "》");
        if (library.borrowItem("B001", "R002")) {
            _printSuccess_("借阅成功");
        } else {
            _printError_("借阅失败:图书已被借出");
        }
        System._out_.println("\n场景3: " + reader2.getName() + " 借阅《" + book2.getTitle() + "》");
        if (library.borrowItem("B002", "R002")) {
            _printSuccess_("借阅成功");
        } else {
            _printError_("借阅失败");
        }
        // 测试归还
        _printHeader_("归还测试");
        System._out_.println("场景1: " + reader1.getName() + " 归还《" + book1.getTitle() + "》");
        if (library.returnItem("B001", "R001")) {
            _printSuccess_("归还成功");
        } else {
            _printError_("归还失败");
        }
        System._out_.println("\n场景2: " + reader2.getName() + " 归还《" + comic1.getTitle() + "》");
        if (library.returnItem("C007", "R002")) {
            _printSuccess_("归还成功");
        } else {
            _printError_("归还失败");
        }
        // 显示可用图书
        _printHeader_("当前可借阅图书列表");
        library.printAvailableBooks();
        // 闭馆
        _printHeader_("图书馆闭馆");
        library.closeLibrary();
        
        _printHeader_("系统运行结束");
    }
    // 美化输出的辅助方法
    private static void printHeader(String message) {
        System._out_.println("\n" + "=".repeat(50));
        System._out_.println(">>> " + message);
        System._out_.println("=".repeat(50));
    }
    private static void printSuccess(String message) {
        System._out_.println("[成功] " + message);
    }
    private static void printError(String message) {
        System._out_.println("[失败] " + message);
    }
}