Java 实现简易图书馆管理系统
·
一、团队成员
- 小王:负责需求分析与图书类(Book)、系统核心类(LibrarySystem)设计
- 小董:负责用户类(User)设计与控制台界面(View)实现
二、结对编程介绍
结对编程是一种敏捷开发技术,由两名开发者组成一对,轮流担任 “驾驶员”(编写代码、控制开发流程)和 “领航员”(审查代码、提供思路、规避风险),通过实时协作减少代码缺陷、提升开发效率,同时促进知识共享。本项目中,我们通过结对编程模式,高效完成了需求拆解、类结构设计与功能实现,确保系统逻辑清晰、代码可维护。
三、Java 实现简易图书馆管理系统(功能模块)
(一)分析
系统核心需求为图书管理(增删改查图书信息)和用户管理(读者借阅、归还图书、查询借阅记录)。采用面向对象思想设计:
Book类:封装图书属性(编号、书名、作者、出版社、借阅状态)及相关方法;User类:封装用户属性(编号、姓名、借阅图书列表)及借阅 / 归还图书的核心逻辑;LibrarySystem类:整合图书与用户的管理功能(增删改查、数据存储);LibrarySystemView类:提供控制台交互界面,接收用户输入并展示操作结果。
(二)代码实现
1. 图书类(Book.java)
java运行
// 图书实体类:封装图书属性与状态
public class Book {
private String bookId; // 图书编号(唯一标识)
private String title; // 书名
private String author; // 作者
private String publisher; // 出版社
private boolean isAvailable; // 是否可借阅(默认可借阅)
// 构造方法
public Book(String bookId, String title, String author, String publisher) {
this.bookId = bookId;
this.title = title;
this.author = author;
this.publisher = publisher;
this.isAvailable = true; // 新增图书默认可借阅
}
// getter/setter方法
public String getBookId() {
return bookId;
}
public void setBookId(String bookId) {
this.bookId = bookId;
}
public String getTitle() {
return title;
}
public void setTitle(String title) {
this.title = title;
}
public String getAuthor() {
return author;
}
public void setAuthor(String author) {
this.author = author;
}
public String getPublisher() {
return publisher;
}
public void setPublisher(String publisher) {
this.publisher = publisher;
}
public boolean isAvailable() {
return isAvailable;
}
public void setAvailable(boolean available) {
isAvailable = available;
}
// 重写toString:格式化图书信息输出
@Override
public String toString() {
String status = isAvailable ? "可借阅" : "已借出";
return String.format("[图书编号]%s | [书名]%s | [作者]%s | [出版社]%s | [状态]%s",
bookId, title, author, publisher, status);
}
}
2. 用户类(User.java)
java运行
import java.util.ArrayList;
import java.util.List;
// 用户实体类:封装用户属性与借阅/归还逻辑
public class User {
private String userId; // 用户编号(唯一标识)
private String name; // 用户名
private List<Book> borrowedBooks; // 已借阅图书列表
// 构造方法
public User(String userId, String name) {
this.userId = userId;
this.name = name;
this.borrowedBooks = new ArrayList<>(); // 初始化借阅列表
}
// 借阅图书方法
public String borrowBook(Book book) {
if (book == null) {
return "借阅失败:图书不存在!";
}
if (book.isAvailable()) {
book.setAvailable(false); // 标记图书为已借出
borrowedBooks.add(book); // 添加到用户借阅列表
return "借阅成功!";
} else {
return "借阅失败:该图书已被借出!";
}
}
// 归还图书方法
public String returnBook(String bookId) {
for (Book book : borrowedBooks) {
if (book.getBookId().equals(bookId)) {
book.setAvailable(true); // 标记图书为可借阅
borrowedBooks.remove(book); // 从借阅列表移除
return "归还成功!";
}
}
return "归还失败:未借阅该图书!";
}
// getter方法(仅暴露必要属性访问)
public String getUserId() {
return userId;
}
public String getName() {
return name;
}
public List<Book> getBorrowedBooks() {
return borrowedBooks;
}
}
3. 系统核心类(LibrarySystem.java)
java运行
import java.util.ArrayList;
import java.util.List;
// 图书馆系统核心类:整合图书与用户管理功能
public class LibrarySystem {
// 存储图书与用户数据(内存存储,重启后数据丢失)
private List<Book> bookList = new ArrayList<>();
private List<User> userList = new ArrayList<>();
// ---------------------- 图书管理功能 ----------------------
// 添加图书
public void addBook(Book book) {
bookList.add(book);
}
// 查询图书:空参数查询所有,传入编号查询指定图书
public List<Book> queryBook(String bookId) {
List<Book> result = new ArrayList<>();
if (bookId == null || bookId.trim().isEmpty()) {
result.addAll(bookList); // 查询所有图书
} else {
for (Book book : bookList) {
if (book.getBookId().equals(bookId)) {
result.add(book);
}
}
}
return result;
}
// 修改图书信息
public boolean modifyBook(String bookId, String newTitle, String newAuthor, String newPublisher) {
for (Book book : bookList) {
if (book.getBookId().equals(bookId)) {
book.setTitle(newTitle);
book.setAuthor(newAuthor);
book.setPublisher(newPublisher);
return true; // 修改成功
}
}
return false; // 未找到图书,修改失败
}
// 删除图书:仅允许删除未被借出的图书
public boolean deleteBook(String bookId) {
for (Book book : bookList) {
if (book.getBookId().equals(bookId) && book.isAvailable()) {
bookList.remove(book);
return true; // 删除成功
}
}
return false; // 图书不存在或已借出,删除失败
}
// ---------------------- 用户管理功能 ----------------------
// 添加用户
public void addUser(User user) {
userList.add(user);
}
// 根据用户编号查询用户
public User getUserById(String userId) {
for (User user : userList) {
if (user.getUserId().equals(userId)) {
return user;
}
}
return null; // 未找到用户
}
// 根据图书编号查询图书(供借阅/归还功能调用)
public Book getBookById(String bookId) {
for (Book book : bookList) {
if (book.getBookId().equals(bookId)) {
return book;
}
}
return null; // 未找到图书
}
}
4. 控制台界面类(LibrarySystemView.java)
java运行
import java.util.List;
import java.util.Scanner;
// 控制台交互界面:负责接收用户输入与结果展示
public class LibrarySystemView {
private LibrarySystem librarySystem;
private Scanner scanner;
// 构造方法:初始化系统与输入流
public LibrarySystemView(LibrarySystem librarySystem) {
this.librarySystem = librarySystem;
this.scanner = new Scanner(System.in);
}
// 显示主菜单(程序入口)
public void showMainMenu() {
while (true) {
System.out.println("\n===== 图书馆管理系统 =====");
System.out.println("1. 图书管理");
System.out.println("2. 用户管理");
System.out.println("3. 退出系统");
System.out.print("请选择功能(1-3):");
String choice = scanner.nextLine().trim();
switch (choice) {
case "1":
showBookManagementMenu(); // 进入图书管理子菜单
break;
case "2":
showUserManagementMenu(); // 进入用户管理子菜单
break;
case "3":
System.out.println("感谢使用,再见!");
scanner.close(); // 关闭输入流
System.exit(0); // 退出程序
break;
default:
System.out.println("输入无效,请重新选择!");
}
}
}
// 图书管理子菜单
private void showBookManagementMenu() {
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("请选择功能(1-5):");
String choice = scanner.nextLine().trim();
switch (choice) {
case "1":
addBook();
break;
case "2":
queryBook();
break;
case "3":
modifyBook();
break;
case "4":
deleteBook();
break;
case "5":
return; // 返回主菜单
default:
System.out.println("输入无效,请重新选择!");
}
}
}
// 添加图书
private void addBook() {
System.out.print("请输入图书编号:");
String bookId = scanner.nextLine().trim();
System.out.print("请输入书名:");
String title = scanner.nextLine().trim();
System.out.print("请输入作者:");
String author = scanner.nextLine().trim();
System.out.print("请输入出版社:");
String publisher = scanner.nextLine().trim();
librarySystem.addBook(new Book(bookId, title, author, publisher));
System.out.println("图书添加成功!");
}
// 查询图书
private void queryBook() {
System.out.print("请输入图书编号(直接回车查询所有图书):");
String bookId = scanner.nextLine().trim();
List<Book> books = librarySystem.queryBook(bookId);
if (books.isEmpty()) {
System.out.println("未找到相关图书!");
return;
}
System.out.println("\n===== 查询结果 =====");
for (Book book : books) {
System.out.println(book);
}
}
// 修改图书
private void modifyBook() {
System.out.print("请输入要修改的图书编号:");
String bookId = scanner.nextLine().trim();
List<Book> books = librarySystem.queryBook(bookId);
if (books.isEmpty()) {
System.out.println("未找到该图书,修改失败!");
return;
}
Book targetBook = books.get(0);
System.out.println("当前图书信息:" + targetBook);
System.out.print("请输入新书名(直接回车保持原信息):");
String newTitle = scanner.nextLine().trim();
if (newTitle.isEmpty()) newTitle = targetBook.getTitle();
System.out.print("请输入新作者(直接回车保持原信息):");
String newAuthor = scanner.nextLine().trim();
if (newAuthor.isEmpty()) newAuthor = targetBook.getAuthor();
System.out.print("请输入新出版社(直接回车保持原信息):");
String newPublisher = scanner.nextLine().trim();
if (newPublisher.isEmpty()) newPublisher = targetBook.getPublisher();
boolean success = librarySystem.modifyBook(bookId, newTitle, newAuthor, newPublisher);
if (success) {
System.out.println("图书修改成功!");
} else {
System.out.println("图书修改失败!");
}
}
// 删除图书
private void deleteBook() {
System.out.print("请输入要删除的图书编号:");
String bookId = scanner.nextLine().trim();
boolean success = librarySystem.deleteBook(bookId);
if (success) {
System.out.println("图书删除成功!");
} else {
System.out.println("删除失败:图书不存在或已被借出!");
}
}
// 用户管理子菜单
private void showUserManagementMenu() {
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("请选择功能(1-5):");
String choice = scanner.nextLine().trim();
switch (choice) {
case "1":
addUser();
break;
case "2":
borrowBook();
break;
case "3":
returnBook();
break;
case "4":
viewBorrowRecord();
break;
case "5":
return; // 返回主菜单
default:
System.out.println("输入无效,请重新选择!");
}
}
}
// 添加用户
private void addUser() {
System.out.print("请输入用户编号:");
String userId = scanner.nextLine().trim();
System.out.print("请输入用户名:");
String name = scanner.nextLine().trim();
librarySystem.addUser(new User(userId, name));
System.out.println("用户添加成功!");
}
// 借阅图书
private void borrowBook() {
System.out.print("请输入用户编号:");
String userId = scanner.nextLine().trim();
System.out.print("请输入要借阅的图书编号:");
String bookId = scanner.nextLine().trim();
User user = librarySystem.getUserById(userId);
Book book = librarySystem.getBookById(bookId);
if (user == null) {
System.out.println("借阅失败:用户不存在!");
return;
}
String result = user.borrowBook(book);
System.out.println(result);
}
// 归还图书
private void returnBook() {
System.out.print("请输入用户编号:");
String userId = scanner.nextLine().trim();
System.out.print("请输入要归还的图书编号:");
String bookId = scanner.nextLine().trim();
User user = librarySystem.getUserById(userId);
if (user == null) {
System.out.println("归还失败:用户不存在!");
return;
}
String result = user.returnBook(bookId);
System.out.println(result);
}
// 查看借阅记录
private void viewBorrowRecord() {
System.out.print("请输入用户编号:");
String userId = scanner.nextLine().trim();
User user = librarySystem.getUserById(userId);
if (user == null) {
System.out.println("查询失败:用户不存在!");
return;
}
List<Book> borrowedBooks = user.getBorrowedBooks();
if (borrowedBooks.isEmpty()) {
System.out.println("该用户暂无借阅记录!");
return;
}
System.out.println("\n===== " + user.getName() + " 的借阅记录 =====");
for (Book book : borrowedBooks) {
System.out.println(book);
}
}
// 程序入口
public static void main(String[] args) {
LibrarySystem system = new LibrarySystem();
LibrarySystemView view = new LibrarySystemView(system);
view.showMainMenu(); // 启动系统,显示主菜单
}
}
四、实现说明
1. 运行环境
- JDK 8 及以上版本(确保支持 Lambda 表达式、ArrayList 等基础 API)
- 开发工具:IntelliJ IDEA、Eclipse 等 Java IDE
2. 运行步骤
- 创建 Java 项目,新建 4 个 Java 类(
Book.java、User.java、LibrarySystem.java、LibrarySystemView.java); - 运行
LibrarySystemView.java的main方法,启动系统; - 通过控制台菜单选择功能,按提示输入相关信息(如图书编号、用户名等),完成操作。
3. 核心功能演示
- 添加图书:主菜单→1→1,输入图书编号、书名、作者、出版社,即可完成添加;
-

