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图书管理系统,接下来让我们一同探索如何书写图书管理系统吧! 1管理端和用户端 2建立相关的三个包(book、operation、user) 3建立程序入口Main类 4程序运行 1.首先图书馆管理系统分为管理员端和…...
python如何通过json以及pickle读写保存数据
记录信息 比如说我写了这样一段程序,记录了爱吃的食物: food_list []while True:c input("输入1添加新的食物,输入2查询已添加的食物,输入exit退出:")if c "1":new_food input("输入你…...

【SPIE出版,EI检索稳定】2024年人机交互与虚拟现实国际会议(HCIVR 2024,11月15-17日)
2024年人机交互与虚拟现实国际会议(HCIVR 2024) 2024 International Conference on Human-Computer Interaction and Virtual Reality 官方信息 会议官网:www.hcivr.org 2024 International Conference on Human-Computer Interaction and …...

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

普推知产:申请商标名称从4字改成3字下了初审!
近日7月的时候普推知产老杨帮客户申请的水果猕猴桃31类商标,初步审定公告下来了,基本没什么问题三个月公告结束后一个月内就可以拿到商标注册证,客户所在地全国有名猕猴桃之县,同质化竞争还得需要商标才可以。 刚开始了解到这位做…...
Flink 状态精准一次性特性
Flink 的一个重大价值在于, 它既保证了 exactly-once ,也具有低延迟和高吞吐 的处理能力 。 1.端到端(End-To-End)状态一致性 端到端的一致性保证,意味着结果的正确性贯穿了整个流处理应用的始终;每 一…...

算法笔记day08
1.游游的水果大礼包 这道题很容易让人想到贪心,但是其实是一道枚举题,只需举一个反例,贪心无非就是哪个礼包价值大,就优先组成哪个礼包。 算法思路: 设可以组成x个a礼包,y个b礼包,求ax by的最…...
在Selenium中有哪些元素对象操作方法?( ̄﹃ ̄)
在Selenium中,driver.find_element() 方法用于定位页面上的单个元素。一旦你定位到了一个元素,你可以对这个元素执行多种操作。此外,driver.find_element() 只是定位元素的方法之一,它还有其他一些相关的方法和属性,但…...

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 操作系统开发,以简化和协调众多子项目的版本控制和协作过程。以下是对 Repo 的详细解释: 主要功能与特点 多仓库管理: Rep…...

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

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

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

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

【Linux】线程池详解及其基本架构与单例模式实现
目录 1.关于线程池的基本理论 1.1.线程池是什么? 1.2.线程池的应用场景: 2.线程池的基本架构 2.1.线程容器 2.2.任务队列 2.3.线程函数(HandlerTask) 2.4.线程唤醒机制 3.添加单例模式 3.1.单例模式是什么&…...
运输层知识点汇总3
目录 前言 二、为什么在TCP首部中有一个首部长度字段,而UDP的首部就没有这个字段? 三、一个TCP报文段的数据部分最多为多少字节?为什么?如果用户要传送的数据的字节长度超过TCP报文段中的序号字段可能编出的最大序号࿰…...
浔川社团官方联合会提前入驻
近期,我们浔川社团官方发现文章再次被不明网站转发。这一情况引起了我们的高度警觉和深刻反思。我们一直致力于为大家提供高质量、有价值的内容,用心创作每一篇文章,以展现我们社团的风采和理念。然而,这些不明网站未经授权的转发…...

比例数据可视化(Python实现板块层级图绘制)——Instacart Market Basket Analysis
【实验名称】 实验一:绘制板块层级图 【实验目的】 1. 掌握数据文件读取 2. 掌握数据处理的方法 3. 实现板块层级图的绘制 【数据介绍】Instacart Market Basket Analysis 1. 数据说明 数据共有300 0000orders, 20 0000users, …...

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

0softmax和背后的最大熵(极大似然法)
只要无穷阶矩都一样,那么两个分布一定一样。 整理思路:1、设定样本的概率模型与目标概率模型一致(两个模型特性函数一致)建立服从伯努利分布的变量(此处需要理解样本空间及变量的关系)对两个模型进行降维&a…...
【Linux】shell脚本忽略错误继续执行
在 shell 脚本中,可以使用 set -e 命令来设置脚本在遇到错误时退出执行。如果你希望脚本忽略错误并继续执行,可以在脚本开头添加 set e 命令来取消该设置。 举例1 #!/bin/bash# 取消 set -e 的设置 set e# 执行命令,并忽略错误 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启动台(Launchpad)多出来了:Google云端硬盘、YouTube、表格、幻灯片、Gmail、Google文档等应用。 问题原因 很明显,都是Google家的办公全家桶。这些应用并不是通过独立安装的…...
鸿蒙中用HarmonyOS SDK应用服务 HarmonyOS5开发一个医院查看报告小程序
一、开发环境准备 工具安装: 下载安装DevEco Studio 4.0(支持HarmonyOS 5)配置HarmonyOS SDK 5.0确保Node.js版本≥14 项目初始化: ohpm init harmony/hospital-report-app 二、核心功能模块实现 1. 报告列表…...
Spring AI 入门:Java 开发者的生成式 AI 实践之路
一、Spring AI 简介 在人工智能技术快速迭代的今天,Spring AI 作为 Spring 生态系统的新生力量,正在成为 Java 开发者拥抱生成式 AI 的最佳选择。该框架通过模块化设计实现了与主流 AI 服务(如 OpenAI、Anthropic)的无缝对接&…...
css3笔记 (1) 自用
outline: none 用于移除元素获得焦点时默认的轮廓线 broder:0 用于移除边框 font-size:0 用于设置字体不显示 list-style: none 消除<li> 标签默认样式 margin: xx auto 版心居中 width:100% 通栏 vertical-align 作用于行内元素 / 表格单元格ÿ…...
Go 语言并发编程基础:无缓冲与有缓冲通道
在上一章节中,我们了解了 Channel 的基本用法。本章将重点分析 Go 中通道的两种类型 —— 无缓冲通道与有缓冲通道,它们在并发编程中各具特点和应用场景。 一、通道的基本分类 类型定义形式特点无缓冲通道make(chan T)发送和接收都必须准备好࿰…...
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看板娘 参考文献: stevenjoezhang/live2d-widget: 把萌萌哒的看板娘抱回家 (ノ≧∇≦)ノ | Live2D widget for web platformEikanya/Live2d-model: Live2d model collectionzenghongtu/live2d-model-assets 前言 网站环境如下,文章也主…...