当前位置: 首页 > news >正文

java使用面向对象实现图书管理系统

꒰˃͈꒵˂͈꒱ write in front ꒰˃͈꒵˂͈꒱
ʕ̯•͡˔•̯᷅ʔ大家好,我是xiaoxie.希望你看完之后,有不足之处请多多谅解,让我们一起共同进步૮₍❀ᴗ͈ . ᴗ͈ აxiaoxieʕ̯•͡˔•̯᷅ʔ—CSDN博客
本文由xiaoxieʕ̯•͡˔•̯᷅ʔ 原创 CSDN 如需转载还请通知˶⍤⃝˶
个人主页:xiaoxieʕ̯•͡˔•̯᷅ʔ—CSDN博客
系列专栏:xiaoxie的JAVA系列专栏——CSDN博客●'ᴗ'σσணღ*
我的目标:"团团等我💪( ◡̀_◡́ ҂)" 

( ⸝⸝⸝›ᴥ‹⸝⸝⸝ )欢迎各位→点赞👍 + 收藏⭐️ + 留言📝​+关注(互三必回)!

 一.Book类

首先我们需要先创建一个Book类

public class Book {private String name;private String author;private double price;private String type;private boolean  isBorrowed;// 构造函数public Book(String name, String author, double price, String type) {this.name = name;this.author = author;this.price = price;this.type = type;}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 double getPrice() {return price;}public void setPrice(double price) {this.price = price;}public String getType() {return type;}public void setType(String type) {this.type = type;}public boolean isBorrowed() {return isBorrowed;}public void setBorrowed(boolean borrowed) {isBorrowed = borrowed;}// 重写toString方法@Overridepublic String toString() {return "Book{" +"name='" + name + '\'' +", author='" + author + '\'' +", price=" + price +", type='" + type + '\'' +( (isBorrowed == true) ? ",已借出" : ",未借出" )+//", isBorrowed=" + isBorrowed +'}';}
}

二.BookList类

public class BookList {public Book[] List;public int size;public BookList() {List = new Book[10];List[0] = new Book("西游记", "吴承恩", 10.25, "小说");List[1] = new Book("三国演义","罗贯中",20.50,"小说");List[2] = new Book("红楼梦","曹雪芹",50.9,"小说");List[3] = new Book("水浒传","施耐庵",15.5,"小说");size = 4;}public boolean isFull() {return size >= List.length;}public boolean isEmpty() {return size == 0;}public void newLength() {List = new Book[size+10];}public Book getList(int i) {return List[i];}public int getSize() {return size;}public void setList(Book book , int pos) {List[pos] = book;}public void setSize(int size) {this.size = size;}
}

三.User类

public abstract class User {public IOperation[] iOperations;public String name;public User(String name) {this.name = name;}public abstract int menu();public void doOperation(int choice,BookList bookList) {IOperation operation = this.iOperations[choice];operation.work(bookList);}
}

四.管理员类

public class Admin extends User{public Admin(String name) {super(name);this.iOperations = new IOperation[]{new ExitOperation(),new FindOperation(),new AddOperation(),new DeleteOperation(),new ShowOperation()};}public int menu() {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;}
}

 五.普通类

public class NormalUser extends User{public NormalUser(String name) {super(name);this.iOperations = new IOperation[] {new ExitOperation(),new  FindOperation(),new BorrowedOperation(),new ReturnOperation()};}@Overridepublic int menu() {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;}
}

六.实现操作的接口

public interface IOperation {public void work(BookList bookList);
}

 七.各种操作类