- 借阅图书:主菜单→2→2,输入用户编号和图书编号,若图书可借阅则借阅成功;
-

- 查看借阅记录:主菜单→2→4,输入用户编号,即可查看该用户已借阅的所有图书;
-

- 删除图书:主菜单→1→4,输入图书编号,仅当图书未被借出时可删除。
-

五、总结
1. 结对编程优势
- 需求拆解更高效:两人协作明确了 “实体类 - 核心逻辑 - 界面交互” 的三层结构,避免单一思路的局限;
- 代码质量更高:“驾驶员” 编写代码时,“领航员” 实时审查,减少了空指针、逻辑遗漏等问题;
- 知识互补:一人擅长 Java 基础语法,一人熟悉集合操作,协作中相互学习,提升开发效率。
2. 系统特点
- 面向对象设计:类职责单一(Book 封装图书属性、User 封装用户行为),模块解耦,便于扩展;
- 交互友好:控制台菜单层级清晰,操作提示明确,支持 “回车保持原信息” 等便捷操作;
- 逻辑严谨:借阅时校验图书状态,删除时校验图书是否借出,避免数据不一致。
3. 优化方向
- 数据持久化:当前数据存储在内存中,重启后丢失,可通过文件(如 CSV、JSON)或数据库(如 MySQL)实现数据持久化;
- 图形界面:引入 Swing 或 JavaFX 替换控制台界面,提升用户体验;
- 功能扩展:新增图书分类、借阅期限提醒、管理员权限控制等功能,贴近实际图书馆场景。
更多推荐

所有评论(0)