当前位置:   article > 正文

Java面向对象-- “ 图书管理系统 ”_设计一个图书管理系统。系统具有以下几个功能: 查询全部书籍、添加书籍、借阅书籍

设计一个图书管理系统。系统具有以下几个功能: 查询全部书籍、添加书籍、借阅书籍

运行环境:IDEA

1 需求

1、实现根据不同身份登陆;
2、用户身份:管理员、普通用户
管理员实现功能:增加图书、删除图书、查看所有书籍的列表、查阅某个书籍的信息、退出程序;
普通用户:借阅书籍、归还书籍、查阅某个书籍的信息、退出程序。

2 代码实现

  我们找到这个系统的一个个的对象,逐步来实现。

2.1 Book、BookList

  图书管理系统,首先最重要的就是书。
  在创建类里面的属性时,明确封装是面向对象的重要核心之一,设计这个 book 类的时候,book 类的属性,尽可能封装起来,用 private,使其他的程序猿能不用理解具体细节,降低使用成本。

package Test1_28_LibraryManagementSystem;

public class Book {
    private String name;
    private String author;
    private double price;
    private String type;
    // 默认是false ,但是显示的写出来可读性更好
    private boolean isBorrowed = false;

    // 每本书的名字、价格、作者、类型,可能不同
    // 使用构造方法,构造的时候以传入参数的形式,确定具体的值
    // 构造实例时,显示的创建相关参数,来传入相关信息
    public Book(String name, String author, double price, String type) {
        this.name = name;
        this.author = author;
        this.price = price;
        this.type = type;
    }

// 重写 toString 方法才能在打印书籍信息时,以字符串的样子打印出来
    @Override
    public String toString() {
        return "Book{" +
                "name='" + name + '\'' +
                ", author='" + author + '\'' +
                ", price=" + price +
                ", type='" + type + '\'' +
                ", isBorrowed=" + isBorrowed +
                '}';
    }
// getter / setter 和封装是相悖的 ,但是封装并不是百分百藏起来,完全包裹起来调用者不好使用。
    public String getName() {
        return name;
    }

    public boolean isBorrowed() {
        return isBorrowed;
    }

    public void setBorrowed(boolean borrowed) {
        isBorrowed = borrowed;
    }
}
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19
  • 20
  • 21
  • 22
  • 23
  • 24
  • 25
  • 26
  • 27
  • 28
  • 29
  • 30
  • 31
  • 32
  • 33
  • 34
  • 35
  • 36
  • 37
  • 38
  • 39
  • 40
  • 41
  • 42
  • 43

为了记录所有书籍信息,创建一个书籍列表

package Test1_28_LibraryManagementSystem;

public class BookList {
    Book books[] = new Book[100];
    int size = 0;

// 这样就写死了这些书,创建实例它们就存在
    public BookList() {
        books[0] = new Book("西游记","吴承恩",50.0,"古典名著");
        books[1] = new Book("水浒传","施耐庵",50.0,"古典名著");
        books[2] = new Book("三国演义","罗贯中",50.0,"古典名著");
        books[3] = new Book("红楼梦","曹雪芹",50.0,"古典名著");
        size = 4;
    }

// 通过 getter和setter 来获取和修改书籍列表 
    public Book getBook(int index) {
        return books[index];
    }

    public void setBook(int index,Book book) {
        books[index] = book;
    }

    public int getSize() {
        return size;
    }

    public void setSize(int size) {
        this.size = size;
    }
}
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19
  • 20
  • 21
  • 22
  • 23
  • 24
  • 25
  • 26
  • 27
  • 28
  • 29
  • 30
  • 31

2.2 使用者

1、管理员

package Test1_28_LibraryManagementSystem;
import Test1_28_LibraryManagementSystem.IOperation.*;
import java.util.Scanner;

public class Admin extends User{

    public Admin(String name) {
        this.name = name;
        this.operations = new IOperation[]{
                new AddOperation(),
                new DelOperation(),
                new DisplayBookList(),
                new FindOperation(),
                new ExitOperation()
        };
    }

    @Override
    public int menu() {
        System.out.println("*********************");
        System.out.println(" 1、新增书籍 ");
        System.out.println(" 2、删除书籍 ");
        System.out.println(" 3、展示书籍列表 ");
        System.out.println(" 4、查找某本书籍 ");
        System.out.println(" 5、退出系统 ");
        System.out.println("*********************");
        System.out.println("请输入您的选择:");
        Scanner scanner = new Scanner(System.in);
        int choice = scanner.nextInt();
        return choice;
    }
}
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19
  • 20
  • 21
  • 22
  • 23
  • 24
  • 25
  • 26
  • 27
  • 28
  • 29
  • 30
  • 31

2、普通用户

