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的掌握更上一步。 

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

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

相关文章

MFC静态链接+libtiff静态链接提示LNK2005和LNK4098

编译报错 1>msvcrt.lib(ti_inst.obj) : error LNK2005: "private: __thiscall type_info::type_info(class type_info const &)" (??0type_infoAAEABV0Z) 已经在 libcmtd.lib(typinfo.obj) 中定义 1>msvcrt.lib(ti_inst.obj) : error LNK2005: "pr…

Jenkins Docker Cloud在Linux应用开发CI中的实践

Jenkins Docker Cloud在Linux应用开发CI中的实践 背景 通过代码提交自动触发CI自动构建、编译、打包是任何软件开发组织必不可少的基建&#xff0c;可以最大程度保证产物的一致性&#xff0c;方便跨组跨部门协作&#xff0c;代码MR等。 Docker在流水线中越来越重要&#xff…

解决Maven找不到依赖的问题

如果经过Reload Maven项目&#xff0c;清除Idea缓存&#xff0c;甚至重启Idea等方法都解决不了Dependency xxx not found的问题&#xff0c;不妨试试手动安装。 1. 进入maven仓库&#xff0c;搜索自己需要的对应版本的依赖。 2. 点击下图红框jar图标下载对应的jar包&#xff0c…

[德人合科技]——设计公司 \ 设计院图纸文件数据 | 资料透明加密防泄密软件

国内众多设计院都在推进信息化建设&#xff0c;特别是在异地办公、应用软件资产规模、三维设计技术推广应用以及协同办公等领域&#xff0c;这些加快了业务的发展&#xff0c;也带来了更多信息安全挑战&#xff0c;尤其是对于以知识成果为重要效益来源的设计院所&#xff0c;防…

MyBatis-Plus如何 关闭SQL日志打印

前段时间公司的同事都过来问我&#xff0c;hua哥公司的项目出问题了&#xff0c;关闭不了打印sql日记&#xff0c;项目用宝塔自己部署的&#xff0c;磁盘满了才发现大量的打印sql日记&#xff0c;他们百度过都按照网上的配置修改过不起作用&#xff0c;而且在调试时候也及为不方…

软件设计模式:六大设计原则

文章目录 前言一、开闭原则二、里氏替换原则三、依赖倒转原则四、接口隔离五、迪米特法则六、合成复用原则总结 前言 在软件开发中&#xff0c;为了提高软件系统的可维护性和可复用性&#xff0c;增加软件的可扩展性和灵活性&#xff0c;程序员要尽量根据6条原则来开发程序&am…

STM32_窗口看门狗

什么是窗口看门狗&#xff1f; 窗口看门狗用于监测单片机程序运行时效是否精准&#xff0c;主要检测软件异常&#xff0c;一般用于需要精准检测 程序运行时间的场合。 窗口看门狗的本质是一个能产生 系统复位信号 和 提前唤醒中断 的 6 位计数器 产生复位条件&#xff1a; 当…

数组循环左移

数组循环左移是指将数组的元素向左移动一定的位置&#xff0c;使得数组的最后一个元素移动到数组的第一个位置&#xff0c;数组的倒数第二个元素移动到数组的第二个位置&#xff0c;以此类推。 以下是一个示例代码&#xff0c;演示如何实现数组循环左移&#xff1a; def rota…

力扣题目学习笔记(OC + Swift) 14. 最长公共前缀

14. 最长公共前缀 编写一个函数来查找字符串数组中的最长公共前缀。 如果不存在公共前缀&#xff0c;返回空字符串 “”。 方法一 竖向扫描法 个人感觉纵向扫描方式比较直观&#xff0c;符合人类理解方式&#xff0c;从前往后遍历所有字符串的每一列&#xff0c;比较相同列上的…

服务器解析漏洞是什么?攻击检测及修复

服务器解析漏洞&#xff08;Server-side Include Vulnerability&#xff0c;SSI漏洞&#xff09;是一种安全漏洞&#xff0c;通常出现在支持服务器端包含&#xff08;SSI&#xff09;功能的Web服务器上。SSI是一种在Web页面中嵌入动态内容的技术&#xff0c;允许开发人员将外部…

