JavaSE 图书信息管理系统

JavaSE 图书信息管理系统


利用JavaSE语法知识搭建图书信息管理系统

1.书和书架对象创建

既然是图书管理系统,最重要的莫过于图书的创建,这里我们分为书和书架(Book & BookList)两个对象,先创建一个包来存储这两个类

在这里插入图片描述

  • 书类代码示例:

    package book;
    
    public class Book {
        private String name; //书名
        private String author; //作者
        private int price; //价格
        private String type; //类型
        private boolean isBorrow; //借阅状态
    
        //通过构造方法初始化对象
        public Book(String name, String author, int price, String type) {
            this.name = name;
            this.author = author;
            this.price = price;
            this.type = type;
        }
    	
        //获取书籍属性信息方法
        public String getName() {
            return this.name;
        }
    
        public boolean isBorrow() {
            return this.isBorrow;
        }
    
        //设置书籍属性信息方法
        public void setBorrow(boolean borrow) {
           this.isBorrow = borrow;
        }
    
        //重写toString方法,更好显示书的信息
        @Override
        public String toString() {
            return "book{" +
                    "name='" + name + '\'' +
                    ", author='" + author + '\'' +
                    ", price=" + price +
                    ", type='" + type + '\'' +
                    (isBorrow == true ? ", 已被借阅":", 未被借阅") +
                    '}';
        }
    }
    
  • 书架类代码示例:

    package book;
    
    public class BookList {
    
        private Book[] books; //书架即创建存放书对象的数组
        private int size = 3; //书架容量
        private int num; //书架实际存放书的数量
    
        public BookList(Book[] books, int Size) {
            this.books = new Book[Size];
            books[0] = new Book("三国演义","罗贯中",25,"小说");
            books[1] = new Book("西游记","吴承恩",20,"小说");
            books[2] = new Book("水浒传","施耐庵",17,"小说");
            this.num = 3;
        }
    
        public int getNum() {
            return num;
        }
    
        public void setNum(int num) {
            this.num = num;
        }
    
        public Book getBook(int pos) {
            return books[pos];
        }
    
        public void setBook(Book book, int pos) {
            books[pos] = book;
        }
    
    }
    

2.用户对象创建

先创建一个包来存放用户类:

在这里插入图片描述

我们将用户分为两种类型:管理员&&普通用户

先设置一个抽象类,提供姓名与用户菜单

package user;

public abstract class User {
    private String name;

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

    public abstract void menu();//菜单,需要被子类重写
}

然后分别创建管理员类和普通用户类并继承该抽象类,因为不同用户所需要的功能也不同,功能菜单也不同,所以在编写子类时需要重写父类中的menu()方法

  • 管理员类:

    package user;
    
    public class AdminUser extends User{
        public AdminUser(String name) {
            super(name);
        }
    
        @Override
        public void menu() {
            System.out.println("***********管理员**********");
            System.out.println("1.查找图书");
            System.out.println("2.添加图书");
            System.out.println("3.删除图书");
            System.out.println("4.展示图书");
            System.out.println("0.退出系统");
        }
    }
    
  • 普通用户类:

    package user;
    
    public class NormalUser extends User{
        public NormalUser(String name) {
            super(name);
        }
    
        @Override
        public void menu() {
            System.out.println("*********普通用户*********");
            System.out.println("1.查找图书");
            System.out.println("2.借阅图书");
            System.out.println("3.归还图书");
            System.out.println("4.退出系统");
        }
    
    }
    

3.Main方法测试

先简单测试一下上面的菜单能否使用,这里构建了一个login()方法进行登录:

import book.Book;
import user.AdminUser;
import user.NormalUser;
import user.User;
import java.util.Scanner;

public class Main {

    public static User login() {
        Scanner scanner = new Scanner(System.in);
        System.out.println("请输入姓名: ");
        String name = scanner.nextLine();
        System.out.println("请选择身份登录:1.管理员 2.普通用户 -->");
        int choice = scanner.nextInt();
        if (choice == 1) {
            return new AdminUser(name); 
        }
        else {
            return new NormalUser(name); 
        }
    }
    public static void main(String[] args) {

        User user = login(); //接受子类对象完成向上转型
        user.menu(); //通过父类对象调用子类方法实现动态绑定

    }
}

在这里插入图片描述

简单测试后发现输入不同身份时菜单也能够正常输出,再进行下一步。

4.创建操作接口

这里创建一个操作接口:

package operation;

import book.BookList;

public interface IOperation {
    void work(BookList bookList);//传入书架进行调用
}

创建以下类来实现该接口:

在这里插入图片描述

注:实现接口的每个类都要重写接口中的方法(因为接口中的方法默认为抽象方法)

这里先简单举个例子:

在这里插入图片描述

所有操作类都继承完接口后,让我们回到用户包内进行操作

5.用户实现操作

这里在原先User类的基础上添加一个抽象方法

package user;

import book.BookList;

public abstract class User {
    private String name;

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

    public abstract void menu();
    public abstract void operation(int pos, BookList bookList); //用于实现操作类,需要被重写
}

