当前位置: 首页 > news >正文

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{@Overridepublic 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{@Overridepublic 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{@Overridepublic 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;}}//没有遇到breakif(i >= currentSize) {System.out.println("没有你要删除的书....");return;}//遇到break  此时开始真正删除for (int j = index; j < currentSize-1; j++) {//bookList[j] = bookList[j+1]; errorBook 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{@Overridepublic 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{@Overridepublic 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{@Overridepublic 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{@Overridepublic 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()};}@Overridepublic 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()};}@Overridepublic 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以用户身份运行:
在这里插入图片描述
这次的图书管理系统之旅就到这里了;

相关文章:

Java-图书管理系统

我的个人主页 欢迎来到我的Java图书管理系统&#xff0c;接下来让我们一同探索如何书写图书管理系统吧&#xff01; 1管理端和用户端 2建立相关的三个包&#xff08;book、operation、user&#xff09; 3建立程序入口Main类 4程序运行 1.首先图书馆管理系统分为管理员端和…...

python如何通过json以及pickle读写保存数据

记录信息 比如说我写了这样一段程序&#xff0c;记录了爱吃的食物&#xff1a; food_list []while True:c input("输入1添加新的食物&#xff0c;输入2查询已添加的食物&#xff0c;输入exit退出&#xff1a;")if c "1":new_food input("输入你…...

【SPIE出版,EI检索稳定】2024年人机交互与虚拟现实国际会议(HCIVR 2024,11月15-17日)

2024年人机交互与虚拟现实国际会议&#xff08;HCIVR 2024&#xff09; 2024 International Conference on Human-Computer Interaction and Virtual Reality 官方信息 会议官网&#xff1a;www.hcivr.org 2024 International Conference on Human-Computer Interaction and …...

Linux vim编辑器

前言&#xff1a; 首先我们来了解一下什么是编辑器&#xff0c;通常我们在widow系统下例如C/C我们进行写代码时&#xff0c;我们通过vs2022等等编译器进行&#xff0c;这里的编译器是一种IDE&#xff08;集成开发环境&#xff09;&#xff0c;集成开发环境是将代码编辑器、编译…...

普推知产:申请商标名称从4字改成3字下了初审!

近日7月的时候普推知产老杨帮客户申请的水果猕猴桃31类商标&#xff0c;初步审定公告下来了&#xff0c;基本没什么问题三个月公告结束后一个月内就可以拿到商标注册证&#xff0c;客户所在地全国有名猕猴桃之县&#xff0c;同质化竞争还得需要商标才可以。 刚开始了解到这位做…...

Flink 状态精准一次性特性

Flink 的一个重大价值在于&#xff0c; 它既保证了 exactly-once &#xff0c;也具有低延迟和高吞吐 的处理能力 。 1.端到端&#xff08;End-To-End&#xff09;状态一致性 端到端的一致性保证&#xff0c;意味着结果的正确性贯穿了整个流处理应用的始终&#xff1b;每 一…...

算法笔记day08

1.游游的水果大礼包 这道题很容易让人想到贪心&#xff0c;但是其实是一道枚举题&#xff0c;只需举一个反例&#xff0c;贪心无非就是哪个礼包价值大&#xff0c;就优先组成哪个礼包。 算法思路&#xff1a; 设可以组成x个a礼包&#xff0c;y个b礼包&#xff0c;求ax by的最…...

在Selenium中有哪些元素对象操作方法?( ̄﹃ ̄)

在Selenium中&#xff0c;driver.find_element() 方法用于定位页面上的单个元素。一旦你定位到了一个元素&#xff0c;你可以对这个元素执行多种操作。此外&#xff0c;driver.find_element() 只是定位元素的方法之一&#xff0c;它还有其他一些相关的方法和属性&#xff0c;但…...

sqli-labs靶场安装以及刷题记录-docker

sqli-labs靶场安装以及刷题记录-docker sqli-labs靶场安装-dockersqli-labs靶场刷题less-1 单引号less-2 数字型less-3 单引号括号less-4 双引号括号less-5 单引号布尔盲注less-6 双引号布尔盲注less-7 单引号加括号、输出到文件less-8 单引号布尔盲注less-9 单引号时间盲注les…...

谷歌仓库管理工具repo

Google 的仓库管理工具 Repo 是一个用于管理包含多个 Git 仓库的大型项目的命令行工具。它最初由 Google 为 Android 操作系统开发&#xff0c;以简化和协调众多子项目的版本控制和协作过程。以下是对 Repo 的详细解释&#xff1a; 主要功能与特点 多仓库管理&#xff1a; Rep…...

C#的自定义Tip窗体 - 开源研究系列文章

上次编写了自定义的提示和对话框窗体&#xff0c;这次记录的是自定义的Tip窗体&#xff0c;用于显示提示操作。有时间没编程了&#xff0c;这次就当进行了记录。 1、 项目目录&#xff1b; 2、 源码介绍&#xff1b; 1) 实现&#xff1b; 2) 应用&#xff1b; 3、 运行界面&…...

目前最新 Reflector V11.1.0.2067版本 .NET 反编译软件

目前最新 Reflector V11.1.0.2067版本 .NET 反编译软件 一、简介二、.NET Reflector的主要功能包括&#xff1a;1. **反编译**: 反编译是将已编译的.NET程序集&#xff08;如.dll或.exe文件&#xff09;转换回可读的源代码。这使得开发者可以查看和学习第三方库的实现细节&…...

软考:CORBA架构

CORBA过时了吗 CORBA指南 个人小结&#xff1a; IPC&#xff0c;进程间通信&#xff0c;Socket应用在不同机器之间的通信 RPC是一种技术思想而非一种规范 但站在八九十年代的当口&#xff0c;简单来说&#xff0c;就是我在本地调用了一个函数&#xff0c;或者对象的方法&…...

qt QSaveFile详解

QSaveFile 是 Qt 提供的一个类&#xff0c;用于安全地保存文件。它的主要特点是在写入文件时确保数据完整性&#xff0c;以防止文件损坏。使用 QSaveFile&#xff0c;您可以创建一个临时文件&#xff0c;并在成功写入后将其重命名为目标文件&#xff0c;这样可以避免在写入过程…...

【Linux】线程池详解及其基本架构与单例模式实现

目录 1.关于线程池的基本理论 1.1.线程池是什么&#xff1f; 1.2.线程池的应用场景&#xff1a; 2.线程池的基本架构 2.1.线程容器 2.2.任务队列 2.3.线程函数&#xff08;HandlerTask&#xff09; 2.4.线程唤醒机制 3.添加单例模式 3.1.单例模式是什么&…...

运输层知识点汇总3

目录 前言 二、为什么在TCP首部中有一个首部长度字段&#xff0c;而UDP的首部就没有这个字段&#xff1f; 三、一个TCP报文段的数据部分最多为多少字节&#xff1f;为什么&#xff1f;如果用户要传送的数据的字节长度超过TCP报文段中的序号字段可能编出的最大序号&#xff0…...

浔川社团官方联合会提前入驻

近期&#xff0c;我们浔川社团官方发现文章再次被不明网站转发。这一情况引起了我们的高度警觉和深刻反思。我们一直致力于为大家提供高质量、有价值的内容&#xff0c;用心创作每一篇文章&#xff0c;以展现我们社团的风采和理念。然而&#xff0c;这些不明网站未经授权的转发…...

比例数据可视化(Python实现板块层级图绘制)——Instacart Market Basket Analysis

【实验名称】 实验一&#xff1a;绘制板块层级图 【实验目的】 1. 掌握数据文件读取 2. 掌握数据处理的方法 3. 实现板块层级图的绘制 【数据介绍】Instacart Market Basket Analysis 1. 数据说明 数据共有300 0000orders&#xff0c; 20 0000users&#xff0c; …...

C++研发笔记8——C语言程序设计初阶学习笔记6

在第一部分——课前准备的学习中&#xff0c;我就提到了学习C语言的过程中&#xff0c;练习是必不可少的环节&#xff0c;所以本篇笔记我们来进行记录我们学习《C语言程序设计初阶》阶段的第一篇练习文章。 题目一 下面哪个不是C语言内置的数据类型&#xff1a; A.char B.d…...

0softmax和背后的最大熵(极大似然法)

只要无穷阶矩都一样&#xff0c;那么两个分布一定一样。 整理思路&#xff1a;1、设定样本的概率模型与目标概率模型一致&#xff08;两个模型特性函数一致&#xff09;建立服从伯努利分布的变量&#xff08;此处需要理解样本空间及变量的关系&#xff09;对两个模型进行降维&a…...

【Linux】shell脚本忽略错误继续执行

在 shell 脚本中&#xff0c;可以使用 set -e 命令来设置脚本在遇到错误时退出执行。如果你希望脚本忽略错误并继续执行&#xff0c;可以在脚本开头添加 set e 命令来取消该设置。 举例1 #!/bin/bash# 取消 set -e 的设置 set e# 执行命令&#xff0c;并忽略错误 rm somefile…...

DeepSeek 赋能智慧能源:微电网优化调度的智能革新路径

目录 一、智慧能源微电网优化调度概述1.1 智慧能源微电网概念1.2 优化调度的重要性1.3 目前面临的挑战 二、DeepSeek 技术探秘2.1 DeepSeek 技术原理2.2 DeepSeek 独特优势2.3 DeepSeek 在 AI 领域地位 三、DeepSeek 在微电网优化调度中的应用剖析3.1 数据处理与分析3.2 预测与…...

macOS多出来了:Google云端硬盘、YouTube、表格、幻灯片、Gmail、Google文档等应用

文章目录 问题现象问题原因解决办法 问题现象 macOS启动台&#xff08;Launchpad&#xff09;多出来了&#xff1a;Google云端硬盘、YouTube、表格、幻灯片、Gmail、Google文档等应用。 问题原因 很明显&#xff0c;都是Google家的办公全家桶。这些应用并不是通过独立安装的…...

鸿蒙中用HarmonyOS SDK应用服务 HarmonyOS5开发一个医院查看报告小程序

一、开发环境准备 ​​工具安装​​&#xff1a; 下载安装DevEco Studio 4.0&#xff08;支持HarmonyOS 5&#xff09;配置HarmonyOS SDK 5.0确保Node.js版本≥14 ​​项目初始化​​&#xff1a; ohpm init harmony/hospital-report-app 二、核心功能模块实现 1. 报告列表…...

Spring AI 入门:Java 开发者的生成式 AI 实践之路

一、Spring AI 简介 在人工智能技术快速迭代的今天&#xff0c;Spring AI 作为 Spring 生态系统的新生力量&#xff0c;正在成为 Java 开发者拥抱生成式 AI 的最佳选择。该框架通过模块化设计实现了与主流 AI 服务&#xff08;如 OpenAI、Anthropic&#xff09;的无缝对接&…...

css3笔记 (1) 自用

outline: none 用于移除元素获得焦点时默认的轮廓线 broder:0 用于移除边框 font-size&#xff1a;0 用于设置字体不显示 list-style: none 消除<li> 标签默认样式 margin: xx auto 版心居中 width:100% 通栏 vertical-align 作用于行内元素 / 表格单元格&#xff…...

Go 语言并发编程基础:无缓冲与有缓冲通道

在上一章节中&#xff0c;我们了解了 Channel 的基本用法。本章将重点分析 Go 中通道的两种类型 —— 无缓冲通道与有缓冲通道&#xff0c;它们在并发编程中各具特点和应用场景。 一、通道的基本分类 类型定义形式特点无缓冲通道make(chan T)发送和接收都必须准备好&#xff0…...

NPOI Excel用OLE对象的形式插入文件附件以及插入图片

static void Main(string[] args) {XlsWithObjData();Console.WriteLine("输出完成"); }static void XlsWithObjData() {// 创建工作簿和单元格,只有HSSFWorkbook,XSSFWorkbook不可以HSSFWorkbook workbook new HSSFWorkbook();HSSFSheet sheet (HSSFSheet)workboo…...

Caliper 负载(Workload)详细解析

Caliper 负载(Workload)详细解析 负载(Workload)是 Caliper 性能测试的核心部分,它定义了测试期间要执行的具体合约调用行为和交易模式。下面我将全面深入地讲解负载的各个方面。 一、负载模块基本结构 一个典型的负载模块(如 workload.js)包含以下基本结构: use strict;/…...

给网站添加live2d看板娘

给网站添加live2d看板娘 参考文献&#xff1a; stevenjoezhang/live2d-widget: 把萌萌哒的看板娘抱回家 (ノ≧∇≦)ノ | Live2D widget for web platformEikanya/Live2d-model: Live2d model collectionzenghongtu/live2d-model-assets 前言 网站环境如下&#xff0c;文章也主…...