java图书管理系统(2)各个操作实现

接下来我们来介绍各个操作的具体实现

Addoperation

添加操作。很简单,我们一步一步让用户输入书名,作者,价格,类型。之后构造出一个新的book对象,并把它传入书架这个数组的最后,最后将usedsize+1就可以了。需要注意,在我们读取价格后,我们要在用一个输入把后面的回车消去,才能正常输入。

同时,我们在拿到书名后,应该先遍历数组,确认书架上没有这本书,之后才能放心进行添加,如果有,则不能添加,而应该直接返回。

public class AddOperation implements IOoperation{
    @Override
    public void work(BookList bookList) {
        System.out.println("新增图书!");
        Scanner scanner=new Scanner(System.in);
        System.out.println("请输入书名->");
        String name=scanner.next();
        System.out.println("请输入作者->");
        String author=scanner.next();
        System.out.println("请输入价格->");
        int price=scanner.nextInt();
        scanner.nextLine();//把回车消除
        System.out.println("请输入类型->");
        String type=scanner.next();

        Book book=new Book(name,author,price,type);
        int currentsize= bookList.getUsedsize();
        for (int i = 0; i < currentsize; i++) {
            Book currentbook=bookList.getBooks(i);
            if(currentbook.getName().equals(name)){
                System.out.println("这本书已经存在,不能被添加!");
                return;
            }
        }
        bookList.setBooks(currentsize,book);//默认放到最后
        bookList.setUsedsize(currentsize+1);//usedsize++
    }
}

DelOperation

删除操作。我们通过用户输入书名进行删除,当我们读取完书名,我们同样要遍历数组,这回我们是要确保书架上存在这本书,不然我们无法进行删除。

当我们确认可以删除后,我们删除的思想是这样的,我们把要删除的元素后面的所有元素都往前挪一个,进行类似覆盖的操作,这样要删除的元素会被它后面的元素覆盖,变成后面的那个元素,达到删除的效果,最后将usedsize-1。

有人会问那最后一个元素岂不是在最后面出现两次吗?我想说这并不影响,因为我们usedsize已经减一,可以代表最后一个并不存在,后续我们进行循环遍历时并不会遍历两次。同时当我们执行添加操作,会直接将最后面那个元素覆盖,因此实际并不影响。

public class DelOperation implements IOoperation{
    @Override
    public void work(BookList bookList) {
        System.out.println("删除图书!");
        int currentsize=bookList.getUsedsize();
        if(currentsize==0){
            System.out.println("目前没有图书可以删除!");
            return;
        }
        System.out.println("请输入您要删除的图书的名称->");
        Scanner scanner=new Scanner(System.in);
        String delname=scanner.next();
int index=-1;
    for (int i = 0; i < currentsize; i++) {
        Book currentbook=bookList.getBooks(i);
        if(currentbook.getName().equals(delname)){
            index=i;
            break;
        }
    }
    if(index==-1){
        System.out.println("库中没有这本书,无法删除!");
        return ;
    }
    for (int i = index; i <currentsize-1 ; i++) {
        bookList.setBooks(index,bookList.getBooks(i+1));
    }
    bookList.setUsedsize(currentsize-1);
    System.out.println("删除完成!");
}

这样我们就完成了删除的操作

FindOperation

查找操作。很简单,我们通过输入的书名遍历数组进行查找,如果全部遍历都没有找到,就提示并没有这本书,如果有就显示它的全部信息,我们可以构造book的toString方法,在这个操作中快速展示图书的所有信息。

public class FindOperation implements IOoperation{
    @Override
    public void work(BookList bookList) {
        System.out.println("查找图书!");
        int currentsize=bookList.getUsedsize();
        if(currentsize==0){
            System.out.println("库中没有图书,无法查找!");
            return ;
        }
        System.out.println("请输入要查找的书名->");
        Scanner scanner=new Scanner(System.in);
        String findname=scanner.next();
        int index=-1;
        for (int i = 0; i < currentsize; i++) {
            Book currentbook=bookList.getBooks(i);
            if(currentbook.getName().equals(findname)){
                index=i;
                break;
            }
        }
        if(index==-1){
            System.out.println("该图书不存在!");
            return ;
        }
        Book findbook=bookList.getBooks(index);
        System.out.println("图书信息:");
        System.out.println(findbook);
    }

ShowOperation

展示全部图书信息。这个更加简单,我们只需要遍历数组,并打印每一个图书信息就可以了。

public class ShowOperation implements IOoperation{

    @Override
    public void work(BookList bookList) {
        System.out.println("展示所有图书!");
        int currentsize=bookList.getUsedsize();
        for (int i = 0; i < currentsize; i++) {
            System.out.println(bookList.getBooks(i));
        }
    }

BorrowOperation

借阅操作。我们通过书名的输入找到这本书,这里与find操作基本相同。之后我们要确定它的借阅状态,只有当他isborrowed状态为false时,我们才能进行借阅,将false改为true,如果我们查到是true,则代表这本书借阅不了,我们就给出对应提示,返回就可以了。

public class BorrowOperation implements IOoperation{
    @Override
    public void work(BookList bookList) {
        System.out.println("借阅图书!");
        Scanner scanner=new Scanner(System.in);
        System.out.println("请输入要借阅的书名->");
        String borrowname=scanner.next();
        int curruntsize=bookList.getUsedsize();
        int index=-1;
        for (int i = 0; i < curruntsize; i++) {
            if(bookList.getBooks(i).getName().equals(borrowname)){
                index=i;
                break;
            }
        }
        if (index==-1){
            System.out.println("库中没有这本书,无法借阅!");
            return ;
        }
        Book currentbook=bookList.getBooks(index);
        if(currentbook.isIsborrowed()==true){
            System.out.println("这本书已经被借阅!");
        }else{
            currentbook.setIsborrowed(true);
            System.out.println("借阅成功!");
        }

    }

ReturnOperation

归还操作。同样,我们根据书名的输入进行归还,这里跟借阅基本相同,只是把true改为false这样一点点区别。

public class ReturnOperation implements IOoperation {
    @Override
    public void work(BookList bookList) {
        System.out.println("归还图书!");
        Scanner scanner = new Scanner(System.in);
        System.out.println("请输入书名:");
        String name = scanner.nextLine();
        int currentSize = bookList.getUsedsize();

        
        for (int i = 0; i < currentSize; i++) {
            Book book1 = bookList.getBooks(i);
            if(book1.getName().equals(name)) {
                book1.setIsborrowed(false);
                System.out.println("归还成功!");
                return;
            }
        }

        System.out.println("没有你要归还的图书!");
    }
}

ExitOperation

最后是退出操作。我们只需要注意退出前把资源全部释放就可以了,把书架清空,usedsize设置为0,最后设置返回值,推出就可以了。

public class ExitOperation implements IOoperation{
    @Override
    public void work(BookList bookList) {
        System.out.println("退出系统!");
        int currentsize=bookList.getUsedsize();
        for (int i = 0; i < currentsize; i++) {
            bookList.setBooks(i,null);
        }
        bookList.setUsedsize(0);

        System.exit(0);
    }
}

小结

这样,我们完整的图书代码就完成了,我们几乎用到了前面学过的所有语法,独立完成,对我们来说也是很好的复习。

完整的代码可以私信。

  • 2
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值