Java-图书管理系统

news2024/10/26 23:14:13

我的个人主页

欢迎来到我的Java图书管理系统,接下来让我们一同探索如何书写图书管理系统吧!
在这里插入图片描述

1管理端和用户端

2建立相关的三个包(book、operation、user)

3建立程序入口Main类

4程序运行

1.首先图书馆管理系统分为管理员端用户端

1.1管理员端:AdminUser::menu()
------------------------------------------------------管理员菜单------------------------------------------------------

  • 1.查找图书
  • 2.新增图书
  • 3.删除图书
  • 4.显示图书
  • 0.退出图书
    ------------------------------------------------------------------------------------------------------------------------

1.2用户端:NormalUser::menu()

------------------------------------------------------用户端----------------------------------------------------------

  • 1.查找图书
  • 2.借阅图书
  • 3.归还图书
  • 0.退出系统
    ------------------------------------------------------------------------------------------------------------------------

2.建立三个包(book(书相关的包),operation(操作相关的包),user(使用者相关的包))

2.1再在book包里面建立Book(书籍对象)和BookList(书架)类
Book

package book;

/**
 * Created with IntelliJ IDEA.
 * Description:
 * User:Lenovo
 * Date:2024-10-26
 * Time:12:39
 */
public class Book{
    private String name;//书籍名称
    private String author;//作者
    private int price;//价格
    private String taye;//类型
    private boolean isBorrowed;;//是否被借出

    public Book(String name, String author, int price, String taye) {
        this.name = name;
        this.author = author;
        this.price = price;
        this.taye = taye;
    }

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

这里可以通过快捷键alt+insert快速构造成员方法,也可以快速构建get和set
在这里插入图片描述
在这里插入图片描述

BookList

package book;
import java.security.PrivilegedAction;
/**
 * Created with IntelliJ IDEA.
 * Description:
 * User:Lenovo
 * Date:2024-10-26
 * Time:12:38
 */

public class BookList {

    private Book[] books; //存放书籍
    private static final int DEFAULT_SIZE = 10;

    private int usedSize; // 有效书籍的个数

    //private int xxxx;

    public BookList() {
        this.books = new Book[DEFAULT_SIZE];
        //预先存3本书
        this.books[0] = new Book("三国演义","罗贯中",19,"武侠");
        this.books[1] = new Book("西游记","吴承恩",20,"神话");
        this.books[2] = new Book("红楼梦","曹雪芹",15,"小说");

        this.usedSize = 3;
    }

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

    public int getUsedSize() {
        return usedSize;
    }

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

    //.....还有待补充的

    public Book getBook(int pos) {
        return books[pos];
    }

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


2.2在operation包里面建立AddBook、 BorrowedBook、DelBook、ExitBook、FindBook ReturnBook、ShowBook类,IOPeration(接口);
AddBook

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

import java.util.Scanner;

/**
 * Created with IntelliJ IDEA.
 * Description:
 * User:Lenovo
 * Date:2024-10-26
 * Time:13:17
 */
public class AddBook implements IOPeration{
    @Override
    public void work(BookList bookList) {
        System.out.println("新增图书....");

        /*if(isFull(bookList)) {
            System.out.println("书架满了....");
            return;
        }*/

       /* if(isFull(bookList)) {
            //扩容的代码 Arrays.copyOf();
        }*/

        //1. 整理书籍的信息
        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();
        scanner.nextLine();

        System.out.println("请输入书籍的类型:");
        String type = scanner.nextLine();

        Book book = new Book(name,author,price,type);

        //2.如果书架有这本书 则不能上架
        int currentSize = bookList.getUsedSize();
        for (int i = 0; i < currentSize; i++) {
            Book tmp = bookList.getBook(i);
            if(tmp.getName().equals(name)) {
                System.out.println("有这本书,可以不上架!!");
                return;
            }
        }
        //3.没有这本书 则放到书籍数组当中
        bookList.setBooks(currentSize,book);

        bookList.setUsedSize(currentSize+1);
    }


