实现图书管理系统

这是一个简单的图书管理系统,包括管理员和普通用户的操作。管理员可以增加、删除和显示图书,而普通用户可以查找、借阅和归还图书。系统使用Java实现,包含Book类、BookList顺序表类、多个操作类(如AddOperation、BorrowOperation等)以及User类来处理不同用户权限。用户通过输入选择执行相应操作,输入0退出系统。
摘要由CSDN通过智能技术生成

  这个系统上来需要输入你的姓名,然后选择身份后才可进入,身份有管理员身份和普通用户身份,管理员可有增删查和显示图书的功能,而普通用户可以查找图书,借阅图书,以及归还图书

的功能,不论是管理员还是普通用户输入0都会推出系统。源码其中包括图书类Book,存放图书的顺序表类BookList,业务类Operation里面包含着各个业务处理,最后还有使用者类User里面包含管理员AdminUser和普通用户类NormalUser,最后是一个主函数即为整个程序的入口,以下为源代码:

图书类

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)? " 已被借出":" 未被借出")+
                '}';
    }
}

图书顺序表类

package book;

public class BookList {//存放图书的顺序表
    private  Book[] books = new Book[10];//图书数组
    private  int UsedSize;//图书有效个数
    public BookList(){//构造方法  先默认三本书
        books[0] = new Book("三国演义","罗贯中",50,"小说");
        books[1] = new Book("水浒传","施耐庵",50,"小说");
        books[2] = new Book("西游记","吴承恩",50,"小说");
        this.UsedSize = 3;
    }

    public int getUsedSize() {
        return UsedSize;
    }//得到当前有效元素个数

    public void setUsedSize(int usedSize) {
        UsedSize = usedSize;
    }//修改当前元素个数
    //获取pos位置上的书
    public Book getBook(int pos) {
        return this.books[pos];
    }
    //设置pos下标为一本书  添加一本书 也就是get set方法
    public void setBooks(int pos,Book book) {
        this.books[pos] = book;
    }


}

各个操作包

package operation;

import book.Book;
import book.BookList;

import java.util.Scanner;

//默认放到数组的最后一个位置
//面向对象的各种操作 也可以写到顺序表中  这里可以直接面对对象 (也就是各个业务)
public class AddOperation implements IOperation{
    @Override
    public void work(BookList bookList) {
        System.out.println("新增图书");
        System.out.println("请输入图书的名字:");
        String name = input.next();
        System.out.println("请输入图书的作者:");
        String author = input.next();
        System.out.println("请输入图书的类型:");
        String type = input.next();
        System.out.println("请输入图书的价格:");
        int price = input.nextInt();
        Book book = new Book(name,author,price,type);//新增图书的所有信息
        int size = bookList.getUsedSize();
        bookList.setBooks(size,book);//size位置(最后一个位置)上的书改为此书
        bookList.setUsedSize(size + 1);//有效图书加一
        System.out.println("添加成功");
    }

}
package operation;

import book.Book;
import book.BookList;

public class BorrowOperation implements IOperation{
    @Override
    public void work(BookList bookList) {
        System.out.println("借阅图书");
        System.out.println("请输入你要借阅的图书名字");
        String name = input.nextLine();
        for (int i = 0; i < bookList.getUsedSize(); i++) {
            Book book = bookList.getBook(i);//得到所有图书的信息
            if(name.equals(book.getName())){//找到了
                book.setBorrowed(true);//把借阅状态给为true
                System.out.println("借阅成功");
                System.out.println(book);//打印这个图书信息
                return;
        }
        }
        System.out.println("没有你要借阅的这本书");
    }
}

package operation;

import book.Book;
import book.BookList;

public class DelOperation implements IOperation {
    @Override
    public void work(BookList bookList) {
        System.out.println("删除图书");
        System.out.println("请输入要删除的图书");
        String name = input.nextLine();
        int size = bookList.getUsedSize();
        int index = 0;//存储找到的下标
        int i = 0;
        for (; i < size - 1; i++) {
            Book book = bookList.getBook(i);//寻找所有书
            if(name.equals(book.getName())){
                index = i;//找到的要删除的下标
                break;
            }
        }
        if(i >= size){
            System.out.println("没有你要删除的书");
            return;
        }
        for (int j = 0; j < size - 1; j++) {
            Book book = bookList.getBook(j + 1);//获得j后面的图书
            bookList.setBooks(j,book);//让j位置的书被j+1位置的书所覆盖
        }
        bookList.setBooks(size,null);//让最后一本书置空
        bookList.setUsedSize(size - 1);//让有效元素减一
    }
}

