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;下一次请求并不会携带上一次请求的数据。 因此当我们通过浏览器访问登录后&#…

go语言怎么获取文件的大小并且转化为kb为单位呢?

在Go语言中&#xff0c;你可以使用os包中的IsExist和Stat函数来获取文件的信息&#xff0c;包括文件的大小。文件的大小通常是以字节为单位的&#xff0c;但你可以很容易地将其转换为KB&#xff08;千字节&#xff09;。 下面是一个简单的Go程序示例&#xff0c;该程序打开指定…

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

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

【C++】宏定义

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

makefile总结

1,Makefile规则介绍 一个简单的 Makefile 描述规则组成: TARGET... : PREREQUISITES... COMMAND 注意: 每一个命令行必须以[Tab]字符开始, [Tab]字符告诉 make 此行是一个命令行。 make 按照命令完成相应的动作。这也是书写 Makefile 中容易产生,而且比较隐蔽的错…

油烟净化器:餐饮业健康环保的守护者

我最近分析了餐饮市场的油烟净化器等产品报告&#xff0c;解决了餐饮业厨房油腻的难题&#xff0c;更加方便了在餐饮业和商业场所有需求的小伙伴们。 在现代餐饮业&#xff0c;油烟净化器已经成为不可或缺的重要设备。它不仅是保障餐饮环境清洁的利器&#xff0c;更是守护健康…

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

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

【LeetCode】368. 最大整除子集

虽然这题挺难写的&#xff0c;但是仍然提醒了我&#xff1a;解题要注意方法。在明确分析当一条道路走不通的时候&#xff0c;就不要再犹豫了&#xff0c;就要果断的换方法&#xff0c;尝试用其它方法解决。否则一味的消耗时间&#xff0c;得不偿失。换方法的前提是明确的分析&a…

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; …

Neo4j 图数据库 高级操作

Neo4j 图数据库 高级操作 文章目录 Neo4j 图数据库 高级操作1 批量添加节点、关系1.1 直接使用 UNWIND 批量创建关系1.2 使用 CSV 文件批量创建关系1.3 选择方法 2 索引2.1 创建单一属性索引2.2 创建组合属性索引2.3 创建全文索引2.4 列出所有索引2.5 删除索引2.6 注意事项 3 清…

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

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

SerialportToTCP② 全

效果补全&#xff08;代码&#xff09;&#xff1a; namespace SerialportToTCP {public partial class Form1 : Form{IniHelper Ini;string[] botelvs new string[] { "1200", "4800", "9600", "13200" };public Form1(){Initializ…

Elasticsearch:Painless scripting 语言(一)

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

安卓gdb 建立链接

adbshell gdbserver :1234 testdcam --sensor 0 --workmode 0 --args preview-size1024x600,picture-size640x480, --time 10 adb forwardtcp:1234 tcp:1234 //设置adb的转发 ./prebuilts/gcc/linux-x86/arm/arm-linux-androideabi-4.7/bin/arm-linux-androideabi-gdb out/tar…

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

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

mmdetection3D指定版本安装指南

1. 下载指定版本号 选择指定版本号下载mmdetection3d的源码&#xff0c;如这里选择的是0.17.2版本 git clone https://github.com/open-mmlab/mmdetection3d.git -b v0.17.22. 安装 cd mmdetection3d安装依赖库 pip install -r requirment.txt编译安装 pip install -v e .…

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

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

软件测试与质量保证 | 云班课简答题库

目录 第14章 质量相关简答题 第15章 测试实际相关简答题 第16章 测试基本相关简答题 第14章 质量相关简答题 1. 简述基本的测量原则。 测量应该基于该应用领域正确的理论之上&#xff0c;并在测量的定义中确定测度的目标&#xff1b;每一个技术测量的定义应该具有一致性和客…