Java-图书管理系统
我的个人主页
欢迎来到我的Java图书管理系统,接下来让我们一同探索如何书写图书管理系统吧!

1管理端和用户端
2建立相关的三个包(book、operation、user)
3建立程序入口Main类
4程序运行
1.首先图书馆管理系统分为管理员端和用户端
1.1管理员端:AdminUser::menu()
------------------------------------------------------管理员菜单------------------------------------------------------
- 1.查找图书
- 2.新增图书
- 3.删除图书
- 4.显示图书
- 0.退出图书
------------------------------------------------------------------------------------------------------------------------
1.2用户端:NormalUser::menu()
------------------------------------------------------用户端----------------------------------------------------------
- 1.查找图书
- 2.借阅图书
- 3.归还图书
- 0.退出系统
------------------------------------------------------------------------------------------------------------------------
2.建立三个包(book(书相关的包),operation(操作相关的包),user(使用者相关的包))
2.1再在book包里面建立Book(书籍对象)和BookList(书架)类
Book
package book;/*** Created with IntelliJ IDEA.* Description:* User:Lenovo* Date:2024-10-26* Time:12:39*/
public class Book{private String name;//书籍名称private String author;//作者private int price;//价格private String taye;//类型private boolean isBorrowed;;//是否被借出public Book(String name, String author, int price, String taye) {this.name = name;this.author = author;this.price = price;this.taye = taye;}public String getName() {return name;}public void setName(String name) {this.name = name;}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;}
这里可以通过快捷键alt+insert快速构造成员方法,也可以快速构建get和set


BookList
package book;
import java.security.PrivilegedAction;
/*** Created with IntelliJ IDEA.* Description:* User:Lenovo* Date:2024-10-26* Time:12:38*/public class BookList {private Book[] books; //存放书籍private static final int DEFAULT_SIZE = 10;private int usedSize; // 有效书籍的个数//private int xxxx;public BookList() {this.books = new Book[DEFAULT_SIZE];//预先存3本书this.books[0] = new Book("三国演义","罗贯中",19,"武侠");this.books[1] = new Book("西游记","吴承恩",20,"神话");this.books[2] = new Book("红楼梦","曹雪芹",15,"小说");this.usedSize = 3;}public Book[] getBooks() {return books;}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;}
}
2.2在operation包里面建立AddBook、 BorrowedBook、DelBook、ExitBook、FindBook ReturnBook、ShowBook类,IOPeration(接口);
AddBook
package operation;
import book.Book;
import book.BookList;import java.util.Scanner;/*** Created with IntelliJ IDEA.* Description:* User:Lenovo* Date:2024-10-26* Time:13:17*/
public class AddBook implements IOPeration{@Overridepublic void work(BookList bookList) {System.out.println("新增图书....");/*if(isFull(bookList)) {System.out.println("书架满了....");return;}*//* if(isFull(bookList)) {//扩容的代码 Arrays.copyOf();}*///1. 整理书籍的信息Scanner scanner = new Scanner(System.in);System.out.println("请输入书籍的名称:");String name = scanner.nextLine();System.out.println("请输入书籍的作者:");String author = scanner.nextLine();System.out.println("请输入书籍的价格:");int price = scanner.nextInt();scanner.nextLine();System.out.println("请输入书籍的类型:");String type = scanner.nextLine();Book book = new Book(name,author,price,type);//2.如果书架有这本书 则不能上架int currentSize = bookList.getUsedSize();for (int i = 0; i < currentSize; i++) {Book tmp = bookList.getBook(i);if(tmp.getName().equals(name)) {System.out.println("有这本书,可以不上架!!");return;}}//3.没有这本书 则放到书籍数组当中bookList.setBooks(currentSize,book);bookList.setUsedSize(currentSize+1);}private boolean isFull(BookList bookList) {return bookList.getBooks().length ==bookList.getUsedSize();}
}
BorrowedBook
package operation;
import book.Book;
import book.BookList;import java.util.Scanner;/*** Created with IntelliJ IDEA.* Description:* User:Lenovo* Date:2024-10-26* Time:13:22*/
public class BorrowedBook implements IOPeration{@Overridepublic void work(BookList bookList) {System.out.println("借阅图书....");System.out.println("请输入你要借阅的图书:");Scanner scanner = new Scanner(System.in);String name = scanner.nextLine();//1.先遍历数组 查找是否存在要借阅的图书int currentSize = bookList.getUsedSize();for (int i = 0; i < currentSize; i++) {Book book = bookList.getBook(i);if(book.getName().equals(name)) {//2.如果存在 检查 是否已经被借出if(book.isBorrowed()) {System.out.println("这本书已经被借出了!");}else {//3. 如果没有借出 可以借book.setBorrowed(true);System.out.println(book);System.out.println("借阅成功!!");}return;}}//4.如果不存在 则不能借阅System.out.println("没有你要找的这本书,无法借阅!!");}
}
DelBook
package operation;
import book.Book;
import book.BookList;import java.util.Scanner;/*** Created with IntelliJ IDEA.* Description:* User:Lenovo* Date:2024-10-26* Time:13:24*/
public class DelBook implements IOPeration{@Overridepublic void work(BookList bookList) {System.out.println("删除图书....");Scanner scanner = new Scanner(System.in);//1、输入你要删除的图书名称:System.out.println("请输入要删除书籍的名称:");String name = scanner.nextLine();//2.查看当前书籍是否存在int index = -1;int i = 0;int currentSize = bookList.getUsedSize();for (; i < currentSize; i++) {Book tmp = bookList.getBook(i);if(tmp.getName().equals(name)) {index = i;break;}}//没有遇到breakif(i >= currentSize) {System.out.println("没有你要删除的书....");return;}//遇到break 此时开始真正删除for (int j = index; j < currentSize-1; j++) {//bookList[j] = bookList[j+1]; errorBook tmp = bookList.getBook(j+1);bookList.setBooks(j,tmp);}//修改usedSize的值bookList.setUsedSize(currentSize-1);bookList.setBooks(currentSize-1,null);System.out.println("删除图书成功了.....");}
}
ExitBook
package operation;import book.BookList;/*** Created with IntelliJ IDEA.* Description:* User:Lenovo* Date:2024-10-26* Time:13:12*/
public class ExitBook implements IOPeration{@Overridepublic void work(BookList bookList) {System.out.println("退出系统.....");int currentSize = bookList.getUsedSize();for (int i = 0; i < currentSize; i++) {//bookList[i] = null;bookList.setBooks(i,null);}bookList.setUsedSize(0);System.exit(0);}
}
FindBook
package operation;import book.BookList;
import book.Book;
import java.util.Scanner;/*** Created with IntelliJ IDEA.* Description:* User:Lenovo* Date:2024-10-26* Time:13:25*/
public class FindBook implements IOPeration{@Overridepublic void work(BookList bookList) {System.out.println("查找图书...");Scanner scanner = new Scanner(System.in);System.out.println("请输入你要查找的图书的名字:");String name = scanner.nextLine();//1.先确定 当前数组当中 有效的书籍个数int currentSize = bookList.getUsedSize();for (int i = 0; i < currentSize; i++) {Book book = bookList.getBook(i);if(book.getName().equals(name)) {System.out.println("找到这本书籍了,书籍内容如下:");System.out.println(book);return;}}System.out.println("没有你要查找的图书的书籍!!");}
}
ReturnBook
package operation;
import book.Book;
import book.BookList;import java.util.Scanner;/*** Created with IntelliJ IDEA.* Description:* User:Lenovo* Date:2024-10-26* Time:13:27*/
public class ReturnBook implements IOPeration{@Overridepublic void work(BookList bookList) {System.out.println("归还图书....");System.out.println("请输入你要归还的图书:");Scanner scanner = new Scanner(System.in);String name = scanner.nextLine();//1.先遍历数组 查找是否存在要归还的图书int currentSize = bookList.getUsedSize();for (int i = 0; i < currentSize; i++) {Book book = bookList.getBook(i);if(book.getName().equals(name)) {if(!book.isBorrowed()) {System.out.println("这本书没有被借出过,不用还!");}else {System.out.println("归还成功");book.setBorrowed(false);System.out.println(book);}return;}}//4.如果不存在 则不能归还System.out.println("没有你要找的这本书,无法归还!!");}
}
ShowBook
package operation;
import book.Book;
import book.BookList;/*** Created with IntelliJ IDEA.* Description:* User:Lenovo* Date:2024-10-26* Time:13:27*/
public class ShowBook implements IOPeration{@Overridepublic void work(BookList bookList) {System.out.println("打印图书....");int currentSize = bookList.getUsedSize();for (int i = 0; i < currentSize; i++) {Book tmp = bookList.getBook(i);System.out.println(tmp);}}
}
IOPeration
package operation;import book.BookList;/*** Created with IntelliJ IDEA.* Description:* User:Lenovo* Date:2024-10-26* Time:13:09*/
public interface IOPeration {void work(BookList books);
}
2.3 user包中建立AdminUser、NormalUser、User类;
AdminUser
package user;import operation.*;import java.util.Scanner;/*** Created with IntelliJ IDEA.* Description:* User:Lenovo* Date:2024-10-26* Time:12:43*/
public class AdminUser extends User{public AdminUser(String name) {super(name);this.ioPerations = new IOPeration[]{new ExitBook(),new FindBook(),new AddBook(),new DelBook(),new ShowBook()};}@Overridepublic 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("*****************************");System.out.println("请输入你的操作:");Scanner scanner = new Scanner(System.in);int choice = scanner.nextInt();return choice;}
}
NormalUser
package user;import operation.*;import java.util.Scanner;/*** Created with IntelliJ IDEA.* Description:* User:Lenovo* Date:2024-10-26* Time:12:42*/
public class NormalUser extends User{public NormalUser(String name) {super(name);this.ioPerations = new IOPeration[]{new ExitBook(),new FindBook(),new BorrowedBook(),new ReturnBook()};}@Overridepublic 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("*****************************");System.out.println("请输入你的操作:");Scanner scanner = new Scanner(System.in);int choice = scanner.nextInt();return choice;}}
User
package user;import book.BookList;
import operation.IOPeration;/*** Created with IntelliJ IDEA.* Description:* User:Lenovo* Date:2024-10-26* Time:12:42*/
public abstract class User {public String name;public IOPeration[] ioPerations; //没有初始化public User(String name) {this.name = name;}public abstract int menu();public void doOperations(int choice, BookList books) {//return this.ioPerations[choice];IOPeration ioPeration = this.ioPerations[choice];//IOPeration ioPeration = new FindBook();ioPeration.work(books);}
}
3整个程序的入口Main类
Main
/*** Created with IntelliJ IDEA.* Description:* User:Lenovo* Date:2024-10-26* Time:12:44*/
import book.BookList;
import user.AdminUser;
import user.NormalUser;
import user.User;import java.util.Scanner;
public class Main {public static User login(){Scanner scanner=new Scanner(System.in);System.out.println("请输入你的姓名: ");String name=scanner.nextLine();System.out.println("请输入你的身份:1:管理员 2:普通用户 ");int choice=scanner.nextInt();if(choice==1){return new AdminUser(name);}else{return new NormalUser(name);}}public static void main(String[] args) {BookList bookList=new BookList();/* Book[] books=new Book[10];books[0]=new Book{"三国演义","罗贯中",19,"武侠"};books[1]=new Book{"西游记","吴承恩",20,"神话"};books[2]=new Book{"红楼梦","曹雪芹",15,"小说"};usedsize=3;*/User user=login();while(true){int choice=user.menu();user.doOperations(choice,bookList);}}
}
这样一个简单的图书管理系统就实现了
4程序运行:
4.1以管理员身份运行:

4.2以用户身份运行:

这次的图书管理系统之旅就到这里了;
相关文章:
Java-图书管理系统
我的个人主页 欢迎来到我的Java图书管理系统,接下来让我们一同探索如何书写图书管理系统吧! 1管理端和用户端 2建立相关的三个包(book、operation、user) 3建立程序入口Main类 4程序运行 1.首先图书馆管理系统分为管理员端和…...
python如何通过json以及pickle读写保存数据
记录信息 比如说我写了这样一段程序,记录了爱吃的食物: food_list []while True:c input("输入1添加新的食物,输入2查询已添加的食物,输入exit退出:")if c "1":new_food input("输入你…...
【SPIE出版,EI检索稳定】2024年人机交互与虚拟现实国际会议(HCIVR 2024,11月15-17日)
2024年人机交互与虚拟现实国际会议(HCIVR 2024) 2024 International Conference on Human-Computer Interaction and Virtual Reality 官方信息 会议官网:www.hcivr.org 2024 International Conference on Human-Computer Interaction and …...
Linux vim编辑器
前言: 首先我们来了解一下什么是编辑器,通常我们在widow系统下例如C/C我们进行写代码时,我们通过vs2022等等编译器进行,这里的编译器是一种IDE(集成开发环境),集成开发环境是将代码编辑器、编译…...
普推知产:申请商标名称从4字改成3字下了初审!
近日7月的时候普推知产老杨帮客户申请的水果猕猴桃31类商标,初步审定公告下来了,基本没什么问题三个月公告结束后一个月内就可以拿到商标注册证,客户所在地全国有名猕猴桃之县,同质化竞争还得需要商标才可以。 刚开始了解到这位做…...
Flink 状态精准一次性特性
Flink 的一个重大价值在于, 它既保证了 exactly-once ,也具有低延迟和高吞吐 的处理能力 。 1.端到端(End-To-End)状态一致性 端到端的一致性保证,意味着结果的正确性贯穿了整个流处理应用的始终;每 一…...
算法笔记day08
1.游游的水果大礼包 这道题很容易让人想到贪心,但是其实是一道枚举题,只需举一个反例,贪心无非就是哪个礼包价值大,就优先组成哪个礼包。 算法思路: 设可以组成x个a礼包,y个b礼包,求ax by的最…...
在Selenium中有哪些元素对象操作方法?( ̄﹃ ̄)
在Selenium中,driver.find_element() 方法用于定位页面上的单个元素。一旦你定位到了一个元素,你可以对这个元素执行多种操作。此外,driver.find_element() 只是定位元素的方法之一,它还有其他一些相关的方法和属性,但…...
sqli-labs靶场安装以及刷题记录-docker
sqli-labs靶场安装以及刷题记录-docker sqli-labs靶场安装-dockersqli-labs靶场刷题less-1 单引号less-2 数字型less-3 单引号括号less-4 双引号括号less-5 单引号布尔盲注less-6 双引号布尔盲注less-7 单引号加括号、输出到文件less-8 单引号布尔盲注less-9 单引号时间盲注les…...
谷歌仓库管理工具repo
Google 的仓库管理工具 Repo 是一个用于管理包含多个 Git 仓库的大型项目的命令行工具。它最初由 Google 为 Android 操作系统开发,以简化和协调众多子项目的版本控制和协作过程。以下是对 Repo 的详细解释: 主要功能与特点 多仓库管理: Rep…...
C#的自定义Tip窗体 - 开源研究系列文章
上次编写了自定义的提示和对话框窗体,这次记录的是自定义的Tip窗体,用于显示提示操作。有时间没编程了,这次就当进行了记录。 1、 项目目录; 2、 源码介绍; 1) 实现; 2) 应用; 3、 运行界面&…...
目前最新 Reflector V11.1.0.2067版本 .NET 反编译软件
目前最新 Reflector V11.1.0.2067版本 .NET 反编译软件 一、简介二、.NET Reflector的主要功能包括:1. **反编译**: 反编译是将已编译的.NET程序集(如.dll或.exe文件)转换回可读的源代码。这使得开发者可以查看和学习第三方库的实现细节&…...
软考:CORBA架构
CORBA过时了吗 CORBA指南 个人小结: IPC,进程间通信,Socket应用在不同机器之间的通信 RPC是一种技术思想而非一种规范 但站在八九十年代的当口,简单来说,就是我在本地调用了一个函数,或者对象的方法&…...
qt QSaveFile详解
QSaveFile 是 Qt 提供的一个类,用于安全地保存文件。它的主要特点是在写入文件时确保数据完整性,以防止文件损坏。使用 QSaveFile,您可以创建一个临时文件,并在成功写入后将其重命名为目标文件,这样可以避免在写入过程…...
【Linux】线程池详解及其基本架构与单例模式实现
目录 1.关于线程池的基本理论 1.1.线程池是什么? 1.2.线程池的应用场景: 2.线程池的基本架构 2.1.线程容器 2.2.任务队列 2.3.线程函数(HandlerTask) 2.4.线程唤醒机制 3.添加单例模式 3.1.单例模式是什么&…...
运输层知识点汇总3
目录 前言 二、为什么在TCP首部中有一个首部长度字段,而UDP的首部就没有这个字段? 三、一个TCP报文段的数据部分最多为多少字节?为什么?如果用户要传送的数据的字节长度超过TCP报文段中的序号字段可能编出的最大序号࿰…...
浔川社团官方联合会提前入驻
近期,我们浔川社团官方发现文章再次被不明网站转发。这一情况引起了我们的高度警觉和深刻反思。我们一直致力于为大家提供高质量、有价值的内容,用心创作每一篇文章,以展现我们社团的风采和理念。然而,这些不明网站未经授权的转发…...
比例数据可视化(Python实现板块层级图绘制)——Instacart Market Basket Analysis
【实验名称】 实验一:绘制板块层级图 【实验目的】 1. 掌握数据文件读取 2. 掌握数据处理的方法 3. 实现板块层级图的绘制 【数据介绍】Instacart Market Basket Analysis 1. 数据说明 数据共有300 0000orders, 20 0000users, …...
C++研发笔记8——C语言程序设计初阶学习笔记6
在第一部分——课前准备的学习中,我就提到了学习C语言的过程中,练习是必不可少的环节,所以本篇笔记我们来进行记录我们学习《C语言程序设计初阶》阶段的第一篇练习文章。 题目一 下面哪个不是C语言内置的数据类型: A.char B.d…...
0softmax和背后的最大熵(极大似然法)
只要无穷阶矩都一样,那么两个分布一定一样。 整理思路:1、设定样本的概率模型与目标概率模型一致(两个模型特性函数一致)建立服从伯努利分布的变量(此处需要理解样本空间及变量的关系)对两个模型进行降维&a…...
java 实现excel文件转pdf | 无水印 | 无限制
文章目录 目录 文章目录 前言 1.项目远程仓库配置 2.pom文件引入相关依赖 3.代码破解 二、Excel转PDF 1.代码实现 2.Aspose.License.xml 授权文件 总结 前言 java处理excel转pdf一直没找到什么好用的免费jar包工具,自己手写的难度,恐怕高级程序员花费一年的事件,也…...
Leetcode 3577. Count the Number of Computer Unlocking Permutations
Leetcode 3577. Count the Number of Computer Unlocking Permutations 1. 解题思路2. 代码实现 题目链接:3577. Count the Number of Computer Unlocking Permutations 1. 解题思路 这一题其实就是一个脑筋急转弯,要想要能够将所有的电脑解锁&#x…...
Java多线程实现之Callable接口深度解析
Java多线程实现之Callable接口深度解析 一、Callable接口概述1.1 接口定义1.2 与Runnable接口的对比1.3 Future接口与FutureTask类 二、Callable接口的基本使用方法2.1 传统方式实现Callable接口2.2 使用Lambda表达式简化Callable实现2.3 使用FutureTask类执行Callable任务 三、…...
Neo4j 集群管理:原理、技术与最佳实践深度解析
Neo4j 的集群技术是其企业级高可用性、可扩展性和容错能力的核心。通过深入分析官方文档,本文将系统阐述其集群管理的核心原理、关键技术、实用技巧和行业最佳实践。 Neo4j 的 Causal Clustering 架构提供了一个强大而灵活的基石,用于构建高可用、可扩展且一致的图数据库服务…...
相机Camera日志分析之三十一:高通Camx HAL十种流程基础分析关键字汇总(后续持续更新中)
【关注我,后续持续新增专题博文,谢谢!!!】 上一篇我们讲了:有对最普通的场景进行各个日志注释讲解,但相机场景太多,日志差异也巨大。后面将展示各种场景下的日志。 通过notepad++打开场景下的日志,通过下列分类关键字搜索,即可清晰的分析不同场景的相机运行流程差异…...
Device Mapper 机制
Device Mapper 机制详解 Device Mapper(简称 DM)是 Linux 内核中的一套通用块设备映射框架,为 LVM、加密磁盘、RAID 等提供底层支持。本文将详细介绍 Device Mapper 的原理、实现、内核配置、常用工具、操作测试流程,并配以详细的…...
Mysql中select查询语句的执行过程
目录 1、介绍 1.1、组件介绍 1.2、Sql执行顺序 2、执行流程 2.1. 连接与认证 2.2. 查询缓存 2.3. 语法解析(Parser) 2.4、执行sql 1. 预处理(Preprocessor) 2. 查询优化器(Optimizer) 3. 执行器…...
return this;返回的是谁
一个审批系统的示例来演示责任链模式的实现。假设公司需要处理不同金额的采购申请,不同级别的经理有不同的审批权限: // 抽象处理者:审批者 abstract class Approver {protected Approver successor; // 下一个处理者// 设置下一个处理者pub…...
安全突围:重塑内生安全体系:齐向东在2025年BCS大会的演讲
文章目录 前言第一部分:体系力量是突围之钥第一重困境是体系思想落地不畅。第二重困境是大小体系融合瓶颈。第三重困境是“小体系”运营梗阻。 第二部分:体系矛盾是突围之障一是数据孤岛的障碍。二是投入不足的障碍。三是新旧兼容难的障碍。 第三部分&am…...
深度学习之模型压缩三驾马车:模型剪枝、模型量化、知识蒸馏
一、引言 在深度学习中,我们训练出的神经网络往往非常庞大(比如像 ResNet、YOLOv8、Vision Transformer),虽然精度很高,但“太重”了,运行起来很慢,占用内存大,不适合部署到手机、摄…...
