Java简单图书管理系统解析

一、代码解析

package book;

public class book {
    private String name;
    private String author;//作者
    private int price;
    private String type;
    private  boolean inBorrowed;
    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 isInBorrowed() {
        return inBorrowed;
    }

    public void setInBorrowed(boolean inBorrowed) {
        this.inBorrowed = inBorrowed;
    }

    @Override
    public String toString() {
        return "book{" +
                "name='" + name + '\'' +
                ", author='" + author + '\'' +
                ", price=" + price +
                ", type='" + type + '\'' +
                ", inBorrowed=" + inBorrowed +
                '}';
    }
}
  • book 类:

  • 属性:

    • name: 书名
    • author: 作者
    • price: 价格
    • type: 类型
    • inBorrowed: 标志书籍是否被借阅
  • 方法:

    • getName(), setName(String): 获取或设置书名
    • getAuthor(), setAuthor(String): 获取或设置作者
    • getPrice(), setPrice(int): 获取或设置价格
    • getType(), setType(String): 获取或设置类型
    • isInBorrowed(), setInBorrowed(boolean): 获取或设置借阅状态
    • toString(): 将书籍信息以字符串形式返回

 

package book;

import java.awt.print.Book;

public class bookList {
    private book[] books;
    private int usedSize;//记录当前所拥有书籍
    public bookList() {
        this.books=new book[10];
        this.usedSize=3;
        this.books[0]= new book("三国","罗贯中",10,"小说");
        this.books[1]=new book("西游","吴承恩",10,"小说");
        this.books[2]=new book("红楼梦","曹雪芹",19,"小说");
    }
    public int getUsedSize(){
        return usedSize;
    }
    public void setUsedSize(int usedSize){
        this.usedSize=usedSize;
    }
    public book getBook(int pos){
        return books[pos];
    }
    public void setBook(book book1,int pos){
        books[pos]=book1;
    }
}

 

bookList 类:

  • 属性:

    • books: 书籍数组
    • usedSize: 记录当前拥有书籍数量
  • 方法:

    • getUsedSize(): 获取已使用槽位数量
    • setUsedSize(int): 设置已使用槽位数量
    • getBook(int): 获取指定位置的书籍
    • setBook(book, int): 在指定位置设置书籍

 

package operation;

import book.bookList;

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

IOperation 接口:

  • 定义了一个 work 方法,接受一个 bookList 参数,用于执行具体的操作。

 

package operation;
import book.book;
import book.bookList;

import java.awt.print.Book;
import java.util.Scanner;

public class AddOperation implements IOperation {
    public void work(bookList bookList1){

        System.out.println("新增图书:");
        Scanner scanner=new Scanner(System.in);
        System.out.println("请输入新增的书名:");
        String name=scanner.nextLine();
        System.out.println("请输入新增的书作者名:");
        String author=scanner.nextLine();
        System.out.println("请输入新增的书价格:");
        int price=scanner.nextInt();
        System.out.println("请输入新增的书类型:");
        String type=scanner.nextLine();
        book book1=new book(name,author,price,type);
        int currentSize=bookList1.getUsedSize();
        for (int i = 0;i<currentSize;i++){
            book tmp=bookList1.getBook(i);
            if(tmp.getName().equals(name)){
                System.out.println("存在该书,无法新增");
                return;
            }
        }
        bookList1.setBook(book1,currentSize);
        bookList1.setUsedSize(currentSize+1);
    }
}

AddOperation 类:

  • work 方法:
    • 实现了 IOperation 接口的方法,用于向书籍列表中添加新书。
    • 提示用户输入书籍信息(名字、作者、价格、类型)。
    • 检查是否已存在同名书籍,如果是,则提示无法添加。
    • 否则,将新书添加到书籍列表。

 

package operation;

import book.*;

import java.util.Scanner;

