栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 软件开发 > 后端开发 > Java

【Java】实现简易的图书管理系统

Java 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

【Java】实现简易的图书管理系统

目录

 一、类的创建

 二、各个类具体的实现

1、book包

Book类

BookList类

2、operation包

IOperation 接口

AddOperation类

BorrowOperation类

DelOperation类

FindOperation类

DisplayOperation类

ReturnOperation类

ExitOperation类

3、user包

User类

AdminUser类

NormalUser类

4、Main类

二、运行结果


一、类的创建 1、首先,我们创建 图书相关的类——先创建一个book包,在包里创建一个Book类表示一本书;创建一个BookList类,用来保存多本书。

 

2、然后创建操作相关的类——

先创建一个接口 IOperation,然后分别创建 AddOperation、DelOperation、FindOperation、DisplayOperation、BorrowOperation、ReturnOperation、ExitOperation

分别代表用户可以实现的操作(添加、删除、查找、显示、借书、还书、退出)

 3、然后我们创建用户相关的类——

AdminUser代表管理员用户类、NormalUser代表普通用户类、而User是一个抽象类,是它们的父类。

 4、最后直接创建一个主类,用来搭建整体的逻辑。

 二、各个类具体的实现

1、book包

Book类

该类为书类,先定义需要的属性,再为每个成员变量提供 getter 和 setter 方法,最后重写一下toString方法方便打印。

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;
    }

    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;
    }

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

BookList类

该类为书架类,默认放三本书,提供的方法有获取某位置的的书、在某位置设置某本书。

package book;

public class BookList {
    private Book[] books = new Book[10];
    private int usedSize;

    public BookList() {
        books[0] = new Book("水浒传","施耐庵",57,"小说");
        books[1] = new Book("西游记","吴承恩",39,"小说");
        books[2] = new Book("红楼梦","曹雪芹",42,"小说");
        this.usedSize = 3;
    }

    public int getUsedSize() {
        return usedSize;
    }

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

    
    public Book getPos(int pos) {
        return this.books[pos];//获取到pos位置的一本书
    }

    
    public void setBook(int pos,Book book) {
        this.books[pos] = book;// 设置Pos下标为一本书
    }

}

2、operation包

IOperation 接口

在接口中定义一个抽象类 work,让其他类实现这个接口,实现具体的work方法。

package operation;
import book.BookList;
import java.util.Scanner;
public interface IOperation {
    Scanner scanner = new Scanner(System.in);
    void work(BookList bookList);
}

AddOperation类

该类为新增图书的具体实现类(新增方法为在最后一本书的后面添加,当然可以有更优化的做法,但是我们重点是面向对象,业务上就暂不细化了)具体实现如下:

package operation;
import book.Book;
import book.BookList;
public class AddOperation implements IOperation{

    public void work(BookList bookList) {
        System.out.println("新增图书!");
        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);
        int size = bookList.getUsedSize();
        bookList.setBook(size,book);
        bookList.setUsedSize(size+1);
        System.out.println("新增图书成功!");
    }

}

BorrowOperation类

本类为借书的具体实现类,主要操作为借完一本书,即可更改图书状态为“已经被借出”,如果没查找到你要借的则显示“没有你要借的这本书”。具体实现如下:

package operation;
import book.Book;
import book.BookList;
public class BorrowOperation implements IOperation{
    public void work(BookList bookList) {
        System.out.println("借阅图书!");
        System.out.println("请输入你要借阅的图书的名字:");
        String name = scanner.nextLine();
        int size = bookList.getUsedSize();
        for (int i = 0; i < size; i++) {
            Book book = bookList.getPos(i);
            if(name.equals(book.getName())) {
                book.setBorrowed(true);
                System.out.println("借阅成功!");
                System.out.println(book);
                return;
            }
        }
        System.out.println("没有你要借阅的这本书!");
    }
}

DelOperation类

删除图书的具体实现类。输入要删除的图书的名字,如果查找到则将该书删除(用顺序表的逻辑实现),如果没找到则提示没有这本书。具体实现如下:

package operation;
import book.Book;
import book.BookList;

