Java——图书管理系统

简介: 该文档详细介绍了一个图书管理系统的设计与实现。系统包含普通用户和管理员两种角色,通过书架操作图书,如添加、查找、借阅、归还及删除图书等功能。文档展示了各个功能的具体代码实现,并使用继承和接口等方式优化了系统结构。通过多态技术实现了不同用户角色调用相应功能。整体设计清晰,逻辑严谨,便于理解和实现。

🍁1. 功能演示

用户分为普通用户和管理员,登录进系统之后可以对图书进行一系列操作,此时我们要明白,对图书的操作是通过书架来执行的,我们平常在图书馆上借书就是在书架上

🍁2. 类的创建

🍁2.3 创建图书类

来创建图书类,对图书的属性进行封装,并写上对应的get和set 方法

private String name;
    private String author;
    private int price;
    private String type;
    private boolean isBorrowed;
    public Book() {
    }
    public Book(String name, String author, int price, String type) {
        this.name = name;
        this.author = author;
        this.price = price;
        this.type = type;
    }
    /······get set toString······/

🍁2.4 创建书架类

创建书架的类,书架上肯定不止一本书,所以这里选择数组来存储多个book对象,因为在一开始就有了一部分书,所以在创建书架的对象时,就要把图书的对象放进去

public class BookList {
    private Book[] books = new Book[10];//用到了组合
    private int usedSize = 0;//实际放的数量
    public BookList() {
        //创建对象之后就已经有了三本书
        books[0] = new Book("三国演义", "罗贯中", 20,"小说");
        books[1] = new Book("西游记", "吴承恩", 30,"小说");
        books[2] = new Book("红楼梦", "曹雪芹", 20,"小说");
        usedSize = 3;
    }
}

🍁2.5 创建用户类

接着创建用户,而用户又分为普通用户和管理员,就可以通过继承来实现这种关系,这两种用户的菜单也不相同,就可以抽取出来,在子类进行重写

public abstract class User {
    //不同包的子类可以访问
    protected String name;
    public User(String name) {
        this.name = name;
    }
    public abstract int menu();
}

来看menu方法的实现

之后就可以在Main类里面以多态的方式,根据不同的对象调取不同的菜单

public class Main {
    public static User login() {
        Scanner sc = new Scanner(System.in);
        System.out.println("请输入用户名:");
        String name = sc.nextLine();
        System.out.println("请输入身份:1.管理员 2. 普通用户");
        int choice = sc.nextInt();
        if (choice == 1) {
            return new AdminUser(name);
        } else {
            return new NormalUser(name);
        }
    }
    public static void main(String[] args) {
        BookList bookList = new BookList();
        User user = login();
    }
}

🍁3. 功能的实现

菜单里的操作可以通过接口来实现这个业务逻辑,

public interface IOPeration {
    void work(BookList bookList);
}

例如添加图书,直接去实现一个操作接口,具体的逻辑再在本类中进行重写

public class AddOperation implements IOPeration{
    @Override
    public void work(BookList bookList) {
        System.out.println("添加图书");
    }
}

之后创建各种功能的接口

那么有了这些操作该怎么调用呢,无论时普通用户还是管理员,都是用户在操作,所以要在父类User中创建接口数组,再调用具体的方法实现操作

捋一下现在的逻辑

🍁4. 功能完善

下面是一个基本框架,包含了显示图书、查找图书、新增图书、借阅图书、归还图书和删除图书的功能。

🍁4.1 显示图书


  • 功能描述:展示当前系统中所有图书的列表,包括图书的书名、作者、价格,类型以及借阅状态(是否已借出)。


  • 实现要点:遍历图书数据集合,按一定格式(如表格)输出图书信息。

因为之前book是用数组存在BookList中的,所以只要遍历数组就可以了

BookList中要提供对应的get,set方法:

public int getUsedSize() {
        return usedSize;
    }
    public Book getBook(int pos) {
        return books[pos];
    }
    public void setBook(int pos, Book book) {
        this.books[pos] = book;
    }

显示图书:

public class ShowOperation implements IOPeration{
    @Override
    public void work(BookList bookList) {
        int currentSize = bookList.getUsedSize();
        for(int i= 0;i < currentSize;i++){
            System.out.println(bookList.getBook(i));//输出当前书架上的所有书籍信息
        }
    }
}

🍁4.2 查找图书


  • 功能描述:根据用户输入的关键字(书名)查找并显示匹配的图书信息。


  • 实现要点:遍历图书数据集合,匹配用户输入的关键字,返回匹配的图书列表。

明白了怎么遍历之后,查找图书就非常简单了

public class FindOperation implements IOPeration {
    @Override
    public void work(BookList bookList) {
        System.out.println("请输入查找的图书:");
        Scanner sc = new Scanner(System.in);
        String name = sc.nextLine();
        int currentSize = bookList.getUsedSize();
        for(int i = 0;i < currentSize;i++){
            Book book = bookList.getBook(i);
            if(book.getName().equals(name)){
                System.out.println(book);
                return;
            }
        }
        System.out.println("不存在该图书");
    }
}

🍁4.3 新增图书


  • 功能描述:允许用户输入新的图书信息(书名,类型,价格等),并将其添加到系统中。


  • 实现要点:接收用户输入,验证输入的有效性,然后将新图书信息添加到图书数据集合中。

新增图书时需要注意及时的更新书架的信息,如果书架满了的话就需要提示书架已满,添加之后要记得更改currentSize