package Test1_28_LibraryManagementSystem;
import Test1_28_LibraryManagementSystem.IOperation.*;
import java.util.Scanner;

public class NormalUser extends User{

    public NormalUser(String name) {
        this.name = name;
        this.operations = new IOperation[]{
                new BorrowOperation(),
                new ReturnOperation(),
                new FindOperation(),
                new ExitOperation()
        };
    }

    public int menu(){
        System.out.println("*********************");
        System.out.println(" 1、借阅书籍 ");
        System.out.println(" 2、归还书籍 ");
        System.out.println(" 3、查找某本书籍 ");
        System.out.println(" 4、退出系统 ");
        System.out.println("*********************");
        System.out.println("请输入您的选择:");
        Scanner scanner = new Scanner(System.in);
        int choice = scanner.nextInt();
        return choice;
    }
}
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19
  • 20
  • 21
  • 22
  • 23
  • 24
  • 25
  • 26
  • 27
  • 28

3、用户
创建抽象类 User ,这样在使用时,调用者可以不关注是管理员还是普通用户,管理员和用户继承 User 。

package Test1_28_LibraryManagementSystem;
import Test1_28_LibraryManagementSystem.IOperation.IOperation;

abstract public class User {
    protected String name;
    protected IOperation[] operations;
    public abstract int menu();

    public void doOperation(int choice,BookList bookList){
        this.operations[choice - 1].work(bookList);
    }

}
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12

2.3 操作

  设计用户操作,每种类都可以设置成一个类,每个操作类中都有一个 work 方法,public 修饰、返回void、传入BookList。因为他们有共性,就可以把共性信息提取出来,做成一个接口。(消除重复 并且 在不相关的类之间建立联系)
  当前 IOperation 这个接口其实就是把所有的用户操作给统一规范起来了,什么样的类作为一种用户的操作?只要实现了这个接口,就可以作为用户的操作。
1、接口

package Test1_28_LibraryManagementSystem.IOperation;

import Test1_28_LibraryManagementSystem.BookList;

public interface IOperation {
    void work(BookList bookList);
}
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6

注意:
如果多各类之间,公共的部分只有方法的话,此时使用接口;
如果多个类之间,公共的部分不光有方法还有属性,此时使用继承(普通父类 / 抽象父类)。

2.3.1 管理员操作

1、新增书籍

package Test1_28_LibraryManagementSystem.IOperation;
import Test1_28_LibraryManagementSystem.Book;
import Test1_28_LibraryManagementSystem.BookList;
import java.util.Scanner;

public class AddOperation implements IOperation{
    @Override
    public void work(BookList bookList) {
        System.out.println("新增图书 >> ");
        Scanner scanner = new Scanner(System.in);
        System.out.println("请输入要新增书籍的书名:");
        String name = scanner.next();
        System.out.println("请输入书籍作者的名字:");
        String author = scanner.next();
        System.out.println("请输入书籍的价格:");
        Double price = scanner.nextDouble();
        System.out.println("请输入书籍的类型:");
        String type = scanner.next();
        Book newBook = new Book(name,author,price,type);
        bookList.setBook(bookList.getSize(),newBook);
        bookList.setSize(bookList.getSize() + 1);
    }
}
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19
  • 20
  • 21
  • 22

2、删除书籍

package Test1_28_LibraryManagementSystem.IOperation;
import Test1_28_LibraryManagementSystem.BookList;
import java.util.Scanner;
import java.util.jar.JarOutputStream;

public class DelOperation implements IOperation{
    @Override
    public void work(BookList bookList) {
        System.out.println("删除书籍 >> ");
        Scanner scanner = new Scanner(System.in);
        System.out.println("请输入要删除书籍的书名:");
        String name = scanner.next();
        int i = 0;
        for (; i < bookList.getSize(); i++) {
            if(name.equals(bookList.getBook(i).getName())) {
                if(i == bookList.getSize() - 1) {
                    bookList.setSize(bookList.getSize() - 1);
                    System.out.println("删除成功");
                    return;
                }
                bookList.setBook(i,bookList.getBook(bookList.getSize() - 1));
                bookList.setSize(bookList.getSize() - 1);
                System.out.println("删除成功");
                return;
            }
        }
        if (i >= bookList.getSize() - 1) {
            System.out.println("未找到《" + name + "》,删除失败");
        }
    }
}
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19
  • 20
  • 21
  • 22
  • 23
  • 24
  • 25
  • 26
  • 27
  • 28
  • 29
  • 30

3、展示书籍列表

package Test1_28_LibraryManagementSystem.IOperation;
import Test1_28_LibraryManagementSystem.BookList;

public class DisplayBookList implements IOperation{
    @Override
    public void work(BookList bookList) {
        System.out.println("展示书籍列表 >> ");
        for (int i = 0; i < bookList.getSize(); i++) {
            System.out.println(bookList.getBook(i));
        }
    }
}
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11

