当前位置: 首页 > news >正文

Java实现命令行图书管理系统(附完整源码)

一、项目概述

本文将介绍如何使用Java实现一个基于命令行的图书管理系统。系统支持管理员普通用户两种角色,提供图书的增删改查、借阅归还等功能。项目采用面向对象设计原则,代码结构清晰,适合Java初学者学习。

二、系统功能架构

graph TD
    A[图书管理系统] --> B[图书管理]
    A --> C[用户管理]
    B --> D[添加图书]
    B --> E[删除图书]
    B --> F[查找图书]
    B --> G[显示图书]
    B --> H[借阅归还]
    C --> I[管理员]
    C --> J[普通用户] 

三、核心类设计 

1. 图书类(Book)

属性: 

  • 书名

  • 作者

  • 价格

  • 类型

  • 借阅状态

 代码实现

package book_management.book;
// 关于具体书本的类
public class Book {private String bookName; //书名private String author; //作者private Double price; //价格private String type; //类别private Boolean isBorrowed; //借阅状态,false是未借出,true是借出public Book(String bookName, String author, Double price, String type) {this.bookName = bookName;this.author = author;this.price = price;this.type = type;this.isBorrowed = false;}public void setPrice(Double price) {this.price = price;}public void setType(String type) {this.type = type;}public void setBorrowed(Boolean borrowed) {isBorrowed = borrowed;}public String getBookName() {return bookName;}public String getAuthor() {return author;}public Double getPrice() {return price;}public String getType() {return type;}public Boolean getBorrowed() {return isBorrowed;}
}

2. 书架类(BookList)

 使用ArrayList管理图书集合:

public class BookList {//存放所有具体的书本对象 - 动态数据private final List<Book> books = new ArrayList<>();// 保存当前所有书本的名称 - 动态数据private final List<String> bookNames = new ArrayList<>();public BookList() {//在类加载时,将静态变量初始化,相当于图书馆中默认的藏书//四大名著作为默认书籍添加到图书馆中addBook(new Book("三国演义", "罗贯中", 83.5, "小说"));addBook(new Book("水浒传", "施耐庵", 65.5, "小说"));addBook(new Book("西游记", "吴承恩", 55.5, "小说"));addBook(new Book("红楼梦", "曹雪芹", 66.6, "小说"));}public void addBook(Book book) {books.add(book);bookNames.add(book.getBookName());}// 获取书籍数量public int getSize() {return books.size();}// 获取指定书籍public Book getBook(int index) {if (index >= 0 && index < books.size()) {return books.get(index);}return null;}// 添加删除方法public void removeBook(int index) {if (index >= 0 && index < books.size()) {String bookName = books.get(index).getBookName();books.remove(index);bookNames.remove(bookName);}}// 添加查找方法public int findBookIndex(String bookName) {for (int i = 0; i < books.size(); i++) {if (books.get(i).getBookName().equals(bookName)) {return i;}}return -1;}
}

3. 操作接口(IOperation) 

public interface IOperation {void work(BookList bookList, Scanner scanner);
}

四、功能实现

1. 查找图书(FindOperation) 

实现逻辑

  1. 接收用户输入的书名

  2. 遍历书架匹配图书

  3. 输出查找结果

核心代码

public class FindOperation implements IOperation {@Overridepublic void work(BookList bookList, Scanner scanner) {System.out.println("============ 查找书籍 ============");// 清除可能存在的换行符scanner.nextLine();System.out.println("请输入书名:");String name = scanner.nextLine(); // 等待用户输入boolean found = false;for (int i = 0; i < bookList.getSize(); i++) {if (bookList.getBook(i).getBookName().equals(name)) {Book book = bookList.getBook(i);System.out.printf("找到书籍: 《%s》 作者:%s 价格:%.2f 类型:%s%n",book.getBookName(),book.getAuthor(),book.getPrice(),book.getType());found = true;break;}}if (!found) {System.out.println("未找到书籍: " + name);}System.out.println("================================");System.out.println("按回车键返回菜单...");scanner.nextLine(); // 等待用户按回车}
}

2. 借阅图书(BorrowOperation)

sequenceDiagram
    用户->>系统: 输入借阅书名
    系统->>书架: 查找图书
    书架-->>系统: 返回图书对象
    系统->>图书: 标记为已借阅
    系统-->>用户: 显示借阅结果 

代码片段

if (book.getBorrowed()) {System.out.println("该图书已被借出");
} else {book.setBorrowed(true);System.out.println("借阅成功");
}

3. 归还图书(ReturnOperation) 

界面截图

