文章目录

  • 逻辑分析
  • 主题框架
  • 具体方法
  • 添加书籍
  • 删除书籍
  • 查找书籍
  • 借阅书籍
  • 归还书籍
  • 展示书籍
  • 退出系统
  • 源码
  • User
  • NormalUser
  • AdmintUser
  • Book
  • BookList
  • IOperation
  • AddboookOperation
  • DeletbookOperation
  • FindbookOperation
  • ShowbookOperation
  • BorrowbookOperation
  • ReturnbookOperation
  • ExitOperation


逻辑分析

我们需要完成一个图书管理系统,首先我们要对他的逻辑进行分析,Java是面向对象的语言,那我们的图书管理系统都包含哪些对象呢?既然是图书管理系统,首先我们是不是要有书,既然有书了我们就需要有存放书的书架,我们还需要有用户,这里我们写两类用户,一类是管理员,可以对书架进行管理,一类是普通用户,可以实现借书还书等功能。经过我们的分析,大致的逻辑已经出来了,我们可以通过画图来理清楚我们的思路:

java图书管理系范本 java图书管理系统总结_User


这样我们就可以创建出对应的类与接口:

java图书管理系范本 java图书管理系统总结_sed_02


那么如何将书放入书架呢?我们在书架类中创建一个书类的数组是不是就可以储存书类对象了

java图书管理系范本 java图书管理系统总结_java_03

主题框架

首先我们来看看已经完成的图书管理系统是什么样子的:

java图书管理系范本 java图书管理系统总结_System_04


java图书管理系范本 java图书管理系统总结_开发语言_05


从上面两个图中我们可以对图书管理系统的框架进行一个分析:

主要有两点:
1、通过我们对身份的选择,打印管理员和普通用户两个不同的菜单
2、再次通过我们的选择,实现对我们所选择的用户的功能的实现

我们先来完成第一个框架,通过我们身份的选择打印不同的用户菜单:

因为不同用户打印的菜单是不一样的,那么我们就可以在父类中写一个抽象方法menu,那么此时父类User也应该是抽象的了,子类方法通过重写父类中的menu实现需要打印的菜单,我们通过创建不同的用户对象去调用对应的menu就可以实现打印不同的菜单了。

java图书管理系范本 java图书管理系统总结_System_06

java图书管理系范本 java图书管理系统总结_java_07


这样我们就使用多态的思想实现了我们的问题1,通过我们对身份的选择,打印管理员和普通用户两个不同的菜单,我们是通过选择判断,创建了不同的子类对象实现向上转型,之后通过这个对象调用打印菜单的方法,因为menu是抽象方法,而抽象方法不会在父类中实现,会调用对应子类中我们重写的menu方法,这样我们就完成了需求,打印对应用户菜单

java图书管理系范本 java图书管理系统总结_java_08

上面就是管理员用户的menu的菜单,我们只需要打印菜单就好了,那为什么会有返回值呢?因为我们还需要完成问题2:通过我们的选择,实现对我们所选择的用户的功能的实现。此时menu返回的是我们第二次的选择——对操作的选择。这里我们依旧是使用多态的思想,我们可以在父类用户类中创建一个IOperation接口的数组,此时我们不在父类中初始化,在对应的子类中初始化,这样不同的子类中的数组元素可以是不同的,我们把我们的选择choice当作IOperation数组的下标,这样就访问到了不同子类中的对应功能

java图书管理系范本 java图书管理系统总结_System_09

java图书管理系范本 java图书管理系统总结_java_10


java图书管理系范本 java图书管理系统总结_开发语言_11


在两个子类中数组iOperations的元素是不同的,这样我们就可以调用对应用户的对应功能了。以上这就是我们的主体框架需要完成的两个最重要的点,剩下就只需要我们对对应功能的实现了。

具体方法

添加书籍

java图书管理系范本 java图书管理系统总结_java_12


输入书籍信息,如果书架中没有此本书,就调用Book的构造方法,将刚才录入的书籍信息当作参数,构造一本书,再将书放入书架中,并给书架中书的数量加一。

删除书籍

java图书管理系范本 java图书管理系统总结_java_13

删除书籍值得我们讲一下,首先我们输入需要输入删除书籍的名字,遍历书架中的书,如果书架中当前位置的书,名字与我们需要删除的书籍名称相同,那就进行覆盖,将书架中后一本书覆盖到当前位置,依次类推,最后将书架中书的总数减一,并且将最后一本书的位置,置为null删除就成功了。