package operation;

import book.Book;
import book.BookList;

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

package operation;

import book.BookList;

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

package operation;

import book.Book;
import book.BookList;

public class FindOperation implements IOperation{
    @Override
    public void work(BookList bookList) {
        System.out.println("查找图书");
        String name = input.nextLine();
        int size = bookList.getUsedSize();
        for (int i = 0; i < size; i++) {
            Book book = bookList.getBook(i);
            if(name.equals(book.getName())){
                System.out.println("找到此书,信息如下:");
                System.out.println(book);
                return;
            }
        }
        System.out.println("未找到此书");
    }
}
package operation;

import book.BookList;

import java.util.Scanner;

public interface IOperation {//设置接口 方便各个操作实现
    void work(BookList bookList);
    Scanner input = new Scanner(System.in);
}

package operation;

import book.Book;
import book.BookList;

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

使用者类

package user;

import operation.*;

import java.util.Scanner;

public class AdminUser extends User{//管理员

    public AdminUser(String name) {//构造方法
        super(name);
        this.iOperation = new IOperation[]{//包含各种操作
                new ExitOperation(),
                new FindOperation(),
                new AddOperation(),
                new DelOperation(),
                new DispalyOperation()


        };
    }

    public int menu(){
        System.out.println("=====管理员菜单=====");
        System.out.println("Hello  " + this.name + "欢迎来到图书系统");
        System.out.println("1.查找图书");
        System.out.println("2.新增图书");
        System.out.println("3.删除图书");
        System.out.println("4.显示图书");
        //System.out.println("5.修改图书");

        System.out.println("0.退出菜单");
        System.out.println("==================");
        Scanner input  = new Scanner(System.in);
        int choice = input.nextInt();
        return choice;//返回用户的选择

    }
}

package user;

import operation.*;

import java.util.Scanner;

public class NormalUser extends User{

    public NormalUser(String name) {

        super(name);
        this.iOperation = new IOperation[]{
                new ExitOperation(),
                new FindOperation(),
                new BorrowOperation(),
                new ReturnOperation()

        };
    }
    public int menu(){
        System.out.println("=====普通成员菜单=====");
        System.out.println("Hello " + this.name + "欢迎来到次图书馆");
        System.out.println("1.查找图书");
        System.out.println("2.借阅图书");
        System.out.println("3.归还图书");
        System.out.println("0.退出菜单");
        System.out.println("==================");
        Scanner input  = new Scanner(System.in);
        int choice = input.nextInt();
        return choice;
    }

}

package user;

import book.BookList;
import operation.IOperation;
//使用者类
public abstract class User {//抽象类 方便 管理员合 普通用户继承
    protected   String name;
    protected   IOperation[] iOperation;//操作组合
    public  User(String name){
        this.name = name;
    }
    public abstract int menu();//列表方法  方便后面的动态绑定
    public void doWork(int choice, BookList bookList){//**** 选择及其顺序表
        iOperation[choice].work(bookList);//前面是对象的选择数组 后面是对象的方法
        //进入顺序表的各个操作
    }
}

主函数:

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 input = new Scanner(System.in);
        String name = input.next();
        System.out.println("请输入身份 1 -> 管理员 0-> 普通成员");
        int choice = input.nextInt();
        if(choice == 1)
            return new AdminUser(name);//管理员 类
        if(choice == 0)
            return  new NormalUser(name);//普通用户类
        return null;
    }

    public static void main(String[] args) {
        BookList bookList = new BookList();
        User user = login();//会引用那个对象取决于你返回的对象  向上转型 *** 进入logic方法
        while(true) {//直到用户想退出为止
            int choice = user.menu();//动态绑定 选择列表
            //根据你 的选择 调用合适的操作
            user.doWork(choice, bookList); //*** 进入各个选择操作
        }
    }
}

运行截图:

 

 

 

 

 

 

  • 2
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

栋zzzz

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值