![](https://img-blog.csdnimg.cn/direct/cad64cdb60bd48748e53d314515d53ad.png)
一、框架
1. 创建类
用户:管理员AdminUser 普通用户NormalUser 继承抽象类User
![](https://img-blog.csdnimg.cn/direct/ecddaa0d305b445bac30f324b6ed9c13.png)
书:书Book 书架BookList
![](https://img-blog.csdnimg.cn/direct/c61fe2144eec411bbfe8591959b4a31d.png)
操作对象:书Book
2. 知识点
主要涉及的知识点:数据类型 变量 if for 数组 方法 类和对象 封装继承多态 抽象类和接口
3.利用数组放置图书
Test.Java
![](https://img-blog.csdnimg.cn/direct/6a71c687912f44a88f0c1b4d044ccf58.png)
BookList.java
![](https://img-blog.csdnimg.cn/direct/b7d99e208e5548658ea49ba9b18cc29f.png)
方法调用
BookList.java
![](https://img-blog.csdnimg.cn/direct/838dedadef6c45689e2ae015341a0c75.png)
Book.java
![](https://img-blog.csdnimg.cn/direct/ddd056ed48e04205a87db20eb0e8a539.png)
![](https://img-blog.csdnimg.cn/direct/b9d9c2bcf6814cd094e741a2253f5ede.png)
4.利用向上转型实现用户身份的选择
User.java
![](https://img-blog.csdnimg.cn/direct/8dcd90b7bbd14d93adad56ee109cb630.png)
添加图书操作AddIOperation等类实现接口IOperations
![](https://img-blog.csdnimg.cn/direct/3ed7ce162daa44ad9275f27f73d50532.png)
IOperations.java
![](https://img-blog.csdnimg.cn/direct/6c3e951267d048359aa87fb948571441.png)
每个功能操作均需重写接口IOperations的work方法--此处以添加操作为例
![](https://img-blog.csdnimg.cn/direct/4678751b60314a98a7e3375ff62d03ea.png)
NormalUser.java
![](https://img-blog.csdnimg.cn/direct/b9adfbd02a4a4ed98c2f2e6d6adafdec.png)
AdminUser.java
![](https://img-blog.csdnimg.cn/direct/741ced38daf9420d9205ab373a0a2fb0.png)
Test.java
![](https://img-blog.csdnimg.cn/direct/ddc89259b0924e0886d9137f1075d23d.png)
二、功能的实现------重写Work()方法
1.退出操作ExitOperation
java
public class ExitOperation implements IOperations{
@Override
public void work(BookList bookList) {
System.out.println("退出系统");
System.exit(0);
}
}
2.展示操作ShowOperation
java
public class ShowOperation implements IOperations{
@Override
public void work(BookList bookList) {
System.out.println("展示书籍");
for (int i = 0; i < bookList.getUsedSize(); i++) {
System.out.println(bookList.getBooks()[i].toString());
}
}
}
3.查找操作FindOperation
java
public class FindOperation implements IOperations{
@Override
public void work(BookList bookList) {
System.out.println("查找书籍");
System.out.println("请输入您要查找的图书名字:");
Scanner scanner = new Scanner(System.in);
String name = scanner.nextLine();
for (int i = 0; i < bookList.getUsedSize(); i++) {
if(bookList.getBooks()[i].getName().equals(name)) {
System.out.println(bookList.getBooks()[i].toString());
return;
}
}
System.out.println("没有这本书");
}
}
4.借阅操作BorrowOperation
java
public class BorrowOperation implements IOperations{
@Override
public void work(BookList bookList) {
System.out.println("借阅书籍");
System.out.println("请输入你要借阅的图书名字:");
Scanner scanner = new Scanner(System.in);
String name = scanner.nextLine();
for (int i = 0; i < bookList.getUsedSize(); i++) {
if (bookList.getBooks()[i].getName().equals(name)) {
bookList.getBooks()[i].setBorrowed(true);
System.out.println("借阅成功");
return;
}
}
System.out.println("没有找到这本书");
}
}
5.归还操作ReturnOPeration
java
public class ReturnIOperation implements IOperations{
@Override
public void work(BookList bookList) {
System.out.println("归还书籍");
System.out.println("请输入你要归还的图书名字:");
Scanner scanner = new Scanner(System.in);
String name = scanner.nextLine();
for (int i = 0; i < bookList.getUsedSize(); i++) {
if (bookList.getBooks()[i].getName().equals(name)) {
if(bookList.getBooks()[i].isBorrowed()) {
bookList.getBooks()[i].setBorrowed(false);
System.out.println("归还成功");
return;
}else {
System.out.println("这本书已经归还了,无需再次归还");
return;
}
}
}
System.out.println("没有找到这本书");
}
}
6.添加功能AddOperation
java
public class AddIOperation implements IOperations{
@Override
public void work(BookList bookList) {
System.out.println("增添书籍");
//判满
int currentSize = bookList.getUsedSize();
if (currentSize == bookList.getBooks().length) {
System.out.println("书架已满,添加失败");
return;
}
System.out.println("请输入图书名字:");
Scanner scanner = new Scanner(System.in);
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 newBook = new Book(name,author,price,type);
//判断书架有没有这本书
for (int i = 0; i < bookList.getBooks().length; i++) {
if(newBook.equals(bookList.getBooks()[i])) {
System.out.println("该书已存在,添加无效");
return;
}
}
bookList.setBooks(currentSize,newBook);
bookList.setUsedSize(currentSize+1);
System.out.println("添加成功");
}
}
7.删除操作DelOperation
java
public class DelOperation implements IOperations{
@Override
public void work(BookList bookList) {
System.out.println("删除书籍");
System.out.println("请输入您要删除的图书名字");
Scanner scanner = new Scanner(System.in);
int pos = -1;
String name = scanner.nextLine();
int currentSize = bookList.getUsedSize();
int i = 0;
for (; i < currentSize; i++) {
if(name.equals(bookList.getBooks()[i].getName())) {
pos = i;
break;
}
}
if (i == currentSize) {
System.out.println("没有你想删除的图书");
return;
}
int j = pos;
for (;j < bookList.getUsedSize()-1; j++) {
Book book = bookList.getBooks()[j+1];
bookList.setBooks(j,book);
}
bookList.setBooks(j,null);
bookList.setUsedSize(currentSize-1);
System.out.println("删除成功");
}
}