面向对象实现图书借阅管理系统,核心是将“人”“书”“借阅行为”抽象为Book、Reader、BorrowRecord和LibrarySystem类,通过封装、继承(如Student/Teacher继承Reader)、多态(getMaxBorrowCount)和关联(ID引用而非对象嵌套)组织逻辑,LibrarySystem仅协调,各司其职。

用 Java 面向对象实现图书借阅管理系统,核心是把“人”“书”“借阅行为”抽象成类,通过封装、继承、多态和关联关系组织逻辑,而不是写一堆零散的方法或用大量 if-else 控制流程。
1. 设计关键类并封装属性与行为
面向对象的第一步是识别实体,合理划分职责:
-
Book(图书类):封装 ISBN、书名、作者、库存数量等属性;提供
isAvailable()判断是否可借、borrow()和returnBook()修改库存(注意线程安全可后续加,基础版用普通 int 即可) -
Reader(读者类):封装学号/ID、姓名、已借数量、最大可借册数(如 5 本);提供
canBorrowMore()方法检查限额 -
BorrowRecord(借阅记录类):封装读者 ID、图书 ISBN、借出时间、应还时间(可用
LocalDateTime),不直接存对象引用,而是用 ID 关联,降低耦合 -
LibrarySystem(系统主类):持有一个
ArrayList<Book>、一个ArrayList<Reader>、一个ArrayList<BorrowRecord>,负责增删查、借/还操作的协调——它不处理业务规则,只调用各对象自己的方法
2. 用关联体现“谁借了哪本书”
避免在 Book 或 Reader 类里直接存对方的完整对象列表(易引发循环依赖或内存泄漏)。正确做法是:
- 借书时,
LibrarySystem检查reader.canBorrowMore()和book.isAvailable() - 都通过再创建一条
BorrowRecord,保存 reader.getId() 和 book.getIsbn() - 查询某读者所有借阅记录 → 遍历
records列表筛选 readerId 匹配项 - 查询某书当前是否被借 → 遍历 records 查是否有未归还且 isbn 匹配的记录(
returnTime == null表示未还)
3. 用继承支持不同读者类型(可选但推荐)
学生和教师借阅规则不同(如学生最多借 5 本,教师可借 10 本,教师还能预约绝版书),可引入继承:
在 Java 中初始化和管理阿里云 SDK客户端。包括单例模式、线程安全、endpoint 与 region 配置、VPC 终端节点、同步与异步等。
立即学习“Java免费学习笔记(深入)”;
- 定义抽象父类
Reader,含共性字段(id、name)和抽象方法getMaxBorrowCount() -
Student extends Reader实现返回 5;Teacher extends Reader返回 10 -
LibrarySystem.borrowBook(Reader r, Book b)方法内部调用r.getMaxBorrowCount(),无需 if 判断类型——这就是多态的价值
4. 用简单集合 + 控制台交互快速验证逻辑
初期不用数据库或界面,聚焦 OOP 结构是否清晰:
- 在
main()中初始化几本测试图书、两个读者(一个学生、一个教师) - 提供数字菜单:1. 查书 2. 借书 3. 还书 4. 查某人借阅列表 5. 退出
- 借书操作调用:
if (reader.canBorrowMore() && book.isAvailable()) { system.borrow(reader, book); } - 每步操作后打印当前状态(如“《算法导论》剩余库存:2”),直观反馈封装是否生效
不复杂但容易忽略:真正体现面向对象的不是用了 class,而是每个类知道自己该做什么、不该做什么。Book 不管“谁来借”,只管“我能不能被借”;Reader 不管“书在哪”,只管“我还能不能借”;LibrarySystem 是调度员,不是苦力。这样以后加微信通知、换 MySQL 存储、接入 Spring Boot,只需替换局部,主干结构稳得住。

















