1.基本要求

(1)系统中能表示多本图书信息

(2)管理员、用户

(3)普通用户:查看书籍列表、查找图书(按照名字)、借书、还书

(4)管理员:查看书籍列表、查找图书(按照名字)、增加、删除

2.项目整体设计

(1)library包下分为核心实体类(Book、BookList)、操作接口及实现类(operation 包)、用户类(user 包)、主程序入口(Main)

(2)核心:

  • 接口(IOperation)定义统一操作规范,所有图书操作类实现该接口,保证操作行为的一致性
  • 抽象类(User)定义用户通用属性和行为,Admin/NormalUser 继承并实现差异化菜单和操作集
  • 多态:不同用户调用menu()work()方法时,执行各自的实现逻辑

3.核心类

(1)Book类:

  • 说明类的属性:书名、作者、价格、类型、借阅状态(私有属性 + get/set 方法)
  • 构造方法:初始化图书基本信息,默认借阅状态为 “未借出”
  • toString 方法:格式化输出图书信息(含借阅状态)

(2)BookList类:

  • 功能:维护图书数组(固定长度 100)、记录当前图书数量(size)
  • 核心方法:getBooks/setBooks(获取 / 设置指定位置图书)、getSize/setSize(获取 / 修改图书数量)
  • 初始化:默认添加 8 本测试图书

4.接口与功能类的实现

(1)IOperation 接口:

  • 定义统一操作方法:void work(BookList bookList),所有图书操作类需实现该方法

(2)核心类:

  • 通用操作:Exit(退出系统,调用 System.exit (0))、ListBook(遍历打印图书列表)、FindBook(按书名查找图书)
  • 管理员专属操作:AddBook(录入图书信息)、DelBook(按序号删除图书)
  • 普通用户专属操作:BorrowBook(按序号借阅,校验编号和借阅状态)、ReturnBook(按序号归还,校验编号和借阅状态)

5.用户模块设计

(1)抽象 User 类:

  • 核心属性:用户名(name)、操作数组(IOperation [] operations)
  • 抽象方法:menu ()(实现菜单)
  • 核心方法:work ()(根据用户选择的序号,调用对应操作类的 work 方法)

(2)User的子类实现:

  • Admin(管理员):menu 展示 “查看 / 查找 / 新增 / 删除 / 退出”,operations 数组对应 Exit、ListBook、FindBook、AddBook、DelBook
  • NormalUser(普通用户):menu 展示 “查看 / 查找 / 借阅 / 归还 / 退出”,operations 数组对应 Exit、ListBook、FindBook、BorrowBook、ReturnBook

6.程序入口(Main类)

  • login () 方法:获取用户名,选择用户身份(管理员 / 普通用户),返回对应 User 实例
  • main 方法:初始化 BookList,登录获取 User 对象,循环展示菜单、执行用户选择的操作

7.测试运行

(1)管理员登录

(2)查看书籍(初始默认有几本)

(3)按照名字查找书籍

(4)新增图书

(5)删除图书

刚添加的javaweb已删除:

(6)普通用户登录界面

(7)借书功能

如果重复借一个序号的书:

(8)还书功能

若重复归还:

(9)退出程序

8.完整代码

(1)Book类

package Work.library;

public class Book {
    private String name;
    private String author;
    private double price;
    private String type;
    private boolean isBorrowed;

    public Book(String name, String author, double price, String type) {
        this.name = name;
        this.author = author;
        this.price = price;
        this.type = type;
        isBorrowed=false;
    }

    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 double getPrice() {
        return price;
    }

    public void setPrice(double 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 name+","+author+","+price+","+type+","+((isBorrowed)?"已借走":"未借出");
    }
}

(2)BookList类

package Work.library;

public class BookList {
    private Book[] books=new Book[100];
    private int size=0;
    public BookList(){
        books[0] = new Book("西游记", "吴承恩", 100, "古典小说");
        books[1] = new Book("红楼梦", "曹雪芹", 120, "古典小说");
        books[2] = new Book("三国演义", "罗贯中", 110, "古典小说");
        books[3] = new Book("水浒传", "施耐庵", 130, "古典小说");
        books[4] = new Book("Java编程思想", "Bruce Eckel", 89, "技术书籍");
        books[5] = new Book("算法导论", "Thomas H.Cormen", 128, "技术书籍");
        books[6] = new Book("人类简史", "尤瓦尔·赫拉利", 68, "历史");
        books[7] = new Book("三体", "刘慈欣", 88, "科幻小说");
        size=8;
    }

    public Book getBooks(int index) {
        return books[index];
    }

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

    public int getSize() {
        return size;
    }

    public void setSize(int size) {
        this.size = size;
    }

}

(3)User类

package Work.library.user;

import Work.library.BookList;
import Work.library.operation.IOperation;

public abstract class User {
    protected String name;

    public User(String name) {
        this.name=name;
    }
    public abstract int menu();
    IOperation[]operations;
    public void work(BookList bookList,int choice){
        if(choice<0||choice>=bookList.getSize()){
            System.out.println("选项不合理");
            return;
        }
        operations[choice].work(bookList);
    }
}

(4)NormalUser类

package Work.library.user;

import Work.library.operation.*;

import java.util.Scanner;

