当前位置: 首页 > 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;后…...

告别答辩PPT焦虑:百考通AI智能生成,高效搞定毕业答辩全流程

毕业季悄然来临&#xff0c;随着毕业论文定稿&#xff0c;答辩PPT成了不少同学面临的下一个挑战。不懂设计、不会梳理逻辑、找不到合适的学术模板……许多同学花费大量时间在排版调整、修改打磨上&#xff0c;不仅效率低下&#xff0c;还常常做出结构混乱、风格不统一的PPT&…...

三维重建实时映射技术在智慧水利中的核心应用

三维重建实时映射技术在智慧水利中的核心应用在国家大力推进数字孪生水利建设、实现水安全精准保障的背景下&#xff0c;智慧水利已从传统监测、调度向全域感知、智能预判、协同处置、一屏统管升级。智慧水利的核心目标&#xff0c;是实现对江河湖库、灌区、泵站、堤坝、闸站等…...

【仅剩217份】《Midjourney后印象派风格白皮书》V2.3——含17位艺术家专属LoRA适配建议、32组跨文化色彩映射表及实时风格强度校准工具(2024.06内部封测版)

更多请点击&#xff1a; https://intelliparadigm.com 第一章&#xff1a;后印象派风格的视觉基因与Midjourney语义解码 后印象派并非对自然的模仿&#xff0c;而是对色彩、结构与主观情绪的系统性重构——梵高旋转的星云、塞尚凝固的苹果、高更平面化的塔希提图腾&#xff0c…...

用Ruby实现RISC-V模拟器:从指令集架构到交互式教学工具

1. 项目概述&#xff1a;一个为Ruby语言量身打造的RISC-V模拟器如果你是一名Ruby开发者&#xff0c;或者对RISC-V这个新兴的指令集架构充满好奇&#xff0c;那么你很可能已经听说过RuriOSS/rurima这个名字。简单来说&#xff0c;这是一个用Ruby语言实现的RISC-V指令集模拟器。但…...

告别闪烁屏!瑞芯微RK3399开发板Debian系统烧写保姆级教程(含DriverAssistant v5.1.1 + AndroidTool v2.69)

RK3399开发板Debian系统烧写实战&#xff1a;从屏幕闪烁到完美显示的终极解决方案 当你在RK3399开发板上成功烧写Debian系统后&#xff0c;最期待的莫过于看到系统稳定运行的画面。然而&#xff0c;不少开发者却遭遇了屏幕闪烁的困扰——这个问题看似简单&#xff0c;背后却隐藏…...

多机驱动振动系统同步控制理论【附模型】

✨ 长期致力于振动机械、自同步、控制同步、GA-BP PID、定速比研究工作&#xff0c;擅长数据搜集与处理、建模仿真、程序编写、仿真设计。 ✅ 专业定制毕设、代码 ✅ 如需沟通交流&#xff0c;点击《获取方式》 &#xff08;1&#xff09;GA-BP神经网络PID控制器设计及其参数自…...

紧急更新!Midjourney刚推送的--stylize 1000级调优补丁,已实测提升立体主义结构清晰度达4.8倍(附对比数据集下载)

更多请点击&#xff1a; https://intelliparadigm.com 第一章&#xff1a;Midjourney立体主义风格的本质解构 立体主义并非简单地将物体“打碎再拼合”&#xff0c;而是一种对多维时空感知的视觉转译——Midjourney 通过其隐式扩散先验&#xff0c;以概率化方式重构了布拉克与…...

低成本接入GPT-4级能力:从开源模型自建到安全API实践

1. 项目概述与核心价值最近在GitHub上看到一个挺有意思的项目&#xff0c;叫a37836323/-chatgpt4.0-api-key。光看这个标题&#xff0c;很多朋友可能会立刻联想到“免费API密钥”、“共享资源”之类的。确实&#xff0c;在AI工具日益普及的今天&#xff0c;如何高效、低成本地使…...

别再手动折腾了!用Docker Compose 5分钟搞定ChirpStack LoRaWAN服务器部署(附配置文件详解)

5分钟极速部署ChirpStack LoRaWAN服务器的Docker Compose实战指南 1. 为什么选择Docker Compose部署ChirpStack&#xff1f; 对于物联网开发者而言&#xff0c;时间就是最宝贵的资源。传统的手动部署方式需要逐个安装和配置PostgreSQL、Redis、MQTT broker以及ChirpStack各个组…...

RK3288嵌入式开发实战:硬件架构、软件定制与典型应用场景解析

1. 项目概述&#xff1a;为什么RK3288至今仍是嵌入式开发的“硬通货”&#xff1f; 在嵌入式开发这个行当里&#xff0c;选型是个技术活&#xff0c;更是个经验活。你既要考虑当下的性能需求&#xff0c;又要掂量未来的扩展可能&#xff0c;还得平衡成本、功耗和开发周期。从业…...