Java实现简单图书管理系统

目录

利物浦是冠军!

一、图书管理系统的功能

二、图书管理系统的基本实现思路

1、Book包

2、user包

3、operation包

4、利用Main函数来连接所有包

 三、图书管理系统的具体实现

1、Book包

(1)book类

(2)bookList类

2、operation包

(1)IOperation接口的实现

(2)图书管理系统功能实现

3、User包

(1)User类

 (2)AdminUser(管理员)与Normal(普通用户)类

 4、Main

四、总结


利物浦是冠军!

哈喽大家好,欢迎大家一起学习利物浦夺得足总杯之后的第一篇文章!!!

一、图书管理系统的功能

这个图书管理系统,我将会利用Java为源代码实现两种不同的模式,一种是面向管理员开启的菜单和功能,一种是面向所有普通用户来提供的菜单和功能。这些功能包括对于图书的借阅,归还,增加,删除,查找以及显示,接下来的文章我们将会具体用Java源代码来实现这些功能,假如哪块有错误欢迎在评论区指出。

二、图书管理系统的基本实现思路

因为图书管理系统功能比较多,因此我们会建立三个包来封装不同的功能以便于后面的使用。

1、Book包

(1)首先我们要向实现这个图书管理系统,必不可少的就是图书,因此我们需要建立一个Book类来定义一本图书。

(2)接下来就是存储书本的东西,因此我们继续得实现一个BookList类,用来当做书架存储书籍。

2、user包

这个包是用来定义用户功能的,不同的用户有不同的功能

(1)首先我们需要构建一个父类User类,这个父类是一个抽象方法,因为不同的用户拥有不同的功能,然后实现一个操作方法。

(2)接下了我们就可以建立管理员以及普通用户的类了,首先他两是User的子类,然后因为每个人的功能不一样,因此每个人的菜单选项也不一样,实现的功能也不一样,因此我们需要在他们各自的类里面在构建父类User的抽象方法,操作方法父类早已建好因此就不需要我们构建了。

3、operation包

这个包用来用户各种功能的实现

(1)首先我们可以建立一个接口IOperation,在这个接口里面实现一个方法,然后后面的方法直接重载方法就可以。

(2)实现不同的功能,每一种功能都具有接口IOperation,这样每一种方法也就是IOperation类。

4、利用Main函数来连接所有包

上面的的步骤我们都实现了之后,我们就可以开始吧所有功能整合起来实现我们的这个系统,利用Main类来构造一个方法确定用户的类型,然后根据不用的类型安排对应的菜单,这样就是大致的框架,如下图

 三、图书管理系统的具体实现

1、Book包

(1)book类

这个book类主要是存放一本书的具体信息,这个信息包括书名,作者,价格,类型,是否被借出。并且为了安全起见,我们需要吧这些信息全部都用private来修饰,因此我们需要提供很多方法来实现修改和得到数值。

public class Book {
    private String name;//书名
    private String author;//作者
    private double price;//价钱
    private String type;//类型
    private boolean isBorrowde;//是否被借出
    

    @Override
    public String toString() {
        return "Book{" +
                "name='" + name + '\'' +
                ", author='" + author + '\'' +
                ", price=" + price +
                ", type='" + type + '\'' +
                "," + ((isBorrowde == true)?"已经借出":"没有被借出") +
                '}';
    }

    public Book(String name, String author, double price, String type) {
        this.name = name;
        this.author = author;
        this.price = price;
        this.type = type;
    }

    public String getName() {
        return name;
    }

    public void setName(String name) {
        this.name = name;
    }

    public String getAuthor() {
        return author;
    }

    public void setAuthor(String author) {
        this.author = author;
    }

    public double getPrice() {
        return price;
    }

    public void setPrice(double price) {
        this.price = price;
    }

    public String getType() {
        return type;
    }

    public void setType(String type) {
        this.type = type;
    }

    public boolean isBorrowde() {
        return isBorrowde;
    }

    public void setBorrowde(boolean borrowde) {
        isBorrowde = borrowde;
    }



}

(2)bookList类

这个bookList的功能类似于书架 ,因此他有一个很重要的功能,就是存储书籍,所以我们可以构建一个Book类的数组来存储图书,并且定义一个sizeBook来记录书籍中存储了多少书,因为这两个东西都是用private修饰的,因此我们需要构建方法来使用和修改

