当前位置: 首页 > 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 驱动程…...

别再全网搜了!企业微信后台三步找到你的CorpID和Secret(附AccessToken一键生成工具)

企业微信开发实战&#xff1a;3分钟获取CorpID与Secret的终极指南 第一次接触企业微信API开发时&#xff0c;最让人头疼的莫过于找不到CorpID和Secret这两个关键凭证。官方文档信息分散&#xff0c;后台界面又不够直观&#xff0c;很多开发者在这个环节浪费了大量时间。本文将…...

TimescaleDB Helm Charts 项目停止维护后的应对策略与迁移指南

1. 项目概述与背景如果你正在Kubernetes上寻找一种可靠、可扩展的方式来部署时序数据库&#xff0c;那么TimescaleDB的Helm Charts项目曾经是一个绕不开的选项。这个由Timescale官方维护的仓库&#xff0c;旨在为开发者提供一套标准化的、声明式的部署方案&#xff0c;让你能通…...

20 - 告别“无限上下文”的幻觉:大模型知识注入的“四层矩阵”与下一场权重战争

本专题系列文章共 21 篇,前 5 篇限时免费阅读 01 - 眩晕时代的定海神针:大模型落地的“第一性原理”与算力丰裕悖论 02 - 95%的AI投资打了水漂:五大错配如何扼杀你的“第二增长曲线” 03 - 从电力到AI:标准化已死,个性化永生——大模型时代的三大商业终局 04 - 你的护城…...

3分钟极速攻略:ctfileGet如何一键破解城通网盘下载限速

3分钟极速攻略&#xff1a;ctfileGet如何一键破解城通网盘下载限速 【免费下载链接】ctfileGet 获取城通网盘一次性直连地址 项目地址: https://gitcode.com/gh_mirrors/ct/ctfileGet 你是否曾因城通网盘的低速下载而焦虑&#xff1f;面对大文件的漫长等待和频繁验证码&…...

全方位降本增效,Captain AI重构OZON运营成本结构

当前OZON市场竞争日趋激烈&#xff0c;人力、物流、广告、库存等各项运营成本持续攀升&#xff0c;利润空间不断压缩&#xff0c;“降本”与“增效”成为商家生存发展的核心命题。不同于单一工具仅能优化某一项成本&#xff0c;Captain AI立足OZON商家全运营场景&#xff0c;以…...

Go语言极简Web框架Meridian:依赖注入与清晰架构实践

1. 项目概述&#xff1a;一个“极简”的现代Web应用框架最近在GitHub上闲逛&#xff0c;又看到了一个名为rynfar/meridian的项目。点进去一看&#xff0c;简介写着“A modern web framework for building APIs and web applications in Go”。说实话&#xff0c;现在Go语言的We…...

云原生本地开发新范式:LDLT方法论与实践指南

1. 项目概述&#xff1a;从“LDLT”看云原生时代的本地开发范式革新如果你是一名云原生应用的开发者&#xff0c;大概率经历过这样的场景&#xff1a;为了调试一个微服务&#xff0c;你需要在本地启动一整套依赖——数据库、消息队列、缓存、甚至其他几个关联服务。你的开发机内…...

Google Maps路线响应延迟超800ms?Gemini边缘推理加速方案上线即降为112ms(附可复用TensorRT优化脚本)

更多请点击&#xff1a; https://intelliparadigm.com 第一章&#xff1a;Gemini Google Maps路线优化 Google Maps 与 Gemini 的深度集成正在重塑企业级物流与出行服务的智能边界。通过 Gemini 的多模态推理能力&#xff0c;开发者可将自然语言查询&#xff08;如“避开施工路…...

告别卡顿!用UltraISO给旧笔记本装Win10和Ubuntu双系统,从制作启动盘到分区配置完整流程

旧笔记本焕新指南&#xff1a;用UltraISO打造Win10与Ubuntu双系统全流程 每次打开那台陪伴多年的旧笔记本&#xff0c;风扇的轰鸣声和系统卡顿的转圈图标都在提醒你——是时候给它一次重生了。不同于直接更换硬件的高成本方案&#xff0c;通过双系统安装让老旧设备重获新生&…...

K8s日志太乱?试试用Docker插件把容器日志直通Grafana Loki(保姆级教程)

K8s日志太乱&#xff1f;试试用Docker插件把容器日志直通Grafana Loki&#xff08;保姆级教程&#xff09; 在容器化应用的日常运维中&#xff0c;日志管理往往是最容易被忽视却又最令人头疼的环节。想象一下这样的场景&#xff1a;你的开发环境运行着十几个Docker容器&#xf…...