图书管理系统(业务实现)

图书管理系统(业务实现)

我们已经实现了框架,接下来就是用业务将这些光加填满。

首先,我们来解决一个之前留下的问题:对书架进行初始化,我们先在其中放入几本书。写构造方法来初始化书架数组。

 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;
    }

1、退出系统

定义class :ExitOperation,实现Ioperation接口,对其中的work方法进行重写。为防止菜单打印死循环,我们将用到一个特殊的退出函数。

public class ExitOperation implements IOPeration{
        @Override
        public void work(BookList bookList) {
            System.out.println("退出系统");
            //应该要 对 bookList 资源 手动回收
            System.exit(0);
        }
}

2、增加书本

定义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);
    }
}

3、借阅书本

定义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);
    }
}

4、删除书本

定义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("删除成功!");
    }
}

5、查找图书

无需多言

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);
    }
}

6、归还图书

同借阅图书的实现。

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);
    }
}

7、显示图书

直接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);
        }
    }
}

源码自取

你可能感兴趣的:(java)