Java-图书管理系统

我的个人主页

欢迎来到我的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以用户身份运行:
在这里插入图片描述
这次的图书管理系统之旅就到这里了;

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

6.stm32 OLED显示屏

调试方式 串口调试&#xff1a;通过串口通信&#xff0c;将调试信息发送到电脑端&#xff0c;电脑使用串口助手显示调试信息 显示屏调试&#xff1a;直接将显示屏连接到单片机&#xff0c;将调试信息打印在显示屏上 Keil调试模式&#xff1a;借助Keil软件的调试模式&#…

【阅读笔记】Instruction-based Hypergraph Pretraining

Abstract中可以提炼的信息&#xff1a; 背景&#xff1a;预训练的作用是为了增强图学习模型将知识从大数据集转移到下游任务的适应性。 想解决的问题&#xff1a;训练目标的不同与数据分布的不同会阻碍预训练知识的迁移。 文章受到基于指令的提示词在语言模型训练广泛应用的启发…

Vue学习笔记(四)

事件处理 我们可以使用 v-on 指令 (通常缩写为 符号) 来监听 DOM 事件&#xff0c;并在触发事件时执行一些 JavaScript。用法为 v-on:click"methodName" 或使用快捷方式 click"methodName" 事件处理器的值可以是&#xff1a; 内联事件处理器&#xff1…

鹅厂面试官:Transformer 为何需要位置编码?

最近这一两周看到不少互联网公司都已经开始秋招发放Offer。 不同以往的是&#xff0c;当前职场环境已不再是那个双向奔赴时代了。求职者在变多&#xff0c;HC 在变少&#xff0c;岗位要求还更高了。 最近&#xff0c;我们又陆续整理了很多大厂的面试题&#xff0c;帮助一些球…

前端零基础入门到上班:【Day2】开发环境VSCode安装

VSCode 安装教程&#xff1a;图文保姆教程 引言 在前端开发中&#xff0c;选择合适的代码编辑器是提高工作效率的重要一步。Visual Studio Code&#xff08;简称 VSCode&#xff09;作为一款强大的开源编辑器&#xff0c;因其简洁易用、功能强大、扩展性好而广受开发者喜爱。…

【智能大数据分析 | 实验四】Spark实验:Spark Streaming

【作者主页】Francek Chen 【专栏介绍】 ⌈ ⌈ ⌈智能大数据分析 ⌋ ⌋ ⌋ 智能大数据分析是指利用先进的技术和算法对大规模数据进行深入分析和挖掘&#xff0c;以提取有价值的信息和洞察。它结合了大数据技术、人工智能&#xff08;AI&#xff09;、机器学习&#xff08;ML&a…

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

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

前端零基础入门到上班:【Day3】从零开始构建网页骨架HTML

HTML 基础入门&#xff1a;从零开始构建网页骨架 目录 1. 什么是 HTML&#xff1f;HTML 的核心作用 2. HTML 基本结构2.1 DOCTYPE 声明2.2 <html> 标签2.3 <head> 标签2.4 <body> 标签 3. HTML 常用标签详解3.1 标题标签3.2 段落和文本标签3.3 链接标签3.4 图…

市面上热门的四款PDF转换器解析!!

在互联网普及的今天&#xff0c;PDF和Excel已经成为我们工作中不可或缺的两种文件格式。PDF常用于文档的阅读、打印和分享&#xff0c;而Excel则适用于数据的分析和处理。但是&#xff0c;有时候我们需要在两者之间进行转换&#xff0c;例如将PDF中的数据导入到Excel中进行进一…

物联网数据采集网关详细介绍-天拓四方

一、物联网数据采集网关的概述 物联网数据采集网关&#xff0c;简称数据采集网关&#xff0c;是物联网系统中的重要组成部分&#xff0c;位于物联网设备和云端平台之间。其主要职责是实现数据的采集、汇聚、转换、传输等功能&#xff0c;确保来自不同物联网设备的数据能够统一…

Hadoop 踩坑汇总