查找书籍

java图书管理系范本 java图书管理系统总结_开发语言_14


输入要查找的书籍名称,遍历书架,找到与我们查找的书籍名字相同的书籍,打印该书籍的信息。

借阅书籍

java图书管理系范本 java图书管理系统总结_User_15


同样输入书籍名称,遍历书架找到该书籍的信息,判断是否借出,如果没有就借阅成功。

归还书籍

java图书管理系范本 java图书管理系统总结_User_16

展示书籍

java图书管理系范本 java图书管理系统总结_User_17


遍历书架,打印每一本书籍的信息即可。

退出系统

java图书管理系范本 java图书管理系统总结_sed_18

源码

大家可以去我的码云里面看,也可以在下面观看: 图书管理系统源码

User

package User;

import Book.BookList;
import Operation.IOperation;

public abstract class User {
    protected String name;
    protected IOperation[] iOperations;

    public User() {
    }

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

    public abstract int menu();

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

NormalUser

package User;

import Book.BookList;
import Operation.*;

import java.util.Scanner;

public class NormalUser extends User{
    public NormalUser() {
    }

    public NormalUser(String name) {
        super(name);
        this.iOperations = new IOperation[]{
                new ExitOperation(),
                new BorrowbookOperation(),
                new ReturnbookOperation(),
                new FindbookOperation()
        };
    }

    @Override
    public int menu() {
        System.out.println(" 欢迎 " + name + " 管理员进入系统 ");
        System.out.println("****************************************");
        System.out.println("1、借阅书籍");
        System.out.println("2、归还书籍");
        System.out.println("3、查找书籍");
        System.out.println("0、退出程序");
        System.out.println("****************************************");
        System.out.println("请输入你需要的操作:");
        Scanner scanner = new Scanner(System.in);
        int choice = scanner.nextInt();
        return choice;
    }


}

AdmintUser

package User;

import Book.BookList;
import Operation.*;

import java.util.Scanner;

public class AdmintUser extends User {

    public AdmintUser() {
    }

    public AdmintUser(String name) {
        super(name);
        this.iOperations = new IOperation[]{
                new ExitOperation(),
                new AddbookOperation(),
                new DeletbookOperation(),
                new FindbookOperation(),
                new ShowbookOperation()
        };
    }



    @Override
    public int menu() {
        System.out.println(" 欢迎 " + name + " 用户进入系统 ");
        System.out.println("****************************************");
        System.out.println("1、添加书籍");
        System.out.println("2、删除书籍");
        System.out.println("3、查找书籍");
        System.out.println("4、展示书籍");
        System.out.println("0、退出程序");
        System.out.println("****************************************");
        System.out.println("请输入你需要的操作:");
        Scanner scanner = new Scanner(System.in);
        int choice = scanner.nextInt();
        return choice;
    }


}

Book

package Book;

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

    public Book() {
    }

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

    public String getName() {
        return name;
    }

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

    public String getType() {
        return type;
    }

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

    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 boolean isBorrow() {
        return isBorrow;
    }

    public void setBorrow(boolean borrow) {
        isBorrow = borrow;
    }

    @Override
    public String toString() {
        return "Book{" +
                "name='" + name + '\'' +
                ", type='" + type + '\'' +
                ", author='" + author + '\'' +
                ", price=" + price +
                ", isBorrow=" + isBorrow +
                '}';
    }
}

BookList

package Book;

public class BookList {
    Book[] books = new Book[20];

    private int usedSize;

    public BookList() {
        books[0] = new Book("三国演义","罗贯中",89,"小说");
        books[1] = new Book("西游记","吴承恩",78,"小说");
        books[2] = new Book("红楼梦","曹雪芹",49,"小说");
        this.usedSize = 3;
    }

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

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

    public int getUsedSize() {
        return usedSize;
    }

    public void setUsedSize(int usedSize) {
        this.usedSize = usedSize;
    }
}

IOperation

package Operation;

import Book.BookList;

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

AddboookOperation

package Operation;

import Book.Book;
import Book.BookList;

import java.util.Scanner;

