跳到主要内容
极客日志极客日志面向AI+效率的开发者社区
首页博客GitHub 精选镜像AI 生图工具UI配色美学隐私政策关于联系
搜索内容 / 工具 / 仓库 / 镜像...⌘K搜索
注册
博客列表
Javajava

Java 图书管理系统设计与实现

使用 Java 面向对象编程思想设计并实现一个控制台图书管理系统。系统包含 Book、BooList、User、NormalUser、AdminiUser 等核心类,通过接口 IOperation 统一管理业务操作。功能涵盖用户登录、菜单选择、图书查找、借阅、归还、新增及删除等。代码展示了包结构划分、继承多态的应用以及基本的业务逻辑实现,适合 Java 初学者练习类和对象的使用。

星河入梦发布于 2026/2/25更新于 2026/7/1944 浏览
Java 图书管理系统设计与实现

Java 图书管理系统设计与实现

本教程将使用 Java 面向对象编程思想,基于类、对象、继承、多态及接口实现一个控制台图书管理系统。系统包含 Book、BooList、User、NormalUser、AdminiUser 等核心类,通过接口 IOperation 统一管理业务操作。

一、package book

1.1. Book

定义书籍实体类,包含书名、作者、价格、类型及借阅状态。

package book;

public class Book {
    private String title; // 书籍名称
    private String author; // 作者
    private int price; // 价格
    private String type; // 类型
    private boolean BeBorrowed; // 是否被借出

    public Book(String title, String author, int price, String type, boolean beBorrowed) {
        this.title = title;
        this.author = author;
        this.price = price;
        this.type = type;
        this.BeBorrowed = beBorrowed;
    }

    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 int getPrice() { return price; }
    public void setPrice(int price) { this.price = price; }
    public String getType() { return type; }
    public void setType(String type) { this.type = type; }
    public boolean isBeBorrowed() { return BeBorrowed; }
    public void setBeBorrowed(boolean beBorrowed) { BeBorrowed = beBorrowed; }

    @Override
    public String toString() {
        return "Book{" +
                "title='" + title + '\'' +
                ", author='" + author + '\'' +
                ", price=" + price +
                ", type='" + type + '\'' +
                ", BeBorrowed=" + BeBorrowed +
                '}';
    }
}

1.2. BooList

定义书架类,用于存储和管理书籍数组。

package book;

public class BooList {
    private Book[] books; // 存放书籍
    private static final int DEFAULT_SIZE = 10;
    private int usedSize; // 有效书籍的个数

    public BooList() {
        this.books = new Book[DEFAULT_SIZE];
        this.books[0] = new Book("骆驼祥子", "老舍", 26, "小说", false);
        this.books[1] = new Book("雷雨", "曹禺", 24, "戏剧", true);
        this.books[2] = new Book("再别康桥", "徐志摩", 19, "诗歌", false);
        this.books[3] = new Book("五猖会", "鲁迅", 21, "散文", false);
        this.usedSize = 4;
    }

    public int getUsedSize() { return usedSize; }
    public void setUsedSize(int usedSize) { this.usedSize = usedSize; }
    public Book getBook(int pos) { return books[pos]; }
    public void setBooks(int pos, Book book) { books[pos] = book; }
}

二、package user

2.1. User

定义用户抽象基类,包含姓名和菜单方法。

package user;

import book.BooList;
import operation.IOperation;

public abstract class User {
    public String name;
    public IOperation[] iOperations;

    public User(String name) {
        this.name = name;
    }

    public abstract int menu();

    public void doOperation(int choice, BooList books) {
        IOperation iOperation = this.iOperations[choice];
        iOperation.work(books);
    }
}

2.2. NormalUser 与 AdminiUser

普通用户和管理员继承自 User 类。

package user;

import operation.*;
import java.util.Scanner;

public class NormalUser extends User {
    public NormalUser(String name) {
        super(name);
        this.iOperations = new IOperation[]{
            new ExitSystem(), new FindBook(), new BorrowBook(), new ReturnBook()
        };
    }