public class BorrowOperation implements IOperation {
    public void work(bookList bookList1){
        Scanner scanner=new Scanner(System.in);
        System.out.println("借阅图书:");
        System.out.println("请输入借阅的书名:");
        String name=scanner.nextLine();
        int currentSize=bookList1.getUsedSize();
        for (int i=0;i<currentSize;i++){
            book book1=bookList1.getBook(i);
            if(book1.getName().equals(name)){
                if(book1.isInBorrowed()==false) {
                    book1.setInBorrowed(true);
                    return;
                }
                else {
                    System.out.println("已经被借阅");
                    return;
                }
            }
        }
        System.out.println("未找到图书");
        return;
    }
}

BorrowOperation 类:

  • work 方法:
    • 实现了 IOperation 接口的方法,用于借阅图书。
    • 提示用户输入要借阅的书籍名字。
    • 检查图书列表中是否存在该书籍,若存在,检查是否已被借阅。
    • 如果未被借阅,则设置图书状态为借阅;否则,提示该书已被借阅。

 

package operation;

import book.book;
import book.bookList;

import java.util.Scanner;

public class DelOperation implements IOperation{
    public void work(bookList bookList1){
        int i=0;
        int index=-1;
        System.out.println("删除");
        Scanner scanner=new Scanner(System.in);
        System.out.println("请输入删除的书名:");
        String name=scanner.nextLine();
        int currentSize=bookList1.getUsedSize();
        for (i = 0;i<currentSize;i++){
            book book1=bookList1.getBook(i);
            if(book1.getName().equals(name)){
                index=i;
                break;
            }
        }
        if(i>=currentSize){
            System.out.println("找不到该书");
            return;
        }
        for (int j=i;j<currentSize-1;j++){
            book book2=bookList1.getBook(j+1);
            bookList1.setBook(book2,j);
        }
        bookList1.setUsedSize(currentSize-1);
        return;
    }
}

 DelOperation 类:

  • work 方法:
    • 实现了 IOperation 接口的方法,用于删除图书。
    • 提示用户输入要删除的书籍名字。
    • 检查图书列表中是否存在该书籍,若存在,则删除该书籍;否则,提示未找到该书。

 

package operation;

import book.bookList;

public class ExitOperation implements IOperation{
    public void work(bookList bookList1){

        System.out.println("退出");
        System.exit(0);
    }
}

ExitOperation 类:

  • work 方法:
    • 实现了 IOperation 接口的方法,用于退出系统。
    • 调用 System.exit(0) 终止程序。

 

package operation;

import book.*;

import java.util.Scanner;

public class FindOperation implements IOperation{
    public void work(bookList bookList1){

        System.out.println("查找");
        System.out.println("请输入你要查找的书名:");
        Scanner scanner=new Scanner(System.in);
        String name=scanner.nextLine();
        int currentSize=bookList1.getUsedSize();
        for (int i=0;i<currentSize;i++){
            book book1=bookList1.getBook(i);
            if(book1.getName().equals(name)){
                System.out.println("存在该书,信息:");
                System.out.println(book1);
                return;
            }
        }
        System.out.println("未找到");
        return;
    }
}

FindOperation 类:

 FindOperation 类中的 work 方法的功能是实现了 IOperation 接口的方法,用于查找书籍信息。以下是该方法的详细解析:

 

package operation;

import book.book;
import book.bookList;

import java.util.Scanner;

public class ReturnOperation implements IOperation{
    public void work(bookList bookList1){
        Scanner scanner=new Scanner(System.in);
        System.out.println("归还图书:");
        System.out.println("请输入归还的书名:");
        String name=scanner.nextLine();
        int currentSize=bookList1.getUsedSize();
        for (int i=0;i<currentSize;i++){
            book book1=bookList1.getBook(i);
            if(book1.getName().equals(name)){
                if(book1.isInBorrowed()==true) {
                    book1.setInBorrowed(false);
                    return;
                }
                else {
                    System.out.println("已经被归还");
                    return;
                }
            }
        }
        System.out.println("未找到图书");
        return;
    }
}