4、查找某本书籍信息

package Test1_28_LibraryManagementSystem.IOperation;
import Test1_28_LibraryManagementSystem.BookList;
import java.util.Scanner;

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.next();
        int i = 0;
        for (; i < bookList.getSize(); i++) {
            if(bookList.getBook(i).getName().contains(name)) {
                System.out.println(bookList.getBook(i));
                System.out.println("查找成功");
                return;
            }
        }
        if(i >= bookList.getSize() - 1) {
            System.out.println("未找到《" + name + "》,查找失败");
        }
    }
}
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19
  • 20
  • 21
  • 22
  • 23

5、退出系统

package Test1_28_LibraryManagementSystem.IOperation;
import Test1_28_LibraryManagementSystem.BookList;

public class ExitOperation implements IOperation{
    @Override
    public void work(BookList bookList) {
        System.out.println("退出系统 >> ");
        System.exit(0);
    }
}
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10

2.3.2 用户操作

1、借阅书籍

package Test1_28_LibraryManagementSystem.IOperation;
import Test1_28_LibraryManagementSystem.BookList;
import java.util.Scanner;

public class BorrowOperation implements IOperation {
    @Override
    public void work(BookList bookList) {
        System.out.println("借阅书籍 >> ");
        Scanner scanner = new Scanner(System.in);
        System.out.println("请输入要借阅书籍的书名:");
        String name = scanner.next();
        int i = 0;
        for (; i < bookList.getSize(); i++) {
            if(name.equals(bookList.getBook(i).getName())) {
                if(!bookList.getBook(i).isBorrowed()) {
                    bookList.getBook(i).setBorrowed(true);
                    System.out.println("借阅成功");
                    return;
                }
                System.out.println("《" + name + "》已被借阅,借阅失败");
                return;
            }
        }
        if(i >= bookList.getSize() - 1) {
            System.out.println("未找到 《" + name + "》,借阅失败");
        }
    }
}
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19
  • 20
  • 21
  • 22
  • 23
  • 24
  • 25
  • 26
  • 27

2、归还书籍

package Test1_28_LibraryManagementSystem.IOperation;
import Test1_28_LibraryManagementSystem.BookList;
import java.util.Scanner;

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.next();
        for (int i = 0; i < bookList.getSize(); i++) {
            if(name.equals(bookList.getBook(i).getName())) {
                if(!bookList.getBook(i).isBorrowed()) {
                    System.out.println("《" + name + "》未被借阅,归还失败");
                    return;
                }
                bookList.getBook(i).setBorrowed(false);
                System.out.println("归还成功");
                return;
            }
        }
        System.out.println("未找到《" + name + "》,归还失败");
    }
}
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19
  • 20
  • 21
  • 22
  • 23
  • 24

3、查找某本书的信息( 与管理员的查找相同 )

package Test1_28_LibraryManagementSystem.IOperation;
import Test1_28_LibraryManagementSystem.BookList;
import java.util.Scanner;

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.next();
        int i = 0;
        for (; i < bookList.getSize(); i++) {
            if(bookList.getBook(i).getName().contains(name)) {
                System.out.println(bookList.getBook(i));
                System.out.println("查找成功");
                return;
            }
        }
        if(i >= bookList.getSize() - 1) {
            System.out.println("未找到《" + name + "》,查找失败");
        }
    }
}
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19
  • 20
  • 21
  • 22
  • 23

4、退出系统( 与管理员的查找相同 )

package Test1_28_LibraryManagementSystem.IOperation;
import Test1_28_LibraryManagementSystem.BookList;

public class ExitOperation implements IOperation{
    @Override
    public void work(BookList bookList) {
        System.out.println("退出系统 >> ");
        System.exit(0);
    }
}
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9

2.4 调用

package Test1_28_LibraryManagementSystem;
import java.util.Scanner;

public class Main {
    public static void main(String[] args) {
        BookList bookList = new BookList();
        // 向上转型,login返回管理员或普通用户
        User user = login();
        while (true) {
        //多态
            int choice = user.menu();
            user.doOperation(choice,bookList);
        }

    }

    private static User login() {
        Scanner scanner = new Scanner(System.in);
        System.out.println("请输入您的姓名:");
        String name = scanner.next();
        System.out.println(name + "欢迎使用!");
        System.out.println("请选择您的身份:");
        System.out.println(" 0、管理员  1、用户 ");
        int who = scanner.nextInt();
        if(who == 0){
            return new Admin(name);
        }
        return new NormalUser(name);
    }
}
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19
  • 20
  • 21
  • 22
  • 23
  • 24
  • 25
  • 26
  • 27
  • 28
  • 29
声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/凡人多烦事01/article/detail/512292?site
推荐阅读
相关标签
  

闽ICP备14008679号