public class BookList {
    private Book []books = new Book[10];//初始化图书存储表
    private int sizeBook;//实际记录书本个数
    public BookList(){
        books[0] = new Book("三国演义","罗贯中",19.2,"小说");
        books[1] = new Book("活着","余华",29.3,"小说");
        sizeBook = 2;
    }

    /**
     * 得到存储系统存储书本数量
     * @return
     */
    public int getSize(){
        return sizeBook;
    }

    /**
     *
     * @param size 改变书本存储的个数
     */
    public void setBookSize(int size){
        this.sizeBook = size;
    }

    /**
     *
     * @param pos 必须合法,
     * @return 返回对应下标的书籍
     */
    public Book getBook(int pos){
        return books[pos];
    }

    /**
     *
     * @param pos 坐标
     * @param book 要放入的书本信息
     */
    public void setBook(int pos,Book book){
        books[pos] = book;
    }

}

2、operation包

这个包主要就是功能的实现

(1)IOperation接口的实现

这个接口会提供一个方法,关于接下来各种类实现的。

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

(2)图书管理系统功能实现

a、 AddOperation

public class AddOperation implements Ioperation{
    @Override
    public void work(BookList bookList) {
        Scanner in = new Scanner(System.in);
        System.out.println("增加图书:");
        System.out.println("请输入图书的名字:");
        String name = in.nextLine();
        System.out.println("请输入图书的作者:");
        String author = in.nextLine();
        System.out.println("请输入图书的价格:");
        double price = in.nextDouble();
        System.out.println("请输入图书的类型:");
        String type = in.nextLine();
        Book book = new Book(name,author,price,type);
        int pos = bookList.getSize();
        bookList.setBook(pos,book);
        bookList.setBookSize(pos++);
        System.out.println("插入完成!");

    }
}

b、BorrowOperation

public class BorrowOperation implements Ioperation {
    @Override
    public void work(BookList bookList) {
        System.out.println("借阅图书!");
        System.out.println("请输入你想借阅图书的名字:");
        Scanner in = new Scanner(System.in);
        String name = in.nextLine();
        for (int i = 0; i < bookList.getSize(); i++) {
            Book book = bookList.getBook(i);
            if (book.getName().equals(name)) {
                book.setBorrowde(true);
                System.out.println("借阅成功!");
                return;
            }
        }
    }
}

c、DelOperation

public class DelOperation implements Ioperation {
    @Override
    public void work(BookList bookList) {
        System.out.println("删除图书!");
        Scanner in = new Scanner(System.in);
        System.out.println("请输入你想删除图书的名字:");
        String name = in.nextLine();
        int size = bookList.getSize();
        for(int i = 0; i < bookList.getSize();i++){
            Book book = bookList.getBook(i);
            if(book.getName().equals(name)){
                for(int k = i; k < bookList.getSize(); k++){
                    bookList.setBook(k,bookList.getBook(k + 1));
//                    Book book1 = bookList.getBook(k+1);
//                    bookList.setBook(k,book1);
                }
                //bookList.setBook(size,null);
                bookList.setBookSize(size-1);
                return;
            }
        }
        System.out.println("没有找到需要删除的图书");
    }
}

 d、DisplayOperation

public class DisplayOperation implements Ioperation{
    @Override
    public void work(BookList bookList) {
        System.out.println("显示图书!");
        for(int i = 0; i < bookList.getSize(); i++){
            Book book = bookList.getBook(i);
            System.out.println(book);
        }
    }

}

 e、ExitOperation

public class ExitOperation implements Ioperation{
    @Override
    public void work(BookList bookList) {
        System.out.println("退出系统!");
        System.exit(0);
    }
}

f、FindOperation

public class FindOperation implements Ioperation{
    @Override
    public void work(BookList bookList) {
        System.out.println("查找图书!");
        System.out.println("请输入你想查找图书的名字:");
        Scanner in = new Scanner(System.in);
        String name = in.nextLine();
        for(int i = 0; i < bookList.getSize();i++){
            Book book = bookList.getBook(i);
            if(book.getName().equals(name)){
                System.out.println("找到了!");
                System.out.println(book);
                return;
            }
        }
        System.out.println("没找到!");
    }
}

g、ReturnOperation