    @Override
    public int menu() {
        System.out.println("欢迎" + this.name + "图书管理系统");
        System.out.println("**********普通用户菜单**********");
        System.out.println("1.查找图书");
        System.out.println("2.借阅图书");
        System.out.println("3.归还图书");
        System.out.println("0.退出系统");
        System.out.println("****************************");
        Scanner sca = new Scanner(System.in);
        int choice = sca.nextInt();
        return choice;
    }
}
package user;

import operation.*;
import java.util.Scanner;

public class AdminiUser extends User {
    public AdminiUser(String name) {
        super(name);
        this.iOperations = new IOperation[] {
            new ExitSystem(), new FindBook(), new AddBook(), new DeleteBook(), new DisplayBook()
        };
    }

    @Override
    public int menu() {
        System.out.println("欢迎" + this.name + "图书管理系统");
        System.out.println("**********管理员菜单**********");
        System.out.println("1.查找图书");
        System.out.println("2.新增图书");
        System.out.println("3.删除图书");
        System.out.println("4.显示图书");
        System.out.println("0.退出系统");
        System.out.println("****************************");
        Scanner sca = new Scanner(System.in);
        int choice = sca.nextInt();
        return choice;
    }
}

三、Main

主入口类,负责登录验证和流程控制。

import book.BooList;
import user.AdminiUser;
import user.NormalUser;
import user.User;
import java.util.Scanner;

public class Main {
    public static User Login() {
        Scanner sca = new Scanner(System.in);
        System.out.println("请输入你的姓名:");
        String name = sca.nextLine();
        System.out.println("请输入你的身份:1.管理员 2.普通用户");
        int choice = sca.nextInt();
        if (choice == 1) {
            return new AdminiUser(name);
        } else {
            return new NormalUser(name);
        }
    }

    public static void main(String[] args) {
        BooList booList = new BooList();
        User user = Login();
        int choice = user.menu();
        user.doOperation(choice, booList);
    }
}

四、package operation

4.1. IOperation 接口

统一业务操作接口。

package operation;

import book.BooList;

public interface IOperation {
    void work(BooList books);
}

4.2. 业务逻辑实现

查找图书
package operation;

import book.BooList;
import book.Book;
import java.util.Scanner;

public class FindBook implements IOperation {
    @Override
    public void work(BooList booList) {
        System.out.println("查找图书...");
        Scanner sca = new Scanner(System.in);
        String name = sca.nextLine();
        int currentSize = booList.getUsedSize();
        for (int i = 0; i < currentSize; i++) {
            Book book = booList.getBook(i);
            if (book.getTitle().equals(name)) {
                System.out.println("找到这本书籍了,书籍内容如下:");
                System.out.println(book);
                return;
            }
        }
        System.out.println("没有你要找的书籍。");
    }
}
借阅图书
package operation;

import book.BooList;
import book.Book;
import java.util.Scanner;

public class BorrowBook implements IOperation {
    @Override
    public void work(BooList books) {
        System.out.println("借阅图书...");
        System.out.println("请输入你要借阅的图书:");
        Scanner scanner = new Scanner(System.in);
        String name = scanner.nextLine();
        int currentSize = books.getUsedSize();
        for (int i = 0; i < currentSize; i++) {
            Book book = books.getBook(i);
            if (book.getTitle().equals(name)) {
                if (book.isBeBorrowed()) {
                    System.out.println("这本书已经被借出了!");
                } else {
                    book.setBeBorrowed(true);
                    System.out.println(book);
                    System.out.println("借阅成功!!");
                }
                return;
            }
        }
        System.out.println("没有你要找的这本书,无法借阅!!");
    }
}
退出系统
package operation;

import book.BooList;

