Java 图书管理系统功能实现

承接上一篇的 图书管理系统 ,点击这里跳转

要实现什么功能

1.查找图书

2.增加图书

3.删除图书

4.展示图书

5.退出系统

6.借阅图书

7.归还图书

1.查找图书

要完成这个功能需要以下步骤

输入书名,

然后在书架里找到这本书打印出来,

如果没有这本书就返回

public class FindOperation implements IOperation{@Overridepublic void work(BookList bookList) {System.out.println("查找图书-----");//输入书名,查找书名,找到了打印书的信息Scanner scanner = new Scanner(System.in);System.out.println("请输入你要查找的书-----");String name = scanner.nextLine();int currentSize = bookList.getUseSize();for (int i = 0; i < currentSize; i++) {Book book = bookList.getBook(i);//这里比较书的名字if(name.equals(book.getName())) {System.out.println("找到了!");System.out.println(book);return;}}System.out.println("没有找到你要的书-----");return;}
}

由于书在定义的时候重写了toString方法所以可以直接打印出来

2.增加图书

增加图书的前提是书架里有足够的空间,所以需要提前判满,如果已经满了就可以直接返回

//直接加在最后一本书最后,然后书架中当前的书加1,但是前提是需要有足够的空间,所以需要提前判定是否已经满了int currentSize = bookList.getUseSize();if(currentSize == bookList.getBooks().length){System.out.println("书架已经满了-----");return;}

之后的操作是输入书名等信息,放进一本创建的新书中,书架里的书变多,那么当前书架中的书也加一

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();//由于nextLine会接收回车,所以留下一个nextLine来接收空格scanner.nextLine();System.out.println("请输入类型-----");String type = scanner.nextLine();//这里把输入的数据放入到一本新书中Book newBook = new Book(name,author,price,type);//加入新书,当前书加1bookList.setBook(newBook,currentSize);bookList.setUseSize(currentSize+1);System.out.println("加入新书成功!");return;}

 3.删除图书

首先我们要确定怎么来进行删除图书的操作

pos之后的书来覆盖pos下标的书,然后当前书架的书减1,

那么重要的是找到下标pos