import java.util.Scanner;// 添加图书的操作public class AddOperation implements IOperation{@Overridepublic void work(BookList bookList) {if(bookList.isFull()) {bookList.newLength();}Scanner scan = new Scanner(System.in);System.out.println("请输入你要添加的书名");String name = scan.nextLine();System.out.println("请输入你要添加图书的作者");String author = scan.nextLine();System.out.println("请输入你要添加图书的价格");double price = scan.nextDouble();scan.nextLine();System.out.println("请输入你要添加图书的类型");String type = scan.nextLine();Book tmp = new Book(name,author,price,type);int count = bookList.getSize();for (int i = 0; i < count; i++) {if(tmp.getName().equals(bookList.getList(i).getName())) {System.out.println("请勿重复添加");System.exit(0);}}bookList.setList(tmp,count);bookList.setSize(count+1);}
}
import java.util.Scanner;// 借出书籍public class BorrowedOperation implements IOperation {@Overridepublic void work(BookList bookList) {Scanner scan = new Scanner(System.in);int count1 = bookList.getSize();System.out.println("以下是图书馆的书单: ");for (int i = 0; i < count1; i++) {if (bookList.getList(i) != null) {System.out.println(bookList.getList(i));}}System.out.println("请输入你要借阅的图书名字:");String name = scan.nextLine();int count = bookList.getSize();int i = 0;for (; i < count; i++) {if (bookList.getList(i).getName().equals(name) ) {if(bookList.getList(i).isBorrowed()  ) {System.out.println("书已被借走,请等归还后再来借阅");return;}bookList.getList(i).setBorrowed(true);System.out.println("借阅成功,请于7天时间内归还");return;}}if(i == count) {System.out.println("没有找到这本书");}}
}
import java.util.Scanner;//删除书籍的操作public class DeleteOperation implements IOperation {@Overridepublic void work(BookList bookList) {if(bookList.isEmpty()) {throw  new NullException("书架为空");}Scanner san = new Scanner(System.in);System.out.println("请输入你要删除的图书名字");String name = san.nextLine();int count = bookList.getSize();int i = 0;for (; i < count; i++) {if(bookList.getList(i).getName().equals(name)) {break;}}if(i == count) {System.out.println("没有找到这本书");} else {while (i < count) {bookList.List[i++] = bookList.List[i+1];}System.out.println("删除成功");bookList.setSize(count-1);}}
}
// 退出操作public class ExitOperation implements IOperation{@Overridepublic void work(BookList bookList) {System.exit(0);}
}
import java.util.Scanner;// 通过图书的名字来查找图书public class FindOperation implements IOperation{@Overridepublic void work(BookList bookList) {Scanner scan = new Scanner(System.in);System.out.println("请输入你要查找的图书名字");String name = scan.nextLine();int count = bookList.getSize();int i = 0;for (; i < count; i++) {if(bookList.getList(i).getName().equals(name)) {System.out.println("图书信息如下:");System.out.println(bookList.getList(i));break;}}if(i == count) {System.out.println("没有找到这本书");}}
}
//归还操作
public class ReturnOperation implements IOperation{@Overridepublic void work(BookList bookList) {Scanner scan = new Scanner(System.in);System.out.println("请输入你要归还的图书名字:");String name = scan.nextLine();int count = bookList.getSize();int i = 0;for (; i < count; i++) {if (bookList.getList(i).getName().equals(name) && bookList.getList(i).isBorrowed()) {bookList.getList(i).setBorrowed(false);System.out.println("归还成功,欢迎下次光临");return;}}if(i == count) {System.out.println("没有找到这本书");}}
}
//显示图书的操作public class ShowOperation implements IOperation{@Overridepublic void work(BookList bookList) {int count = bookList.getSize();System.out.println("图书信息如下: ");for (int i = 0; i < count; i++) {if (bookList.getList(i) != null) {System.out.println(bookList.getList(i));}}}
}
//异常
public class NullException extends RuntimeException {public NullException() {}public NullException(String message) {super(message);}
}

八.主函数

