图书管理系统(Java简单版)(完整代码+详解)

目录

详解: 

BookList类:

InOperation接口 

User类(父类) 和 Main类(这俩要一起看)

完整代码 

book包 

Book类 

BookList类

operation包 

 AddBook类

BorrowBook类

DeleteBook类

FindBook类

PrintBook类

ReturnBook类

Exit类

InOperation接口

user包 

Domestic类

Administrator类

User类 

Main类 


详解: 

按照上图逻辑来写, 因为要运行,所以要有个main函数

接下来我们来串联整个思路 

 接下来细说BookList类,InOperation接口和User类

BookList类:

1.先创建一个Book类 类型的数组(private 封装) 

 

2.再创建个书的个数的变量 (private 封装),然后创建构造方法,初始化成员(图书)(实例化BookList时直接就运行书架里的内容)(实例化一个Book对象,有参类型,所以Book类哪里要先创建有参的构造方法)

既然封装了就要有Getter和Setter (下面系统自动生成步骤)

当然自动生成的和我们要的还是有点差别的,我们要稍微改动一下 

InOperation接口 

因为每一个操作功能都要有对应的工作,所以干脆创建个接口 ,对代码更好的规范

User类(父类) 和 Main类(这俩要一起看)

各个包类都创建好了,但是他们如果串联运行呢,要有main才能运行起来,怎么搞,往下看 

(上面可能看不太清,可以对着下面看一下,或者对着代码看) 

剩下的方法实现起来都蛮简单的,对比着代码看看就能懂,不多说了 😊😊

完整代码 

book包 

Book类 

package book;public class Book {private String name;private String author;private double price;private String type;private boolean borrowed;//默认falsepublic 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 borrowed;}public void setBorrowed(boolean borrowed) {this.borrowed = borrowed;//借出true//未被借出false}@Overridepublic String toString() {return "Book{" +"name='" + name + '\'' +", author='" + author + '\'' +", price=" + price +", type='" + type + '\'' +((borrowed == false)?"   未被借出":"   已借出") +'}';}
}

BookList类

