Java控制台图书管理系统:面向对象编程实践
2026/9/23 13:18:59 网站建设 项目流程

1. 项目概述

这个基于Java控制台的图书管理系统是我在初学Java时完成的一个练手项目,它完美展现了面向对象编程的核心思想。系统通过区分管理员和普通用户两种角色,实现了图书的增删改查、借阅归还等基础功能。作为Java新手必做的经典项目之一,它不仅涵盖了基础语法和流程控制,更重要的是帮助我们理解封装、继承、多态这三大面向对象特性。

项目采用纯控制台交互方式,操作简单直观。数据存储在内存数组中,程序退出后数据不会持久化保存,这种设计虽然简单但非常适合初学者理解核心编程概念。系统最多支持管理10本图书,通过固定长度的数组实现存储管理。

2. 系统设计与架构

2.1 整体架构设计

系统采用典型的三层架构设计,将不同功能模块进行清晰划分:

  1. 数据层:包含Book和BookList两个核心类,负责图书数据的存储和管理
  2. 业务逻辑层:由IOPeration接口及其实现类组成,处理各种图书操作的具体逻辑
  3. 表示层:包括User抽象类及其子类,以及Main入口类,负责用户交互和流程控制

这种分层设计使得各模块职责明确,耦合度低,便于后续扩展和维护。比如要新增一个图书统计功能,只需在业务逻辑层添加新的实现类即可,不会影响其他模块。

2.2 核心类设计

2.2.1 数据模型类

Book类封装了图书的基本属性:

public class Book { private String name; private String author; private int price; private String type; private boolean isBorrowed; // 构造方法、getter/setter等 }

这里将属性都设为private并通过getter/setter访问,体现了良好的封装性。isBorrowed字段标记图书借阅状态,toString()方法重写后可以直观显示借阅情况。

BookList类管理图书集合:

public class BookList { private Book[] books = new Book[10]; private int usedSize; // 初始化方法、getter/setter等 }

使用固定长度数组存储图书,usedSize记录当前已存储的图书数量。提供getBook()和setBook()方法操作数组元素,避免直接暴露内部数据结构。

2.2.2 操作接口与实现

IOPeration接口定义了统一的操作规范:

public interface IOPeration { void work(BookList bookList); }

所有具体操作类都实现这个接口,如新增图书操作:

public class AddOperation implements IOPeration { @Override public void work(BookList bookList) { // 实现新增逻辑 } }

这种面向接口编程的方式使得系统扩展性极佳。要新增功能只需添加新的实现类,不需要修改现有代码。

2.2.3 用户角色设计

User抽象类定义用户通用属性和行为:

public abstract class User { protected String name; public IOPeration[] ioPerations; public abstract int menu(); public void doIoperation(int choice, BookList bookList) { ioPerations[choice].work(bookList); } }

AdminUserNormalUser继承User类,分别实现自己的菜单和绑定不同的操作数组,通过多态实现不同角色的权限控制。

3. 核心功能实现

3.1 图书管理功能

3.1.1 新增图书

新增图书的主要流程包括:

  1. 检查书架是否已满
  2. 接收用户输入的图书信息
  3. 检查图书是否已存在
  4. 将新图书添加到数组末尾
  5. 更新已用数量

关键代码:

// 判满 if(currentSize == bookList.getBooks().length) { System.out.println("书架满了 不能放了....."); return; } // 构建新书对象 Book newBook = new Book(name,author,price,type); // 判重 for (int i = 0; i < currentSize; i++) { if(bookList.getBook(i).getName().equals(name)) { System.out.println("有这本书不能插入!"); return; } } // 插入 bookList.setBook(currentSize,newBook); bookList.setUsedSize(currentSize+1);
3.1.2 删除图书

删除操作相对复杂,需要:

  1. 查找要删除的图书位置
  2. 将该位置后的所有图书前移一位
  3. 将最后一个位置置为null
  4. 减少已用数量

关键代码:

// 找到要删除的位置pos for (int j = pos; j < currentSize-1; j++) { Book book = bookList.getBook(j+1); bookList.setBook(j,book); } bookList.setBook(currentSize-1,null); bookList.setUsedSize(currentSize-1);

3.2 图书借阅与归还

3.2.1 借阅图书

借阅流程:

