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

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

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

相关文章

Redis 集群 问题

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

MySQL 安装及用户管理

MySQL 安装及用户管理 MySQL 是一款广泛使用的开源关系数据库管理系统&#xff0c;适用于各种应用程序和平台。本文将提供在不同操作系统&#xff08;Windows、macOS 和 Linux&#xff09;上安装 MySQL 的详细步骤&#xff0c;并介绍如何创建 MySQL 用户及设置密码。 1. Wind…

通过Docker Compose构建自己的Java项目

通过Docker Compose构建自己的Java项目 前置条件 安装了Docker,未安装的请移步:CentOS7 / CentOS8 安装 Docker-ce安装了Docker-Compose,未安装的请移步:在CentOS7、CentOS8系统下安装Docker Compose1. 配置阿里云镜像仓库 为了提高Docker镜像的下载速度,我们可以配置阿…

【Git 】Windows 系统下 Git 文件名大小写不敏感

背景 在 Windows 系统上&#xff0c;Git 对文件名大小写的不敏感性问题确实存在。由于 Windows 文件系统&#xff08;如 NTFS &#xff09;在默认情况下不区分文件名大小写所导致的。 原因分析 文件系统差异 Windows文件系统&#xff08;如 NTFS&#xff09;默认不区分文件名…

代码随想录算法训练营第46期Day42