 public void work(BookList bookList) {System.out.println("删除图书-----");//删除图书需要先找到此书的下标,用后面的书都覆盖前面的书,当前书数量减1Scanner scanner = new Scanner(System.in);System.out.println("请输入你要删除的书-----");String name = scanner.nextLine();int currentSize = bookList.getUseSize();//把i拿出来防止被释放int i = 0;for (; i < currentSize; i++) {Book book = bookList.getBook(i);//设置一个pos变量来接收下标int pos ;//这里比较书的名字if(name.equals(book.getName())) {//pos 接收下标pos = i;

 那么找到下标之后就需要进行删除书籍的操作

//这里比较书的名字if(name.equals(book.getName())) {//pos 接收下标pos = i;//从这本书开始被后面的书覆盖,这里 currentSize-1 防止越界for (int j = pos; j < currentSize-1; j++) {Book book1 = bookList.getBook(j+1);bookList.setBook(book1,j);}//数量减1bookList.setUseSize(currentSize-1);System.out.println("删除成功!");return;

 因为获取书需要获取pos之后的书籍,那么如果不限制就会发生越界访问

 4.展示图书

这个直接遍历书架打印出书的内容即可

public class ShowOperation implements IOperation{@Overridepublic void work(BookList bookList) {System.out.println("显示图书-----");int currentSize = bookList.getUseSize();for (int i = 0; i < currentSize; i++) {Book book = bookList.getBook(i);System.out.println(book);}}
}

 5.退出系统

这里需要了解exit

在Java中,System.exit(int status) 是一个静态方法,用于立即终止当前正在运行的Java虚拟机(JVM)

public class ExitOperation implements IOperation{@Overridepublic void work(BookList bookList) {System.out.println("退出系统-----");exit(0);}
}

 6.借阅图书

与其他功能相同的是需要输入书名来找书,然后修改书的是否借出值

public class BorrowOperation implements IOperation{@Overridepublic void work(BookList bookList) {System.out.println("借阅图书-----");//输入书名,如果有此书就修改isBorrowed的值,没有则结束Scanner scanner = new Scanner(System.in);System.out.println("请输入你要借阅的书-----");String name = scanner.nextLine();int currentSize = bookList.getUseSize();for (int i = 0; i < currentSize; i++) {Book book = bookList.getBook(i);//这里比较书的名字if(name.equals(book.getName())) {//修改是否借阅book.setBorrowed(true);System.out.println("借阅成功!");return;}}System.out.println("没有找到你要借阅的书-----");return;}
}

 7.归还图书

与借阅图书相同

public class ReturnOperation implements IOperation{@Overridepublic void work(BookList bookList) {System.out.println("归还图书-----");//找到书并修改借出值Scanner scanner = new Scanner(System.in);System.out.println("请输入你要归还的书-----");String name = scanner.nextLine();int currentSize = bookList.getUseSize();for (int i = 0; i < currentSize; i++) {Book book = bookList.getBook(i);//这里比较书的名字if(name.equals(book.getName())) {book.setBorrowed(false);System.out.println("还书成功!");return;}}System.out.println("没有找到你要还的书-----");return;}

看到这里不妨留下你的三连,你的三连就是我的动力! 

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/web/32007.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

04_FFmpeg常用API及内存模型

【说明】课程学习地址&#xff1a;https://ke.qq.com/course/468797 FFmpeg内存模型 FFmpeg内存模型 int avcodec_send_packet(AVCodecContext *avctx, const AVPacket *avpkt); int avcodec_receive_frame(AVCodecContext *avctx, AVFrame *frame);问题(数据的申请和释放): …

1.1 数据采集总览

正所谓巧妇难为无米之炊&#xff0c;数据采集是数据处理的第一步。 什么是数据采集 数据采集&#xff0c;也称为数据收集&#xff0c;是将原始数据从各种来源获取并存储起来的过程。这个过程是数据分析和数据仓库建设的第一步&#xff0c;涉及到从不同的数据源中提取数据&…

Spring的自动注入(也称为自动装配)

自动注入&#xff08;也称为自动装配&#xff09;是Spring框架中的一个核心概念&#xff0c;它与手动装配相对立&#xff0c;提供了一种更简洁、更灵活的方式来管理Bean之间的依赖关系。 在Spring应用程序中&#xff0c;如果类A依赖于类B&#xff0c;通常需要在类A中定义一个类…

qt 一个可以拖拽的矩形

1.概要 2.代码 2.1 mycotrl.h #ifndef MYCOTRL_H #define MYCOTRL_H#include <QWidget> #include <QMouseEvent>class MyCotrl: public QWidget {Q_OBJECT public://MyCotrl();MyCotrl(QWidget *parent nullptr); protected:void paintEvent(QPaintEvent *even…

MySQL 死锁查询和解决死锁

来了来了来了&#xff01;客户现场又要骂街了&#xff0c;你们这是什么破系统怎么这么慢啊&#xff1f;&#xff01;&#xff1f;&#xff01; 今天遇到了mysql死锁&#xff0c;直接导致服务器CPU被PUA直接GUA了&#xff01; 别的先别管&#xff0c;先看哪里死锁&#xff0c;或…

【MySQL数据库】:MySQL视图特性

视图的概念 视图是一个虚拟表&#xff0c;其内容由查询定义&#xff0c;同真实的表一样&#xff0c;视图包含一系列带有名称的列和行数据。视图中的数据并不会单独存储在数据库中&#xff0c;其数据来自定义视图时查询所引用的表&#xff08;基表&#xff09;&#xff0c;在每…

[保姆级教程]uniapp实现底部导航栏

文章目录 前置准备工作安装HBuilder-X新建uniapp项目教程使用HBuilder-X启动uniapp项目教程 实现底部导航栏package.json中配置导航栏详细配置内容 前置准备工作 安装HBuilder-X 详细步骤可看上文》》 新建uniapp项目教程 详细步骤可看上文》》 使用HBuilder-X启动uniapp项…

vivado、vitis2022安装及其注意事项(省时、省空间)

1、下载 AMD官网-资源与支持-vivado ML开发者工具&#xff0c;或者vitis平台&#xff0c; 下载的时候有个官网推荐web安装&#xff0c;亲测这个耗时非常久&#xff0c;不建议使用&#xff0c;还是直接下载89G的安装包快。 注意&#xff1a;安装vitis平台会默认安装vivado&…

【Deep Learning】Self-Supervised Learning:自监督学习

自监督学习 本文基于清华大学《深度学习》第12节《Beyond Supervised Learning》的内容撰写&#xff0c;既是课堂笔记&#xff0c;亦是作者的一些理解。 在深度学习领域&#xff0c;传统的监督学习(Supervised Learning)的形式是给你输入 x x x和标签 y y y&#xff0c;你需要训…

树莓派4B_OpenCv学习笔记12:OpenCv颜色追踪_画出轨迹

今日继续学习树莓派4B 4G&#xff1a;&#xff08;Raspberry Pi&#xff0c;简称RPi或RasPi&#xff09; 本人所用树莓派4B 装载的系统与版本如下: 版本可用命令 (lsb_release -a) 查询: Opencv 版本是4.5.1&#xff1a; 今日尝试使用倒叙的方式来学习OpenCV颜色追踪&#xff0…

Claude 3.5 强势出击:解析最新AI模型的突破与应用

近年来&#xff0c;人工智能领域的发展迅猛&#xff0c;各大科技公司纷纷推出了自家的高级语言模型。在这场技术竞赛中&#xff0c;Anthropic的Claude系列模型凭借其强大的性能和创新的功能脱颖而出。最近&#xff0c;Anthropic发布了Claude 3.5 Sonnet模型&#xff0c;引起了广…

如何设置Excel单元格下拉列表

如何设置Excel单元格下拉列表 在Excel中设置单元格下拉列表可以提高数据输入的准确性和效率。以下是创建下拉列表的步骤&#xff1a; 使用数据验证设置下拉列表&#xff1a; 1. 选择单元格&#xff1a; 选择你想要设置下拉列表的单元格或单元格区域。 2. 打开数据验证&…

高斯算法的原理及其与常规求和方法的区别

高斯算法的原理 高斯算法的原理源于数学家卡尔弗里德里希高斯在他少年时期发现的一种求和方法。当时老师让学生们计算1到100的和&#xff0c;高斯发现了一种快速计算的方法。 高斯注意到&#xff0c;如果将序列的首尾两数相加&#xff0c;结果总是相同的。例如&#xff1a; …

DVWA 靶场 JavaScript 通关解析

前言 DVWA代表Damn Vulnerable Web Application&#xff0c;是一个用于学习和练习Web应用程序漏洞的开源漏洞应用程序。它被设计成一个易于安装和配置的漏洞应用程序&#xff0c;旨在帮助安全专业人员和爱好者了解和熟悉不同类型的Web应用程序漏洞。 DVWA提供了一系列的漏洞场…

【Python】从基础到进阶(一):了解Python语言基础以及变量的相关知识

&#x1f525; 个人主页&#xff1a;空白诗 文章目录 引言一、Python简介1.1 历史背景1.2 设计哲学1.3 语言特性1.4 应用场景1.5 为什么选择Python 二、Python语言基础2.1 注释规则2.1.1 单行注释2.1.2 多行注释2.1.3 文件编码声明注释 2.2 代码缩进2.3 编码规范2.3.1 命名规范…

AlphaMissense:预测错义变异的致病性

错义变异或错义变体&#xff08;missense variation或missense variants&#xff09;是改变蛋白质氨基酸序列的遗传变异。致病性错义变异会严重破坏蛋白质功能&#xff0c;在目前观察到的400多万个错义变异中&#xff0c;只有2%在临床上被确定为致病或良性。对剩下的类型不明的…

力扣随机一题 模拟+字符串

博客主页&#xff1a;誓则盟约系列专栏&#xff1a;IT竞赛 专栏关注博主&#xff0c;后期持续更新系列文章如果有错误感谢请大家批评指出&#xff0c;及时修改感谢大家点赞&#x1f44d;收藏⭐评论✍ 1910.删除一个字符串中所有出现的给定子字符串【中等】 题目&#xff1a; …

【数据结构与算法】树的遍历,森林遍历 详解

树的先根遍历、后根遍历对应其二叉树的哪种遍历 树的先根遍历对应其二叉树的先序遍历&#xff08;根-左-右&#xff09;。树的后根遍历对应其二叉树的中序遍历&#xff08;左-根-右&#xff09;。 森林的先根遍历、中根遍历对应其二叉树的哪种遍历? 森林的先根遍历对应其二…

Elasticsearch 数据提取 - 最适合这项工作的工具是什么?

作者&#xff1a;来自 Elastic Josh Asres 了解在 Elasticsearch 中为你的搜索用例提取数据的所有不同方式。 对于搜索用例&#xff0c;高效采集和处理来自各种来源的数据的能力至关重要。无论你处理的是 SQL 数据库、CRM 还是任何自定义数据源&#xff0c;选择正确的数据采集…

《Deep learning practice》learning notes

学习笔记&#xff1a; 【公开课】旷视x北大《深度学习实践》&#xff08;28课时全&#xff09; R Talk | 旷视科技目标检测概述&#xff1a;Beyond RetinaNet and Mask R-CNN 文章目录 Lecture 1: Introduction to Computer Vision and Deep Learning&#xff08;孙剑&#x…