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

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

相关推荐
程序员黑豆2 小时前
Java类型推断完全指南:从var到菱形运算符,掌握使用限制与最佳实践
java·前端·ai编程
风流 少年3 小时前
Spring AI 2.0:Memory
java·后端·spring
码匠许师傅3 小时前
【C++ 面试真题】聊聊 C++ 的移动语义与右值引用
java·c++·面试
小席是个热心肠4 小时前
AI相关的自我学习
java·人工智能·学习
数智化管理手记6 小时前
海量数据如何沉淀有效数据资产?数据标准化治理方案如何搭建?
java·大数据·人工智能
cfm_29147 小时前
SpringAI + Ollama 本地大模型
java·开发语言·人工智能·语言模型
鲸采云SRM采购管理系统7 小时前
采购管理系统哪家好?2026最新测评对比
java·服务器·数据库
0x538 小时前
Java网络编程(二)
java·服务器·网络
Flittly9 小时前
【雕虫大技】Agent 动态 Skill 供应链安全加固(三):输出校验与治理闭环实战
java·spring boot·spring
Poo_Chai9 小时前
QT emit信号后完整处理流程,包括槽函数响应流程
java·开发语言·数据库