Menu

2025-04-02-JAVA 作业_图书管理系统_week4

post on 02 Apr 2025 about 4007words require 14min
CC BY 4.0 (除特别声明或转载文章外)
如果这篇博客帮助到你,可以请我喝一杯咖啡~

29_【项目】老马书城集合版-项目介绍_哔哩哔哩_bilibili(参考视频)

LibraryManagementSystem

【图书管理系统】(超详细附源码用 java 实现)_图书管理系统源码-CSDN 博客

图书馆管理系统项目说明

项目概述

我选择的是选题三图书馆:模拟一天的借阅过程,应该这个选题更加贴近现实开发,用于模拟图书馆日常的借阅管理流程。系统实现了图书馆基本的图书管理、读者管理、借阅管理等功能。

系统的架构设计如下:系统通过定义一个 Borrowable 接口,规范了可借阅物品的标准操作,包括借阅和归还等基本功能。LibraryItem 作为抽象类,实现了 Borrowable 接口,为所有可借阅物品提供了基础结构,包含标题、ID 等通用属性。具体类 Book 继承自 LibraryItem,扩展了图书特有的属性(如作者、ISBN)和行为。Reader 类负责管理读者信息,并跟踪读者的借阅记录。Library 类作为系统的核心管理类,负责处理图书和读者的注册,管理借阅和归还流程,并维护图书馆的开放状态。通过这种设计,系统实现了对图书馆资源和读者行为的高效管理。

为了理清思路,我先了画出类图,梳理各个类之间的关系。在编码阶段,我遇到了不少问题。例如,在使用 HashMap 管理图书时,我错误地将 ISBN 作为字符串拼接,导致查询时出现空指针异常。我按照教程编写了 borrowBook() 方法,但运行时发现同一本书可以被多次借出。经过仔细检查,我意识到问题出在没有为 Book 类添加 isAvailable 标志位。在修正了这一问题后,我特意编写了多个测试用例,验证了各种边界情况,确保了借阅逻辑的正确性。

系统架构

系统采用面向对象的设计方法,主要包含以下核心组件:

主要功能

技术特点

  1. 面向对象设计

    • 使用继承(LibraryItem -> Book)
    • 使用接口(Borrowable)
    • 封装(private 属性 + getter/setter)
    • 多态(LibraryItem 的实现)
  2. Java 语言特性

    • 使用 abstract
    • 使用 interface
    • 使用 @Override 注解
    • 使用 staticfinal 修饰符
  3. 集合框架应用

    • 使用 HashMap 管理图书和读者
    • 使用 ArrayList 存储借阅记录

运行说明

  1. 编译方法
1
2
cd src
javac *.java
  1. 运行方法
1
java Main

项目结构

1
2
3
4
5
6
7
src/
├── Borrowable.java     // 可借阅接口
├── LibraryItem.java    // 图书馆物品抽象类
├── Book.java           // 图书类
├── Reader.java         // 读者类
├── Library.java        // 图书馆管理类
└── Main.java           // 主程序入口

注意事项

  1. 系统使用 ISBN 作为图书的唯一标识
  2. 读者 ID 格式为”R”+ 序号
  3. 图书 ID 格式为”B”+ 序号
  4. 图书馆闭馆时无法进行借还操作

运行结果

1743590162843CbQ4bP8FJoMZDCxRi9FcBNlonBh.png 1743590155844Lv5BbqXAFoDN2Wxo7MscZZCmngd.png 1743590165844WgHtbCCmRohtZwxwI1XcLqjYnvf.png

Main 代码

https://github.com/tkzzzzzz6/My_Java_homework(完整代码链接)

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
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);
    }
}
Loading comments...