post on 02 Apr 2025 about 4007words require 14min
CC BY 4.0 (除特别声明或转载文章外)
如果这篇博客帮助到你,可以请我喝一杯咖啡~
我选择的是选题三图书馆:模拟一天的借阅过程,应该这个选题更加贴近现实开发,用于模拟图书馆日常的借阅管理流程。系统实现了图书馆基本的图书管理、读者管理、借阅管理等功能。
系统的架构设计如下:系统通过定义一个 Borrowable 接口,规范了可借阅物品的标准操作,包括借阅和归还等基本功能。LibraryItem 作为抽象类,实现了 Borrowable 接口,为所有可借阅物品提供了基础结构,包含标题、ID 等通用属性。具体类 Book 继承自 LibraryItem,扩展了图书特有的属性(如作者、ISBN)和行为。Reader 类负责管理读者信息,并跟踪读者的借阅记录。Library 类作为系统的核心管理类,负责处理图书和读者的注册,管理借阅和归还流程,并维护图书馆的开放状态。通过这种设计,系统实现了对图书馆资源和读者行为的高效管理。
为了理清思路,我先了画出类图,梳理各个类之间的关系。在编码阶段,我遇到了不少问题。例如,在使用 HashMap 管理图书时,我错误地将 ISBN 作为字符串拼接,导致查询时出现空指针异常。我按照教程编写了 borrowBook() 方法,但运行时发现同一本书可以被多次借出。经过仔细检查,我意识到问题出在没有为 Book 类添加 isAvailable 标志位。在修正了这一问题后,我特意编写了多个测试用例,验证了各种边界情况,确保了借阅逻辑的正确性。
系统采用面向对象的设计方法,主要包含以下核心组件:
面向对象设计
Java 语言特性
abstract
类interface
@Override
注解static
和 final
修饰符集合框架应用
HashMap
管理图书和读者ArrayList
存储借阅记录1
2
cd src
javac *.java
1
java Main
1
2
3
4
5
6
7
src/
├── Borrowable.java // 可借阅接口
├── LibraryItem.java // 图书馆物品抽象类
├── Book.java // 图书类
├── Reader.java // 读者类
├── Library.java // 图书馆管理类
└── Main.java // 主程序入口
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);
}
}
Related posts