Java之图书管理系统

🤷‍♀️🤷‍♀️🤷‍♀️ 今天给大家分享一下Java实现一个简易的图书管理系统!

清风的个人主页🎉✏️✏️ 

🌂c/java领域新星创作者

🎉欢迎👍点赞✍评论❤️收藏

😛😛😛希望我的文章能对你有所帮助,有不足的地方还请各位看官多多指教,大家一起学习交流!

动动你们发财的小手,点点关注点点赞!在此谢过啦!哈哈哈!😛😛😛


目录

 一、找到抽象化的对象

1.书类

2.书架类

二、管理员与普通用户登录

三、实现的功能

1.查找图书

2.新增图书(管理员功能)

3.删除图书(管理员功能)

4.显示图书信息

5.退出系统

6.借阅图书(普通用户功能)

7.归还图书(普通用户功能)

四、main方法



图书管理系统源码链接-满船清梦压星河的Gitee

 

 一、找到抽象化的对象

1.书类

经过分析,我们可以知道,书可以抽象成一个类型。它的属性包括:书名,作者,价格,书的类型等等...我们就先以这些为例。为了保持封装性,我们把这些属性都设置成private修饰的。

下面是书类的定义代码:
这段代码包括一些构造函数以及设置书的属性、重写String函数等。

public class Book {private String name;private String author;private int price;private String type;private boolean isBorrowed;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 int getPrice() {return price;}public void setPrice(int 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;}public Book(String name, String author, int price, String type) {this.name = name;this.author = author;this.price = price;this.type = type;}@Overridepublic String toString() {return "Book{" +"name='" + name + '\'' +", author='" + author + '\'' +", price=" + price +", type='" + type + '\'' +((isBorrowed==true)?"已借出!":"未借出!") +'}';}
}

2.书架类

我们可以利用一个数组来存放这些书籍,并记录当前存放书籍的数量,为后续的增删查改做准备,同时初始化有三本书籍。

下面是代码:

public class BookList {private Book[] books;private int usedSize;//记录当前书架上实际存放的书的数量public BookList(){this.books=new Book[10];this.books[0]=new Book("三国演义","罗贯中",18,"小说");this.books[1]=new Book("西游记","吴承恩",28,"小说");this.books[2]=new Book("红楼梦","曹雪芹",35,"小说");this.usedSize=3;}//获取当前存放书籍数量public int getUsedSize() {return usedSize;}//设置存放书籍数量public void setUsedSize(int usedSize) {this.usedSize = usedSize;}//返回下标为pos的书籍public Book getBook(int pos){return books[pos];}//设置下标为pos位置的书籍为bookpublic void setBook(int pos,Book book){books[pos]=book;}//返回书籍这个数组public Book[] getBooks(){return books;}
}

二、管理员与普通用户登录

首先定义一个用户抽象类,再定义管理员与普通用户去继承抽象类并重写菜单方法。

下面是用户抽象类代码:

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

管理员类代码:

public class AdiminUser extends User{public AdiminUser(String name){super(name);this.ioPerations=new IOPeration[]{new ExitOperation(),new FindOperation(),new AddOperation(),new DelOperation(),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("*********************");Scanner scanner=new Scanner(System.in);System.out.println("请输入你的选择:>");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()};}public int menu(){System.out.println("*******普通用户*******");System.out.println("1.查找图书");System.out.println("2.借阅图书");System.out.println("3.归还图书");System.out.println("0.退出系统");System.out.println("********************");Scanner scanner=new Scanner(System.in);System.out.println("请输入你的选择:>");int choice=scanner.nextInt();return choice;}
}

三、实现的功能

实现以下几个功能,可以定义一个接口,方便后续的相关操作。

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

1.查找图书

