目录
一. 功能介绍
1.1 使用介绍
1.2 基本框架
二、具体思路
三、代码实现
book(包)
Book(书类)
BookList(书架类)
operation(功能包)
IOperation(功能接口)
FindOperation(查找图书)
AddOperation(添加图书)
DelOperation(删除图书)
BorrowOperation(借阅图书)
ReturnOperation(归还图书)
DisplayOperation(打印图书信息)
ExitOperation(退出系统)
user(使用者包)
User(使用者抽象类)
AdminUser(管理员)
NormalUser(普通用户)
Test类
四、部分代码(doOperation)解释
首页 Java java教程 Java图文详解之实现图书管理系统

Java图文详解之实现图书管理系统

Jun 07, 2022 pm 06:57 PM
java

本篇文章给大家带来了关于java的相关知识,其中主要介绍了关于怎么实现图书管理系统的相关问题,包括了查找图书、添加图书、删除图书、借阅图书等等内容,下面一起来看一下,希望对大家有帮助。

Java图文详解之实现图书管理系统

推荐学习:《java视频教程

一. 功能介绍

1.1 使用介绍

1.输入姓名

2.选择身份

3.根据身份打印不同功能菜单

1.2 基本框架


二、具体思路

book(包)

operation(功能包)

user(使用者包)


三、代码实现

book(包)

Book(书类)

package book;/**
 * User: gu'jiu
 * Date: 2022-05-18
 * Time: 14:45
 * Description:书
 */public class Book {
    private String name;//书名
    private String author;//作者
    private double price;//价格
    private String type;//类型
    private boolean state;//书的状态(已借出or未借出)
    
	//对书进行初始化,书的状态不用进行初始化(默认未借出)
    public Book(String name, String author, double price, String type) {
        this.name = name;
        this.author = author;
        this.price = price;
        this.type = type;
        this.state = state;
    }

    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 isState() {
        return state;
    }

    public void setState(boolean state) {
        this.state = state;
    }

    @Override
    public String toString() {
        return "[" +
                "name='" + name + '\'' +
                ", author='" + author + '\'' +
                ", price=" + price +
                ", type='" + type + '\'' +
                ", " + (state == true ? "已借出" : "未借出") +
                ']';
    }}
登录后复制

BookList(书架类)

package book;/**
 * User: gu'jiu
 * Date: 2022-05-18
 * Time: 14:52
 * Description:书架
 */public class BookList {
    private Book[] books = new Book[10];
    private int usedSize;

    public BookList() {
        books[0] = new Book("三国演义","罗贯中",19.9,"小说");
        books[1] = new Book("西游记","吴承恩",29.9,"小说");
        books[2] = new Book("红楼梦","曹雪芹",26.9,"小说");
        usedSize = 3;
    }

    public Book getBooks(int pos) {//输入下标获取该下标的这本书
        return books[pos];
    }

    public void setBooks(int pos, Book book) {//输入下标和一本书,在该下标放入一本书
        this.books[pos] = book;
    }

    public int getUsedSize() {
        return usedSize;
    }

    public void setUsedSize(int usedSize) {
        this.usedSize = usedSize;
    }}
登录后复制

operation(功能包)

IOperation(功能接口)

package operation;import book.BookList;/**
 * User: gu'jiu
 * Date: 2022-05-18
 * Time: 15:07
 * Description:接口
 */public interface IOperation {
    void work(BookList bookList);}
登录后复制

FindOperation(查找图书)

package operation;import book.Book;import book.BookList;import java.util.Scanner;/**
 * User: gu'jiu
 * Date: 2022-05-18
 * Time: 15:09
 * Description:查找书籍信息
 */public class FindOperation implements IOperation{
    @Override
    public void work(BookList bookList) {
        System.out.println();
        System.out.println("查找图书");
        System.out.println("------------------------");
        Scanner scanner = new Scanner(System.in);
        System.out.print("请输入书的名称:");
        String name = scanner.nextLine();

        //获取书架中图书数量
        int size = bookList.getUsedSize();
        //根据名字查找
        for (int i = 0; i < size; i++) {
            Book book = bookList.getBooks(i);
            if (book.getName().equals(name)) {
                System.out.println(book);
                return;
            }
        }
        System.out.println("未找到该书。");
    }}
登录后复制

AddOperation(添加图书)