public class AddbookOperation implements IOperation{
    @Override
    public void work(BookList bookList) {
        System.out.println("添加书籍");
        Scanner scanner = new Scanner(System.in);
        System.out.println("请输入你要添加的书籍名字:");
        String name = scanner.nextLine();
        System.out.println("请输入你要添加的书籍类型:");
        String type = scanner.nextLine();
        System.out.println("请输入你要添加的书籍作者:");
        String author = scanner.nextLine();
        System.out.println("请输入你要添加的书籍的价格:");
        int price = scanner.nextInt();

        int size = bookList.getUsedSize();
        for(int i = 0;i < size;i++) {
            Book book = bookList.getBooks(i);
            if(book.getName().equals(name)) {
                System.out.println("不好意思,您想添加的图书已经存在!");
                return;
            }
        }
        Book book = new Book(name,author,price,type);
        bookList.setBooks(size,book);
        bookList.setUsedSize(size + 1);
        System.out.println("添加图书成功!");
    }
}

DeletbookOperation

package Operation;

import Book.Book;
import Book.BookList;

import java.util.Scanner;

public class DeletbookOperation implements IOperation{
    @Override
    public void work(BookList bookList) {
        System.out.println("删除书籍");
        System.out.println("请输入你要删除的图书的名称:");
        Scanner scanner = new Scanner(System.in);
        String name = scanner.nextLine();
        int size = bookList.getUsedSize();
        int index = -1;
        for(int i = 0;i < size;i++) {
            Book book = bookList.getBooks(i);
            if(book.getName().equals(name)) {
                index = i;
                System.out.println("找到该图书了!");
                break;
            }
        }
        if(index == -1) {
            System.out.println("没有找到该图书!");
        }else {
            for(int j = index;j < size - 1;j++) {
                Book book = bookList.getBooks(j+1);
                bookList.setBooks(j,book);
            }
            bookList.setUsedSize(size - 1);
            bookList.setBooks(size - 1,null);
            System.out.println("删除成功!");

        }

    }
}

FindbookOperation

package Operation;

import Book.Book;
import Book.BookList;

import java.util.Scanner;

public class FindbookOperation implements IOperation{
    @Override
    public void work(BookList bookList) {
        System.out.println("查找书籍");
        System.out.println("请输入你要查找的书籍名称:");
        Scanner scanner = new Scanner(System.in);
        String name = scanner.nextLine();
        int size = bookList.getUsedSize();
        for(int i = 0;i < size;i++) {
            Book book = bookList.getBooks(i);
            if(book.getName().equals(name)) {
                System.out.println("找到了这本书!");
                System.out.println(book);
                return;
            }
        }
        System.out.println("不好意思没有找到");
    }
}

ShowbookOperation

package Operation;

import Book.Book;
import Book.BookList;

public class ShowbookOperation implements IOperation{
    @Override
    public void work(BookList bookList) {
        System.out.println("展示书籍");
        int size = bookList.getUsedSize();
        for(int i = 0;i < size;i++) {
            Book book = bookList.getBooks(i);
            System.out.println(book);
        }
    }
}

BorrowbookOperation

package Operation;

import Book.Book;
import Book.BookList;

import java.util.Scanner;

public class BorrowbookOperation implements IOperation{
    @Override
    public void work(BookList bookList) {
        System.out.println("借阅书籍");
        System.out.println("请输入你需要借阅的书籍名称:");
        Scanner scanner = new Scanner(System.in);
        String name = scanner.nextLine();
        int size = bookList.getUsedSize();
        for(int i = 0;i < size;i++) {
            Book book = bookList.getBooks(i);
            if(book.getName().equals(name) &&
            !book.isBorrow()) {
                book.setBorrow(true);
                System.out.println("借阅成功!!");
                return;
            }
        }
        System.out.println("对不起没有找到该书籍!");
    }
}

ReturnbookOperation

import Book.Book;
import Book.BookList;

import java.util.Scanner;

public class ReturnbookOperation implements IOperation{
    @Override
    public void work(BookList bookList) {
        System.out.println("归还书籍");
        System.out.println("请输入你需要归还的书籍名称:");
        Scanner scanner = new Scanner(System.in);
        String name = scanner.nextLine();
        int size = bookList.getUsedSize();
        for(int i = 0;i < size;i++) {
            Book book = bookList.getBooks(i);
            if(book.getName().equals(name) &&
                    book.isBorrow()) {
                book.setBorrow(false);
                System.out.println("归还成功!!");
                return;
            }
        }
        System.out.println("对不起没有找到该书籍!");
    }
}

ExitOperation

package Operation;

import Book.BookList;

public class ExitOperation implements IOperation{
    @Override
    public void work(BookList bookList) {
        System.out.println("退出程序");
        System.exit(0);
    }
}