public class ExitSystem implements IOperation {
    @Override
    public void work(BooList books) {
        System.out.println("退出系统...");
        int currentSize = books.getUsedSize();
        for (int i = 0; i < currentSize; i++) {
            books.setBooks(i, null);
        }
        System.exit(0);
    }
}

(注:AddBook, DeleteBook, DisplayBook, ReturnBook 逻辑类似,可根据需求扩展)

目录

  1. Java 图书管理系统设计与实现
  2. 一、package book
  3. 1.1. Book
  4. 1.2. BooList
  5. 二、package user
  6. 2.1. User
  7. 2.2. NormalUser 与 AdminiUser
  8. 三、Main
  9. 四、package operation
  10. 4.1. IOperation 接口
  11. 4.2. 业务逻辑实现
  12. 查找图书
  13. 借阅图书
  14. 退出系统
  • 免费图片AI生成工具免费生成了解详情
  • Magick API 一键接入全球大模型注册送1000万token查看
  • 免费图片视频在线生成30秒,将你的创意变成现实开始设计
  • X/Twitter免费视频下载器免登陆无限额度免费视频解析下载了解详情
  • 100+免费在线小游戏爽一把
极客日志微信公众号二维码

微信扫一扫,关注极客日志

微信公众号「极客日志V2」,在微信中扫描左侧二维码关注。展示文案:极客日志V2 zeeklog

更多推荐文章

查看全部
  • 用老 Mac 跑本地 AI:OpenClaw 环境一键搭建
  • Windows 11 环境下通过命令行升级 Python 版本的方法
  • 荣耀 MWC 2026 展示人形机器人,手机厂商布局具身智能
  • 西门子S7-1200 PLC与爱普生机器人Modbus TCP通讯配置
  • AI 大模型开发入门:使用 OpenAI API 实现 Hello World
  • 中小团队基于 Ubuntu 的 DooTask 项目管理系统私有化部署实战
  • Llama 2 ONNX 模型快速部署指南
  • 最新最全机器人顶会“灵巧手”(dexterous hand)论文集合
  • Stable Diffusion 本地部署与基础使用指南
  • 秋叶绘世 Stable Diffusion 整合包技术解析与使用指南
  • VS Code + WSL 下 GitHub 访问与 Copilot 连接问题解决方案
  • 流处理与 RAG 驱动的 Python ETL 框架架构设计
  • 零门槛上手!小白也能封神,好用的AI写作平台
  • 基于Coze平台搭建AI客服机器人的全流程指南
  • DFT 中的 On-Chip Clock Controller (OCC) 架构设计与插入规则
  • SRS 流媒体服务器安装配置与使用指南
  • 平面图转 3D 效果图的 AI 方法详解
  • Python 实现进度条的常用库与方法
  • Jetpack Compose 实现微信风格图片浏览:缩放、切换与预览
  • Photoshop 集成 ComfyUI 实现 AI 绘画工作流

相关免费在线工具

  • Keycode 信息

    查找任何按下的键的javascript键代码、代码、位置和修饰符。 在线工具,Keycode 信息在线工具,online

  • Escape 与 Native 编解码

    JavaScript 字符串转义/反转义;Java 风格 \uXXXX(Native2Ascii)编码与解码。 在线工具,Escape 与 Native 编解码在线工具,online

  • JavaScript / HTML 格式化

    使用 Prettier 在浏览器内格式化 JavaScript 或 HTML 片段。 在线工具,JavaScript / HTML 格式化在线工具,online

  • JavaScript 压缩与混淆

    Terser 压缩、变量名混淆,或 javascript-obfuscator 高强度混淆(体积会增大)。 在线工具,JavaScript 压缩与混淆在线工具,online

  • Base64 字符串编码/解码

    将字符串编码和解码为其 Base64 格式表示形式即可。 在线工具,Base64 字符串编码/解码在线工具,online

  • Base64 文件转换器

    将字符串、文件或图像转换为其 Base64 表示形式。 在线工具,Base64 文件转换器在线工具,online