package book;public class BookList {//创建数组存放书private Book[] books = new Book[10];private int book_size;//书的个数//构造方法,初始化成员(图书)(示例化BookList时直接就运行书架里的内容)public BookList() {this.books[0] = new Book("三国演义", "罗贯中", 23.1, "小说");//实例化一个Book对象,有参类型,所以Book类哪里要先创建有参的构造方法this.books[1] = new Book("西游记", "吴承恩", 45.1, "小说");this.books[2] = new Book("红楼梦", "曹雪芹", 33.2, "小说");this.books[3] = new Book("水浒传", "施耐庵", 23.2, "小说");this.book_size = 4;}public Book getBooks(int pos) {return books[pos];}public void setBooks(int pos, Book book) {this.books[pos] = book;//新增图书需要}public int getBook_size() {return book_size;}public void setBook_size(int book_size) {this.book_size = book_size;}}

operation包 

 AddBook类

package operation;import book.Book;
import book.BookList;import java.util.Scanner;public class AddBook implements InOperation{@Overridepublic void work(BookList bookList) {System.out.println("新增图书");Scanner scanner = new Scanner(System.in);System.out.println("请输入图书名字:>");String name = scanner.nextLine();System.out.println("请输入图书的作者:>");String author = scanner.nextLine();System.out.println("请输入图书的价格:>");int price = scanner.nextInt();scanner.nextLine();System.out.println("请输入图书的类型:>");String type = scanner.nextLine();Book book = new Book(name, author, price, type);//实例化Book对象,存新增的书int currentSize = bookList.getBook_size();//当前剩下的书的数量for(int i = 0; i < currentSize; i++){Book book1 = bookList.getBooks(i);if(book1.getName().equals(name)){System.out.println("书架已有此书,不必添加");}return;}bookList.setBooks(currentSize, book);bookList.setBook_size(currentSize + 1);System.out.println("添加成功!!!");}
}

BorrowBook类

package operation;import book.Book;
import book.BookList;import java.util.Scanner;public class BorrowBook implements InOperation{@Overridepublic void work(BookList bookList) {System.out.println("借阅图书");System.out.println("请输入所借图书名字");Scanner scanner = new Scanner(System.in);String name = scanner.nextLine();int currentSize = bookList.getBook_size();for(int i = 0; i < currentSize; i++){Book book = bookList.getBooks(i);if(book.getName().equals(name)){if(book.isBorrowed() == false) {book.setBorrowed(true);System.out.println("存在该书,欢迎借阅");}else {System.out.println("该书不存在,对不起");}return;}}}
}

DeleteBook类

package operation;import book.Book;
import book.BookList;import java.util.Scanner;public class DeleteBook implements InOperation{@Overridepublic void work(BookList bookList) {System.out.println("删除图书");System.out.println("请输入你要删除的图书名字:>");Scanner scanner = new Scanner(System.in);String name = scanner.nextLine();int currentSize = bookList.getBook_size();if(currentSize == 0){System.out.println("书架为空");}int flag = -1;for(int i = 0; i < currentSize; i++){Book book = bookList.getBooks(i);if(book.getName().equals(name)){flag = i;break;}}if(flag == -1){System.out.println("该书不存在");return;}//虽然这样访问不到最后一本书,但是书的数量减一了,这样就自然没了最后一本书for(int i = flag; i < currentSize - 1; i++) {bookList.setBooks(flag, bookList.getBooks(i + 1));}bookList.setBook_size(currentSize - 1);System.out.println("删除成功");}
}

FindBook类

package operation;import book.Book;
import book.BookList;import java.util.Scanner;public class FindBook implements InOperation{@Overridepublic void work(BookList bookList) {System.out.println("寻找图书");System.out.println("输入图书名字;>");Scanner scanner = new Scanner(System.in);String name = scanner.nextLine();int currentSize = bookList.getBook_size();int index = -1;for(int i = 0; i < currentSize; i++){Book book = bookList.getBooks(i);if(book.getName().equals(name)) {index = i;}}if(index == -1){System.out.println("该书不存在");return;}Book book = bookList.getBooks(index);System.out.println(book);}
}

PrintBook类

package operation;import book.Book;
import book.BookList;public class PrintBook implements InOperation{@Overridepublic void work(BookList bookList) {System.out.println("显示全部图书");int currentSize = bookList.getBook_size();for(int i = 0; i < currentSize; i++){Book book = bookList.getBooks(i);System.out.println(book);}}
}

ReturnBook类

package operation;import book.Book;
import book.BookList;import java.util.Scanner;public class ReturnBook implements InOperation{@Overridepublic void work(BookList bookList) {System.out.println("归还图书");System.out.println("请输入图书名字");Scanner scanner = new Scanner(System.in);String name = scanner.nextLine();int currentSize = bookList.getBook_size();for (int i = 0; i < currentSize; i++){Book book = bookList.getBooks(i);if(book.getName().equals(name)){book.setBorrowed(false);System.out.println("归还成功");return;}}System.out.println("没这本书");}
}

Exit类

package operation;import book.BookList;public class Exit implements InOperation{@Overridepublic void work(BookList bookList) {System.out.println("退出系统");int currentSize = bookList.getBook_size();for(int i = 0; i < currentSize; i++){bookList.setBooks(i,null);}bookList.setBook_size(0);System.exit(0);}
}

InOperation接口

package operation;import book.BookList;public interface InOperation {void work(BookList bookList);//因为这些操作都是在书架上,所以传参位BookList类型
}

user包 

Domestic类

package user;import operation.*;import java.util.Scanner;import book.BookList;public class Domestic extends User{public Domestic(String name) {super(name);this.inOperations = new InOperation[]{new Exit(),new BorrowBook(),new ReturnBook(),new FindBook()//记得都要实例化对象才能用,因为他们都是类};}@Overridepublic int menu() {System.out.println("**********当当当!!!欢迎来到普通用户的菜单~~ *********");System.out.println("1.借阅图书       2.归还图书 ");System.out.println("        3.查找图书       ");System.out.println("        0.退出系统         ");System.out.println("请输入你想要进行的操作所对应的数字~~");Scanner s = new Scanner(System.in);int input = s.nextInt();return input;}
}

Administrator类

package user;
import operation.*;import java.util.Scanner;
public class Administrator extends User{public Administrator(String name) {super(name);this.inOperations = new InOperation[]{new Exit(),new AddBook(),new DeleteBook(),new FindBook(),new PrintBook()};}@Overridepublic int menu() {System.out.println("**********当当当!!!欢迎来到管理员的菜单~~ *********");System.out.println("1.新增图书       2.删除图书 ");System.out.println("3.查找图书       4.显示全部图书 ");System.out.println("        0.退出系统         ");System.out.println("请输入你想要进行的操作所对应的数字~~");Scanner s = new Scanner(System.in);int input = s.nextInt();return input;}
}

User类 

package user;import book.BookList;
import operation.InOperation;public abstract class User {private String name;public InOperation[] inOperations;//用public哟,以便其他地方使用public User(String name) {this.name = name;}public abstract int menu();public void doOperation(int choice, BookList bookList){inOperations[choice].work(bookList);//找到了对应的操作功能    调用相应的work方法}
}

Main类 

import book.BookList;
import user.Administrator;
import user.Domestic;
import user.User;import java.util.Scanner;
public class Main {public static User login(){System.out.println("********** ~~欢迎来到图书管理系统~~ **********");System.out.println("请登录/注册");System.out.println("请选择你的身份   1 ---> 管理员     0 ---> 普通用户");Scanner s = new Scanner(System.in);int choice = s.nextInt();System.out.println("请输入你的名字");String name = s.next();if(choice == 1){return new Administrator(name);}else {return new Domestic(name);}}public static void main(String[] args) {BookList bookList = new BookList();//实例化对象User user = login();//这个确定身份(管理员或者普通用户)while(true){int choice = user.menu();//这个确定进行什么操作user.doOperation(choice, bookList);}}
}

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

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

相关文章

Spring原理——基于xml配置文件创建IOC容器的过程

Spring框架的核心之一是IOC&#xff0c;那么我们是怎么创建出来的Bean呢&#xff1f; 作者进行了简单的总结&#xff0c;希望能对你有所帮助。 IOC的创建并不是通过new而是利用了java的反射机制&#xff0c;利用了newInstance方法进行的创建对象。 首先&#xff0c;我们先定义…

python-opencv轮廓检测(外轮廓检测和全部轮廓检测,计算轮廓面积和周长)

python-opencv轮廓检测&#xff08;外轮廓检测和全部轮廓检测&#xff0c;计算轮廓面积和周长&#xff09; 通过cv2.findContours&#xff0c;我们可以进行轮廓检测&#xff0c;当然也有很多检测模式&#xff0c;我们可以通过选择检测模式&#xff0c;进行外轮廓检测&#xff…

NeurIPS 2023|AI Agents先行者CAMEL:第一个基于大模型的多智能体框架

AI Agents是当下大模型领域备受关注的话题&#xff0c;用户可以引入多个扮演不同角色的LLM Agents参与到实际的任务中&#xff0c;Agents之间会进行竞争和协作等多种形式的动态交互&#xff0c;进而产生惊人的群体智能效果。本文介绍了来自KAUST研究团队的大模型心智交互CAMEL框…

VR全景展示,“超前点播”打开娱乐行业线上营销门户

如今&#xff0c;人们的生活水平正在逐步提高&#xff0c;这种提高不仅仅是体现在衣食住行上&#xff0c;更多方面是体现在大众的娱乐活动上。我们可以看到&#xff0c;相比于过去娱乐种类的匮乏&#xff0c;现如今&#xff0c;各种娱乐活动可谓是百家争鸣&#xff0c;例如温泉…

亚马逊云科技re:Invent大会:云计算与生成式AI共筑科技新局面,携手构建未来

随着科技的飞速发展&#xff0c;云计算和生成式 AI 已经成为了推动科技进步的重要力量。这两者相互结合&#xff0c;正在为我们创造一个全新的科技局面。 亚马逊云科技的re:Invent大会再次证明了云计算和生成式AI的强大结合正在塑造科技的新未来。这次大会聚焦了云计算的前沿技…

Linux(7):Vim 程序编辑器

vi 基本上 vi 共分为三种模式&#xff0c;分别是【一般指令模式】、【编辑模式】与【指令列命令模式】。 这三种模式的作用分别是&#xff1a; 一般指令模式(command mode) 以 vi 打开一个文件就直接进入一般指令模式了(这是默认的模式&#xff0c;也简称为一般模式)。在这个模…

【技术分享】RK3399 Ubuntu通过Python实现录音和播放功能

​本文基于IDO-SBC3968 Ubuntu 系统通过Python脚本实现录音和播放功能。 IDO-SBC3968采用RK3399国产六核64位CPU高性能处理器&#xff0c;支持4K HDMI2.0显示&#xff0c;接口丰富&#xff0c;拥有千兆以太网&#xff0c;全协议TypeC接口&#xff0c;USB3.0 &#xff0c;eDP 和…

对 .NET程序2G虚拟地址紧张崩溃 的最后一次反思

一&#xff1a;背景 1. 讲故事 最近接连遇到了几起 2G 虚拟地址紧张 导致的程序崩溃&#xff0c;基本上 90% 都集中在医疗行业&#xff0c;真的很无语&#xff0c;他们用的都是一些上古的 XP&#xff0c;Windows7 x86&#xff0c;我也知道技术人很难也基本无法推动硬件系统和…

初始Linux系统下打印机插件配套问题

记录一下打印机跨系统跨平台的插件配套问题。 我看大多数博客的说法&#xff0c;都叫打印机驱动。我本人是做linux驱动开发的&#xff0c;总觉得这么叫不是很专业。因为厂家提供在PC上的安装包&#xff0c;只是实现了文档格式转换、一些配置或控制、在使用层面的功能&#xff0…

初始linux:文件操作

目录 提示&#xff1a;以下指令均在Xshell 7 中进行 linux的理念 一、echo echo "字符串" 二、输出重定向 > > [文件] echo "字符串" > [文件] echo "字符串" > > [文件] 制作大文件 三、< 输入重定向与ca…

C#关键字、特性基础及扩展合集(持续更新)

一、基础 Ⅰ 关键字 1、record record&#xff08;记录&#xff09;&#xff0c;编译器会在后台创建一个类。支持类似于结构的值定义&#xff0c;但被实现为一个类&#xff0c;方便创建不可变类型&#xff0c;成员在初始化后不能再被改变 &#xff08;C#9新增&#xff09; …

生态对对碰|华为OceanStor闪存存储与OceanBase完成兼容性互认证!

近日&#xff0c;北京奥星贝斯科技有限公司 OceanBase 数据库与华为技术有限公司 OceanStor Dorado 全闪存存储系统、OceanStor 混合闪存存储系统完成兼容性互认证。 OceanBase 数据库挂载 OceanStor 闪存存储做为数据盘和日志盘&#xff0c;在 OceanStor 闪存存储系统卓越性能…