ReturnOperation 类:

  • work 方法:
    • 实现了 IOperation 接口的方法,用于归还图书。
    • 提示用户输入要归还的书籍名字。
    • 检查图书列表中是否存在该书籍,若存在,检查是否已被借阅。
    • 如果已被借阅,则设置图书状态为未借阅;否则,提示该书未被借阅。

 

package operation;

import book.*;

public class ShowOperation implements IOperation{
    public void work(bookList bookList1){

        System.out.println("显示图书:");
        int currentSize=bookList1.getUsedSize();
        for (int i=0;i<currentSize;i++){
            book book1=bookList1.getBook(i);
            System.out.println(book1);
        }
    }
}

ShowOperation 类:

  • work 方法:
    • 实现了 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 doOperation(int choice, bookList bookList1){
        this.iOperations[choice].work(bookList1);
    }
}

User 抽象类

  • 构造方法:接收用户的姓名,初始化用户的姓名。
  • menu 抽象方法:由子类实现,用于显示用户的菜单并返回用户选择的操作。
  • doOperation 方法:接收用户选择的操作和图书列表,调用相应操作的 work 方法进行处理。

 

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 ShowOperation()
        };
    }
    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("0、退出系统");
        System.out.println("***********************");
        System.out.println("请输入你的操作:");
        Scanner scanner=new Scanner(System.in);
        int choice=scanner.nextInt();
        return choice;
    }
}

AdminUser 类

  • 构造方法:接收管理员的姓名,调用父类 User 的构造方法,初始化该用户的操作数组 iOperations,包括退出系统、查找图书、新增图书、删除图书和显示图书等操作。
  • 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("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;
    }
}

NormalUser 类

  • 构造方法:接收普通用户的姓名,调用父类 User 的构造方法,初始化该用户的操作数组 iOperations,包括退出系统、查找图书、借阅图书和归还图书等操作。
  • menu 方法:显示普通用户的菜单,包括查找图书、借阅图书、归还图书和退出系统的选项,然后接收用户输入的操作选项。

 

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、管理员 2、用户");
        int choice=scanner.nextInt();
        if(choice==1){
            return new AdminUser(name);
        }else {
            return new NormalUser(name);
        }
    }
    public static void main(String[] args){
        bookList bookList1=new bookList();
        User user=login();
        while (true) {
            int choice = user.menu();
            user.doOperation(choice, bookList1);
        }
    }
}

Main 类

  • login 方法:用于用户登录,接收用户输入姓名和身份(管理员或普通用户),根据输入创建相应的用户对象并返回。
  • main 方法:主程序入口,创建图书列表对象,调用 login 方法获取用户对象,然后进入循环,不断显示用户菜单、接收用户操作、执行相应的操作,直到用户选择退出系统。

二、代码运行过程解析 


  1. 程序启动

    • 创建 bookList1 对象,该对象初始化了一个包含三本书的书籍列表。
    • 调用 login 方法,提示用户输入姓名和身份(管理员或用户)。
    • 根据用户的选择创建相应的用户对象,包括 AdminUserNormalUser
  2. 用户登录后

    • 进入 while 循环,不断显示用户的菜单和接收用户的选择。
    • 用户的菜单包括查找图书、新增图书、删除图书、显示图书、退出系统等选项。
  3. 用户选择操作

    • 用户输入选择后,调用 doOperation 方法执行相应的操作。该方法会调用对应操作的 work 方法。
    • 例如,如果用户选择新增图书(AddOperation),则执行 AddOperationwork 方法,提示用户输入书籍信息,并将新书添加到书籍列表。
  4. 循环进行

    • 循环会一直进行,直到用户选择退出系统(ExitOperation)。
    • 如果用户退出系统,调用 System.exit(0) 终止程序运行。 
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值