public class ReturnOperation implements Ioperation{
    @Override
    public void work(BookList bookList) {

        System.out.println("归还图书!");
        System.out.println("请输入你想归还图书的名字:");
        Scanner in = new Scanner(System.in);
        String name = in.nextLine();
        for (int i = 0; i < bookList.getSize(); i++) {
            Book book = bookList.getBook(i);
            if (book.getName().equals(name)) {
                book.setBorrowde(false);
                System.out.println("归还成功!");
                return;
            }
        }
    }
}

3、User包

 

在User这个包中我们有两个用户类型,一个是管理员,一个是普通用户,因此他们都具有不同的菜单,不同的菜单实现不同的功能,但是他们的用户姓名都是一样的 ,因此这个User就可以当做一个父类,以父类为基础构建子类

(1)User类

这个是一个抽象父类,我们需要定义一个姓名,并且定义一个以IOperation为基本类型的数组,但是双方菜单都不一样,因此菜单方法需要抽象化,然后就是实现功能的方法,这个方法很巧妙,首先我们可以先利用通过菜单的选项,来实现IOperation数组里面的具体类,并且调用嘞个类里面的work方法,就可以实现不同用户有不同的功能

public abstract class User {
    protected String name;
    protected Ioperation []ioperations;
    //只可以在一个包中使用
    public User(String name){
        this.name = name;
    }
    public abstract int menu();//抽象方法,不同对象所用的菜单不一样
    public void doOperation(int choose, BookList bookList){
        this.ioperations[choose].work(bookList);
    }

}

 (2)AdminUser(管理员)与Normal(普通用户)类

管理员具有增加,删除,查找,打印图书的功能,因此我们在管理员的IOperation数组中应该具有这几种类

普通用户也一样,普通用户具有借阅,归还,查找,打印图书的功能。

public class AdminUser extends User{

    public AdminUser(String name) {
        super(name);
         this.ioperations = new Ioperation[]{
                 new ExitOperation(),
                 new AddOperation(),
                 new FindOperation(),
                 new DisplayOperation(),
                 new DelOperation()

        };
    }

    @Override
    public int menu() {
        System.out.println(this.name+ "欢迎来到图书管理系统(管理员版)");
        System.out.println("1.增加图书");
        System.out.println("2.查找图书");
        System.out.println("3.显示图书");
        System.out.println("4.删除图书");
        System.out.println("0.退出系统");
        System.out.println("请输入你的选择:");
        Scanner in = new Scanner(System.in);
        int choose = in.nextInt();
        return choose;
    }
}
public class NormalUser extends User{
    @Override
    public int menu() {
        System.out.println(this.name+ "欢迎来到图书管理系统");
        System.out.println("1.显示图书");
        System.out.println("2.查找图书");
        System.out.println("3.借阅图书");
        System.out.println("4.归还图书");
        System.out.println("0.退出系统");
        System.out.println("请输入你的选择:");
        Scanner in = new Scanner(System.in);
        int choose = in.nextInt();
        return choose;
    }

    public NormalUser(String name) {
        super(name);
        this.ioperations = new Ioperation[]{
                new ExitOperation(),
                new DisplayOperation(),
                new FindOperation(),
                new BorrowOperation(),
                new ReturnOperation()

        };
    }
}

 4、Main

Main主要作用是把这些功能串起来,并且实现整个图书管理系统的整合,因此他必须具备一个让用户选择自己身份的方法,我们可以构建一个方法为用户提供选择,然后在开始下一步,下一步就比较巧妙了,因为他发生了动态转型,我们可以利用User来调用菜单,这样不同的User就可以实现不同的菜单,接下来就正常运行

public class Main {
    public static User login(){
        System.out.println("请输入你的姓名:");
        Scanner in = new Scanner(System.in);
        String name = in.nextLine();
        System.out.println("请选择你要进入的系统: 1.管理员  2.普通用户");
        int input = in.nextInt();
        if(input == 1){
            return new AdminUser(name);
        }else{
            return new NormalUser(name);
        }
    }

    public static void main(String[] args) {
        BookList bookList = new BookList();
        User user = login();
        while(true){
            int choose = user.menu();
            user.doOperation(choose,bookList);
        }
    }
}

四、总结

这个图书管理系统,更多的是对于构建一个系统框架的理解,并且利用了多态和继承,还有接口以及 抽象的应用,可以说对于我来说不仅仅试一次挑战,更多的对于一种编程习惯的培养,希望大家可以认真学习,假如代码要是有什么漏洞欢迎指出,谢谢!

猜你喜欢

转载自blog.csdn.net/weixin_64448174/article/details/124902188