    private boolean isFull(BookList bookList) {
        return bookList.getBooks().length ==
                bookList.getUsedSize();
    }
}

BorrowedBook

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

import java.util.Scanner;

/**
 * Created with IntelliJ IDEA.
 * Description:
 * User:Lenovo
 * Date:2024-10-26
 * Time:13:22
 */
public class BorrowedBook implements IOPeration{
    @Override
    public void work(BookList bookList) {
        System.out.println("借阅图书....");
        System.out.println("请输入你要借阅的图书:");
        Scanner scanner = new Scanner(System.in);
        String name = scanner.nextLine();

        //1.先遍历数组 查找是否存在要借阅的图书
        int currentSize = bookList.getUsedSize();
        for (int i = 0; i < currentSize; i++) {
            Book book = bookList.getBook(i);
            if(book.getName().equals(name)) {
                //2.如果存在 检查 是否已经被借出
                if(book.isBorrowed()) {
                    System.out.println("这本书已经被借出了!");
                }else {
                    //3. 如果没有借出 可以借
                    book.setBorrowed(true);
                    System.out.println(book);
                    System.out.println("借阅成功!!");
                }
                return;
            }
        }
        //4.如果不存在 则不能借阅
        System.out.println("没有你要找的这本书,无法借阅!!");
    }
}

DelBook

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

import java.util.Scanner;

/**
 * Created with IntelliJ IDEA.
 * Description:
 * User:Lenovo
 * Date:2024-10-26
 * Time:13:24
 */
public class DelBook implements IOPeration{
    @Override
    public void work(BookList bookList) {
        System.out.println("删除图书....");
        Scanner scanner = new Scanner(System.in);

        //1、输入你要删除的图书名称:
        System.out.println("请输入要删除书籍的名称:");
        String name = scanner.nextLine();

        //2.查看当前书籍是否存在
        int index = -1;
        int i = 0;
        int currentSize = bookList.getUsedSize();
        for (; i < currentSize; i++) {
            Book tmp = bookList.getBook(i);
            if(tmp.getName().equals(name)) {
                index = i;
                break;
            }
        }
        //没有遇到break
        if(i >= currentSize) {
            System.out.println("没有你要删除的书....");
            return;
        }
        //遇到break  此时开始真正删除
        for (int j = index; j < currentSize-1; j++) {
            //bookList[j] = bookList[j+1]; error
            Book tmp = bookList.getBook(j+1);
            bookList.setBooks(j,tmp);
        }
        //修改usedSize的值

        bookList.setUsedSize(currentSize-1);

        bookList.setBooks(currentSize-1,null);

        System.out.println("删除图书成功了.....");
    }
}

ExitBook

package operation;

import book.BookList;

/**
 * Created with IntelliJ IDEA.
 * Description:
 * User:Lenovo
 * Date:2024-10-26
 * Time:13:12
 */
public class ExitBook implements IOPeration{

    @Override
    public void work(BookList bookList) {
        System.out.println("退出系统.....");
        int currentSize = bookList.getUsedSize();
        for (int i = 0; i < currentSize; i++) {
            //bookList[i] = null;
            bookList.setBooks(i,null);
        }
        bookList.setUsedSize(0);
        System.exit(0);
    }
}

FindBook

package operation;

import book.BookList;
import book.Book;
import java.util.Scanner;

/**
 * Created with IntelliJ IDEA.
 * Description:
 * User:Lenovo
 * Date:2024-10-26
 * Time:13:25
 */
public class FindBook implements IOPeration{