  1. 输入要借阅的书名
  2. 遍历查找图书
  3. 检查是否已被借出
  4. 修改借阅状态

关键代码:

if(book.getName().equals(name)) { if(book.isBorrowed()) { System.out.println("这本书已经被借出了!"); return; } book.setBorrowed(true); System.out.println("借阅成功!"); return; }
3.2.2 归还图书

归还流程与借阅类似,只是将借阅状态改为false:

if(book.isBorrowed()) { book.setBorrowed(false); System.out.println("归还成功!"); return; }

3.3 用户交互设计

系统通过控制台菜单与用户交互。不同角色显示不同的菜单选项:

管理员菜单:

*******管理员菜单******* 1. 查找图书 2. 新增图书 3. 删除图书 4. 显示图书 0. 退出系统

普通用户菜单:

*******普通用户菜单******* 1. 查找图书 2. 借阅图书 3. 归还图书 0. 退出系统

用户选择操作后,系统通过多态机制调用对应的功能实现:

public void doIoperation(int choice, BookList bookList) { ioPerations[choice].work(bookList); }

4. 项目亮点与优化建议

4.1 设计亮点

  1. 面向接口编程:所有操作都实现IOPeration接口,新增功能只需添加实现类,符合开闭原则

  2. 多态应用:User类通过抽象方法和多态机制,实现了不同角色的差异化行为

  3. 良好的封装:Book属性私有化,BookList封装数组操作,对外提供统一接口

  4. 清晰的权限控制:通过不同的操作数组实现天然权限隔离

4.2 优化建议

  1. 数据持久化:当前数据存储在内存中,可以改用文件或数据库存储

    • 使用文件存储:将图书信息保存到txt或csv文件
    • 使用数据库:集成JDBC连接MySQL等关系型数据库
  2. 动态扩容:将固定数组改为ArrayList实现动态扩容

    private List<Book> books = new ArrayList<>();
  3. 输入验证:增强用户输入的合法性检查

    try { price = scanner.nextInt(); } catch (InputMismatchException e) { System.out.println("请输入有效的数字价格"); scanner.nextLine(); // 清除错误输入 }
  4. 查询功能增强

    • 支持模糊查询
    • 增加按作者、类型等多条件查询
  5. 异常处理:添加统一的异常捕获机制

    try { // 业务代码 } catch (Exception e) { System.out.println("操作失败:" + e.getMessage()); }
  6. 用户认证:增加用户名密码登录验证

    public class User { private String username; private String password; // ... }

5. 开发与运行指南

5.1 开发环境配置

  1. 安装JDK 8或更高版本
  2. 配置JAVA_HOME环境变量
  3. 推荐使用IntelliJ IDEA或Eclipse作为开发工具

5.2 项目结构

src/ ├── book/ │ ├── Book.java │ └── BookList.java ├── ioperation/ │ ├── AddOperation.java │ ├── BorrowOperation.java │ ├── DelOperation.java │ ├── ExitOperation.java │ ├── FindOperation.java │ ├── IOPeration.java │ ├── ReturnOperation.java │ └── ShowOperation.java ├── user/ │ ├── AdminUser.java │ ├── NormalUser.java │ └── User.java └── Main.java

5.3 编译运行

  1. 命令行编译:

    javac -d . src/Main.java
  2. 命令行运行:

    java Main
  3. IDE运行:直接运行Main类的main方法

5.4 使用说明

  1. 启动程序后,输入用户名和选择角色(1-管理员,2-普通用户)
  2. 根据菜单提示选择操作
  3. 按照提示输入相关信息完成操作
  4. 选择0退出系统

6. 学习价值与实践建议

这个图书管理系统项目虽然简单,但涵盖了Java学习的多个核心知识点:

  1. 面向对象编程:通过类、对象、继承、多态等特性实现业务逻辑
  2. 接口设计:定义统一的操作规范,提高代码扩展性
  3. 数组操作:包括遍历、查找、删除等常见操作
  4. 控制台交互:Scanner类的使用,菜单驱动的程序设计
  5. 程序结构设计:合理的包和类划分,清晰的代码组织

对于初学者,我建议:

  1. 先理解整体设计思路,再阅读具体实现代码
  2. 尝试自己实现一些扩展功能,如按作者查询图书
  3. 将数组改为ArrayList,体验集合框架的使用
  4. 添加异常处理,使程序更加健壮
  5. 尝试将数据持久化到文件

这个项目最值得学习的是其清晰的面向对象设计思想。通过接口定义行为规范,通过抽象类提取公共特性,通过具体类实现特定功能,这种设计方式在实际开发中非常实用。

需要专业的网站建设服务?

联系我们获取免费的网站建设咨询和方案报价,让我们帮助您实现业务目标

立即咨询