运用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知识总结复习的一个小作业,检测自己对知识的掌握程度。 一.Ma…...
微信小程序生成一个天气查询的小程序
微信小程序生成一个天气查询的小程序 基本的页面结构和逻辑 页面结构:包括一个输入框和一个查询按钮。 页面逻辑:在用户输入城市名称后,点击查询按钮,跳转到天气详情页面,并将城市名称作为参数传递。 主要代码 index…...
Seata源码——TCC模式解析02
初始化 在SpringBoot启动的时候通过自动注入机制将GlobalTransactionScanner注入进ioc而GlobalTransactionScanner继承AbstractAutoProxyCreatorAbstract 在postProcessAfterInitialization阶段由子类创建代理TccActionInterceptor GlobalTransactionScanner protected Obje…...
缓存-Redis
Springboot使用Redis 引入pom依赖: <dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-data-redis</artifactId> </dependency>在application.yml、application-dev.yml中配置Redis的访…...
PADS Layout安全间距检查报错
问题: 在Pads Layout完成layout后,进行工具-验证设计安全间距检查时,差分对BAK_FIXCLK_100M_P / BAK_FIXCLK_100M_N的安全间距检查报错,最小为3.94mil,但是应该大于等于5mil;如下两张图: 检查&…...
ebpf基础篇(二) ----- ebpf前世今生
bpf 要追述ebpf的历史,就不得不提bpf. bpf(Berkeley Packet Filter)从早(1992年)诞生于类Unix系统中,用于数据包分析. 它提供了数据链路层的接口,可以在数据链路层发送和接收数据.如果网卡支持混杂模式,所有的数据包都可以被接收,即使这些数据包的目的地址是其它主机. BPF最为…...
我的一天:追求专业成长与生活平衡
早晨的序幕:奋斗的开始 今天的一天始于清晨的6点47分。实现了昨天的早睡早起的蜕变计划。洗漱完成之后,7点17分出门,7点33分我抵达公司,为新的一天做好准备。7点52分,我开始我的学习之旅。正如我所体会的,“…...
【动态规划】斐波那契数列模型
欢迎来到Cefler的博客😁 🕌博客主页:那个传说中的man的主页 🏠个人专栏:题目解析 🌎推荐文章:题目大解析(3) 前言 算法原理 1.状态表示 是什么?dp表(一维数组…...
机器人运动学分析与动力学分析主要作用
机器人运动学分析和动力学分析是两个重要的概念,它们在研究和设计工业机器人时起着关键作用。 1. 机器人运动学分析: 机器人运动学是研究机器人运动的科学,它涉及机器人的位置、速度、加速度和轨迹等方面。机器人运动学分析主要包括正解和逆…...
【Java 基础】33 JDBC
文章目录 1. 数据库连接1)加载驱动2)建立连接 2. 常见操作1)创建表2)插入数据3)查询数据4)使用 PreparedStatement5)事务管理 3. 注意事项总结 Java Database Connectivity(JDBC&…...
Unity中Shader缩放矩阵
文章目录 前言一、直接相乘缩放1、在属性面板定义一个四维变量,用xyz分别控制在xyz轴上的缩放2、在常量缓存区申明该变量3、在顶点着色器对其进行相乘,来缩放变换4、我们来看看效果 二、使用矩阵乘法代替直接相乘缩放的原理1、我们按如下格式得到缩放矩阵…...
Nessus详细安装-windows (保姆级教程)
Nessus描述 Nessus 是一款广泛使用的网络漏洞扫描工具。它由 Tenable Network Security 公司开发,旨在帮助组织评估其计算机系统和网络的安全性。 Nessus 可以执行自动化的漏洞扫描,通过扫描目标系统、识别和评估可能存在的安全漏洞和弱点。它可以检测…...
Stream流的简单使用
stream流的三类方法 获取Stream流 ○ 创建一条流水线,并把数据放到流水线上准备进行操作中间方法 ○ 流水线上的操作 ○ 一次操作完毕之后,还可以继续进行其他操作终结方法 ○ 一个Stream流只能有一个终结方法 ○ 是流水线上的最后一个操作 其实Stream流非常简单,只…...
智能优化算法应用:基于蛇优化算法3D无线传感器网络(WSN)覆盖优化 - 附代码
智能优化算法应用:基于蛇优化算法3D无线传感器网络(WSN)覆盖优化 - 附代码 文章目录 智能优化算法应用:基于蛇优化算法3D无线传感器网络(WSN)覆盖优化 - 附代码1.无线传感网络节点模型2.覆盖数学模型及分析3.蛇优化算法4.实验参数设定5.算法结果6.参考文…...
vue和react diff的详解和不同
diff算法 简述:第一次对比真实dom和虚拟树之间的同层差别,后面为对比新旧虚拟dom树之间的同层差别。 虚拟dom 简述:js对象形容模拟真实dom 具体: 1.虚拟dom是存在内存中的js对象,利用内存的高效率运算。虚拟dom属…...
智能优化算法应用:基于鹈鹕算法3D无线传感器网络(WSN)覆盖优化 - 附代码
智能优化算法应用:基于鹈鹕算法3D无线传感器网络(WSN)覆盖优化 - 附代码 文章目录 智能优化算法应用:基于鹈鹕算法3D无线传感器网络(WSN)覆盖优化 - 附代码1.无线传感网络节点模型2.覆盖数学模型及分析3.鹈鹕算法4.实验参数设定5.算法结果6.参考文献7.MA…...
10:IIC通信
1:IIC通信 I2C总线(Inter IC BUS) 是由Philips公司开发的一种通用数据总线,应用广泛,下面是一些指标参数: 两根通信线:SCL(Serial Clock,串行时钟线)、SDA&a…...
互联网上门洗衣洗鞋小程序优势有哪些?
互联网洗鞋店小程序相较于传统洗鞋方式,具有以下优势; 1. 便捷性:用户只需通过手机即可随时随地下单并查询,省去了许多不必要的时间和精力。学生们无需走出宿舍或校园,就能轻松预约洗鞋并取件。 2. 精准定位࿱…...
Java中如何优雅地根治null值引起的Bug问题
1. Java对象为null会引发的问题 NullPointerException:当你尝试调用或访问一个null对象的属性或方法时,Java会抛出NullPointerException异常。例如,如果你有一个名为person的变量,它被设置为null,然后你尝试调用perso…...
C# WPF上位机开发(子窗口通知父窗口更新进度)
【 声明:版权所有,欢迎转载,请勿用于商业用途。 联系信箱:feixiaoxing 163.com】 这两天在编写代码的时候,正好遇到一个棘手的问题,解决之后感觉挺有意义的,所以先用blog记录一下,后…...
前端开发面试题总结-JavaScript篇(一)
文章目录 JavaScript高频问答一、作用域与闭包1.什么是闭包(Closure)?闭包有什么应用场景和潜在问题?2.解释 JavaScript 的作用域链(Scope Chain) 二、原型与继承3.原型链是什么?如何实现继承&a…...
Mac下Android Studio扫描根目录卡死问题记录
环境信息 操作系统: macOS 15.5 (Apple M2芯片)Android Studio版本: Meerkat Feature Drop | 2024.3.2 Patch 1 (Build #AI-243.26053.27.2432.13536105, 2025年5月22日构建) 问题现象 在项目开发过程中,提示一个依赖外部头文件的cpp源文件需要同步,点…...
中医有效性探讨
文章目录 西医是如何发展到以生物化学为药理基础的现代医学?传统医学奠基期(远古 - 17 世纪)近代医学转型期(17 世纪 - 19 世纪末)现代医学成熟期(20世纪至今) 中医的源远流长和一脉相承远古至…...
QT3D学习笔记——圆台、圆锥
类名作用Qt3DWindow3D渲染窗口容器QEntity场景中的实体(对象或容器)QCamera控制观察视角QPointLight点光源QConeMesh圆锥几何网格QTransform控制实体的位置/旋转/缩放QPhongMaterialPhong光照材质(定义颜色、反光等)QFirstPersonC…...
深度学习水论文:mamba+图像增强
🧀当前视觉领域对高效长序列建模需求激增,对Mamba图像增强这方向的研究自然也逐渐火热。原因在于其高效长程建模,以及动态计算优势,在图像质量提升和细节恢复方面有难以替代的作用。 🧀因此短时间内,就有不…...
CRMEB 中 PHP 短信扩展开发:涵盖一号通、阿里云、腾讯云、创蓝
目前已有一号通短信、阿里云短信、腾讯云短信扩展 扩展入口文件 文件目录 crmeb\services\sms\Sms.php 默认驱动类型为:一号通 namespace crmeb\services\sms;use crmeb\basic\BaseManager; use crmeb\services\AccessTokenServeService; use crmeb\services\sms\…...
Web中间件--tomcat学习
Web中间件–tomcat Java虚拟机详解 什么是JAVA虚拟机 Java虚拟机是一个抽象的计算机,它可以执行Java字节码。Java虚拟机是Java平台的一部分,Java平台由Java语言、Java API和Java虚拟机组成。Java虚拟机的主要作用是将Java字节码转换为机器代码&#x…...
SpringAI实战:ChatModel智能对话全解
一、引言:Spring AI 与 Chat Model 的核心价值 🚀 在 Java 生态中集成大模型能力,Spring AI 提供了高效的解决方案 🤖。其中 Chat Model 作为核心交互组件,通过标准化接口简化了与大语言模型(LLM࿰…...
土建施工员考试:建筑施工技术重点知识有哪些?
《管理实务》是土建施工员考试中侧重实操应用与管理能力的科目,核心考查施工组织、质量安全、进度成本等现场管理要点。以下是结合考试大纲与高频考点整理的重点内容,附学习方向和应试技巧: 一、施工组织与进度管理 核心目标: 规…...
高端性能封装正在突破性能壁垒,其芯片集成技术助力人工智能革命。
2024 年,高端封装市场规模为 80 亿美元,预计到 2030 年将超过 280 亿美元,2024-2030 年复合年增长率为 23%。 细分到各个终端市场,最大的高端性能封装市场是“电信和基础设施”,2024 年该市场创造了超过 67% 的收入。…...
