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

使用docker在3台服务器上搭建基于redis 6.x的一主两从三台均是哨兵模式

一、环境及版本说明 如果服务器已经安装了docker,则忽略此步骤,如果没有安装,则可以按照一下方式安装: 1. 在线安装(有互联网环境): 请看我这篇文章 传送阵>> 点我查看 2. 离线安装(内网环境):请看我这篇文章 传送阵>> 点我查看 说明&#xff1a;假设每台服务器已…...

铭豹扩展坞 USB转网口 突然无法识别解决方法

当 USB 转网口扩展坞在一台笔记本上无法识别,但在其他电脑上正常工作时,问题通常出在笔记本自身或其与扩展坞的兼容性上。以下是系统化的定位思路和排查步骤,帮助你快速找到故障原因: 背景: 一个M-pard(铭豹)扩展坞的网卡突然无法识别了,扩展出来的三个USB接口正常。…...

OpenLayers 可视化之热力图

注&#xff1a;当前使用的是 ol 5.3.0 版本&#xff0c;天地图使用的key请到天地图官网申请&#xff0c;并替换为自己的key 热力图&#xff08;Heatmap&#xff09;又叫热点图&#xff0c;是一种通过特殊高亮显示事物密度分布、变化趋势的数据可视化技术。采用颜色的深浅来显示…...

3.3.1_1 检错编码(奇偶校验码)

从这节课开始&#xff0c;我们会探讨数据链路层的差错控制功能&#xff0c;差错控制功能的主要目标是要发现并且解决一个帧内部的位错误&#xff0c;我们需要使用特殊的编码技术去发现帧内部的位错误&#xff0c;当我们发现位错误之后&#xff0c;通常来说有两种解决方案。第一…...

Springcloud:Eureka 高可用集群搭建实战(服务注册与发现的底层原理与避坑指南)

引言&#xff1a;为什么 Eureka 依然是存量系统的核心&#xff1f; 尽管 Nacos 等新注册中心崛起&#xff0c;但金融、电力等保守行业仍有大量系统运行在 Eureka 上。理解其高可用设计与自我保护机制&#xff0c;是保障分布式系统稳定的必修课。本文将手把手带你搭建生产级 Eur…...

【配置 YOLOX 用于按目录分类的图片数据集】

现在的图标点选越来越多&#xff0c;如何一步解决&#xff0c;采用 YOLOX 目标检测模式则可以轻松解决 要在 YOLOX 中使用按目录分类的图片数据集&#xff08;每个目录代表一个类别&#xff0c;目录下是该类别的所有图片&#xff09;&#xff0c;你需要进行以下配置步骤&#x…...

多模态大语言模型arxiv论文略读(108)

CROME: Cross-Modal Adapters for Efficient Multimodal LLM ➡️ 论文标题&#xff1a;CROME: Cross-Modal Adapters for Efficient Multimodal LLM ➡️ 论文作者&#xff1a;Sayna Ebrahimi, Sercan O. Arik, Tejas Nama, Tomas Pfister ➡️ 研究机构: Google Cloud AI Re…...

Mac下Android Studio扫描根目录卡死问题记录

环境信息 操作系统: macOS 15.5 (Apple M2芯片)Android Studio版本: Meerkat Feature Drop | 2024.3.2 Patch 1 (Build #AI-243.26053.27.2432.13536105, 2025年5月22日构建) 问题现象 在项目开发过程中&#xff0c;提示一个依赖外部头文件的cpp源文件需要同步&#xff0c;点…...

ip子接口配置及删除

配置永久生效的子接口&#xff0c;2个IP 都可以登录你这一台服务器。重启不失效。 永久的 [应用] vi /etc/sysconfig/network-scripts/ifcfg-eth0修改文件内内容 TYPE"Ethernet" BOOTPROTO"none" NAME"eth0" DEVICE"eth0" ONBOOT&q…...

人机融合智能 | “人智交互”跨学科新领域

本文系统地提出基于“以人为中心AI(HCAI)”理念的人-人工智能交互(人智交互)这一跨学科新领域及框架,定义人智交互领域的理念、基本理论和关键问题、方法、开发流程和参与团队等,阐述提出人智交互新领域的意义。然后,提出人智交互研究的三种新范式取向以及它们的意义。最后,总结…...