leetcode.518.零钱兑换 class Solution { public: //求装满背包有几种方法&#xff0c;公式都是&#xff1a;dp[j] dp[j - nums[i]]; // 如果求组合数就是外层for循环遍历物品&#xff0c;内层for遍历背包。 // 如果求排列数就是外层for遍历背包&#xff0c;内层for循环遍历物…

Detecting Holes in Point Set Surfaces 论文阅读

下载链接 Detecting Holes in Point Set Surfaces 摘要 3D 数据采集过程&#xff08;例如激光范围扫描&#xff09;产生的重要物体模型通常包含由于遮挡、反射或透明度而产生的孔洞。本文的目标就是在点集表面上检测存在的孔洞。对于每个点&#xff0c;将多个标准组合成一个综…

【机器学习】股票数据爬取与展示分析

数据爬取 一、爬取原理二、代码实践2.1 股票列表获取2.1.1 确定待爬取网页2.1.2 向网页发送请求获取页面响应2.1.3 文本转换成JSON2.1.4 将数据保存到csv文件中2.2 股票数据获取 三、结果分析 一、爬取原理 本文中主要使用的就是Python的request库&#xff0c;这个库基于HTTP请…

GPT打数模——电商品类货量预测及品类分仓规划

背景 电商企业在各区域的商品存储主要由多个仓库组成的仓群承担。其中存储的商品主要按照属性&#xff08;品类、件型等&#xff09;进行划分和打标&#xff0c;便于进行库存管理。图 1 是一个简化的示意图&#xff0c;商品品类各异&#xff0c;件数众多&#xff0c;必须将这些…

Task :prepareKotlinBuildScriptModel UP-TO-DATE,编译卡在这里不动或报错

这里写自定义目录标题 原因方案其他思路 原因 一般来说&#xff0c;当编译到这个task之后&#xff0c;后续是要进行一些资源的下载的&#xff0c;如果你卡在这边不动的话&#xff0c;很有可能就是你的IDE目前没有办法进行下载。 方案 开关一下IDE内部的代理&#xff0c;或者…

Jetpack架构组件_LiveData组件

1.LiveData初识 LiveData:ViewModel管理要展示的数据&#xff08;VM层类似于原MVP中的P层&#xff09;&#xff0c;处理业务逻辑&#xff0c;比如调用服务器的登陆接口业务。通过LiveData观察者模式&#xff0c;只要数据的值发生了改变&#xff0c;就会自动通知VIEW层&#xf…

C#里使用最高性的网络通讯例子

由于接收网络数据会不完整的包, 并且产生各种问题,导致大家都是使用最低效的内存保存数据,比如List<byte>这样的结构。 具体内容可以参考下面的大牛的文章: System.IO.Pipelines: High performance IO in .NET - .NET Blog (https://devblogs.microsoft.com/dot…

【Spring】详解SpringMVC,一篇文章带你快速入门

目录 一、初始MVC 二、SpringMVC 三、Spring MVC的运用 ⭕RequestMapping ⭕传递参数 1、传递单个参数 2、传递多个参数 3、参数重命名 4、传递数组与集合 5、获取路径参数 6、传递JSON数据 7、上传文件 一、初始MVC MVC&#xff08;Model-View-Controller&#…

在不能联网的电脑上安装库(PyEMD为例)

1、查看PyEMD需要什么依赖 需要numpy、pathos、scipy、tqdm依赖&#xff0c;我电脑上有了numpy, scipy&#xff0c;以另外两个为例 2、查看依赖的依赖 查看依赖是否还要依赖 可以看到pathos还要这四个依赖&#xff0c;以此类推&#xff0c;看还要哪些依赖&#xff0c;直至req…

2024.9.27华为笔试题解

第一题绩效互评人员分配 二分图判断模板,可以去看其他博客学习一下 #include <bits/stdc++.h> using namespace std;vector<int> GoodRelationships[105]; int color[105]; // 记录每个节点的颜色,0表示未染色,1和2表示不同的组 bool is_bipartite = true; …

【C】用c写贪吃蛇

1.输入正确的账号密码及其用户名&#xff0c;登录成功进入贪吃蛇游戏界面&#xff0c; 2.随机生成蛇头★、食物▲的位置(x,y)&#xff0c;并使用□打印地图 3.使用w s a d按键&#xff0c;完成蛇头的上下左右移动 4.蛇头碰撞到食物后&#xff0c;吃下食物变成蛇身的一部分●…

Mac 使用脚本批量导入 Apple 歌曲

最近呢&#xff0c;买了一个 iPad&#xff0c;虽然家里笔记本台式都有&#xff0c;显示器都是 2个&#xff0c;比较方便看代码&#xff08;边打游戏边追剧&#xff09;。 但是在床上拿笔记本始终还是不方便&#xff0c;手机在家看还是小了点&#xff0c;自从有 iPad 之后&…

【Java】java 集合框架(详解)

&#x1f4c3;个人主页&#xff1a;island1314 ⛺️ 欢迎关注&#xff1a;&#x1f44d;点赞 &#x1f442;&#x1f3fd;留言 &#x1f60d;收藏 &#x1f49e; &#x1f49e; &#x1f49e; 1. 概述 &#x1f680; &#x1f525; Java集合框架 提供了一系列用于存储和操作…

实现uniapp天地图边界范围覆盖

在uniapp中&#xff0c;难免会遇到使用地图展示的功能&#xff0c;但是百度谷歌这些收费的显然对于大部分开源节流的开发者是不愿意接受的&#xff0c;所以天地图则是最佳选择。 此篇文章&#xff0c;详细的实现地图展示功能&#xff0c;并且可以自定义容器宽高&#xff0c;还可…

java项目之电影评论网站(springboot)

风定落花生&#xff0c;歌声逐流水&#xff0c;大家好我是风歌&#xff0c;混迹在java圈的辛苦码农。今天要和大家聊的是一款基于springboot的电影评论网站。项目源码以及部署相关请联系风歌&#xff0c;文末附上联系信息 。 项目简介&#xff1a; 电影评论网站的主要使用者管…

UE5 源码学习 初始化

跟着 https://www.cnblogs.com/timlly/p/13877623.html 学习 入口函数 UnrealEngine\Engine\Source\Runtime\Launch\Private\Windows\LaunchWindows.cpp WinMain 入口 int32 WINAPI WinMain(_In_ HINSTANCE hInInstance, _In_opt_ HINSTANCE hPrevInstance, _In_ char* p…