public class Main {public static User menu() {int choice = 0;String possWord = "123456";System.out.println("请输入你的身份:");System.out.println("1.管理员   2.普通用户 ");Scanner scan = new Scanner(System.in);choice = scan.nextInt();scan.nextLine();if (choice == 1) {System.out.println("请输入密码:");int count = 3;while (count > 0) {String MyPossWord = scan.nextLine();if (MyPossWord.equals(possWord)) {count = -1;break;} else {--count;System.out.println("密码错误,你还有" + count + "次机会");}}if (count != -1) {System.out.println("密码输入错误超过3次,请您24小时后在来");System.exit(0);}return new Admin("admin");}return new NormalUser("noraluser");}public static void main(String[] args) {BookList bookList = new BookList();User user = Main.menu();while (true) {int choice = user.menu();user.doOperation(choice,bookList);}}
}

九.说明

以上就是java使用面向对象的知识来实现图书管理系统的全部内容了,此代码仅仅只是对初学Java的读者有帮助,可以通过借鉴此代码,再根据自己所学的知识自己构建一个图书管理系统,这个 图书管理系统也是差不多涵盖了JavaSE所有内容,博主相信你自己下去编写一个图书管理系统,会对Java的掌握更上一步。 

相关文章:

java使用面向对象实现图书管理系统

꒰˃͈꒵˂͈꒱ write in front ꒰˃͈꒵˂͈꒱ ʕ̯•͡˔•̯᷅ʔ大家好&#xff0c;我是xiaoxie.希望你看完之后,有不足之处请多多谅解&#xff0c;让我们一起共同进步૮₍❀ᴗ͈ . ᴗ͈ აxiaoxieʕ̯•͡˔•̯᷅ʔ—CSDN博客 本文由xiaoxieʕ̯•͡˔•̯᷅ʔ 原创 CSDN …...

2023 英特尔On技术创新大会直播 |我感受到的“芯”魅力

文章目录 每日一句正能量前言AI时代&#xff0c;云与PC结合为用户带来更好体验全新处理器&#xff0c;首次引入针对人工智能加速的NPU大模型时代&#xff0c;软硬结合带来更好训练成果后记 每日一句正能量 成长是一条必走的路路上我们伤痛在所难免。 前言 在2023年的英特尔On技…...

Atium Designer 23 全新功能-丝印制备,解决DFM问题

进行PCB设计时需要养成良好的设计习惯&#xff0c;才能保证后期的生产效果。例如整板上需要保证丝印跟阻焊的间距规则避免产生丝印重叠造成的PCB制造设计&#xff08;DFM&#xff09;问题。丝印重叠阻焊的影响有如下&#xff1a; 1&#xff09;PCB板后期打样&#xff0c;一般是…...

Nginx快速入门:安装目录结构详解及核心配置解读(二)

0. 引言 上节我们讲解了nginx的应用场景和安装&#xff0c;本节继续针对nginx的各个目录文件进行讲解&#xff0c;让大家更加深入的认识nginx。并通过一个实操案例&#xff0c;带大家来实际认知nginx的核心配置 1. nginx安装目录结构 首先nginx的默认安装目录为&#xff1a;…...

测试TensorFlow/PyTorch的GPU版本是否启用