    @Override
    public void work(BookList bookList) {
        System.out.println("查找图书...");
        Scanner scanner = new Scanner(System.in);
        System.out.println("请输入你要查找的图书的名字:");
        String name = scanner.nextLine();

        //1.先确定  当前数组当中 有效的书籍个数
        int currentSize = bookList.getUsedSize();

        for (int i = 0; i < currentSize; i++) {
            Book book = bookList.getBook(i);
            if(book.getName().equals(name)) {
                System.out.println("找到这本书籍了,书籍内容如下:");
                System.out.println(book);
                return;
            }
        }

        System.out.println("没有你要查找的图书的书籍!!");
    }
}

ReturnBook

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

import java.util.Scanner;

/**
 * Created with IntelliJ IDEA.
 * Description:
 * User:Lenovo
 * Date:2024-10-26
 * Time:13:27
 */
public class ReturnBook implements IOPeration{
    @Override
    public void work(BookList bookList) {
        System.out.println("归还图书....");
        System.out.println("请输入你要归还的图书:");
        Scanner scanner = new Scanner(System.in);
        String name = scanner.nextLine();

        //1.先遍历数组 查找是否存在要归还的图书
        int currentSize = bookList.getUsedSize();
        for (int i = 0; i < currentSize; i++) {
            Book book = bookList.getBook(i);
            if(book.getName().equals(name)) {
                if(!book.isBorrowed()) {
                    System.out.println("这本书没有被借出过,不用还!");
                }else {
                    System.out.println("归还成功");
                    book.setBorrowed(false);
                    System.out.println(book);
                }
                return;
            }
        }
        //4.如果不存在 则不能归还
        System.out.println("没有你要找的这本书,无法归还!!");
    }
}

ShowBook

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

/**
 * Created with IntelliJ IDEA.
 * Description:
 * User:Lenovo
 * Date:2024-10-26
 * Time:13:27
 */
public class ShowBook implements IOPeration{
    @Override
    public void work(BookList bookList) {
        System.out.println("打印图书....");

        int currentSize = bookList.getUsedSize();
        for (int i = 0; i < currentSize; i++) {
            Book tmp = bookList.getBook(i);
            System.out.println(tmp);
        }
    }
}

IOPeration

package operation;

import book.BookList;

/**
 * Created with IntelliJ IDEA.
 * Description:
 * User:Lenovo
 * Date:2024-10-26
 * Time:13:09
 */
public interface IOPeration {
    void work(BookList books);
}

2.3 user包中建立AdminUser、NormalUser、User类;
AdminUser

package user;

import operation.*;

import java.util.Scanner;

/**
 * Created with IntelliJ IDEA.
 * Description:
 * User:Lenovo
 * Date:2024-10-26
 * Time:12:43
 */
public class AdminUser extends User{

    public AdminUser(String name) {
        super(name);
        this.ioPerations = new IOPeration[]{
                new ExitBook(),
                new FindBook(),
                new AddBook(),
                new DelBook(),
                new ShowBook()
        };
    }

    @Override
    public int menu() {
        System.out.println("欢迎 "+this.name+" 来到图书管理系统!");
        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;
    }
}



NormalUser

package user;

import operation.*;

import java.util.Scanner;

/**
 * Created with IntelliJ IDEA.
 * Description:
 * User:Lenovo
 * Date:2024-10-26
 * Time:12:42
 */
public class NormalUser extends User{

    public NormalUser(String name) {
        super(name);
        this.ioPerations = new IOPeration[]{
                new ExitBook(),
                new FindBook(),
                new BorrowedBook(),
                new ReturnBook()
        };
    }

    @Override
    public int menu() {
        System.out.println("欢迎 "+this.name+" 来到图书管理系统!");
        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;
    }

}

User

package user;

import book.BookList;
import operation.IOPeration;

/**
 * Created with IntelliJ IDEA.
 * Description:
 * User:Lenovo
 * Date:2024-10-26
 * Time:12:42
 */
public abstract class User {
    public String name;

    public IOPeration[] ioPerations; //没有初始化

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

    public abstract int menu();