package operation;import book.Book;import book.BookList;import java.util.Scanner;/**
 * User: gu&#39;jiu
 * Date: 2022-05-18
 * Time: 15:04
 * Description:新增书籍
 */public class AddOperation implements IOperation{
    @Override
    public void work(BookList bookList) {
        System.out.println();
        System.out.println("添加图书");
        System.out.println("------------------------");
        Scanner scanner = new Scanner(System.in);
        System.out.print("请输入书名:");
        String name = scanner.nextLine();
        System.out.print("请输入作者:");
        String author = scanner.nextLine();
        System.out.print("请输入书的类型:");
        String type = scanner.nextLine();
        System.out.print("请输入价格:");
        double price = scanner.nextDouble();

        Book book = new Book(name, author, price, type);
        bookList.setBooks(bookList.getUsedSize(), book);//将书放入书架

        bookList.setUsedSize(bookList.getUsedSize()+1);//书籍数量+1
    }}
登录后复制

DelOperation(删除图书)

package operation;import book.Book;import book.BookList;import java.util.Scanner;/**
 * User: gu&#39;jiu
 * Date: 2022-05-18
 * Time: 15:05
 * Description:删除书籍
 */public class DelOperation implements IOperation{
    @Override
    public void work(BookList bookList) {
        System.out.println();
        System.out.println("删除图书");
        System.out.println("------------------------");
        Scanner scanner = new Scanner(System.in);
        System.out.print("请输入要删除的书名:");
        String name = scanner.nextLine();

        //获取书架中现在有几本书
        int size = bookList.getUsedSize();
        int i = 0;
        //根据书名找到这个本书的下标
        for (i = 0; i < size; i++) {
            Book book = bookList.getBooks(i);
            if (book.getName().equals(name)) {
                break;
            }
        }
        if (i == size) {
            System.out.println("删除失败,未找到该书。");
            return;
        }
        //通过前移将书删除
        for (i = 0; i < size - 1; i++) {
            bookList.setBooks(i,bookList.getBooks(i + 1));
        }
        bookList.setUsedSize(bookList.getUsedSize()-1);//书架中图书数量-1
        System.out.println("删除成功。");
    }}
登录后复制

BorrowOperation(借阅图书)

package operation;import book.Book;import book.BookList;import java.util.Scanner;/**
 * User: gu&#39;jiu
 * Date: 2022-05-18
 * Time: 15:05
 * Description:借阅书籍
 */public class BorrowOperation implements IOperation{
    @Override
    public void work(BookList bookList) {
        System.out.println();
        System.out.println("借阅图书");
        System.out.println("------------------------");
        Scanner scanner = new Scanner(System.in);
        System.out.print("请输入要借书的名称:");
        String name = scanner.nextLine();

        //获取书架中现在有几本书
        int size = bookList.getUsedSize();
        for (int i = 0; i < size; i++) {
            Book book = bookList.getBooks(i);
            //判断在书架中是否有这本书
            if (book.getName().equals(name)) {
                //判断书是否被借走
                if (!book.isState()) {
                    System.out.println("借阅成功!");
                    book.setState(true);//将书的状态改为已借出
                    return;
                } else {
                    System.out.println("借阅失败,该书已被别人借走。");
                    return;
                }
            }
        }
        System.out.println("借阅失败,未找到该书。");
    }}
登录后复制

ReturnOperation(归还图书)

package operation;import book.Book;import book.BookList;import java.util.Scanner;/**
 * User: gu&#39;jiu
 * Date: 2022-05-18
 * Time: 15:10
 * Description:归还书籍
 */public class ReturnOperation implements IOperation{
    @Override
    public void work(BookList bookList) {
        System.out.println();
        System.out.println("归还图书");
        System.out.println("------------------------");
        Scanner scanner = new Scanner(System.in);
        System.out.print("请输入要还书的名称:");
        String name = scanner.nextLine();

        //获取书架中现在有几本书
        int size = bookList.getUsedSize();
        for (int i = 0; i < size; i++) {
            Book book = bookList.getBooks(i);
            //判断在书架中是否有这本书
            if (book.getName().equals(name)) {
                //判断书是否已被借走
                if (book.isState()) {
                    System.out.println("归还成功!");
                    book.setState(false);//将书的状态改为未借出
                    return;
                } else {
                    System.out.println("归还失败,该书已还未被借走。");
                    return;
                }
            }
        }
        System.out.println("归还失败,未找到该书。");
    }}
登录后复制

