答案:系统包含图书、读者和借阅管理,通过控制台实现添加图书、注册读者、借还书及查询功能,使用ArrayList存储数据,核心逻辑在Library类中处理业务流程。

做一个简易的Java图书馆借阅系统,核心是管理图书、读者和借阅行为。系统不需要复杂界面,用控制台(Console)实现即可,适合初学者练手。重点在于理清数据结构与业务逻辑关系,下面从整体结构到代码实现一步步说明。
一个基础的图书馆借阅系统应具备以下功能:
不考虑用户登录、数据库持久化(可用集合类临时存储),简化为内存操作。
系统围绕三个主要实体建模:图书、读者、借阅记录。每个类职责明确。
立即学习“Java免费学习笔记(深入)”;
1. Book 图书类
代表一本图书,包含基本信息:
2. Reader 读者类
表示一个注册读者:
3. BorrowRecord 借阅记录类(可选)
如果想记录借还时间,可以单独建类。但本系统简化处理,只在Reader中维护借阅列表,Book中维护状态。
4. Library 图书馆主控类
作为系统入口,管理所有图书和读者,并提供操作方法:
每个功能模块的判断条件要清晰,避免重复借阅或还不存在的书。
1. 添加图书
创建Book对象,加入图书馆的图书列表。可通过书名+作者去重,或仅按ID区分。
2. 注册读者
创建Reader对象,分配唯一ID,加入读者列表。
3. 借书流程
输入读者ID和图书ID,执行以下检查:
全部通过后,修改图书状态为不可借,加入该读者的借书列表。
4. 还书流程
输入读者ID和图书ID:
确认后从读者借书列表中移除,图书状态改为可借。
5. 查询功能
支持查看所有图书(含状态)、所有读者及其借书情况。
以下是核心代码片段,可在main方法中调用测试。
import java.util.*;
// 图书类
class Book {
private String id;
private String title;
private String author;
private boolean available;
public Book(String id, String title, String author) {
this.id = id;
this.title = title;
this.author = author;
this.available = true;
}
// getter 和 setter 方法
public String getId() { return id; }
public String getTitle() { return title; }
public String getAuthor() { return author; }
public boolean isAvailable() { return available; }
public void setAvailable(boolean available) { this.available = available; }
@Override
public String toString() {
return "Book{" +
"id='" + id + '\'' +
", title='" + title + '\'' +
", author='" + author + '\'' +
", available=" + (available ? "可借" : "已借出") +
'}';
}
}
// 读者类
class Reader {
private String id;
private String name;
private List<Book> borrowedBooks;
public Reader(String id, String name) {
this.id = id;
this.name = name;
this.borrowedBooks = new ArrayList<>();
}
public String getId() { return id; }
public String getName() { return name; }
public List<Book> getBorrowedBooks() { return borrowedBooks; }
// 借书
public void borrowBook(Book book) {
borrowedBooks.add(book);
}
// 还书
public boolean returnBook(String bookId) {
Book toRemove = null;
for (Book b : borrowedBooks) {
if (b.getId().equals(bookId)) {
toRemove = b;
break;
}
}
if (toRemove != null) {
borrowedBooks.remove(toRemove);
return true;
}
return false;
}
@Override
public String toString() {
return "Reader{" +
"id='" + id + '\'' +
", name='" + name + '\'' +
", borrowedBooksCount=" + borrowedBooks.size() +
'}';
}
}
// 图书馆管理类
public class Library {
private List<Book> books;
private List<Reader> readers;
public Library() {
this.books = new ArrayList<>();
this.readers = new ArrayList<>();
}
// 添加图书
public void addBook(Book book) {
books.add(book);
System.out.println("图书已添加:" + book.getTitle());
}
// 注册读者
public void registerReader(Reader reader) {
readers.add(reader);
System.out.println("读者已注册:" + reader.getName());
}
// 借书
public void borrowBook(String readerId, String bookId) {
Reader reader = findReaderById(readerId);
Book book = findBookById(bookId);
if (reader == null) {
System.out.println("错误:读者不存在!");
return;
}
if (book == null) {
System.out.println("错误:图书不存在!");
return;
}
if (!book.isAvailable()) {
System.out.println("抱歉,《" + book.getTitle() + "》已被借出。");
return;
}
book.setAvailable(false);
reader.borrowBook(book);
System.out.println("借阅成功:" + reader.getName() + " 借了《" + book.getTitle() + "》");
}
// 还书
public void returnBook(String readerId, String bookId) {
Reader reader = findReaderById(readerId);
Book book = findBookById(bookId);
if (reader == null || book == null) {
System.out.println("读者或图书信息错误!");
return;
}
boolean success = reader.returnBook(bookId);
if (success) {
book.setAvailable(true);
System.out.println("还书成功:" + reader.getName() + " 归还了《" + book.getTitle() + "》");
} else {
System.out.println("该读者未借阅此书!");
}
}
// 查询所有图书
public void listAllBooks() {
System.out.println("\n=== 所有图书 ===");
for (Book book : books) {
System.out.println(book);
}
}
// 查询所有读者及借书情况
public void listAllReaders() {
System.out.println("\n=== 所有读者 ===");
for (Reader reader : readers) {
System.out.println(reader);
if (!reader.getBorrowedBooks().isEmpty()) {
System.out.println(" 已借图书:");
for (Book b : reader.getBorrowedBooks()) {
System.out.println(" - " + b.getTitle());
}
}
}
}
// 辅助方法:根据ID查找图书
private Book findBookById(String id) {
for (Book b : books) {
if (b.getId().equals(id)) {
return b;
}
}
return null;
}
// 辅助方法:根据ID查找读者
private Reader findReaderById(String id) {
for (Reader r : readers) {
if (r.getId().equals(id)) {
return r;
}
}
return null;
}
// 主方法演示
public static void main(String[] args) {
Library lib = new Library();
Scanner sc = new Scanner(System.in);
// 初始化几本书和读者
Book b1 = new Book("B001", "Java编程思想", "Bruce Eckel");
Book b2 = new Book("B002", "算法导论", "Cormen");
lib.addBook(b1);
lib.addBook(b2);
Reader r1 = new Reader("R001", "张三");
Reader r2 = new Reader("R002", "李四");
lib.registerReader(r1);
lib.registerReader(r2);
while (true) {
System.out.println("\n--- 图书馆系统 ---");
System.out.println("1. 借书");
System.out.println("2. 还书");
System.out.println("3. 查看所有图书");
System.out.println("4. 查看所有读者");
System.out.println("5. 退出");
System.out.print("请选择操作:");
int choice = sc.nextInt();
sc.nextLine(); // 消费换行
switch (choice) {
case 1:
System.out.print("输入读者ID: ");
String rid = sc.nextLine();
System.out.print("输入图书ID: ");
String bid = sc.nextLine();
lib.borrowBook(rid, bid);
break;
case 2:
System.out.print("输入读者ID: ");
rid = sc.nextLine();
System.out.print("输入图书ID: ");
bid = sc.nextLine();
lib.returnBook(rid, bid);
break;
case 3:
lib.listAllBooks();
break;
case 4:
lib.listAllReaders();
break;
case 5:
System.out.println("再见!");
sc.close();
return;
default:
System.out.println("无效选择!");
}
}
}
}当前版本是控制台基础版,后续可增强:
基本上就这些。掌握这个结构后,再复杂的功能也能一步步拆解实现。
以上就是Java如何做一个简易图书馆借阅系统_附完整逻辑结构与实现思路的详细内容,更多请关注php中文网其它相关文章!
每个人都需要一台速度更快、更稳定的 PC。随着时间的推移,垃圾文件、旧注册表数据和不必要的后台进程会占用资源并降低性能。幸运的是,许多工具可以让 Windows 保持平稳运行。
Copyright 2014-2025 https://www.php.cn/ All Rights Reserved | php.cn | 湘ICP备2023035733号