Java实现图书管理系统

一、框架

1. 创建类

用户:管理员AdminUser  普通用户NormalUser 继承抽象类User

书:书Book 书架BookList

操作对象:书Book

2. 知识点

主要涉及的知识点:数据类型 变量 if for 数组 方法 类和对象 封装继承多态 抽象类和接口

3.利用数组放置图书

Test.Java

BookList.java

方法调用

BookList.java

Book.java

4.利用向上转型实现用户身份的选择

User.java

添加图书操作AddIOperation等类实现接口IOperations

IOperations.java

每个功能操作均需重写接口IOperations的work方法--此处以添加操作为例

NormalUser.java

AdminUser.java

Test.java

二、功能的实现——重写Work()方法

1.退出操作ExitOperation

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

2.展示操作ShowOperation

public class ShowOperation implements IOperations{@Overridepublic void work(BookList bookList) {System.out.println("展示书籍");for (int i = 0; i < bookList.getUsedSize(); i++) {System.out.println(bookList.getBooks()[i].toString());}}
}

3.查找操作FindOperation

public class FindOperation implements IOperations{@Overridepublic void work(BookList bookList) {System.out.println("查找书籍");System.out.println("请输入您要查找的图书名字:");Scanner scanner = new Scanner(System.in);String name = scanner.nextLine();for (int i = 0; i < bookList.getUsedSize(); i++) {if(bookList.getBooks()[i].getName().equals(name)) {System.out.println(bookList.getBooks()[i].toString());return;}}System.out.println("没有这本书");}
}

4.借阅操作BorrowOperation

public class BorrowOperation implements IOperations{@Overridepublic void work(BookList bookList) {System.out.println("借阅书籍");System.out.println("请输入你要借阅的图书名字:");Scanner scanner = new Scanner(System.in);String name = scanner.nextLine();for (int i = 0; i < bookList.getUsedSize(); i++) {if (bookList.getBooks()[i].getName().equals(name)) {bookList.getBooks()[i].setBorrowed(true);System.out.println("借阅成功");return;}}System.out.println("没有找到这本书");}
}

5.归还操作ReturnOPeration

public class ReturnIOperation implements IOperations{@Overridepublic void work(BookList bookList) {System.out.println("归还书籍");System.out.println("请输入你要归还的图书名字:");Scanner scanner = new Scanner(System.in);String name = scanner.nextLine();for (int i = 0; i < bookList.getUsedSize(); i++) {if (bookList.getBooks()[i].getName().equals(name)) {if(bookList.getBooks()[i].isBorrowed()) {bookList.getBooks()[i].setBorrowed(false);System.out.println("归还成功");return;}else {System.out.println("这本书已经归还了,无需再次归还");return;}}}System.out.println("没有找到这本书");}
}

6.添加功能AddOperation