文章目录 1. Pytorch测试代码2. TensorFlow测试代码 后续遇到好的会不断更新。。。 1. Pytorch测试代码 import torch def gpu_is_available():print(\nGPU details:)print(f gpu_is_available : , torch.cuda.is_available())print(f cuda_device_count : , t…...

字符串逆序输出

逆序输出就是本来abc输出的&#xff0c;然后我想让他输出成cba&#xff0c;那么我们还是要用到for循环&#xff0c;只不过原先是从零开始往上加&#xff0c;这回呢&#xff0c;是从上面往下减 我们观察上面这个图片&#xff0c;我们想要输出olleh&#xff0c;那么我们就要从4开…...

期货平仓日历(期货平仓日期汇总)

什么是期货平仓日历&#xff1f; 期货是一种高风险高收益的投资品种。而期货交易不同于股票等其他投资品种的交易&#xff0c;期货交易需要在一定时间内才能买卖。而期货平仓日历就是指期货交易中规定的所有合约的平仓日期汇总。 常见期货平仓日期和时间&#xff1f; 不同的…...

计算机网络-进阶

目录 易混淆物理层数据链路层网络层nat如何实现私有ip通信IP数据报 格式解析tcp 连接tcp流量控制滑动窗口拥塞控制 报文捕获 wireshark路由模拟器 enspcdn代理服务器 VS cdn VS web cache 计算机有了物理地址&#xff0c;为什么还要有ip地址&#xff1f;单播 多播 广播 传输层会…...

LED恒流驱动芯片SM2188EN:满足LED灯具出口欧盟所需的ERP能效认证标准和要求

LED灯具是一种节能环保的照明产品&#xff0c;因其高效节能、长寿命等优点而备受消费者青睐&#xff0c;成为照明市场的主流产品。作为LED灯具出口欧盟市场的必备条件&#xff0c;ERP能效认证标准和要求对LED灯具的能效性能提出了严格的要求。 首先&#xff0c;ERP能效认证标准…...

RocketMQ系统性学习-RocketMQ原理分析之消费者的接收消息流程

&#x1f308;&#x1f308;&#x1f308;&#x1f308;&#x1f308;&#x1f308;&#x1f308;&#x1f308; 【11来了】文章导读地址&#xff1a;点击查看文章导读&#xff01; &#x1f341;&#x1f341;&#x1f341;&#x1f341;&#x1f341;&#x1f341;&#x1f3…...

butterfly蝴蝶分类

一、分类原因 由于植物分类所使用的数据集存在一定问题&#xff0c;修改起来比较麻烦&#xff0c;本次采用kaggle的ButterflyMothsImageClassification数据集&#xff0c;对100这种蝴蝶进行分类。 二、100中蝴蝶类别 ‘ADONIS’,‘AFRICAN GIANT SWALLOWTAIL’,‘AMERICAN S…...

计算机基础:网络基础

目录 一.网线制作 1.制作所需要工具 网线制作标准 ​编辑 2.水晶头使用 3.网线钳使用 4.视频教学 二.集线器、交换机介绍 1.OSI七层模型 2.TCP/IP四层参考模型 3.集线器、交换机。路由器介绍 集线器 交换机 路由器 区别 三.路由器的配置 1.路由器设置 说明书 设…...

[原创][R语言]股票分析实战[3]:周级别涨幅趋势的相关性

[简介] 常用网名: 猪头三 出生日期: 1981.XX.XX QQ联系: 643439947 个人网站: 80x86汇编小站 https://www.x86asm.org 编程生涯: 2001年~至今[共22年] 职业生涯: 20年 开发语言: C/C、80x86ASM、PHP、Perl、Objective-C、Object Pascal、C#、Python 开发工具: Visual Studio、D…...

MSVC编译 openssl windows 库

开发需要在windows下集成 openssl 库&#xff0c;参考官方指导完成了编译&#xff1a;openssl/NOTES-WINDOWS.md at master openssl/openssl 不过&#xff0c;最后还是走了直接下载的捷径。 1. 安装 ActivePerl 需要在 ActiveState 注册账户&#xff0c;之后彼会提供具体的…...

electron兼容统信UOS系统过程中的坑

这里写目录标题 找统信支持人员咨询过&#xff0c;他们说不对electron提供支持&#xff0c;如果需要兼容统信UOS还是建议换个开发技术gbm_bo_map--no-sandboxNo protocol specified任务栏图标总结 找统信支持人员咨询过&#xff0c;他们说不对electron提供支持&#xff0c;如果…...

Flink系列之:Apache Kafka SQL 连接器

Flink系列之&#xff1a;Apache Kafka SQL 连接器 一、Apache Kafka SQL 连接器二、依赖三、创建Kafka 表四、可用的元数据五、连接器参数六、特性七、Topic 和 Partition 的探测八、起始消费位点九、有界结束位置十、CDC 变更日志&#xff08;Changelog&#xff09; Source十一…...

灰盒测试简要学习指南!

在本文中&#xff0c;我们将了解什么是灰盒测试、以及为什么要使用它&#xff0c;以及它的优缺点。 在软件测试中&#xff0c;灰盒测试是一种有用的技术&#xff0c;可以确保发布的软件是高性能的、安全的并满足预期用户的需求。这是一种从外部测试应用程序同时跟踪其内部操作…...

【经典LeetCode算法题目专栏分类】【第7期】快慢指针与链表

《博主简介》 小伙伴们好&#xff0c;我是阿旭。专注于人工智能AI、python、计算机视觉相关分享研究。 ✌更多学习资源&#xff0c;可关注公-仲-hao:【阿旭算法与机器学习】&#xff0c;共同学习交流~ &#x1f44d;感谢小伙伴们点赞、关注&#xff01; 快慢指针 移动零 class…...

springboot解决XSS存储型漏洞

springboot解决XSS存储型漏洞 XSS攻击 XSS 攻击&#xff1a;跨站脚本攻击(Cross Site Scripting)&#xff0c;为不和 前端层叠样式表(Cascading Style Sheets)CSS 混淆&#xff0c;故将跨站脚本攻击缩写为 XSS。 XSS(跨站脚本攻击)&#xff1a;是指恶意攻击者往 Web 页面里插…...

I.MX6ULL_Linux_驱动篇(47)linux RTC驱动

RTC 也就是实时时钟&#xff0c;用于记录当前系统时间&#xff0c;对于 Linux 系统而言时间是非常重要的&#xff0c;就和我们使用 Windows 电脑或手机查看时间一样&#xff0c;我们在使用 Linux 设备的时候也需要查看时间。本章我们就来学习一下如何编写 Linux 下的 RTC 驱动程…...

详解IBM企业架构框架模型CBM

&#xff08;一&#xff09;&#xff1a;什么是CBM IBM的CBM是组件化业务模型&#xff08;Component Business Model&#xff09;&#xff0c;是IBM在2003年提出的一种业务架构方法论。 目的是通过将企业的业务活动划分为一些独立、模块化、可重用的业务组件&#xff0c;来识…...

宝塔面板安装MySQL数据库并通过内网穿透工具实现公网远程访问

文章目录 前言1.Mysql 服务安装2.创建数据库3.安装 cpolar3.2 创建 HTTP 隧道 4.远程连接5.固定 TCP 地址5.1 保留一个固定的公网 TCP 端口地址5.2 配置固定公网 TCP 端口地址 前言 宝塔面板的简易操作性,使得运维难度降低,简化了 Linux 命令行进行繁琐的配置,下面简单几步,通…...

Elasticsearch 性能调优基础知识

Elastic Stack 已成为监控任何环境或应用程序的实际解决方案。 从日志、指标和正常运行时间到性能监控甚至安全&#xff0c;Elastic Stack 已成为满足几乎所有监控需求的一体化解决方案。 Elasticsearch 通过提供强大的分析引擎来处理任何类型的数据&#xff0c;成为这方面的基…...

速盾网络:网络安全守护者

速盾网络作为一家专业的网络安全服务提供商&#xff0c;致力于为企业和个人提供全面、高效、可靠的网络安全解决方案。以下是速盾网络的主要业务介绍&#xff1a; 一、CDN加速 速盾网络拥有全球化的CDN加速网络&#xff0c;通过分布在全球各地的节点&#xff0c;为客户提供快速…...

jmeter如何参数化?Jmeter参数化设置的5种方法

jmeter如何参数化&#xff1f;我们使用jmeter在进行测试的时候&#xff0c;测试数据是一项重要的准备工作&#xff0c;每次迭代的数据当不一样的时候&#xff0c;需要进行参数化&#xff0c;从参数化的文件中来读取测试数据。那么&#xff0c;你知道jmeter如何进行参数化吗&…...

01AVue入门(持续学习中)

1.使用AVue开发简单的前端页面直接简单到起飞,他是Element PlusVueVite开发的,不需要向元素的前端代码一样一个组件要传很多参数,他可以使用Json文本来控制我们要传入的数据结构来决定显示什么 //我使用的比较新,我们也可以使用cdn直接使用script标签直接引入 2.开发中遇到的坑…...

js 深浅拷贝的区别和实现方法

一&#xff1a;什么浅拷贝&#xff1a; 浅拷贝创建一个新对象&#xff0c;然后将原始对象的所有属性值复制到新对象中。这意味着&#xff0c;如果原始对象的属性值是基本类型&#xff08;例如数字、字符串&#xff09;&#xff0c;那么这些值会被直接复制到新对象中。但如果属…...

【jvm从入门到实战】(九) 垃圾回收(2)-垃圾回收器

垃圾回收器是垃圾回收算法的具体实现。 由于垃圾回收器分为年轻代和老年代&#xff0c;除了G1之外其他垃圾回收器必须成对组合进行使用 垃圾回收器的组合使用关系图如下。 常用的组合如下: Serial&#xff08;新生代&#xff09; Serial Old&#xff08;老年代&#xff09; Pa…...

C#基础——匿名函数和参数不固定的函数

匿名函数、参数不固定的函数 匿名函数&#xff1a;没有名字&#xff0c;又叫做lambda表达式&#xff0c;具有简洁&#xff0c;灵活&#xff0c;可读的特性。 具名函数&#xff1a;有名字的函数。 1、简洁性&#xff1a;使用更少的代码实现相同的功能 MyDelegate myDelegate…...

PCL 点云匹配 4 之 (非线性迭代点云匹配)lM-ICP

一、IM迭代法 PCL IterativeClosestPointNonLinear 非线性L-M迭代法-CSDN博客 Matlab 非线性迭代法&#xff08;3&#xff09;阻尼牛顿法 L-M-CSDN博客 MATLAB实现最小二乘法_matlab最小二乘法-CSDN博客...

免费注册自己的网站/培训课

1354 选数字基准时间限制&#xff1a;1 秒 空间限制&#xff1a;131072 KB 分值: 80 难度&#xff1a;5级算法题收藏关注当给定一个序列a[0],a[1],a[2],...,a[n-1] 和一个整数K时&#xff0c;我们想找出,有多少子序列满足这么一个条件&#xff1a;把当前子序列里面的所有元素乘…...

软件下载类型网站怎么做/武汉seo结算

后退文件夹: cd - 在重复一遍就是前进了 转载于:https://www.cnblogs.com/Baronboy/p/7787760.html...

信息化推进与网站建设/页面关键词优化

修订记录2012.11.20修订OpenCV 2.4在CentOS安装方法。2012.11.21添加OpenCV 2的打开图片的写法。预备GCCCMakeOpenCV这些都可以在CentOS 6.0的“添加/删除软件”里面找到并安装。其他Linux版本可以选择用编译后安装或者在Rpmfind寻找二进制安装版本&#xff1a;CentOS安装OpenC…...

做网站是个什么行业/福州百度首页优化

正确答案是 CD接口很重要&#xff0c;为了说明情况&#xff0c;这里稍微啰嗦点&#xff1a;(1)接口用于描述系统对外提供的所有服务,因此接口中的成员常量和方法都必须是公开(public)类型的,确保外部使用者能访问它们&#xff1b;(2)接口仅仅描述系统能做什么,但不指明如何去做…...

如何做电子书网站/爱站小工具圣经

如果一个网站的页面有一个部位经常用到时,可以写一个单独的jsp页面 <jsp:include page"xx.jsp"/>这条代码,单独写个文件来联合起来,类似于一个通用的页面 例如网站顶部的登陆注册栏...

我想自己创建购物网站/网站一般需要怎么推广

一、包名 包名命名规范:包名一律小写,采用如下规则&#xff1a;【com】.【公司名/组织名】.【项目名称】.【模块名】,例如:com.foreverstar.xxx 1.com.xx.应用名称缩写.模块.activity 页面用到的Activity类 (activitie层级名用户界面层) 2.com.xx.应用名称缩写.模块.fragment …...