Java—小程序之图书管理系统 ヾ(●´∀`●)

​目录:

​一、介绍:

​二、对于书的代码:

1、Book:

 2、BookList:

​三、对于使用者的代码:

1、共性抽取,父类:

 2、对于普通用户的界面:

3、对于管理员的界面: 

​四、主函数的简单实现:

​五、操作代码的实现: 

 1、退出系统:

 2、展示图书:

3、 查找图书:

4、借阅图书:

5、归还图书:

6、删除图书:

7、新增图书:

​六、总代码:

   关于书的包里面的:

书:

 书架:

关于使用者的包的里面:

User:

普通用户:

管理者:

关于操作的包里面的:

接口:

退出系统:

展示图书:

查找图书:

借阅图书:

归还图书:

删除图书:

新增图书:

关于主函数:

​总结:


一、介绍:

     我们这次用我们之前的知识来进行对于代码的使用,来实现一个先程序:图书管理系统。

 对于图书管理系统来说它的程序呢分为两种使用者:1、管理者 2、普通的使用者

 图书管理系统得有和书相关的为 BOOK和书架

还有一些对于书之类操作,当然这个操作对于使用者的不同而不同,所以需要两个不同的菜

单对应使用者。

咱们先来看看做完之后的界面:

会根据不同的使用者出现不同的菜单,并且对应不同的操作。 但它们的操作都是作用在书架上的。这个图书管理系统呢,有很多的多态,所以要对于多态有一定的认识。

二、对于书的代码:

      咱们先把,有关于书的和书架的代码进行一个简单的书写,当然在后面呢,我们对于书和书架还有一些更改的地方。

1、Book:

咱们把对于书之类的相关的放到一个包里面,之后咱们先对于书来定义一个关于书的类:Book:

        对于书来说,一定要有一些基本的介绍,一个构造方法,还有一定要重写toString方法,还有一些有关于成员变量的get与set方法,这些都可以使用编译器来快速地完成,使用(Alt+Insert)就可以做到,但是是在IDEA的情况下。

 所以这里应该把toString的这里进行改动。

       这里的get与set方法,不一定都能用上,但是最好都写上,为了以防万一。

 2、BookList:

   对于书架,我们把书架和书这个类都放到一个包中,便于管理

     那么看到这会不会有疑问,对于书都有方法,难道书架就没有方法吗?当然是有的,比如得到有效数据个数,设置有效数据个数,返回指定的书之类的,这些我们在后面在进行写代码。

对于书之类的我们先写这么多,之后我们来看看关于使用者的代码。

三、对于使用者的代码:

    对于使用的人来说,不管是对于管理者,又或者普通用户来说呢,他们之间肯应有一定的共性,那么我们是不是可以把其进行抽取,在进行继承呢?当然可以,我们先看父类使用者的代码:

1、共性抽取,父类:

   对于使用者的父类来说,不能完整的描述使用者,所以可以设置成抽象类。   当然这里还有别的代码,但是呢,那些需要我们在完成操作的代码实现后,才能知道如何写。

   我们为什么呢要在父类中写menu的抽象方法呢?这样呢就可以让我们达到,用不同的类调用menu方法来进行调用不同的菜单,这呢体现的就是多态

 2、对于普通用户的界面:

     我们先要继承父类,并且重写抽象方法。

 这时候呢我们把对于普通用户的菜单就写完了。

3、对于管理员的界面: 

  管理员呢和普通用户是相似的写法。 

       这就把使用者和普通用户的菜单的代码写完了,那么我们接下来来实现我们一开始而展示的那个界面。

四、主函数的简单实现:

    就可以实现这个简单的界面代码了,那么我们在实现完这个界面的代码,我们之后就开始写关于操作方面的代码了,在写这些操作代码的时候我们也会对于之前写完的代码进行进一步的完善。

五、操作代码的实现: 

    我们对于操作来说呢,都是实现对应的操作,我们可以设置一个接口,实现接口的类来进行重写它对应的操作。

        我们就把这个接口写出来了。 但是在我们实现每一个操作的类之前呢,我们先把一些代码来给完善一下。

      我们不管是管理者还是普通用户来说它俩所有的操作都在这里了。 我们之后在对每一个操作进行代码的实现。

我们来想,下面这个问题:

       对于这个呢,我们需要使用user这个对象和返回值choic来调用我们User这个类当中的某个方法,来确定我们调用的是哪个操作方法。这个操作呢是我们使用者操作的,所以我们要放到User这个类当中。那么我们要如何实现呢? 

那么我们再来进行下一个问题了, 我们要如何来调用我们的选择调用我们对应的操作呢?

我们来看看如何实现:

 

Ok,我们对于使用者的代码就完善好了。主函数还有一个小小的问题,我们来看:

对于我们使用图书管理系统,不可能只是进行一个操作之后,就不操作了,所以我们要在选择那里添加一个循环,只有选择退出时才会退出系统。    我们对于使用者和主函数的代码就都完善好了,但是对于书的代码还没有完善好,我们在写操作代码的时候,再进行对其完善,Ok,那么我们来看关于操作代码每个要怎么写。

 1、退出系统:

我们要实现接口,并且把接口的方法给重写。

 2、展示图书:

     对于展示图书呢,我们是不是需要知道,对于书架来说我们的有效的数组个数呢?所以我们要在书架类当中添加一个关于返回书的有效的个数的代码。

并且对于展示图书,我们是不是要打印书架上的每一本书呢?所以我们要返回书架的每一本书,根据下标,来返回。所以我们要在书架中再添加一个方法:

 

     那么接下来我们就可以进行写展示操作了,对于展示图书的操作,我们是不是只需要对其书架进行一次遍历就可以了呢。所以代码非常简单:

   这个操作也是没有问题的。

3、 查找图书:

     对于查找图书呢,我们是不是可以根据我们输入的书名,再遍历书架,寻找和我们输入的名字相同的,就是我们要查找的图书。

  这样呢我们的查找图书的操作就已经写完了。 

看看运行后有没有问题:

对于运行结果呢,没有任何的问题。 

4、借阅图书:

       对于借阅图书呢和查找图书呢,代码差不多,但是呢区别就在于我们在找到这个书名之后,我们要对于Book里的isBorrowed成员变量进行更改,在我们写Book里的toString方法,就已经把打印isBorrowed的真或假,就已经改成如果是真就打印 “已借出” 如果是假就打印 “未借出”。我们就基于这个为基础进行更改。

那么我们的借阅图书这个操作就已经写完了,那么我们来测试一下看是否有问题:      我们可以看到没有任何的问题,OK,那么我们接着往下看,有借就得有还,下面我们来看归还操作。

5、归还图书:

  归还图书的操作呢和借阅图书的操作是差不多的,OK,我们来看:

我们来看看运行会不会出错? 我们可以看到,没有任何的错误,可以正常的运行。

6、删除图书:

在写删除图书的代码之前,我们先看看这个删除的原理:

    这里呢,我们要在BookList当中添加一些新的方法,我们设置有效长度,设置某位置下的书,我们来看代码:

我们接下来看看删除图书是怎么做到的:

 

我们来运行看看:

我们可以看到,我们正常运行了,没有发生错误。 

删除图书呢就到这里就结束了,我们接下来看看它的死对头新增图书。

7、新增图书:

    对于新增图书呢,在我们新增书之前呢,我们判断这个书架是否是满的,如果满的就不能再假如图书了,这里我们就要用有效长度和书架的长度进行比较了,所以这里我们就要新添加一个方法,在BookList当中,这个方法的作用是返回书架这个整体。

我们来看看新添加的代码:

接下来有了书架,我们来看看如何判断是否是满的对于书架:

      判满之后我们就要输入添加的书的各种信息了,并且判断我们书架当中是否有我们要添加的这本书,我们来看代码:

    当我们发现书架当中吗没有这本书的话,我们就要把这本新书添加到书架当中,进行尾部插入,并且把有效长度加一。 OK,我们来看代码:

画图理解一下:

我们来看看运行会不会出错:

 这是没有报错的,所以没有问题。

六、总代码:

   关于书的包里面的:

书:

package book;

public class Book {
    private String name;//书名
    private String author;//作者
    private int price;//价格
    private String type;//类型
    private boolean isBorrowed;//是否借出

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

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

    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 int getPrice() {
        return price;
    }

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

    public String getType() {
        return type;
    }

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

    public boolean isBorrowed() {
        return isBorrowed;
    }

    public void setBorrowed(boolean borrowed) {
        isBorrowed = borrowed;
    }
}

 书架:

package book;

public class BookList {
    private Book[] books = new Book[10];
    private int useSize;//有效的数据个数,也就是放的书的个数。

    //对于书架来说,当有了书架后,那么书架就会有一些基本的书
    //所以对于书架要有一个构造方法,来进行书架的初始书的初始化
    public BookList() {
        this.books[0] = new Book("《大学》","曾子",30,"散文");
        this.books[1] = new Book("《孟子》","孟子",25,"散文");
        this.books[2] = new Book("《中庸》","子思",35,"散文");
        this.books[3] = new Book("《礼记》","戴圣",40,"散文");

        this.useSize = 4;
    }

    public Book[] getBooks() {
        return books;
    }
    public Book getBooks(int pos) {
        return books[pos];
    }

    public void setBooks(int pos,Book book) {
        this.books[pos] = book;
    }

    public int getUseSize() {
        return useSize;
    }

    public void setUseSize(int useSize) {
        this.useSize = useSize;
    }
}

关于使用者的包的里面:

User:

package user;

import book.Book;
import book.BookList;
import ioperations.IOperations;

//不能具体的表示某一个用户,所以使用抽象类
public abstract class User {
    protected String name;

    protected IOperations[] iOperations;

    public User(String name) {
        this.name = name;
    }

    public abstract int menu();

    public void doIoperations(int choice, BookList bookList) {
        iOperations[choice].work(bookList);
    }
}

普通用户:

package user;

import ioperations.*;

import java.util.Scanner;

//普通用户
public class NormalUser extends User{

    public NormalUser(String name) {
        super(name);
        this.iOperations = new IOperations[] {
                new ExitOperations(),
                new FindOperations(),
                new BorrowedOperations(),
                new ReturnOperations(),
                new ShowOperations()

        };
    }

    public int menu() {
        System.out.println("欢迎" + this.name + "来到普通用户菜单");
        System.out.println("0.退出系统");
        System.out.println("1.查找图书");
        System.out.println("2.借阅图书");
        System.out.println("3.归还图书");
        System.out.println("4.显示图书");
        System.out.println("**********************************");
        Scanner scanner = new Scanner(System.in);
        System.out.println("请输入你想要的操作");
        int choice = scanner.nextInt();
        return choice;
    }
}

管理者:

package user;

import ioperations.*;

import java.util.Scanner;

//管理者
public class AdminUser extends User{

    public AdminUser(String name) {
        super(name);
        this.iOperations = new IOperations[] {
                new ExitOperations(),
                new FindOperations(),
                new AddOperations(),
                new DelOperations(),
                new ShowOperations()
        };
    }

    public int menu() {
        System.out.println("欢迎" + this.name + "来到管理员菜单");
        System.out.println("0.退出系统");
        System.out.println("1.查找图书");
        System.out.println("2.新增图书");
        System.out.println("3.删除图书");
        System.out.println("4.显示图书");
        System.out.println("**********************************");
        Scanner scanner = new Scanner(System.in);
        System.out.println("请输入你想要的操作");
        int choice = scanner.nextInt();
        return choice;
    }
}

关于操作的包里面的:

接口:

package ioperations;

import book.BookList;

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

退出系统:

package ioperations;

import book.BookList;

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

展示图书:

package ioperations;

import book.Book;
import book.BookList;

public class ShowOperations implements IOperations {
    @Override
    public void work(BookList bookList) {
        System.out.println("展示图书");
        for (int i = 0; i < bookList.getUseSize(); i++) {
            Book book = bookList.getBooks(i);
            System.out.println(book);
        }
    }
}

查找图书:

package ioperations;

import book.Book;
import book.BookList;

import java.util.Scanner;

public class FindOperations implements IOperations{

    @Override
    public void work(BookList bookList) {
        System.out.println("查找图书");
        Scanner scanner = new Scanner(System.in);
        System.out.println("请输入想要查找的书名");
        String name = scanner.nextLine();

        int usedszie = bookList.getUseSize();
        for (int i = 0; i < usedszie; i++) {
            Book book = bookList.getBooks(i);
            if(book.getName().equals(name)) {
                System.out.println("找到了这本书");
                System.out.println(book);
                return;
            }
        }
        System.out.println("没有找到"+ name +"这本书");
    }
}

借阅图书:

package ioperations;

import book.Book;
import book.BookList;

import java.util.Scanner;

public class BorrowedOperations implements IOperations{
    @Override
    public void work(BookList bookList) {
        System.out.println("借阅图书");
        Scanner scanner = new Scanner(System.in);
        System.out.println("请输入想要借阅的书名");
        String name = scanner.nextLine();

        int usedszie = bookList.getUseSize();
        for (int i = 0; i < usedszie; i++) {
            Book book = bookList.getBooks(i);
            if(book.getName().equals(name)) {
                if(book.isBorrowed()) {
                    System.out.println("这本书已经被借出");
                    return;
                }
                book.setBorrowed(true);
                System.out.println("借阅完成");
                return;
            }
        }
        System.out.println("没有找到"+ name +"这本书");
    }
}

归还图书:

package ioperations;

import book.Book;
import book.BookList;

import java.util.Scanner;

public class ReturnOperations implements IOperations{
    @Override
    public void work(BookList bookList) {
        System.out.println("归还图书");
        Scanner scanner = new Scanner(System.in);
        System.out.println("请输入想要归还的书名");
        String name = scanner.nextLine();

        int usedszie = bookList.getUseSize();
        for (int i = 0; i < usedszie; i++) {
            Book book = bookList.getBooks(i);

            if(book.getName().equals(name)) {
                if(book.isBorrowed()) {
                    book.setBorrowed(false);
                    System.out.println("归还成功");
                    return;
                }

            }
        }
        System.out.println("没有找到"+ name +"这本书");
    }
}

删除图书:

package ioperations;

import book.Book;
import book.BookList;

import java.util.Scanner;

public class DelOperations implements IOperations{
    @Override
    public void work(BookList bookList) {
        System.out.println("删除图书");
        Scanner scanner = new Scanner(System.in);
        System.out.println("请输入想要删除的书名");
        String name = scanner.nextLine();

        int usedszie = bookList.getUseSize();
        int pos = -1;
        int i = 0;
        for (i = 0; i < usedszie; i++) {
            Book book = bookList.getBooks(i);
            if(book.getName().equals(name)) {
                System.out.println("找到了这本书");
                pos = i;
                break;
            }
        }
        if(i == usedszie) {
            System.out.println("没有这本书");
            return;
        }
        for (int j = pos; j < usedszie - 1; j++) {
            Book book = bookList.getBooks(j+1);
            bookList.setBooks(j,book);
        }
        bookList.setBooks(usedszie-1,null);
        bookList.setUseSize(usedszie-1);
        System.out.println("成功删除了这本书");
    }
}

新增图书:

package ioperations;

import book.Book;
import book.BookList;

import java.util.Scanner;

public class AddOperations implements IOperations{
    @Override
    public void work(BookList bookList) {
        System.out.println("新增图书");
        //判断是否满
        int currSize = bookList.getUseSize();
        if(currSize == bookList.getBooks().length) {
            System.out.println("书架满了,放不了书了");
            return;
        }

        Scanner scanner = new Scanner(System.in);
        System.out.println("请输入添加的书名");
        String  name = scanner.nextLine();

        System.out.println("请输入添加的作者");
        String author = scanner.nextLine();

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

        System.out.println("请输入添加的价格");
        int price = scanner.nextInt();

        Book newbook = new Book(name,author,price,type);
        //判断是否有这本书
        for (int i = 0; i < bookList.getUseSize(); i++) {
            Book book = bookList.getBooks(i);
            if(book.getName().equals(name)) {
                System.out.println("已经拥有这本书了");
                return;
            }
        }

        bookList.setBooks(currSize,newbook);

        bookList.setUseSize(currSize+1);

        System.out.println("新增成功");

    }
}

关于主函数:

import book.Book;
import book.BookList;
import user.AdminUser;
import user.NormalUser;
import user.User;

import java.util.Scanner;

public class Main {
    public static User login() {
        System.out.println("请输入你的姓名");
        Scanner scanner = new Scanner(System.in);
        String name = scanner. nextLine();
        System.out.println("请输入你的身份:1、管理员   2、普通用户");

        int choice = scanner.nextInt();
        if(choice == 1) {
            return new AdminUser(name);
        }else if(choice == 2) {
            return new NormalUser(name);
        }else {
            return null;
        }
    }
    public static void main(String[] args) {
        BookList bookList = new BookList();

        User user = login();
        while(true) {
            int chioce = user.menu();

            user.doIoperations(chioce,bookList);
        }

    }
}

总结:

     到这里呢,我们关于图书管理系统的所有代码都已经写完了,当然,这个不是最完美的图书管理系统,还有很多需要添加的地方,我们今天写的呢只是一个最简单的图书管理系统。我们还可以对于这个图书管理系统进行添加一些新的代码和想法。

      在看完图书管理系统之后,有没有对于我们之前学的知识有了更加深刻的理解了呢?希望大家都有所收获,在看完这次的博客之后。

      这次的分享就到这里,圆满结束,让我们期待我们下次的分享知识,接下来我们进行分享String类的知识。拜拜~~

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值