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

运用JavaSE知识实现图书管理系统

目录

  • 一.Main函数
  • 二.用户类
  • 三.普通用户类
  • 四.管理员类
  • 五.图书类
  • 六.书架类
  • 七.操作类
    • 1.操作接口
    • 2.增加操作
    • 3.删除操作
    • 4.查找操作
    • 5.展示操作
    • 6.借阅操作
    • 7.归还操作
    • 8.退出系统
  • 总结

这篇图书管理系统是对JavaSE知识总结复习的一个小作业,检测自己对知识的掌握程度。

一.Main函数

public class Main {public static User login(){System.out.println("输入你的姓名:");Scanner scanner = new Scanner(System.in);String name = scanner.nextLine();System.out.println("1.管理员 2.普通用户");System.out.println("输入你的身份");int choice = scanner.nextInt();if (choice == 1){return new Admin(name);}else{return new NormalUser(name);}}public static void main(String[] args) {BookList bookList  = new BookList();User user = login();while (true){int choice = user.menu();user.doOperation(choice,bookList);}}
}

二.用户类

public abstract class User {private String name;protected IOperation[] iOperations;public User(String name){this.name = name;IOperation[] iOperations;}public abstract int menu();public void doOperation(int choice,BookList bookList){IOperation iOperation = iOperations[choice];iOperation.work(bookList);}
}

三.普通用户类

public class NormalUser extends User{public NormalUser(String name) {super(name);this.iOperations =new IOperation[]{new ExitOperation(),new FindOperation(),new BorrowOperation(),new ReturnOperation()};}@Overridepublic int menu() {System.out.println("*******管理员菜单*********");System.out.println("*******1.查找图书*********");System.out.println("*******2.借阅图书*********");System.out.println("*******3.归还图书*********");System.out.println("***0.退出系统****");System.out.println("请输入你的操作:");Scanner scanner = new Scanner(System.in);int choice = scanner.nextInt();return choice;}
}

四.管理员类

public class Admin extends User{public Admin(String name) {super(name);this.iOperations =new IOperation[] {new ExitOperation(),new FindOperation(),new AddOperation(),new DeleOperation(),new ShouwOperation()};}@Overridepublic int menu() {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("请输入你的操作:");Scanner scanner = new Scanner(System.in);int choice = scanner.nextInt();return choice;}
}

五.图书类

public class Book{//书名 作者 价格 类型 是否借出private String name;private String author;private int price;private String type;private Boolean isBorrowed = false;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;}public String getType() {return type;}public void setType(String type) {this.type = type;}public Boolean getBorrowed() {return isBorrowed;}public void setBorrowed(Boolean borrowed) {isBorrowed = borrowed;}public Book(String name, String author, int price, String type) {this.name = name;this.author = author;this.price = price;this.type = type;}@Overridepublic String toString() {return "Book{" +"name='" + name + '\'' +", author='" + author + '\'' +", price=" + price +", type='" + type + '\'' +", isBorrowed=" + isBorrowed +'}';}
}

六.书架类

public class BookList {public Book[] books;public int usedSize;public BookList(){this.books = new Book[10];books[0] = new Book("三国演义","罗贯中",46,"小说");books[1] = new Book("水浒传","施耐庵",37,"小说");books[2] = new Book("红楼梦","曹雪芹",76,"小说");books[3] = new Book("西游记","吴承恩",88,"小说");usedSize = 4;}public Book getBook(int pos) {return books[pos];}public void setBook(Book book,int pos) {this.books[pos] = book;}public int getUsedSize() {return usedSize;}public void setUsedSize(int usedSize) {this.usedSize = usedSize;}
}

七.操作类

1.操作接口

public interface IOperation {void work(BookList bookList);Scanner scanner = new Scanner(System.in);
}

2.增加操作