DisplayOperation(打印图书信息)

package operation;import book.Book;import book.BookList;/**
 * User: gu&#39;jiu
 * Date: 2022-05-18
 * Time: 15:06
 * Description:打印全部书籍信息
 */public class DisplayOperation implements IOperation{
    @Override
    public void work(BookList bookList) {
        System.out.println();
        System.out.println("显示全部图书");
        System.out.println("------------------------");
        int size = bookList.getUsedSize();
        for (int i = 0; i < size; i++) {
            Book book = bookList.getBooks(i);
            System.out.println(book);
        }
    }}
登录后复制

ExitOperation(退出系统)

import book.BookList;/**
 * User: gu&#39;jiu
 * Date: 2022-05-18
 * Time: 15:08
 * Description:退出系统
 */public class ExitOperation implements IOperation{
    @Override
    public void work(BookList bookList) {
        System.out.println();
        System.out.println("退出系统。");
        System.out.println("------------------------");
        System.exit(0);
    }}
登录后复制

user(使用者包)

User(使用者抽象类)

package user;import book.BookList;import operation.IOperation;/**
 * User: gu&#39;jiu
 * Date: 2022-05-18
 * Time: 15:11
 * Description:使用者
 */abstract public class User {
    protected String userName;//使用者姓名
    protected IOperation[] iOperations;//功能数组

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

    public abstract int menu();
    
    //输入选择,调用不同的功能
    public void doOperation(int choice, BookList bookList) {
        this.iOperations[choice].work(bookList);//动态绑定
    }}
登录后复制

AdminUser(管理员)

package user;import operation.*;import java.util.Scanner;/**
 * User: gu&#39;jiu
 * Date: 2022-05-18
 * Time: 15:13
 * Description:管理员
 */public class AdminUser extends User{
    public AdminUser(String userName) {
        super(userName);
        //管理员功能
        this.iOperations = new IOperation[] {
                new ExitOperation(),
                new FindOperation(),
                new AddOperation(),
                new DelOperation(),
                new DisplayOperation()
        };
    }

    @Override
    public int menu() {
        System.out.println();
        System.out.println("hello " + this.userName + " 欢迎来到图书馆");
        while(true) {
            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.print("请输入你的操作:");
            Scanner scanner = new Scanner(System.in);
            int choice = scanner.nextInt();
            //保证输入数字有效
            if (choice > 4 || choice < 0) {
                System.out.println("输入有误请重新输入。");
            } else {
                return choice;
            }
        }
    }}
登录后复制

NormalUser(普通用户)

package user;import operation.*;import java.util.Scanner;/**
 * User: gu&#39;jiu
 * Date: 2022-05-18
 * Time: 15:13
 * Description:学生
 */public class NormalUser extends User{
    public NormalUser (String userName) {
        super(userName);
        //用户功能
        this.iOperations = new IOperation[] {
                new ExitOperation(),
                new FindOperation(),
                new BorrowOperation(),
                new ReturnOperation(),
        };
    }

    @Override
    public int menu() {
        System.out.println();
        System.out.println("hello "+this.userName+" 欢迎来到图书馆");
        while(true) {
            System.out.println("------------------------");
            System.out.println("1.查找图书");
            System.out.println("2.借阅图书");
            System.out.println("3.归还图书");
            System.out.println("0.退出系统");
            System.out.println("------------------------");
            System.out.print("请输入你的操作:");
            Scanner scanner = new Scanner(System.in);
            int choice = scanner.nextInt();
            //保证输入数字有效
            if (choice > 3 || choice < 0) {
                System.out.println("输入有误请重新输入。");
            } else {
                return choice;
            }
        }
    }}
登录后复制

Test类

import book.BookList;import user.AdminUser;import user.NormalUser;import user.User;import java.util.Scanner;/**
 * User: gu&#39;jiu
 * Date: 2022-05-18
 * Time: 15:20
 * Description:图书管理系统
 */public class Test {
    public static User login() {
        System.out.println("欢迎使用图书管理系统");
        Scanner scanner = new Scanner(System.in);
        System.out.print("请输入您的姓名:");
        String name = scanner.nextLine();

        while(true){
            System.out.println("-----------------------------");
            System.out.println("请选择您的身份:1>管理员 2>普通用户");

            System.out.print("请输入:");
            int choice = scanner.nextInt();

            //保证输入数字有效
            if (choice == 1) {
                return new AdminUser(name);
            } else if (choice == 2) {
                return new NormalUser(name);
            } else {
                System.out.println("输入有误,请重新输入。");
            }
        }
    }
    public static void main(String[] args) {
        BookList bookList = new BookList();
        User user = login();//向上转型

        while(true){
            int choice = user.menu();
            user.doOperation(choice, bookList);
        }
    }}