之后User类的子类进行方法重写(注:其中在构造方法处也进行了修改,创建了一个操作数组iOperation)

  • 管理员类:

    package user;
    
    import book.BookList;
    import operation.*;
    
    public class AdminUser extends User{
        public IOperation[] iOperations;
    
        public AdminUser(String name) {
            super(name);
            iOperations = new IOperation[] {
                    new ExitOperation(),
                    new FindOperation(),
                    new AddOperation(),
                    new DeleteOperation(),
                    new ShowOperation()
            };
        }
    
        @Override
        public void menu() {
            System.out.println("***********管理员**********");
            System.out.println("1.查找图书");
            System.out.println("2.添加图书");
            System.out.println("3.删除图书");
            System.out.println("4.展示图书");
            System.out.println("0.退出系统");
        }
    	
         @Override
        public void operation(int pos, BookList bookList) {
            iOperations[pos].work(bookList); //通过索引调用对应所需要完成的操作
        }
    }
    
  • 普通用户类:

    package user;
    
    import book.BookList;
    import operation.*;
    
    public class NormalUser extends User{
        public IOperation[] iOperations;
        public NormalUser(String name) {
            super(name);
            iOperations = new IOperation[] {
                    new ExitOperation(),
                    new FindOperation(),
                    new BorrowOperation(),
                    new ReturnOperation()};
    
        }
    
        @Override
        public void menu() {
            System.out.println("*********普通用户*********");
            System.out.println("1.查找图书");
            System.out.println("2.借阅图书");
            System.out.println("3.归还图书");
            System.out.println("0.退出系统");
        }
    
        @Override
        public void operation(int pos, BookList bookList) {
            iOperations[pos].work(bookList);
        }
    
    }
    

再去修改main函数,简单测试以下:

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() {
        Scanner scanner = new Scanner(System.in);
        System.out.println("请输入姓名: ");
        String name = scanner.nextLine();
        System.out.println("请选择身份登录:1.管理员 2.普通用户 -->");
        int choice = scanner.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(); //接受子类对象完成向上转型
        while(true) {
            user.menu(); //通过父类对象调用子类方法实现动态绑定
            System.out.println("选择要进行的操作:");
            Scanner scanner = new Scanner(System.in);
            int choice = scanner.nextInt();
            user.operation(choice,bookList);
        }

    }
}

在这里插入图片描述

可见用户已经能够调用需要的操作了,接下来我们再来完善每一个操作功能。

6.操作功能完善

1. 查找功能

package operation;

import book.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);
        String name = scanner.nextLine();
        for (int i = 0;i < bookList.getNum();i++) {
           if (bookList.getBook(i).getName().equals(name)) {
               System.out.println(bookList.getBook(i));
               return;
           }
        }
        System.out.println("查无此书");
    }
}

2. 展示图书

package operation;

import book.Book;
import book.BookList;

public class ShowOperation implements IOperation{
    @Override
    public void work(BookList bookList) {
        for (int i = 0;i < bookList.getNum();i++) {
            Book book = bookList.getBook(i);
            System.out.println(book);
        }
    }
}

3.添加书籍

package operation;

import book.BookList;
import book.Book;
import java.util.Scanner;

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


        int num = bookList.getNum();
        int size = bookList.getSize();
        if (num < size) {
            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 book = new Book(name, author, price, type);
            for (int i = 0;i < num;i++) {
                Book book1 = bookList.getBook(i);
                if (book1.getName().equals(name)) {
                    System.out.println("书籍已存在");
                    return;
                }
            }

            bookList.setBook(book, num);
            bookList.setNum(++num);
            System.out.println("添加成功:" + book);
            return;
        }
        System.out.println("书架已满");
    }



}

4.删除图书

package operation;

import book.Book;
import book.BookList;

import java.util.Scanner;

public class DeleteOperation 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 num = bookList.getNum();
        int size = bookList.getSize();
        for (int i = 0;i < num;i++) {
            Book book = bookList.getBook(i);
            if (book.getName().equals(name)) {
               for (int j = i;j < num - 1;j++) {
                   bookList.setBook(bookList.getBook(j+1),j);
               }
               bookList.setNum(--num);
               System.out.println("删除成功!!");
               return;
            }
        }
        System.out.println("查无此书");
    }
}

5.借阅图书

package operation;

import book.Book;
import book.BookList;

import java.util.Scanner;

public class BorrowOperation 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 num = bookList.getNum();
        for (int i = 0;i < num;i++) {
            Book book = bookList.getBook(i);
            if (book.getName().equals(name)) {
                if (book.isBorrow()) {
                    System.out.println("书籍已被借阅!!");
                }else {
                    book.setBorrow(true);
                    System.out.println("借阅成功!!");
                    System.out.println(book);
                }
                return;
            }

        }
        System.out.println("查无此书");
    }
}

6.归还书籍

package operation;

import book.Book;
import book.BookList;

import java.util.Scanner;

public class ReturnOperation 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 num = bookList.getNum();
        for (int i = 0;i < num;i++) {
            Book book = bookList.getBook(i);
            if (book.getName().equals(name)) {
                if (book.isBorrow()) {
                    book.setBorrow(false);
                    System.out.println("归还成功!!");
                    System.out.println(book);
                }else {
                    System.out.println("书籍未被借阅");
                }
                return;
            }
        }
        System.out.println("查无此书");

    }
}

7.退出系统

package operation;

import book.BookList;

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

基本的功能已经完成,我们来测试一下:

管理员模式:

在这里插入图片描述

在这里插入图片描述

在这里插入图片描述

普通用户模式:

在这里插入图片描述

在这里插入图片描述

基于JavaSE搭建的图书信息管理系统已经完成,还有更多的细节需要完善,以及更多的功能等待解锁,尽情期待后续吧!!

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值