public class DelOperation implements IOperation{
    public void work(BookList bookList) {
        System.out.println("删除图书!");
        //1、根据书名找到书的位置
        System.out.println("请输入你要删除的图书的名字:");
        String name = scanner.nextLine();
        int currentSize = bookList.getUsedSize();
        int index = 0;//存储找到的下标
        int i = 0;
        for (; i < currentSize; i++) {
            Book book = bookList.getPos(i);
            if(book.getName().equals(name)) {
                index = i;
                break;
            }
        }
        if(i >= currentSize) {
            System.out.println("没有你要删除的这本书!");
            return;
        }
        // 2、进行删除
        for (int j = index; j < currentSize-1; j++) {
            Book book = bookList.getPos(j+1);//利用getpos()函数让book获取第j+1本书的信息 
            bookList.setBook(j,book); //把book插入第j个位置
        }
        bookList.setBook(currentSize,null);
        bookList.setUsedSize(currentSize-1);
        System.out.println("删除成功!");
    }
}

FindOperation类

该类为查找图书的具体实现类,查找到则打印该图书的信息,否则提示没找到这本书。

package operation;
import book.Book;
import book.BookList;
public class FindOperation implements IOperation{
    public void work(BookList bookList) {
        System.out.println("请输入要查找的书名:");
        String name = scanner.nextLine();
        int size = bookList.getUsedSize();
        for (int i = 0; i < size; i++) {
            Book book = bookList.getPos(i);
            if(name.equals(book.getName())) {
                System.out.println("找到了这本书,信息如下:");
                System.out.println(book);
                return;
            }
        }
        System.out.println("没有找到这本书!");
    }
}

DisplayOperation类

该类为显示图书的具体实现类。就是将书架上所存的书打印到屏幕上,具体实现如下:

package operation;
import book.Book;
import book.BookList;

public class DisplayOperation implements IOperation{
    public void work(BookList bookList) {
        System.out.println("打印图书!");
        int size = bookList.getUsedSize();
        for (int i = 0; i < size; i++) {
            Book book = bookList.getPos(i);
            System.out.println(book);
        }
    }
}

ReturnOperation类

该类为还书的具体实现类。还书之后将书的“isborrowed”的属性改为“未被借出”并提示归还成功,如果没找到对应的图书则提示“没有你要归还的书” 。

package operation;
import book.Book;
import book.BookList;


public class ReturnOperation implements IOperation{
    public void work(BookList bookList) {
        System.out.println("归还图书");
        System.out.println("请输入你要归还的图书的名字:");
        String name = scanner.nextLine();
        int size = bookList.getUsedSize();
        for (int i = 0; i < size; i++) {
            Book book = bookList.getPos(i);
            if(name.equals(book.getName())) {
                book.setBorrowed(false);
                System.out.println("归还成功!");
                System.out.println(book);
                return;
            }
        }
        System.out.println("没有你要归还的这本书!");
    }
}

ExitOperation类

该类为退出程序的基本实现类。System.exit(0)表示正常退出程序。

package operation;
import book.BookList;

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

3、user包

User类

该类为一个抽象用户类,提供菜单的抽象方法,还有一个IOperation类的数组,里面存放的是各类操作的具体实现类。

package user;
import book.BookList;
import operation.IOperation;


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

    public User(String name) {
        this.name = name;
    }
    public abstract int menu();
    public void doWork(int choice, BookList bookList) {
        iOperations[choice].work(bookList);
    }

}

AdminUser类

该类是管理员用户类,重写了User类的menu方法。

package user;
import operation.*;
import java.util.Scanner;


public class AdminUser extends User{
    public AdminUser(String name) {
        super(name);
        this.iOperations = new IOperation[] {
                new ExitOperation(),
                new FindOperation(),
                new AddOperation(),
                new DelOperation(),
                new DisplayOperation()
        };
    }

    public int menu() {
        System.out.println("===========管理员菜单===========");
        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 scanner = new Scanner(System.in);
        int choice = scanner.nextInt();
        return choice;
    }
}

 NormalUser类

该类为普通用户类,menu也经过了重写。

package user;
import operation.*;
import java.util.Scanner;


public class NormalUser extends User{

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

    public int menu() {
        System.out.println("===========普通用户的菜单===========");
        System.out.println("你好," + this.name +" 用户");
        System.out.println("1.查找图书");
        System.out.println("2.借阅图书");
        System.out.println("3.归还图书");
        System.out.println("0.退出系统");
        System.out.println("==============================");
        Scanner scanner = new Scanner(System.in);
        int choice = scanner.nextInt();
        return choice;
    }

}

4、Main类

该类为主类,搭建整体框架。最核心的点就在main函数里的几行代码。(用到了向上转型、发生了动态绑定)

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-》管理员,0-》普通用户");
        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) {
            int choice = user.menu();//发生了动态绑定
            user.doWork(choice, bookList);
        }
    }
}

二、运行结果

 

 

 

 

 

转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/530513.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号