public class AddOperation implements IOPeration {
    @Override
    public void work(BookList bookList) {
        int currentSize = bookList.getUsedSize();
        if(currentSize == bookList.getBooks().length){
            System.out.println("书架已满,无法添加");
            return;
        }
        System.out.println("添加图书");
        System.out.println("请输入书名:");
        Scanner scanner = new Scanner(System.in);
        String name = scanner.nextLine();
        System.out.println("请输入作者:");
        String author = scanner.nextLine();
        System.out.println("请输入价格:");
        int price = scanner.nextInt();
        scanner.nextLine();
        System.out.println("请输入类型:");
        String type = scanner.nextLine();
        Book book = new Book(name, author, price, type);
        //添加图书
        bookList.setBook(currentSize, book);
        bookList.setUsedSize(currentSize + 1);
        System.out.println("添加成功");
    }
}

🍁4.4 借阅图书


  • 功能描述:允许用户根据图书名字借阅图书,更新图书的借阅状态。


  • 实现要点:首先检查图书是否存在且当前未被借出,然后更新图书的借阅状态为已借出,并记录借阅信息(如借阅人、借阅时间)。

借阅图书首先需要在书架上找到这本书才能借阅,所以就需要对书架进行遍历,并查看书的状态,借阅之后也需要及时的更新书架信息,还有书籍的状态

public class BorrowOperation implements IOPeration{
    public void work(BookList bookList) {
        System.out.println("请输入借阅的图书:");
        Scanner sc = new Scanner(System.in);
        String name = sc.nextLine();
        int currentSize = bookList.getUsedSize();
        for(int i = 0;i < currentSize;i++){
            Book book = bookList.getBook(i);
            if(book.getName().equals(name)){
                //判断是否借出
                if(book.isBorrowed()){
                    System.out.println("该图书已被借阅");
                    return;
                }
                //修改借阅状态
                book.setBorrowed(true);
                System.out.println("借阅成功");
                return;
            }
        }
        System.out.println("不存在该图书");
    }
}

🍁4.5 归还图书


  • 功能描述:允许用户根据图书名称归还图书,更新图书的借阅状态。


  • 实现要点:检查图书是否已借出且归还的图书有效,然后更新图书的借阅状态为未借出,并记录归还信息(如归还时间)。

同理,归还图书时需要查看图书的状态,是否是已借出,归还之后也要及时修改图书的状态信息

public class ReturnOperation implements IOPeration{
    @Override
    public void work(BookList bookList) {
        System.out.println("请输入归还的图书:");
        Scanner sc = new Scanner(System.in);
        String name = sc.nextLine();
        int currentSize = bookList.getUsedSize();
        for (int i = 0; i < currentSize; i++) {
            Book book = bookList.getBook(i);
            if (book.getName().equals(name)) {
                //判断是否借出
                if (book.isBorrowed()) {
                    //修改借阅状态
                    book.setBorrowed(false);
                    System.out.println("归还成功");
                    return;
                }
            }
        }
        System.out.println("此书未被借出");
    }
}

🍁4.6 删除图书


  • 功能描述:允许用户根据图书ID删除图书,从系统中移除该图书信息。


  • 实现要点:检查图书是否存在,然后将其从图书数据集合中移除。注意,可能需要先检查图书是否已被借出,并提示用户处理借阅状态。

删除图书只需要把要删除的图书从书架上移除即可,由于是用顺序表存储的图书,所以当删除其中的一本书之后,这本书后面的图书都要往前移,并且如果查找不到删除的图书的信息,那么就需要给出提示

public class DeleteOperation implements IOPeration {
    @Override
    public void work(BookList bookList) {
        System.out.println("请输入删除的图书:");
        Scanner sc = new Scanner(System.in);
        String name = sc.nextLine();
        int i = 0,pos = 0;
        int currentSize = bookList.getUsedSize();
        for(;i < currentSize;i++){
            Book book = bookList.getBook(i);
            if(book.getName().equals(name)){
                pos = i;
                break;
            }
        }
        if(i == currentSize){
            System.out.println("没有找到该图书");
        }
        for(int j = pos;j < currentSize - 1;j++){
            Book book = bookList.getBook(j + 1);
            bookList.setBook(j,book);
        }
        bookList.setBook(currentSize - 1,null);
        //更新currentSize
        bookList.setUsedSize(currentSize - 1);
        System.out.println("删除成功");
    }
}


相关文章
|
7月前
|
JavaScript Java 测试技术
基于Java的图书管理系统的设计与实现(源码+lw+部署文档+讲解等)
基于Java的图书管理系统的设计与实现(源码+lw+部署文档+讲解等)
186 1
|
7月前
|
Java 关系型数据库 MySQL
java和mysql数据库实现的图书管理系统
java和mysql数据库学生信息管理系统
119 1
|
7月前
|
Java 数据安全/隐私保护
java图书管理系统
java图书管理系统
|
7月前
|
存储 Java 关系型数据库
图书管理系统【GUI/Swing+MySQL】(Java课设)
图书管理系统【GUI/Swing+MySQL】(Java课设)
56 0
|
7月前
|
Java
JAVA实现图书管理系统(思路,和完整代码)
JAVA实现图书管理系统(思路,和完整代码)
894 0
|
6月前
|
前端开发 JavaScript Java
计算机Java项目|图书大厦图书管理系统的设计与实现
计算机Java项目|图书大厦图书管理系统的设计与实现
|
7月前
|
Java
Java实现图书管理系统
Java实现图书管理系统
78 0
|
7月前
|
JavaScript Java 测试技术
Java项目基于ssm+vue.js图书管理系统的附带文章和源代码设计说明文档ppt
Java项目基于ssm+vue.js图书管理系统的附带文章和源代码设计说明文档ppt
63 0
|
7月前
|
Java
<Java> 图书管理系统. 课程设计之经典
<Java> 图书管理系统. 课程设计之经典
42 0
|
7月前
|
存储 Java
用Java实现图书管理系统
用Java实现图书管理系统
65 0