public class FindOperation implements IOPeration{@Overridepublic void work(BookList bookList) {System.out.println("查找图书>:");System.out.println("请输入要查找的书>:");Scanner scanner=new Scanner(System.in);String name=scanner.nextLine();//遍历这个数组int currentSize=bookList.getUsedSize();for (int i = 0; i < currentSize; i++) {Book book=bookList.getBook(i);if(book.getName().equals(name)){System.out.println("该书信息如下>:");System.out.println(book);return;}}System.out.println("无此书!!!");}
}

2.新增图书(管理员功能)

public class AddOperation implements IOPeration{@Overridepublic void work(BookList bookList) {System.out.println("新增图书>:");int cunrrentSize=bookList.getUsedSize();if (cunrrentSize==bookList.getBooks().length){System.out.println("书架已满!");return;}Scanner scanner=new Scanner(System.in);System.out.println("输入要新增书籍>:");String name=scanner.nextLine();//检查数组当中有没有这本书for (int i = 0; i <cunrrentSize ; i++) {Book book1=bookList.getBook(i);if(book1.getName().equals(name)){System.out.println("该书已存放,无需新增!!!");return;}}System.out.println("输入书籍作者>:");String author=scanner.nextLine();System.out.println("输入书籍类型>:");String type=scanner.nextLine();System.out.println("输入书籍价格>:");int price=scanner.nextInt();Book book=new Book(name,author,price,type);bookList.setBook(cunrrentSize,book);bookList.setUsedSize(cunrrentSize+1);System.out.println("新增书籍成功!!!");}
}

3.删除图书(管理员功能)

public class AddOperation implements IOPeration{@Overridepublic void work(BookList bookList) {System.out.println("新增图书>:");int cunrrentSize=bookList.getUsedSize();if (cunrrentSize==bookList.getBooks().length){System.out.println("书架已满!");return;}Scanner scanner=new Scanner(System.in);System.out.println("输入要新增书籍>:");String name=scanner.nextLine();//检查数组当中有没有这本书for (int i = 0; i <cunrrentSize ; i++) {Book book1=bookList.getBook(i);if(book1.getName().equals(name)){System.out.println("该书已存放,无需新增!!!");return;}}System.out.println("输入书籍作者>:");String author=scanner.nextLine();System.out.println("输入书籍类型>:");String type=scanner.nextLine();System.out.println("输入书籍价格>:");int price=scanner.nextInt();Book book=new Book(name,author,price,type);bookList.setBook(cunrrentSize,book);bookList.setUsedSize(cunrrentSize+1);System.out.println("新增书籍成功!!!");}
}

4.显示图书信息

public class ShowOperation implements IOPeration{@Overridepublic void work(BookList bookList) {System.out.println("显示图书>:");int currentSize=bookList.getUsedSize();for (int i = 0; i < currentSize; i++) {Book book=bookList.getBook(i);System.out.println(book);}}
}

5.退出系统

public class ExitOperation implements IOPeration{@Overridepublic void work(BookList bookList) {System.out.println("退出系统>:");System.exit(0);}
}

6.借阅图书(普通用户功能)

public class BorrowedOperation implements IOPeration{@Overridepublic void work(BookList bookList) {System.out.println("借阅图书>:");/*** 1.你要借阅哪本书?* 2.你借阅的书存在吗?* 借阅的方式是什么?*/Scanner scanner=new Scanner(System.in);System.out.println("输入要借阅书籍>:");String name=scanner.nextLine();int currentSize=bookList.getUsedSize();int i = 0;for (; i <currentSize ; i++) {Book book=bookList.getBook(i);if(book.getName().equals(name)){book.setBorrowed(true);System.out.println("借阅成功!!!");return;}}if(i==currentSize){System.out.println("该书不存在,无法借阅!!!");}}
}

7.归还图书(普通用户功能)

public class ReturnOperation implements IOPeration{@Overridepublic void work(BookList bookList) {System.out.println("归还图书>:");Scanner scanner=new Scanner(System.in);System.out.println("输入要归还书籍>:");String name=scanner.nextLine();int currentSize=bookList.getUsedSize();int i = 0;for (; i <currentSize ; i++) {Book book=bookList.getBook(i);if(book.getName().equals(name)){book.setBorrowed(false);System.out.println("归还成功!!!");return;}}if(i==currentSize){System.out.println("该书不存在,无需归还!!!");}}
}

四、main方法

public class Main {public static User login() {System.out.println("请输入你的姓名:>");Scanner scanner = new Scanner(System.in);String name = scanner.nextLine();System.out.println("请输入你的身份:> 1.管理员  2.普通用户");int choice = scanner.nextInt();if (choice == 1) {//管理员return new AdiminUser(name);} else {//普通用户return new NormalUser(name);}}public static void main(String[] args) {BookList bookList = new BookList();//user指向哪个对象,就看返回值是什么User user = login();while (true) {int choice = user.menu();System.out.println("choice:" + choice);//根据choice决定调用的是哪个方法user.doOperation(choice, bookList);}}
}

🎉好啦,今天的分享就到这里!!

创作不易,还希望各位大佬支持一下!

👍点赞,你的认可是我创作的动力!

收藏,你的青睐是我努力的方向!

✏️评论:你的意见是我进步的财富!

 

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

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

相关文章

用于 GaN-HEMT 功率器件仿真的 TCAD 方法论

目录 标题&#xff1a;TCAD Methodology for Simulation of GaN-HEMT Power Devices来源&#xff1a;Proceedings of the 26th International Symposium on Power Semiconductor Devices & ICs(14年 ISPSD)GaN-HEMT仿真面临的挑战文章研究了什么文章的创新点文章的研究方法…

JSP 学生成绩查询管理系统eclipse开发sql数据库serlvet框架bs模式java编程MVC结构

一、源码特点 JSP 学生成绩查询管理系统 是一套完善的web设计系统&#xff0c;对理解JSP java编程开发语言有帮助&#xff0c;比较流行的servlet框架系统具有完整的源代码和数据库&#xff0c;eclipse开发系统主要采用B/S模式 开发。 java 学生成绩查询管理系统 代码下载链接…

LeetCode 热题100——链表专题

一、俩数相加 2.俩数相加&#xff08;题目链接&#xff09; 思路&#xff1a;这题题目首先要看懂&#xff0c;以示例1为例 即 342465807&#xff0c;而产生的新链表为7->0->8. 可以看成简单的从左向右&#xff0c;低位到高位的加法运算&#xff0c;4610&#xff0c;逢…

5.4 删除字符串中的所有相邻重复项(LC1047-E)

算法&#xff1a; 相对于20. 有效的括号 (opens new window)来说其实也是匹配问题&#xff0c;20. 有效的括号 是匹配左右括号&#xff0c;本题是匹配相邻元素&#xff0c;最后都是做消除的操作。 本题也是用栈来解决的经典题目。 那么栈里应该放的是什么元素呢&#xff1f;…

Solidity数据类型之函数类型

solidity中函数的形式 function <function name>(<parameter types>) {internal|external|public|private} [pure|view|payable] [returns (<return types>)]每个关键字的意思&#xff08;方括号里面的写不写都可以&#xff09; function&#xff1a; 声明函…

安全防御——二、ENSP防火墙实验学习

安全防御 一、防火墙接口以及模式配置1、untrust区域2、trust区域3、DMZ区域4、接口对演示 二、防火墙的策略1、定义与原理2、防火墙策略配置2.1 安全策略工作流程2.2 查询和创建会话 3、实验策略配置3.1 trust-to-untrust3.2 trust-to-dmz3.3 untrust-to-dmz 三、防火墙的区域…

c面向对象编码风格(上)

面向对象和面向过程的基本概念 面向对象和面向过程是两种不同的编程范式&#xff0c;它们在软件开发中用于组织和设计代码的方式。 面向过程编程&#xff08;Procedural Programming&#xff09;是一种以过程&#xff08;函数、方法&#xff09;为核心的编程方式。在面向过程…

【漏洞复现】Apache_HTTPD_多后缀解析漏洞

感谢互联网提供分享知识与智慧&#xff0c;在法治的社会里&#xff0c;请遵守有关法律法规 文章目录 1.1、漏洞描述1.2、漏洞复现1、基础环境2、漏洞验证 1.3、深度利用GetShell 1.4、修复建议 1.1、漏洞描述 Apache HTTPD 支持一个文件拥有多个后缀&#xff0c;并为不同后缀执…

【安全】Java幂等性校验解决重复点击(6种实现方式)

目录 一、简介1.1 什么是幂等&#xff1f;1.2 为什么需要幂等性&#xff1f;1.3 接口超时&#xff0c;应该如何处理&#xff1f;1.4 幂等性对系统的影响 二、Restful API 接口的幂等性三、实现方式3.1 数据库层面&#xff0c;主键/唯一索引冲突3.2 数据库层面&#xff0c;乐观锁…

思维模型 霍布森选择效应

本系列文章 主要是 分享 思维模型&#xff0c;涉及各个领域&#xff0c;重在提升认知。这是一个设计好的陷阱&#xff0c;也许你认为你有选择&#xff0c;然后冥冥之中你的选择却很少&#xff0c;尽在所谓的“命运”掌握之中。 1 霍布森选择效应的应用 1.1 iphone的营销策略之…

chrome好用的阅读工具【推荐】

1、插件名称&#xff1a;Circle 下载地址&#xff1a; circlereader.com/ Circle 可以提取网页中的内容信息&#xff0c;并进行重新排版&#xff0c;是浏览文章、新闻等内容的神器 看各大网站VIP &#xff1a; 2、油猴&#xff1a; 下载地址&#xff1a; https://www.tampe…

Docker Swarm实现容器的复制均衡及动态管理:详细过程版

Swarm简介 Swarm是一套较为简单的工具&#xff0c;用以管理Docker集群&#xff0c;使得Docker集群暴露给用户时相当于一个虚拟的整体。Swarm使用标准的Docker API接口作为其前端访问入口&#xff0c;换言之&#xff0c;各种形式的Docker Client(dockerclient in go, docker_py…