public class AddOperation implements IOperation{@Overridepublic void work(BookList bookList) {System.out.println("请输入你要增加图书的书名");String name = scanner.nextLine();System.out.println("请输入你要添加书的作者");String author = scanner.nextLine();System.out.println("请输入你要添加书的价格");int price = scanner.nextInt();System.out.println("请输入你要添加书的类型");scanner.nextLine();String type = scanner.nextLine();int currentSize = bookList.getUsedSize();for (int i = 0; i < currentSize; i++) {if(bookList.getBook(i).getName().equals(name)){System.out.println("该书已经存在,无法添加!");return;}}//书不存在 进行添加操作Book book = new Book(name,author,price,type);bookList.setBook(book,currentSize);bookList.setUsedSize(currentSize+1);}
}

3.删除操作

public class DeleOperation implements IOperation{@Overridepublic void work(BookList bookList) {System.out.println("请输入你要删除书的书名:");String name = scanner.nextLine();int index = -1;int i =0;int currentSize = bookList.getUsedSize();for ( i = 0; i < currentSize; i++) {Book book = bookList.getBook(i);if (book.getName().equals(name)){index = i;break;}}if (i >= currentSize){System.out.println("要删除的书不存在!");return;}for (int j = index; j < currentSize-1; j++) {Book book = bookList.getBook(j+1);bookList.setBook(book,j);}bookList.setBook(null,currentSize);bookList.setUsedSize(currentSize-1);System.out.println("删除成功!!!");}
}

4.查找操作

public class FindOperation implements IOperation{@Overridepublic void work(BookList bookList) {System.out.println("请输入你要查找的书的书名:");String name = scanner.nextLine();int currentSize = bookList.getUsedSize();for (int i = 0; i < currentSize; i++) {Book book = bookList.getBook(i);if (book.getName().equals(name)){System.out.println(book);return;}}System.out.println("图书馆没有你要寻找的书!");}
}

5.展示操作

public class ShouwOperation implements IOperation{@Overridepublic void work(BookList bookList) {System.out.println("展示所有图书!");int currentSize = bookList.getUsedSize();for (int i = 0; i < currentSize; i++) {Book book = bookList.getBook(i);System.out.println(book);}}
}

6.借阅操作

public class BorrowOperation implements IOperation{@Overridepublic void work(BookList bookList) {System.out.println("图书馆的书如下:");int currentSzie = bookList.getUsedSize();for (int i = 0; i < currentSzie; i++) {Book book = bookList.getBook(i);System.out.println(book.getName());}System.out.println("请输入你要外借的图书的书名:");String name = scanner.nextLine();for (int i = 0; i < currentSzie; i++) {Book book = bookList.getBook(i);if(book.getName().equals(name)){if (book.getBorrowed()){System.out.println("该书已被借出,换本书吧!");return;}else {book.setBorrowed(true);System.out.println("借阅成功");System.out.println("该书的信息如下");System.out.println(book);return;}}}System.out.println("你想借阅的图书不存在!");}
}

7.归还操作

public class ReturnOperation implements IOperation{@Overridepublic void work(BookList bookList) {System.out.println("归还图书");System.out.println("请输入你要归还的图书的书名");String name = scanner.nextLine();int currentSize = bookList.getUsedSize();for (int i = 0; i < currentSize; i++) {Book book = bookList.getBook(i);if (book.getName().equals(name)){book.setBorrowed(false);System.out.println("归还成功!");return;}}System.out.println("不存在你要归还的图书!");}
}

8.退出系统

public class ExitOperation implements IOperation{@Overridepublic void work(BookList bookList) {System.out.println("退出系统!");System.exit(0);}
}

总结

以上就是图书管理系统的所有知识,有些地方还是需要思考去巧妙地设计使得文章更加简洁明了。冰冻三尺,非一日之寒。水滴石穿,非一日之功。坚持把每一个知识点搞清楚,并进行总结,形成属于自己的知识框架,会让你的学习更加轻松。

相关文章:

运用JavaSE知识实现图书管理系统

目录 一.Main函数二.用户类三.普通用户类四.管理员类五.图书类六.书架类七.操作类1.操作接口2.增加操作3.删除操作4.查找操作5.展示操作6.借阅操作7.归还操作8.退出系统 总结 这篇图书管理系统是对JavaSE知识总结复习的一个小作业&#xff0c;检测自己对知识的掌握程度。 一.Ma…...

微信小程序生成一个天气查询的小程序

微信小程序生成一个天气查询的小程序 基本的页面结构和逻辑 页面结构&#xff1a;包括一个输入框和一个查询按钮。 页面逻辑&#xff1a;在用户输入城市名称后&#xff0c;点击查询按钮&#xff0c;跳转到天气详情页面&#xff0c;并将城市名称作为参数传递。 主要代码 index…...

Seata源码——TCC模式解析02

初始化 在SpringBoot启动的时候通过自动注入机制将GlobalTransactionScanner注入进ioc而GlobalTransactionScanner继承AbstractAutoProxyCreatorAbstract 在postProcessAfterInitialization阶段由子类创建代理TccActionInterceptor GlobalTransactionScanner protected Obje…...

缓存-Redis

Springboot使用Redis 引入pom依赖&#xff1a; <dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-data-redis</artifactId> </dependency>在application.yml、application-dev.yml中配置Redis的访…...

PADS Layout安全间距检查报错

问题&#xff1a; 在Pads Layout完成layout后&#xff0c;进行工具-验证设计安全间距检查时&#xff0c;差分对BAK_FIXCLK_100M_P / BAK_FIXCLK_100M_N的安全间距检查报错&#xff0c;最小为3.94mil&#xff0c;但是应该大于等于5mil&#xff1b;如下两张图&#xff1a; 检查&…...

ebpf基础篇(二) ----- ebpf前世今生

bpf 要追述ebpf的历史,就不得不提bpf. bpf(Berkeley Packet Filter)从早(1992年)诞生于类Unix系统中,用于数据包分析. 它提供了数据链路层的接口,可以在数据链路层发送和接收数据.如果网卡支持混杂模式,所有的数据包都可以被接收,即使这些数据包的目的地址是其它主机. BPF最为…...

我的一天:追求专业成长与生活平衡

早晨的序幕&#xff1a;奋斗的开始 今天的一天始于清晨的6点47分。实现了昨天的早睡早起的蜕变计划。洗漱完成之后&#xff0c;7点17分出门&#xff0c;7点33分我抵达公司&#xff0c;为新的一天做好准备。7点52分&#xff0c;我开始我的学习之旅。正如我所体会的&#xff0c;“…...

【动态规划】斐波那契数列模型

欢迎来到Cefler的博客&#x1f601; &#x1f54c;博客主页&#xff1a;那个传说中的man的主页 &#x1f3e0;个人专栏&#xff1a;题目解析 &#x1f30e;推荐文章&#xff1a;题目大解析&#xff08;3&#xff09; 前言 算法原理 1.状态表示 是什么&#xff1f;dp表(一维数组…...

机器人运动学分析与动力学分析主要作用

机器人运动学分析和动力学分析是两个重要的概念&#xff0c;它们在研究和设计工业机器人时起着关键作用。 1. 机器人运动学分析&#xff1a; 机器人运动学是研究机器人运动的科学&#xff0c;它涉及机器人的位置、速度、加速度和轨迹等方面。机器人运动学分析主要包括正解和逆…...

【Java 基础】33 JDBC

文章目录 1. 数据库连接1&#xff09;加载驱动2&#xff09;建立连接 2. 常见操作1&#xff09;创建表2&#xff09;插入数据3&#xff09;查询数据4&#xff09;使用 PreparedStatement5&#xff09;事务管理 3. 注意事项总结 Java Database Connectivity&#xff08;JDBC&…...

Unity中Shader缩放矩阵

文章目录 前言一、直接相乘缩放1、在属性面板定义一个四维变量&#xff0c;用xyz分别控制在xyz轴上的缩放2、在常量缓存区申明该变量3、在顶点着色器对其进行相乘&#xff0c;来缩放变换4、我们来看看效果 二、使用矩阵乘法代替直接相乘缩放的原理1、我们按如下格式得到缩放矩阵…...

Nessus详细安装-windows (保姆级教程)

Nessus描述 Nessus 是一款广泛使用的网络漏洞扫描工具。它由 Tenable Network Security 公司开发&#xff0c;旨在帮助组织评估其计算机系统和网络的安全性。 Nessus 可以执行自动化的漏洞扫描&#xff0c;通过扫描目标系统、识别和评估可能存在的安全漏洞和弱点。它可以检测…...

Stream流的简单使用

stream流的三类方法 获取Stream流 ○ 创建一条流水线,并把数据放到流水线上准备进行操作中间方法 ○ 流水线上的操作 ○ 一次操作完毕之后,还可以继续进行其他操作终结方法 ○ 一个Stream流只能有一个终结方法 ○ 是流水线上的最后一个操作 其实Stream流非常简单&#xff0c;只…...

智能优化算法应用:基于蛇优化算法3D无线传感器网络(WSN)覆盖优化 - 附代码

智能优化算法应用&#xff1a;基于蛇优化算法3D无线传感器网络(WSN)覆盖优化 - 附代码 文章目录 智能优化算法应用&#xff1a;基于蛇优化算法3D无线传感器网络(WSN)覆盖优化 - 附代码1.无线传感网络节点模型2.覆盖数学模型及分析3.蛇优化算法4.实验参数设定5.算法结果6.参考文…...

vue和react diff的详解和不同

diff算法 简述&#xff1a;第一次对比真实dom和虚拟树之间的同层差别&#xff0c;后面为对比新旧虚拟dom树之间的同层差别。 虚拟dom 简述&#xff1a;js对象形容模拟真实dom 具体&#xff1a; 1.虚拟dom是存在内存中的js对象&#xff0c;利用内存的高效率运算。虚拟dom属…...

智能优化算法应用:基于鹈鹕算法3D无线传感器网络(WSN)覆盖优化 - 附代码

智能优化算法应用&#xff1a;基于鹈鹕算法3D无线传感器网络(WSN)覆盖优化 - 附代码 文章目录 智能优化算法应用&#xff1a;基于鹈鹕算法3D无线传感器网络(WSN)覆盖优化 - 附代码1.无线传感网络节点模型2.覆盖数学模型及分析3.鹈鹕算法4.实验参数设定5.算法结果6.参考文献7.MA…...

10:IIC通信

1&#xff1a;IIC通信 I2C总线&#xff08;Inter IC BUS&#xff09; 是由Philips公司开发的一种通用数据总线&#xff0c;应用广泛&#xff0c;下面是一些指标参数&#xff1a; 两根通信线&#xff1a;SCL&#xff08;Serial Clock&#xff0c;串行时钟线&#xff09;、SDA&a…...

互联网上门洗衣洗鞋小程序优势有哪些?

互联网洗鞋店小程序相较于传统洗鞋方式&#xff0c;具有以下优势&#xff1b; 1. 便捷性&#xff1a;用户只需通过手机即可随时随地下单并查询&#xff0c;省去了许多不必要的时间和精力。学生们无需走出宿舍或校园&#xff0c;就能轻松预约洗鞋并取件。 2. 精准定位&#xff1…...

Java中如何优雅地根治null值引起的Bug问题

1. Java对象为null会引发的问题 NullPointerException&#xff1a;当你尝试调用或访问一个null对象的属性或方法时&#xff0c;Java会抛出NullPointerException异常。例如&#xff0c;如果你有一个名为person的变量&#xff0c;它被设置为null&#xff0c;然后你尝试调用perso…...

C# WPF上位机开发(子窗口通知父窗口更新进度)

【 声明&#xff1a;版权所有&#xff0c;欢迎转载&#xff0c;请勿用于商业用途。 联系信箱&#xff1a;feixiaoxing 163.com】 这两天在编写代码的时候&#xff0c;正好遇到一个棘手的问题&#xff0c;解决之后感觉挺有意义的&#xff0c;所以先用blog记录一下&#xff0c;后…...

K8S认证|CKS题库+答案| 11. AppArmor

目录 11. AppArmor 免费获取并激活 CKA_v1.31_模拟系统 题目 开始操作&#xff1a; 1&#xff09;、切换集群 2&#xff09;、切换节点 3&#xff09;、切换到 apparmor 的目录 4&#xff09;、执行 apparmor 策略模块 5&#xff09;、修改 pod 文件 6&#xff09;、…...

SciencePlots——绘制论文中的图片

文章目录 安装一、风格二、1 资源 安装 # 安装最新版 pip install githttps://github.com/garrettj403/SciencePlots.git# 安装稳定版 pip install SciencePlots一、风格 简单好用的深度学习论文绘图专用工具包–Science Plot 二、 1 资源 论文绘图神器来了&#xff1a;一行…...

抖音增长新引擎:品融电商,一站式全案代运营领跑者

抖音增长新引擎&#xff1a;品融电商&#xff0c;一站式全案代运营领跑者 在抖音这个日活超7亿的流量汪洋中&#xff0c;品牌如何破浪前行&#xff1f;自建团队成本高、效果难控&#xff1b;碎片化运营又难成合力——这正是许多企业面临的增长困局。品融电商以「抖音全案代运营…...

五年级数学知识边界总结思考-下册

目录 一、背景二、过程1.观察物体小学五年级下册“观察物体”知识点详解&#xff1a;由来、作用与意义**一、知识点核心内容****二、知识点的由来&#xff1a;从生活实践到数学抽象****三、知识的作用&#xff1a;解决实际问题的工具****四、学习的意义&#xff1a;培养核心素养…...

1.3 VSCode安装与环境配置

进入网址Visual Studio Code - Code Editing. Redefined下载.deb文件&#xff0c;然后打开终端&#xff0c;进入下载文件夹&#xff0c;键入命令 sudo dpkg -i code_1.100.3-1748872405_amd64.deb 在终端键入命令code即启动vscode 需要安装插件列表 1.Chinese简化 2.ros …...

【ROS】Nav2源码之nav2_behavior_tree-行为树节点列表

1、行为树节点分类 在 Nav2(Navigation2)的行为树框架中,行为树节点插件按照功能分为 Action(动作节点)、Condition(条件节点)、Control(控制节点) 和 Decorator(装饰节点) 四类。 1.1 动作节点 Action 执行具体的机器人操作或任务,直接与硬件、传感器或外部系统…...

GitHub 趋势日报 (2025年06月08日)

&#x1f4ca; 由 TrendForge 系统生成 | &#x1f310; https://trendforge.devlive.org/ &#x1f310; 本日报中的项目描述已自动翻译为中文 &#x1f4c8; 今日获星趋势图 今日获星趋势图 884 cognee 566 dify 414 HumanSystemOptimization 414 omni-tools 321 note-gen …...

全面解析各类VPN技术:GRE、IPsec、L2TP、SSL与MPLS VPN对比

目录 引言 VPN技术概述 GRE VPN 3.1 GRE封装结构 3.2 GRE的应用场景 GRE over IPsec 4.1 GRE over IPsec封装结构 4.2 为什么使用GRE over IPsec&#xff1f; IPsec VPN 5.1 IPsec传输模式&#xff08;Transport Mode&#xff09; 5.2 IPsec隧道模式&#xff08;Tunne…...

是否存在路径(FIFOBB算法)

题目描述 一个具有 n 个顶点e条边的无向图&#xff0c;该图顶点的编号依次为0到n-1且不存在顶点与自身相连的边。请使用FIFOBB算法编写程序&#xff0c;确定是否存在从顶点 source到顶点 destination的路径。 输入 第一行两个整数&#xff0c;分别表示n 和 e 的值&#xff08;1…...

Java + Spring Boot + Mybatis 实现批量插入

在 Java 中使用 Spring Boot 和 MyBatis 实现批量插入可以通过以下步骤完成。这里提供两种常用方法&#xff1a;使用 MyBatis 的 <foreach> 标签和批处理模式&#xff08;ExecutorType.BATCH&#xff09;。 方法一&#xff1a;使用 XML 的 <foreach> 标签&#xff…...