Gradle中 Implementation 与API 声明依赖方式的对比

在Gradle中&#xff0c;implementation和api是声明依赖的两种方式&#xff0c;它们在如何暴露依赖关系方面有所不同&#xff1a; Implementation: 当一个模块使用implementation声明依赖时&#xff0c;该依赖仅对声明它的模块可见。这意味着该依赖对于该模块的消费者是隐藏的。…

Android 架构 - 组件化

一、概念 组件化是对单个功能进行开发&#xff0c;使得功能可以复用。将多个功能组合起来就是一个业务模块&#xff0c;因此去除了模块间的耦合&#xff0c;使得按业务划分的模块成了可单独运行的业务组件。&#xff08;一定程度上的独立&#xff0c;还是依附于整个项目中&…

如何使用支付宝的沙箱环境在本地配置模拟支付并发布至公网测试

文章目录 前言1. 下载当面付demo2. 修改配置文件3. 打包成web服务4. 局域网测试5. 内网穿透6. 测试公网访问7. 配置二级子域名8. 测试使用固定二级子域名访问 前言 在沙箱环境调试支付SDK的时候&#xff0c;往往沙箱环境部署在本地&#xff0c;局限性大&#xff0c;在沙箱环境…

vue关闭当前路由页面并跳转到其父页面

1.dom中添加关闭或取消按钮 <el-button type"primary" class"blueLinearbg cancelBtn" click"cancel" >取 消</el-button>2.cancel方法中 /*取消或关闭*/cancel(){this.$store.dispatch("tagsView/delView", this.$route)…

Floating point exception

参考:https://blog.csdn.net/yyangzhenjie/article/details/87859506?spm1001.2101.3001.6661.1&utm_mediumdistribute.pc_relevant_t0.none-task-blog-2%7Edefault%7ECTRLIST%7ERate-1-87859506-blog-126091159.235%5Ev39%5Epc_relevant_3m_sort_dl_base2&depth_1-ut…

el-table 实现行拖拽排序

element ui 表格实现拖拽排序的功能&#xff0c;可以借助第三方插件Sortablejs来实现。 引入sortablejs npm install sortablejs --save组件中使用 import Sortable from sortablejs;<el-table ref"el-table":data"listData" row-key"id" …

牛客BC115 超级圣诞树

万众瞩目 在上一篇我们介绍了一个圣诞树的打印&#xff0c;而这道题与上次不同的是他的基本单位是一直在变的 我建议先把上一个搞懂在写这道题这个。 牛客网BC114 圣诞树-CSDN博客 ok那么正文开始 题目如下 今天是圣诞节&#xff0c;牛牛要打印一个漂亮的圣诞树送给想象中…

pg课堂笔记-新版本特性和版本升级

为什么要升级 版本特性:一年一个大版本,三个月一个小版本 9.4支持 jsonb ​ 9.6 支持并行 ​ 10 支持逻辑复制和声明分区 ​ 11 支持jit 、存储过程 ​ 14 引入 idle_session_timeout ​ 15 逻辑复制有大幅度提升 ​ 16 支持standby logical replication ,并行回放, 以及 …

单片机LCD1602

提示&#xff1a;文章写完后&#xff0c;目录可以自动生成&#xff0c;如何生成可参考右边的帮助文档 文章目录 前言一、LCD1602是什么&#xff1f;二、LCD1602 原理三、显示一个字符四、如何显示四位数五、参考历程六、封装成一个显示 字符和一个显示任意四位数的函数总结 前言…

HTML输出特殊字符详细方法

以下是部分特殊字符代码表&#xff0c;它们的完整应用代码格式为&#xff1a;&#;用下面的四位数字替换&#xff0c;将得到对应的符号。&#xff08;注意&#xff1a;应用这些代码&#xff0c;编辑器应该切换到HTML模式&#xff09; ☏260f ☎260e ☺263a ☻263b ☼263c ☽…