登录后复制

四、部分代码(doOperation)解释

主函数中的user.doOperation(choice, bookList);中的doOperation方法比较难理解,我们来解释一下

1.user.引用的可能是两个对象

2.在实例化这对象的时候,在构造方法中,我们已经将iOperations[]准备好了。

3.根据输入下标(例如:2)访问相应对象,再调用work方法。

推荐学习:《java视频教程

以上是Java图文详解之实现图书管理系统的详细内容。更多信息请关注PHP中文网其他相关文章!

本站声明
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn

热AI工具

Undresser.AI Undress

Undresser.AI Undress

人工智能驱动的应用程序,用于创建逼真的裸体照片

AI Clothes Remover

AI Clothes Remover

用于从照片中去除衣服的在线人工智能工具。

Undress AI Tool

Undress AI Tool

免费脱衣服图片

Clothoff.io

Clothoff.io

AI脱衣机

AI Hentai Generator

AI Hentai Generator

免费生成ai无尽的。

热门文章

R.E.P.O.能量晶体解释及其做什么(黄色晶体)
2 周前 By 尊渡假赌尊渡假赌尊渡假赌
仓库:如何复兴队友
1 个月前 By 尊渡假赌尊渡假赌尊渡假赌
Hello Kitty Island冒险:如何获得巨型种子
4 周前 By 尊渡假赌尊渡假赌尊渡假赌

热工具

记事本++7.3.1

记事本++7.3.1

好用且免费的代码编辑器

SublimeText3汉化版

SublimeText3汉化版

中文版,非常好用

禅工作室 13.0.1

禅工作室 13.0.1

功能强大的PHP集成开发环境

Dreamweaver CS6

Dreamweaver CS6

视觉化网页开发工具

SublimeText3 Mac版

SublimeText3 Mac版

神级代码编辑软件(SublimeText3)

Java 中的平方根 Java 中的平方根 Aug 30, 2024 pm 04:26 PM

Java 中的平方根指南。下面我们分别通过例子和代码实现来讨论平方根在Java中的工作原理。

Java 中的完美数 Java 中的完美数 Aug 30, 2024 pm 04:28 PM

Java 完美数指南。这里我们讨论定义,如何在 Java 中检查完美数?,示例和代码实现。

Java 中的随机数生成器 Java 中的随机数生成器 Aug 30, 2024 pm 04:27 PM

Java 随机数生成器指南。在这里,我们通过示例讨论 Java 中的函数,并通过示例讨论两个不同的生成器。

Java中的Weka Java中的Weka Aug 30, 2024 pm 04:28 PM

Java 版 Weka 指南。这里我们通过示例讨论简介、如何使用weka java、平台类型和优点。

Java 中的阿姆斯特朗数 Java 中的阿姆斯特朗数 Aug 30, 2024 pm 04:26 PM

Java 中的阿姆斯特朗数指南。这里我们讨论一下java中阿姆斯特朗数的介绍以及一些代码。

Java 中的史密斯数 Java 中的史密斯数 Aug 30, 2024 pm 04:28 PM

Java 史密斯数指南。这里我们讨论定义,如何在Java中检查史密斯号?带有代码实现的示例。

Java Spring 面试题 Java Spring 面试题 Aug 30, 2024 pm 04:29 PM

在本文中,我们保留了最常被问到的 Java Spring 面试问题及其详细答案。这样你就可以顺利通过面试。

突破或从Java 8流返回? 突破或从Java 8流返回? Feb 07, 2025 pm 12:09 PM

Java 8引入了Stream API,提供了一种强大且表达力丰富的处理数据集合的方式。然而,使用Stream时,一个常见问题是:如何从forEach操作中中断或返回? 传统循环允许提前中断或返回,但Stream的forEach方法并不直接支持这种方式。本文将解释原因,并探讨在Stream处理系统中实现提前终止的替代方法。 延伸阅读: Java Stream API改进 理解Stream forEach forEach方法是一个终端操作,它对Stream中的每个元素执行一个操作。它的设计意图是处

See all articles