    public void doOperations(int choice, BookList books) {
        //return this.ioPerations[choice];
        IOPeration ioPeration = this.ioPerations[choice];
        //IOPeration ioPeration =  new FindBook();
        ioPeration.work(books);
    }
}

3整个程序的入口Main类
Main

/**
 * Created with IntelliJ IDEA.
 * Description:
 * User:Lenovo
 * Date:2024-10-26
 * Time:12:44
 */
import book.BookList;
import user.AdminUser;
import user.NormalUser;
import user.User;

import java.util.Scanner;
public class Main {
    public static User login(){
        Scanner scanner=new Scanner(System.in);
        System.out.println("请输入你的姓名: ");
        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 bookList=new BookList();
       /* Book[] books=new Book[10];
        books[0]=new Book{"三国演义","罗贯中",19,"武侠"};
        books[1]=new Book{"西游记","吴承恩",20,"神话"};
        books[2]=new Book{"红楼梦","曹雪芹",15,"小说"};
        usedsize=3;*/
        User user=login();
        while(true){
            int choice=user.menu();
            user.doOperations(choice,bookList);
        }
    }
}

这样一个简单的图书管理系统就实现了

4程序运行:
4.1以管理员身份运行:

4.2以用户身份运行:
在这里插入图片描述
这次的图书管理系统之旅就到这里了;

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/2224255.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

使用Poste搭建内网邮件服务器

使用Poste搭建内网邮件服务器 Poste.io 也是一个流行的邮件服务器方案&#xff0c;它可以通过 Docker 容器轻松部署&#xff0c;非常适合搭建内部邮件服务器。 本文档将向您展示如何开始使用 Poste.io 邮件服务器。在 5 分钟内&#xff0c;您将拥有一个可发送和接收邮件的邮件…

Springboot 使用EasyExcel导出Excel文件

Springboot 使用EasyExcel导出Excel文件 Excel导出系列目录&#xff1a;引入依赖创建导出模板类创建图片转化器 逻辑处理controllerservice 导出效果遗留问题 Excel导出系列目录&#xff1a; 【Springboot 使用EasyExcel导出Excel文件】 【Springboot 使用POI导出Excel文件】 …

基于Python大数据的王者荣耀战队数据分析及可视化系统

作者&#xff1a;计算机学姐 开发技术&#xff1a;SpringBoot、SSM、Vue、MySQL、JSP、ElementUI、Python、小程序等&#xff0c;“文末源码”。 专栏推荐&#xff1a;前后端分离项目源码、SpringBoot项目源码、Vue项目源码、SSM项目源码、微信小程序源码 精品专栏&#xff1a;…

es实现自动补全

目录 自动补全 拼音分词器 安装拼音分词器 第一步&#xff1a;下载zip包&#xff0c;并解压缩 第二步&#xff1a;去docker找到es-plugins数据卷挂载的位置&#xff0c;并进入这个目录 第三步&#xff1a;把拼音分词器的安装包拖到这个目录下 第四步&#xff1a;重启es 第…

使用freemarker实现在线展示文档功能开发,包括数据填充

首先&#xff0c;在这个独属于程序员节日的这一天&#xff0c;祝大家节日快乐【求职的能找到心仪的工作&#xff0c;已经工作的工资翻倍】。 ---------------------------------------------------------------回到正文-----------------------------------------------------…

大数据处理随堂测试

HDFS MapReduce HBase Spark

【Linux驱动开发】设备树节点驱动开发入门

【Linux驱动开发】设备树节点驱动开发入门 文章目录 设备树文件设备树文件驱动开发附录&#xff1a;嵌入式Linux驱动开发基本步骤开发环境驱动文件编译驱动安装驱动自动创建设备节点文件 驱动开发驱动设备号地址映射&#xff0c;虚拟内存和硬件内存地址字符驱动旧字符驱动新字…

Redis 集群 总结

前言 相关系列 《Redis & 目录》&#xff08;持续更新&#xff09;《Redis & 集群 & 源码》&#xff08;学习过程/多有漏误/仅作参考/不再更新&#xff09;《Redis & 集群 & 总结》&#xff08;学习总结/最新最准/持续更新&#xff09;《Redis & 集群…

Postman常见问题及解决方(全)

&#x1f345; 点击文末小卡片 &#xff0c;免费获取软件测试全套资料&#xff0c;资料在手&#xff0c;涨薪更快 1、网络连接问题 如果Postman无法发送请求或接收响应&#xff0c;可以尝试以下操作&#xff1a; 检查网络连接是否正常&#xff0c;包括检查网络设置、代理设置…

接口测试(五)jmeter——get请求

一、get请求——短信验证码&#xff08;示例仅供参考&#xff09; 1. get请求&#xff1a;传参数据直接拼接在地址后面&#xff0c;jmeter不需要设置请求头content-type 注&#xff1a;短信验证码接口&#xff0c;返回结果中不会返回短信验证码&#xff0c;是存在数据库表中&a…

Pyramidal Flow使用指南:快手、北大、北邮,开源可免费商用视频生成模型,快速上手教程

什么是 Pyramidal Flow&#xff1f; Pyramidal Flow 是由快手科技、北京大学和北京邮电大学联合推出的开源视频生成模型&#xff0c;它是完全开源的&#xff0c;发布在 MIT 许可证下&#xff0c;允许商业使用、修改和再分发。该模型能够通过文本描述生成最高10秒、分辨率为128…

EveryoneNobel:为每个人打造诺贝尔奖风格的纪念图片

在这个充满荣誉和成就的时代&#xff0c;EveryoneNobel 项目应运而生&#xff0c;旨在为每个人提供一个生成诺贝尔奖风格纪念图片的机会。通过利用 ComfyUI 进行图像生成&#xff0c;结合 HTML 模板展示文字&#xff0c;不仅提供了一个生成诺贝尔奖图片的流程&#xff0c;而且构…

【Python爬虫实战】Selenium自动化网页操作入门指南

#1024程序员节&#xff5c;征文# &#x1f308;个人主页&#xff1a;易辰君-CSDN博客 &#x1f525; 系列专栏&#xff1a;https://blog.csdn.net/2401_86688088/category_12797772.html ​ 目录 前言 一、准备工作 &#xff08;一&#xff09;安装 Selenium 库 &#xff0…

2024 年我的 MacBook 软件开发设置分享

在过去的一年里&#xff0c;我的 MacBook 软件开发环境经历了一些变化。今天&#xff0c;我想分享我的最新设置、工作流程和工具&#xff0c;帮助你在软件开发中提升效率。 我的工作设备 &#x1f4bb; 我目前使用的是 16 英寸的 MacBook Pro M1 Max。这台机器的性能令人印象…

「C/C++」C++ STL容器库 之 std::multimap 键值对的集合容器

✨博客主页何曾参静谧的博客&#x1f4cc;文章专栏「C/C」C/C程序设计&#x1f4da;全部专栏「VS」Visual Studio「C/C」C/C程序设计「UG/NX」BlockUI集合「Win」Windows程序设计「DSA」数据结构与算法「UG/NX」NX二次开发「QT」QT5程序设计「File」数据文件格式「PK」Parasoli…

化验单智能识别与数据抽取:AI平台赋能医疗信息化

化验单处理在医院日常运作中常遇信息量大、数据整理不易、效率低的问题。思通数科推出的AI多模态平台&#xff0c;借助光学字符识别&#xff08;OCR&#xff09;、图像处理等技术&#xff0c;提供了一款开源化验单智能识别系统&#xff0c;能迅速识别、提取和分析化验单数据。 …

【云原生网关】Higress 从部署到使用详解

目录 二、网关概述 2.1 什么是云原生网关 2.2 常见的云原生网关 2.2.1 Nginx 2.2.2 ApiSix 2.2.3 Kong 2.2.4 Apache Shenyu 2.2.5 Higress 2.2.6 Envoy​​​​​​​ 三、higress介绍 3.1 什么是higress 3.2 Higress 定位 3.3 Higress 内核选择 四、Higress搭…

10.22.2024刷华为OD C题型(三)--for循环例子

脚踝动了手术&#xff0c;现在宾馆恢复&#xff0c;伤筋动骨一百天还真不是说笑的&#xff0c;继续努力吧。 文章目录 靠谱的车灰度图恢复灰度图恢复 -- for循环使用例子 靠谱的车 https://www.nowcoder.com/discuss/564514429228834816 这个题目思路不难&#xff0c;就是要自…

网络一些相关术语

目录 网络一些相关术语 转发平面效率 可扩展性 控制平面 网络拓扑 服务质量&#xff08;QoS&#xff09; 网络协议 网络带宽 网络拥塞 网络安全 网络冗余 网络切片 网络延迟 网络地址转换&#xff08;NAT&#xff09; 虚拟专用网络&#xff08;VPN&#xff09; …

C#中的接口的使用

定义接口 public interface IMyInterface {int MyProperty { get; set; }void MyMethod(); } 实现类 internal class MyClass : IMyInterface {public int MyProperty { get; set; }public void MyMethod(){Console.WriteLine("MyMethod is called");} } 目录结构…