public class NormalUser extends User{
    public NormalUser(String name){
        super(name);
        operations=new IOperation[] {
                new Exit(),
                new ListBook(),
                new FindBook(),
                new BorrowBook(),
                new ReturnBook()
        };
    }

    @Override
    public int menu() {
        //打印用户菜单
        System.out.println("======================================");
        System.out.println("欢迎您,"+name+"!");
        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);
        return scanner.nextInt();
    }
}

(5)Admin类

package Work.library.user;

import Work.library.operation.*;

import java.util.Scanner;

public class Admin extends User{


    public Admin(String name) {
        super(name);
        operations=new IOperation[]{
                new Exit(),
                new ListBook(),
                new FindBook(),
                new AddBook(),
                new DelBook()
        };
    }

    @Override
    public int menu() {
        System.out.println("======================================");
        System.out.println("欢迎您,"+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);
        return scanner.nextInt();
    }
}

(6)IOperation接口

package Work.library.operation;

import Work.library.BookList;

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

(7)AddBook类

package Work.library.operation;

import Work.library.Book;
import Work.library.BookList;

import java.util.Scanner;

public class AddBook 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 book=new Book(name,author,price,type);
        int index=bookList.getSize();
        bookList.setBooks(book,index);
        bookList.setSize(bookList.getSize()+1);
    }
}

(8)DelBook类

package Work.library.operation;

import Work.library.Book;
import Work.library.BookList;

import java.util.Scanner;

public class DelBook implements IOperation{
    @Override
    public void work(BookList bookList) {
        System.out.println("选择要删除的书籍的序号:");
        Scanner scanner=new Scanner(System.in);
        int index=scanner.nextInt();
        if(index<0||index>=bookList.getSize()){
            System.out.println("输入不规范");
            return;
        }
        if(index==bookList.getSize()-1){
            int size=bookList.getSize();
            bookList.setSize(size-1);
        }
        for(int i=0;i<bookList.getSize();i++){
            if(index==i){
                int size=bookList.getSize();
                Book book=bookList.getBooks(bookList.getSize()-1);
                bookList.setBooks(book,i);
                bookList.setSize(size-1);
            }
        }
        System.out.println("删除完毕!");
    }
}

(9)BorrowBook类

package Work.library.operation;

import Work.library.Book;
import Work.library.BookList;

import java.util.Scanner;

public class BorrowBook implements IOperation{
    @Override
    public void work(BookList bookList) {
        System.out.println("请输入要借的书的编号:");
        Scanner scanner=new Scanner(System.in);
        int index=scanner.nextInt();
        if(index<0||index>= bookList.getSize()){
            System.out.println("编号不存在!");
        }
        Book book=bookList.getBooks(index);
        if(book.isBorrowed()==true){
            System.out.println("该书已经被别人借走了~");
            return;
        }
        if(book.isBorrowed()==false){
            book.setBorrowed(true);
            System.out.println("已成功借阅!");
            return;
        }
    }
}

(10)ReturnBook类

package Work.library.operation;

import Work.library.Book;
import Work.library.BookList;

import java.util.Scanner;

public class ReturnBook implements IOperation{
    @Override
    public void work(BookList bookList) {
        System.out.println("请输入要还的书的编号:");
        Scanner scanner=new Scanner(System.in);
        int index=scanner.nextInt();
        if(index<0||index>= bookList.getSize()){
            System.out.println("编号不存在!");
        }
        Book book=bookList.getBooks(index);
        if(book.isBorrowed()==false){
            System.out.println("该书已经在书库了~");
            return;
        }
        if(book.isBorrowed()==true){
            book.setBorrowed(false);
            System.out.println("已成功归还!");
            return;
        }
    }
}

(11)ListBook类

package Work.library.operation;

import Work.library.BookList;

public class ListBook implements IOperation{
    @Override
    public void work(BookList bookList) {
        System.out.println("书籍列表展示:");
        for(int i=0;i<bookList.getSize();i++){
            System.out.println("["+i+"]"+bookList.getBooks(i).toString());
        }
    }
}

(12)FindBook类

package Work.library.operation;

import Work.library.Book;
import Work.library.BookList;

import java.util.Scanner;

public class FindBook implements IOperation{
    @Override
    public void work(BookList bookList) {
        System.out.println("输入要查找的书的书名:");
        Scanner scanner=new Scanner(System.in);
        String name=scanner.next();
        for(int i=0;i<bookList.getSize();i++){
            Book book=bookList.getBooks(i);
            if(name.equals(book.getName())){
                System.out.println(book.toString());
            }
        }
        System.out.println("查找完毕!");
    }
}

(13)主程序Main

package Work.library;

import Work.library.user.Admin;
import Work.library.user.NormalUser;
import Work.library.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.next();
        System.out.println("欢迎"+name+"同学!");
        //选择身份
        System.out.println("请选择身份(输入1是管理员,输入2是普通用户):");
        Scanner scanner1=new Scanner(System.in);
        int body=scanner1.nextInt();
        if(body==1){
            return new Admin(name);
        } else if (body==2) {
            return new NormalUser(name);
        }else {
            System.out.println("输入错误!");
            return null;
        }
    }
    public static void main(String[] args) {
        BookList bookList=new BookList();
        User user=login();
        //进入程序
        while (true){
            int choice=user.menu();
            user.work(bookList,choice);
        }
    }
}
Logo

汇聚全球AI编程工具,助力开发者即刻编程。

更多推荐