Java 图书管理系统功能实现

承接上一篇的 图书管理系统 ,点击这里跳转

要实现什么功能

1.查找图书

2.增加图书

3.删除图书

4.展示图书

5.退出系统

6.借阅图书

7.归还图书

1.查找图书

要完成这个功能需要以下步骤

输入书名,

然后在书架里找到这本书打印出来,

如果没有这本书就返回

java 复制代码
public class FindOperation implements IOperation{
    @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.getUseSize();
        for (int i = 0; i < currentSize; i++) {
            Book book = bookList.getBook(i);
            //这里比较书的名字
            if(name.equals(book.getName())) {
                System.out.println("找到了!");
                System.out.println(book);
                return;
            }
        }
        System.out.println("没有找到你要的书-----");
        return;
    }
}

由于书在定义的时候重写了toString方法所以可以直接打印出来

2.增加图书

增加图书的前提是书架里有足够的空间,所以需要提前判满,如果已经满了就可以直接返回

java 复制代码
//直接加在最后一本书最后,然后书架中当前的书加1,但是前提是需要有足够的空间,所以需要提前判定是否已经满了
        int currentSize = bookList.getUseSize();
        if(currentSize == bookList.getBooks().length){
            System.out.println("书架已经满了-----");
            return;
        }

之后的操作是输入书名等信息,放进一本创建的新书中,书架里的书变多,那么当前书架中的书也加一

java 复制代码
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();

        //由于nextLine会接收回车,所以留下一个nextLine来接收空格
        scanner.nextLine();

        System.out.println("请输入类型-----");
        String type = scanner.nextLine();

        //这里把输入的数据放入到一本新书中
        Book newBook = new Book(name,author,price,type);

        //加入新书,当前书加1
        bookList.setBook(newBook,currentSize);
        bookList.setUseSize(currentSize+1);
        System.out.println("加入新书成功!");
        return;
    }

3.删除图书

首先我们要确定怎么来进行删除图书的操作

用pos 之后的书来覆盖pos下标的书,然后当前书架的书减1,

那么重要的是找到下标pos

java 复制代码
 public void work(BookList bookList) {
        System.out.println("删除图书-----");
        //删除图书需要先找到此书的下标,用后面的书都覆盖前面的书,当前书数量减1
        Scanner scanner = new Scanner(System.in);
        System.out.println("请输入你要删除的书-----");
        String name = scanner.nextLine();
        int currentSize = bookList.getUseSize();
        //把i拿出来防止被释放
        int i = 0;
        for (; i < currentSize; i++) {
            Book book = bookList.getBook(i);
            //设置一个pos变量来接收下标
            int pos ;
            //这里比较书的名字
            if(name.equals(book.getName())) {
                //pos 接收下标
                pos = i;

那么找到下标之后就需要进行删除书籍的操作

java 复制代码
//这里比较书的名字
            if(name.equals(book.getName())) {
                //pos 接收下标
                pos = i;
                //从这本书开始被后面的书覆盖,这里 currentSize-1 防止越界
                for (int j = pos; j < currentSize-1; j++) {
                    Book book1 = bookList.getBook(j+1);
                    bookList.setBook(book1,j);
                }
                //数量减1
                bookList.setUseSize(currentSize-1);
                System.out.println("删除成功!");
                return;

因为获取书需要获取pos之后的书籍,那么如果不限制就会发生越界访问

4.展示图书

这个直接遍历书架打印出书的内容即可

java 复制代码
public class ShowOperation implements IOperation{
    @Override
    public void work(BookList bookList) {
        System.out.println("显示图书-----");
        int currentSize = bookList.getUseSize();
        for (int i = 0; i < currentSize; i++) {
            Book book = bookList.getBook(i);
            System.out.println(book);
        }
    }
}

5.退出系统

这里需要了解exit

在Java中,System.exit(int status) 是一个静态方法,用于立即终止当前正在运行的Java虚拟机(JVM)

java 复制代码
public class ExitOperation implements IOperation{
    @Override
    public void work(BookList bookList) {
        System.out.println("退出系统-----");
        exit(0);
    }
}

6.借阅图书

与其他功能相同的是需要输入书名来找书,然后修改书的是否借出值

java 复制代码
public class BorrowOperation implements IOperation{
    @Override
    public void work(BookList bookList) {
        System.out.println("借阅图书-----");
        //输入书名,如果有此书就修改isBorrowed的值,没有则结束
        Scanner scanner = new Scanner(System.in);
        System.out.println("请输入你要借阅的书-----");
        String name = scanner.nextLine();
        int currentSize = bookList.getUseSize();
        for (int i = 0; i < currentSize; i++) {
            Book book = bookList.getBook(i);
            //这里比较书的名字
            if(name.equals(book.getName())) {
                //修改是否借阅
                book.setBorrowed(true);
                System.out.println("借阅成功!");
                return;
            }
        }
        System.out.println("没有找到你要借阅的书-----");
        return;
    }
}

7.归还图书

与借阅图书相同

java 复制代码
public class ReturnOperation implements IOperation{
    @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.getUseSize();
        for (int i = 0; i < currentSize; i++) {
            Book book = bookList.getBook(i);
            //这里比较书的名字
            if(name.equals(book.getName())) {
                book.setBorrowed(false);
                System.out.println("还书成功!");
                return;
            }
        }
        System.out.println("没有找到你要还的书-----");
        return;
    }

看到这里不妨留下你的三连,你的三连就是我的动力!

相关推荐
lgcgkCQ4 小时前
【AI 转型实战 1】SpringAI 入门:搭建基础大模型对话能力
java·ai·agent·rag·spring ai·mcp·langchain4j
Wang's Blog4 小时前
Java 项目实战:交友项目 - 用户体系集成总结
java·开发语言·交友
学到老活到老4 小时前
第 24 集:配置文件写了 80,Spring Boot 为什么读到 90?
java·后端·spring
tongyiixiaohuang5 小时前
供应商主数据同步实战:从易快报到金蝶云星空的单一策略落地
java·网络·数据库
鱼宵5 小时前
取集合第一个元素,Java 为什么要写三种写法?
java·windows·python·java21
学长毕设6 小时前
基于SpringBoot的餐厅管理系统-附源码
java·spring boot·后端
刚入门的大一新生6 小时前
Linux-线程互斥
java·开发语言
赵小哥要冲啦6 小时前
社区邻里互助小程序从 0 到 1 复盘:需求拆解与信任机制设计
java·小程序·需求分析
xiaogai_gai7 小时前
采购业务退款单同步实战:从钉钉审批流到金蝶云星空付款单
java·数据库·钉钉
二哈赛车手7 小时前
新人笔记---hermes定时功能设计,具体讲解以及可优化点
java·人工智能·笔记·spring·ai·typescript