public class AddIOperation implements IOperations{@Overridepublic void work(BookList bookList) {System.out.println("增添书籍");//判满int currentSize = bookList.getUsedSize();if (currentSize == bookList.getBooks().length) {System.out.println("书架已满,添加失败");return;}System.out.println("请输入图书名字:");Scanner scanner = new Scanner(System.in);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 newBook = new Book(name,author,price,type);//判断书架有没有这本书for (int i = 0; i < bookList.getBooks().length; i++) {if(newBook.equals(bookList.getBooks()[i])) {System.out.println("该书已存在,添加无效");return;}}bookList.setBooks(currentSize,newBook);bookList.setUsedSize(currentSize+1);System.out.println("添加成功");}
}

7.删除操作DelOperation

public class DelOperation implements IOperations{@Overridepublic void work(BookList bookList) {System.out.println("删除书籍");System.out.println("请输入您要删除的图书名字");Scanner scanner = new Scanner(System.in);int pos = -1;String name = scanner.nextLine();int currentSize = bookList.getUsedSize();int i = 0;for (; i < currentSize; i++) {if(name.equals(bookList.getBooks()[i].getName())) {pos = i;break;}}if (i == currentSize) {System.out.println("没有你想删除的图书");return;}int j = pos;for (;j < bookList.getUsedSize()-1; j++) {Book book = bookList.getBooks()[j+1];bookList.setBooks(j,book);}bookList.setBooks(j,null);bookList.setUsedSize(currentSize-1);System.out.println("删除成功");}
}

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

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

相关文章

Linux运维之需掌握的基本Linux命令

前言&#xff1a;本博客仅作记录学习使用&#xff0c;部分图片出自网络&#xff0c;如有侵犯您的权益&#xff0c;请联系删除 目录 一、SHELL 二、执行命令 三、常用系统工作命令 四、系统状态检测命令 五、查找定位文件命令 六、文本文件编辑命令 七、文件目录管理命令…

【JavaWeb】登录校验-会话技术(一)Cookie与Session

登录校验 实现登陆后才能访问后端系统页面&#xff0c;不登陆则跳转登陆页面进行登陆。 首先我们在宏观上先有一个认知&#xff1a; HTTP协议是无状态协议。即每一次请求都是独立的&#xff0c;下一次请求并不会携带上一次请求的数据。 因此当我们通过浏览器访问登录后&#…

Simulink 模型生成 C 代码(一):使用 Embedded Coder 快速向导生成代码

以matlab自带的示例模型RollAxisAutopilot为例进行讲解。RollAxisAutopilot为飞机自动驾驶控制系统模型。 使用快速向导工具生成代码 通过键入以下命令打开模型 RollAxisAutopilot&#xff1a; openExample(RollAxisAutopilot); 如果 C 代码选项卡尚未打开&#xff0c;请在 …

【C++】宏定义

严格来说&#xff0c;这个题目起名为C是不合适的&#xff0c;因为宏定义是C语言的遗留特性。CleanCode并不推荐C中使用宏定义。我当时还在公司做过宏定义为什么应该被取代的报告。但是适当使用宏定义对代码是有好处的。坏处也有一些。 无参宏定义 最常见的一种宏定义&#xf…

新声创新20年:无线技术给助听器插上“娱乐”的翅膀

听力损失并非现代人的专利&#xff0c;古代人也会有听力损失。助听器距今发展已经有二百多年了&#xff0c;从当初单纯的声音放大器到如今的全数字时代助听器&#xff0c;助听器发生了翻天覆地的变化&#xff0c;现代助听器除了助听功能&#xff0c;还具有看电视&#xff0c;听…

C++ 和C#的差别

首先把眼睛瞪大&#xff0c;然后憋住一口气&#xff0c;读下去&#xff1a; 1、CPP 就是C plus plus的缩写&#xff0c;中国大陆的程序员圈子中通常被读做"C加加"&#xff0c;而西方的程序员通常读做"C plus plus"&#xff0c;它是一种使用非常广泛的计算…

Maya崩溃闪退常见原因及解决方案

Autodesk Maya 是一款功能强大的 3D 计算机图形程序&#xff0c;被电影、游戏和建筑等各个领域的设计师广泛使用。然而&#xff0c;Maya 就像任何其他软件一样可能会发生崩溃问题。在前文中&#xff0c;小编给大家介绍了3ds Max使用V-Ray渲染时的崩溃闪退解决方案&#xff1a; …

后端之路第三站(Mybatis)——JDBC跟Mybatis、lombok

一、什么是JDBC JDBC就是sun公司研发的一套通过java来操控数据库的工具&#xff0c;对应不同的数据库系统有不同的JDBC&#xff0c;而他们统称【驱动】&#xff0c;这就是上一篇我们提到创建Mybatis项目时要引入的依赖、以及连接数据库四要素里的第一要素。 JDBC有自己一套原始…

Elasticsearch:Painless scripting 语言(一)

Painless 是一种高性能、安全的脚本语言&#xff0c;专为 Elasticsearch 设计。你可以使用 Painless 在 Elasticsearch 支持脚本的任何地方安全地编写内联和存储脚本。 Painless 提供众多功能&#xff0c;这些功能围绕以下核心原则&#xff1a; 安全性&#xff1a;确保集群的…

近红外光谱脑功能成像(fNIRS):1.光学原理、变量选取与预处理

一、朗伯-比尔定律与修正的朗伯-比尔定律 朗伯-比尔定律 是一个描述光通过溶液时被吸收的规律。想象你有一杯有色液体&#xff0c;比如一杯红茶。当你用一束光照射这杯液体时&#xff0c;光的一部分会被液体吸收&#xff0c;导致透过液体的光变弱。朗伯-比尔定律告诉我们&#…

redis主从复制哨兵模式集群管理

主从复制&#xff1a; 主从复制是高可用Redis的基础&#xff0c;哨兵和集群都是在主从复制基础上实现高可用的。主从复制主要实现了数据的多机备份&#xff0c;以及对于读操作的负载均衡和简单的故障恢复。缺陷&#xff1a;故障恢复无法自动化&#xff1b;写操作无法负载均衡&…

HbuilderX:安卓打包证书.keystore生成与使用

前置条件 已安装jdk或配置好jre环境。 .keystore生成 打开cmd,切换到目标路径,输入以下命令, keytool -genkey -alias testalias -keyalg RSA -keysize 2048 -validity 36500 -keystore test.keystore 输入密钥库口令(要记住), 然后输入一系列信息, …

ui.perfetto.dev sql 查询某个事件范围内,某个事件的耗时并降序排列

ui.perfetto.dev sql 查询某个事件范围内,某个事件的耗时并降序排列 1.打开https://ui.perfetto.dev 导入Chrome Trace Json文件2.ParallelMLP.forward下的RowParallelLinear.forward3.点击Query(SQL),在输入框中输入以下内容,按CtrlEnter,显示查询结果4.点击Show timeline,点击…

2024年07年01日 Redis数据类型以及使用场景

String Hash List Set Sorted Set String&#xff0c;用的最多&#xff0c;对象序列化成json然后存储 1.对象缓存&#xff0c;单值缓存 2.分布式锁 Hash&#xff0c;不怎么用到 1.可缓存经常需要修改值的对象&#xff0c;可单独对对象某个属性进行修改 HMSET user {userI…

C++基础(三):C++入门(二)

上一篇博客我们正式进入C的学习&#xff0c;这一篇博客我们继续学习C入门的基础内容&#xff0c;一定要学好入门阶段的内容&#xff0c;这是后续学习C的基础&#xff0c;方便我们后续更加容易的理解C。 目录 一、内联函数 1.0 产生的原因 1.1 概念 1.2 特性 1.3 面试题 …

用随机森林算法进行的一次故障预测

本案例将带大家使用一份开源的S.M.A.R.T.数据集和机器学习中的随机森林算法&#xff0c;来训练一个硬盘故障预测模型&#xff0c;并测试效果。 实验目标 掌握使用机器学习方法训练模型的基本流程&#xff1b;掌握使用pandas做数据分析的基本方法&#xff1b;掌握使用scikit-l…

珠江电缆,承载您梦想的每一度电

在现代社会&#xff0c;电力无处不在&#xff0c;它不仅是经济发展的动力&#xff0c;更是每个人生活中不可或缺的能量来源。而在这个电力驱动的世界里&#xff0c;有一家企业默默地承载着千家万户的梦想&#xff0c;它就是珠江电缆。 连接梦想的每一度电 珠江电缆成立于2001…

绝区零国际服下载 一键下载绝区零国际服教程

绝区零是一款米哈游倾情打造的全新都市幻想动作角色扮演游戏。在游戏中&#xff0c;我们将扮演一名绳匠&#xff0c;这是为出于各种原因需要进入危险空洞的人提供指引的专业人士。您将与独特的角色一起踏上冒险之旅&#xff0c;携手探索空洞&#xff0c;对战强大敌人&#xff0…

Steam夏促怎么注册 Steam夏促账号注册教程

随着夏日的炙热渐渐充斥着每一个角落&#xff0c;Steam平台也赶来添热闹&#xff0c;推出了一系列让人眼前一亮的夏季促销活动。如果你也是游戏爱好者&#xff0c;我们肯定不能错过这次的steam夏促。正直本次夏日促销有着很多的游戏迎来史低和新史低&#xff0c;有各种各样的游…

20240703在飞凌OK3588-C开发板上刷Rockchip原厂的Buildroot20220811

20240703在飞凌OK3588-C开发板上刷Rockchip原厂的Buildroot20220811 2024/7/3 18:25 详细的刷机LOG&#xff1a; [BEGIN] 2024/7/3 18:18:49 rootRK3588:/# DDR Version V1.07 20220412 LPDDR4X, 2112MHz channel[0] BW16 Col10 Bk8 CS0 Row16 CS1 Row16 CS2 Die BW16 Size204…