我们已经实现了框架,接下来就是用业务将这些光加填满。
首先,我们来解决一个之前留下的问题:对书架进行初始化,我们先在其中放入几本书。写构造方法来初始化书架数组。
public BookList() {
this.books = new Book[10];
this.books[0] = new Book("三国演义", "罗贯中", 10, "小说");
this.books[1] = new Book("西游记", "吴承恩", 9, "小说");
this.books[2] = new Book("红楼梦", "曹雪芹", 19, "小说");
this.usedSize = 3;
}
为了获取到书架上的书,我们还需要提供Get and Set方法(需要自己手动写)。
public Book getBook(int pos) {
return books[pos];
}
public void setBook(Book book, int pos) {
books[pos] = book;
}
定义class :ExitOperation,实现Ioperation接口,对其中的work方法进行重写。为防止菜单打印死循环,我们将用到一个特殊的退出函数。
public class ExitOperation implements IOPeration{
@Override
public void work(BookList bookList) {
System.out.println("退出系统");
//应该要 对 bookList 资源 手动回收
System.exit(0);
}
}
定义class :AddOperation,实现Ioperation接口,对其中的work方法进行重写。
打印对应的提示,通过输入给成员变量来赋值,从而创建一个对象。并获取usedSize赋值给currentSize,遍历书架数组,判断是否有重名的书本。如果有,则不能重复添加;如果没有,则添加入书架数组,通过set方法实现。
public class AddOperation implements IOPeration {
public 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();
System.out.println("请输入你要新增图书的类型:");
scanner.nextLine();//回车也会被nextLine读入,所以要多写一个
String type = scanner.nextLine();
//此时就可以构造出 一个书的对象
Book book = new Book(name,author,price,type);
int currentSize = bookList.getUsedSize();
for (int i = 0; i < currentSize; i++) {
Book tmp = bookList.getBook(i);
if(tmp.getName().equals(name)) {
System.out.println("存在这本书,不能重复添加!");
return;
}
}
//没有重复的书 开始新增
bookList.setBook(book,currentSize);
bookList.setUsedSize(currentSize+1);
}
}
定义class :BorrowOperation,实现Ioperation接口,对其中的work方法进行重写。同样的遍历数组,查找和比较。
public class BorrowOperation implements IOPeration {
public 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)) {
//有这本书的
book.setBorrowed(true);
System.out.println("借阅成功!");
return;
}
}
System.out.println("没有你要借阅的图书:"+name);
}
}
定义class :DelOperation,实现Ioperation接口,对其中的work方法进行重写。
先遍历数组判断有没有需要删除的这本书,如果没有直接退出;如果有,记录下它的下标,从该位置再次遍历数组,将后面的书本向前设置一个下标位置,并出于安全性考虑,将原先最后一本的位置设置为空。
public void work(BookList bookList) {
System.out.println("删除图书!");
Scanner scanner = new Scanner(System.in);
System.out.println("请输入你要删除图书的书名:");
int currentSize = bookList.getUsedSize();
int index = -1;
String name = scanner.nextLine();
int i = 0;
for (; i < currentSize; i++) {
Book tmp = bookList.getBook(i);
if(tmp.getName().equals(name)) {
index = i;
break;//记录下来了 要删除图书的姓名
}
}
//
if(i >= currentSize) {
System.out.println("没有你要删除的图书!");
return;
}
//可以删除了
for (int j = index; j < currentSize-1; j++) {
//bookList[j] = bookList[j+1]
Book book = bookList.getBook(j+1);
bookList.setBook(book,j);
}
bookList.setBook(null,currentSize-1);
bookList.setUsedSize(currentSize-1);
System.out.println("删除成功!");
}
}
无需多言
public class FindOperation implements IOPeration{
public 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[i];
Book book = bookList.getBook(i);
if(book.getName().equals(name)) {
System.out.println("存在这本书,信息如下:");
System.out.println(book);
return;
}
}
//代码没有return 出去 ,么有你要找的书
System.out.println("没有你要找的这本书,书名为:"+ name);
}
}
同借阅图书的实现。
public class ReturnOperation implements IOPeration{
public 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)) {
//有这本书的
book.setBorrowed(false);
System.out.println("归还成功!");
return;
}
}
System.out.println("没有你要归还的图书:"+name);
}
}
直接println中传入book参数,由于之前在book中重写了toString方法,可以发生多态,改变打印格式。
public class ShowOperation implements IOPeration{
public void work(BookList bookList) {
System.out.println("显示图书");
int currentSize = bookList.getUsedSize();
for (int i = 0; i < currentSize; i++) {
//Book book = bookList[i];
Book book = bookList.getBook(i);
System.out.println(book);
}
}
}
源码自取