 代码片段

public void work(BookList bookList, Scanner scanner) {System.out.println("============ 归还书籍 ============");// 清除输入缓冲区scanner.nextLine();System.out.println("请输入要归还的书名:");String name = scanner.nextLine();boolean found = false;for (int i = 0; i < bookList.getSize(); i++) {Book book = bookList.getBook(i);if (book.getBookName().equals(name)) {if (book.getBorrowed()) {book.setBorrowed(false);System.out.println("归还成功!感谢您归还《" + name + "》");} else {System.out.println("《" + name + "》未被借出,无需归还");}found = true;break;}}if (!found) {System.out.println("未找到书籍: " + name);}

五、用户系统设计

1. 用户基类(User)

public abstract class User {protected String userName;// 不同用户对应的权限,就在IOperation数组中protected IOperation[] operations;protected Scanner scanner;public User(String userName, Scanner scanner) {this.userName = userName;this.scanner = scanner;}// 根据用户的输入返回具体的操作编号//只有具体子类才知道菜单的功能是啥,强制要求所有具体子类必须实现此方法public abstract int menu();public void doOperation(int choice, BookList bookList) {if (choice > 0 && choice <= operations.length) {operations[choice - 1].work(bookList, scanner);} else if (choice != -1) {System.out.println("无效的选择!");}}
}

 2. 管理员(AdminUser)

功能菜单

  1. 新增图书

  2. 删除图书

  3. 查找图书

  4. 显示所有图书

  5. 退出系统

界面截图: 

代码片段: 

 public int menu() {System.out.println("===================================");System.out.println("欢迎管理员" + super.userName + "登录MB的图书管理系统");System.out.println("1.增加书籍");System.out.println("2.删除书籍");System.out.println("3.修改书籍");System.out.println("4.查询书籍");System.out.println("5.查看书籍列表");System.out.println("-1.退出");System.out.println("请输入你的选择");try {int choice = scanner.nextInt();scanner.nextLine();System.out.println("===================================");return choice;}catch (InputMismatchException e) {System.out.println("输入无效,请输入数字!");scanner.nextLine();return -2;}}
}

 3. 普通用户(NormalUser)

菜单实现代码

 public int menu() {System.out.println("===================================");System.out.println("欢迎用户" + super.userName + "登录MB的图书管理系统");System.out.println("1.显示书籍列表");System.out.println("2.查询书籍");System.out.println("3.借阅书籍");System.out.println("4.归还书籍");System.out.println("-1.退出");System.out.println("请输入你的选择");int choice = scanner.nextInt();scanner.nextLine();System.out.println("===================================");return choice;}
}

 六、主函数逻辑

程序启动流程

public class Main {public static void main(String[] args) {Scanner mainScanner = new Scanner(System.in);BookList bookList = new BookList();User user = login(mainScanner,bookList);while (true) {int choice = user.menu();if (choice == -1) {System.out.println("Bye ~~");break;}user.doOperation(choice, bookList);}mainScanner.close();}private static User login(Scanner scanner, BookList bookList) {System.out.println("请输入您的姓名 : ");String userName = scanner.nextLine();System.out.println("请输入您的身份,1表示普通用户,0表示管理员");int who = scanner.nextInt();if (who == 1) {return new NormalUser(userName, scanner);  // 1对应普通用户} else {return new AdminUser(userName, scanner,bookList);   // 0对应管理员}}
}

登录界面截图: 

七、项目总结

技术亮点

  1. 采用面向接口编程,操作解耦

  2. 使用继承实现多态用户系统

  3. 异常处理完善,避免程序崩溃

扩展方向

  • 添加数据库持久化存储

  • 实现图书预约功能

  • 增加借阅期限管理

完整源码获取 java_se_code: Mb's Library Management System

相关文章:

  • Dif-Fusion:第一个基于扩散模型实现的红外光与可见光图像融合的论文
  • WordPress搜索引擎优化的最佳重定向插件:进阶指南
  • 学习路之PHP--easyswoole简易增删改查入门
  • 隆道公司助力成都打造数字化转型“西部标杆”
  • 高效工具-tldr
  • Rider崩溃问题终极解决指南
  • sensevoice sherpa-onnx部署
  • 基于esp32,控制IO1高低电平 和读取IO0按键的c程序
  • 环境温度通过H2A.Zub和H3K27me3动态调控拟南芥细胞命运决定
  • 【redis实战篇】第六天
  • [学习]C++ 模板探讨(代码示例)
  • 《胜算》
  • 什么是物化视图(Materialized View)?
  • leetcode 3373. 连接两棵树后最大目标节点数目 II 困难
  • ArcPy错误处理与调试技巧
  • 【笔记】suna部署之获取 Firecrawl API key
  • JAVA与C语言之间的差异(二)
  • 镍钯金PCB有哪些工艺优势?
  • postgresql 流复制中指定同步的用户
  • Whole-body Humanoid Robot Locomotion with Human Reference
  • 网站404怎么做视频教程/seo核心技术排名
  • 长沙做网站哪家公司好/网址如何被快速收录
  • 贵阳网站建设/58百度搜索引擎
  • 网站的标签/百度的营销中心上班怎么样
  • 深圳手机商城网站设计公司/请输入搜索关键词
  • 做网站可以使用免费空间吗/seo和sem是什么