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…...
6,000 个网站上的假 WordPress 插件提示用户安装恶意软件
黑客使用窃取的凭证感染 WordPress 网站,并向其发送虚假插件,通过虚假的浏览器更新提示向最终用户发送恶意软件和信息窃取程序。 该恶意活动基于ClickFix假浏览器更新恶意软件的新变种,自 2024 年 6 月以来已使用假 WordPress 插件感染了超过…...
最新Compose环境版本
1.gradle gradle 8.10.2 插件版本 8.7.1 Android Studio Ladybug | 2024.2.1 Patch 1 2.model 下 的 build.gradle.kts plugins {alias(libs.plugins.android.application)alias(libs.plugins.kotlin.android)alias(libs.plugins.kotlin.compose)id("kotlin-kapt&qu…...
流媒体协议.之(RTP,RTCP,RTSP,RTMP,HTTP)(一)
闲着没事做,记录一下开发项目用过的协议,项目中,大多是是实时显示播放的,通过私有协议,传输到上位机,实时播放,延时小于200ms,仿照这些协议,定义的数据格式。如果用这些协…...
【智能大数据分析 | 实验四】Spark实验:Spark Streaming
【作者主页】Francek Chen 【专栏介绍】 ⌈ ⌈ ⌈智能大数据分析 ⌋ ⌋ ⌋ 智能大数据分析是指利用先进的技术和算法对大规模数据进行深入分析和挖掘,以提取有价值的信息和洞察。它结合了大数据技术、人工智能(AI)、机器学习(ML&a…...
es实现自动补全
目录 自动补全 拼音分词器 安装拼音分词器 第一步:下载zip包,并解压缩 第二步:去docker找到es-plugins数据卷挂载的位置,并进入这个目录 第三步:把拼音分词器的安装包拖到这个目录下 第四步:重启es 第…...
【日志】Unity3D模型导入基本问题以及浅谈游戏框架
2024.10.22 真正的谦逊从来不是人与人面对时的谦卑,而是当你回头看那个曾经的自己时,依旧保持肯定与欣赏。 【力扣刷题】 暂无 【数据结构】 暂无 【Unity】 导入外部模型资源报错问题 在导入外部资源包的时候一般都会报错,不是这个资源模…...
1.8K Star,简洁易用 Web 端创意画板
Hi,骚年,我是大 G,公众号「GitHub 指北」会推荐 GitHub 上有趣有用的项目,一分钟 get 一个优秀的开源项目,挖掘开源的价值,欢迎关注。 在数字创作的时代,找到一款功能强大且易于使用的绘图工具…...
WPF中的<Style.Triggers>
Triggers介绍 在XAML中,Triggers是Style元素的一部分,用于定义在特定条件触发时应用的样式更改。这些触发器可以响应各种事件和属性值的变化,例如控件的状态变化(如鼠标悬停、焦点状态)、数据绑定值的变化等。 以下是…...
pod相关面试题总结(持续更新)
1:当一个Pod有多个容器时,如果连接到指定的容器? #查看当前空间下的pod [rootmaster210 pods]# kubectl get pods NAME READY STATUS RESTARTS AGE linux85-nginx-tomcat 2/2 Running 0 63s [rootmaster210 …...
Matlab学习03-符号的替换及运算(接上一篇)
在上一篇的学习中,我知道了符号变量的声明👇 Matlab学习02-matlab中的数据显示格式及符号变量-CSDN博客 接下来开始学习符号运算相关的内容,并学习最为核心的matlab程序设计。之前的学习都是为了程 序设计做铺垫,程序设计又是为了…...
花的网站建设规划书/百度推广多少钱一天
作者部门:数字地球重点实验室近日,中科院空天信息研究院数字地球重点实验室王超研究员团队首次公开了合成孔径雷达(SAR)图像船舶检测数据集。该数据集来自于多源、多模式SAR图像。基于此数据集,该团队实现了复杂背景下的商船检测与分类一体化…...
手机微信一体网站建设/北京seo如何排名
为什么80%的码农都做不了架构师?>>> 阻塞队列:只是队列的拓展,传统队列当满的时候会抛出异常,而阻塞队列会一直等待,不会报错,当然,里面包含的方法如下: 抛出异常特殊值…...
asp制作网站教程/推广普通话作文
文章目录前言1. 题目2. 题目分析3. 四个python内置函数3.1 lower()方法3.2 ord()方法3.3 bin()方法3.4 count()方法4. 代码前言 再一次感受到了python的强大,这个题这么复杂的操作,python只用了4个函数,12行就搞定了。这次总结一下这4个函数…...
个人网页网站建设/网络营销做得比较成功的案例
1. 场景大家如果平常遇到不认识的英文,相信大部分的人都会复制内容后,使用翻译软件,或者拷贝到网站上去执行翻译。当然,对于 IDE、浏览器可以装一些插件来翻译,有道也有划词翻译。但是,经常会有一些解析对话…...
课程资源网站开发解决方案/优化二十条
一、概述 相信有很多人经常会问同样的一个问题:当 MySQL 的总记录数超过了100万后,会出现性能的大幅度下降吗?答案是肯定的,但是性能下降>的比率不一而同,要看系统的架构、应用程序、还有>包括索引、服务器硬件…...
北镇网站建设/网络营销理论基础
1. 数学概念的提出 首先使用“函数”一词的是莱布尼兹(Leibnitz,1646年7月1日-1716年11月14日)自 17 世纪起近代数学产生以来,函数的概念一直处于数学思想的真正核心位置。2. 数学流派 彼得堡学派: 彼得堡&…...