文章目录 一、完整教程二、解决问题问题①&#xff1a; DataNode 没有问题②&#xff1a; 网页打不开 三、大功告成&#xff01;&#xff01; 一、完整教程 这个教程比较详细&#xff0c;博主是按照这个来执行的 https://blog.csdn.net/qq_47831505/article/details/123806514…

VsCode插件:前端每日一题

Javascript本地存储的方式有哪些&#xff1f; 区别及应用场景? 1. Cookie Cookie 是网站为了辨别用户身份、进行session跟踪而储存在用户本地终端上的数据。Cookie 通常包含了用户的一些个人信息&#xff0c;如用户名、密码、浏览记录、偏好设置等。Cookie 一般在用户访问网站…

Excel:vba实现生成随机数

Sub 生成随机数字()Dim randomNumber As IntegerDim minValue As IntegerDim maxValue As Integer 设置随机数的范围(假入班级里面有43个学生&#xff0c;学号是从1→43)minValue 1maxValue 43 生成随机数(在1到43之间生成随机数)randomNumber Application.WorksheetFunctio…

智联招聘×Milvus:向量召回技术提升招聘匹配效率

01. 业务背景 在智联招聘平台&#xff0c;求职者和招聘者之间的高效匹配至关重要。招聘者可以发布职位寻找合适的人才&#xff0c;求职者则通过上传简历寻找合适的工作。在这种复杂的场景中&#xff0c;我们的核心目标是为双方提供精准的匹配结果。在搜索推荐场景下&#xff0c…

深入理解gPTP时间同步过程

泛化精确时间协议(gPTP)是一个用于实现精确时间同步的协议,特别适用于分布式系统中需要高度协调的操作,比如汽车电子、工业自动化等。 gPTP通过同步主节点(Time Master)和从节点(Time Slave)的时钟,实现全局一致的时间参考。 以下是gPTP实现主从时间同步的详细过程:…

奥迪一汽新能源:300台AGV、1000台机器人、24米立体库

导语 大家好&#xff0c;我是社长&#xff0c;老K。专注分享智能制造和智能仓储物流等内容。 位于长春的奥迪新能源工厂&#xff0c;占地面积广阔&#xff0c;达到了约150公顷&#xff0c;其规模之宏大&#xff0c;甚至超越了奥迪在欧洲的内卡苏姆工厂。 这座工厂不仅是奥迪在中…

一、在cubemx下RTC配置调试实例测试

一、rtc的时钟有lse提供。 二、选择rtc唤醒与闹钟功能 内部参数介绍 闹钟配置 在配置时间时&#xff0c;注意将时间信息存储起来&#xff0c;防止复位后时间重新配置。 if(HAL_RTCEx_BKUPRead(&hrtc, RTC_BKP_DR0)! 0x55AA)//判断标志位是否配置过&#xff0c;没有则进…

使用Angular构建动态Web应用

&#x1f496; 博客主页&#xff1a;瑕疵的CSDN主页 &#x1f4bb; Gitee主页&#xff1a;瑕疵的gitee主页 &#x1f680; 文章专栏&#xff1a;《热点资讯》 使用Angular构建动态Web应用 1 引言 2 Angular简介 3 安装Angular CLI 4 创建Angular项目 5 设计应用结构 6 创建组件…

【每日一题】LeetCode - 盛最多水的容器

给定一个长度为 n 的整数数组 height。有 n 条垂线&#xff0c;第 i 条线的两个端点是 (i, 0) 和 (i, height[i])。要求找出其中的两条线&#xff0c;使得它们与 x 轴共同构成的容器可以容纳最多的水。 输入示例&#xff1a; height [1,8,6,2,5,4,8,3,7]输出&#xff1a; 4…

CSS行块标签的显示方式

块级元素 标签&#xff1a;h1-h6&#xff0c;p,div,ul,ol,li,dd,dt 特点&#xff1a; &#xff08;1&#xff09;如果块级元素不设置默认宽度&#xff0c;那么该元素的宽度等于其父元素的宽度。 &#xff08;2&#xff09;所有的块级元素独占一行显示. &#xff08;3&#xff…