[JAVASE] 类和对象综合应用 -- 图书管理系统

news2024/9/20 22:21:57

目录

零. 概览

一. 抽象出图书管理系统所涉及的对象

        1.1 Book

        1.2 User 

        1.3 Operation 

二. 实现 User 包中的对象

        2.1 User父类

        2.2 NormalUser 对象 

        2.3 AdminUser 对象 

        2.4 小总结(1) 

三. 实现Book包中的对象

        3.1 Book 对象 

        3.2 BookList 对象 

四. 实现 Operation 包中的对象 

        4.1 IOperation 接口 

        4.2 操作类 

        4.3 接口 和 抽象类的比较 

五. 整合操作 

         5.1 明确 进行 操作的用户

        5.2 明确 对 bookList 进行的操作

六. 总结


零. 概览

最终要实现的就是如上图所示的效果, 不同级别的用户 对应 着不同的操作,  把每一本书都存储在一个容器中, 最终对这个容器进行增删查改... 操作.

一. 抽象出图书管理系统所涉及的对象

        1.1 Book

Book包 中 包含:

a. Book 对象, 这是每一本书

b. BookList 对象, 最终肯定要对图书进行操作, 那么我们就需要 一个 "容器" 把每一本书(Book)存储起来, 这时, 就抽象出 书架 把书存储起来.

Book 包:

        1.2 User 

User包 中 包含:

a. NormalUser 对象, 普通用户, 进行一些 借阅, 查找 ... 的操作 并不对 书架进行操作(即不进行书的增删改).

b. AdminUser 对象, 管理员用户, 进行 书的增删改 ... 的操作, 本质上对 书架进行操作.

c. User 对象(父类), 把NormalUser 和 AdminUser 的共同属性抽取出来, 存放到 父类当中, 子类只需要继承User就好, 实现了代码的复用

User 包:

        1.3 Operation 

Operation包 中 包含:

a. AddOperation 增加图书

b. DelOperation 删除图书

c. ShowOpreation 展示图书

d.  FindOperation 查找图书

e. ExitOperation 退出系统

f. BorrowOperation 借阅图书

g. ReturnOperation 归还图书

h. IOperation 操作接口(包含公有的方法, 实现多态)

Operation 包:


二. 实现 User 包中的对象

        2.1 User父类

name: 抽取出 不同级别用户的共性.

menu: 打印出 菜单, 设置成 抽象方法, 没有具体的实现. 

这里有个小问题, menu的返回值为什么要被设置成为 int , 这是因为 这个菜单中的 功能被用户进行了选择, 最终要返回 一个 序号, 并根据这个序号来调用不同的 操作方法. 

        2.2 NormalUser 对象 

menu方法: 在NormalUser 子类中 重写了父类中的 menu 方法, 并对应着NormalUser对象 特有的功能.

        2.3 AdminUser 对象 

menu 方法: 在 AdminUser子类中重写了 menu方法, 并对应着 AdminUser 对象特有的功能. 

        2.4 小总结(1) 

在不同的子类中 重写 的menu类各不相同, 这体现了 多态(不同的对象进行同种操作时 所产生的状态各不相同.)


三. 实现Book包中的对象

        3.1 Book 对象 

 

Book 对象: Book类中定义了一本书的基本属性, 以及 这些属性 的 get 和 set 方法.(因为他们被 private 修饰, 是私有的).

        3.2 BookList 对象 

books: 实现了 组合, 创建了 books 书架, 用来 存储每一本书.

usedSize: 使用了 多少 书架的空间.

构造方法: 在构造方法中初始化了 userSize成员属性, 并初始化了书架, 最开始设置了三本书.

get and set 方法: 注意 这里的 getBook 和 setBook 是得到 pos 位置的书, 和 在 usedSize 位置 新设置一本书, 本质上还是对 书架进行操作.


四. 实现 Operation 包中的对象 

在Operation 包中实现的都是一些 操作方法,  我们的重心不在 这里,  关于具体实现, 大家可以 去我的 码云 上 查看, 链接如下:Homework_JAVASE: 这是JAVASE学习阶段的课后作业! - Gitee.comicon-default.png?t=N7T8https://gitee.com/nmbg11/bit_after_word_JAVASE/tree/master/j-20240523_JAVASE/src/Operation

        4.1 IOperation 接口 

 

注意接口中的方法默认被 public abstract 修饰, 是抽象方法, 在实现方法中必须被重写.

        4.2 操作类 

 

其他所有的操作类, 都是类似于 这样. 

在 他们之中实现的都是各自的操作方法.

        4.3 接口 和 抽象类的比较 

这里 为什么 要将 IOperation设置成为接口, 而不把他设置成 抽象类 呢?

答: 在 这里 把 IOperation设置成为 接口 和 设置成 抽象类 都可以, 因为 这里的 实现类 都只需要 重写 一个 work 方法, 没有 涉及到 多实现.

一定要注意 接口和抽象类的区别, 接口 可以多实现, 而 在 java中抽象类(不只是抽象类, 所有的类) 不能够多继承. 


五. 整合操作 

接下来, 我们把 以上的多个对象 整合起来, 让他们 共同 实现图书管理系统.

         5.1 明确 进行 操作的用户

 

根据 用户输入的 id 来返回 id 对应的对象. 最终使用 父类 user 来接受, 发生了 向上转型.

        5.2 明确 对 bookList 进行的操作

 

不同 用户所能够进行的操作 不同.

 根据 choice 来 调用指定的 work.


六. 总结

a. 文章主要 讨论的是 业务逻辑的实现, 不考虑一些 细节.

b. 首先 抽象出来 图书管理系统 中的对象.

c. 针对 各个对象, 实现他们各自的功能.

d. 最后 把 抽象出来的对象 进行 整合, 共同来实现图书管理系统.

图书管理系统的源码 在Gitee 中, 链接如下:

j-20240523_JAVASE/src · 伍炫昱/Homework_JAVASE - 码云 - 开源中国 (gitee.com)icon-default.png?t=N7T8https://gitee.com/nmbg11/bit_after_word_JAVASE/tree/master/j-20240523_JAVASE/src

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

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

相关文章

大数据工具之HIVE-参数调优,调度乱码(二)

一、调度乱码 在利用HUE工具,搭建WORKFLOW流程的过程中,如果直接执行hivesql数据正常,不会出现乱码现象,如果利用WORKFLOW搭建的流程,进行数据的拉取,会出现数据中文乱码现象,这些乱码主要是由于select 中的硬编码中文导致出现的现象 具体现象如下: select case when …

【WEB前端2024】开源智体世界:乔布斯3D纪念馆-第26节-内嵌blender展厅

【WEB前端2024】开源智体世界:乔布斯3D纪念馆-第26节-内嵌blender展厅 使用dtns.network德塔世界(开源的智体世界引擎),策划和设计《乔布斯超大型的开源3D纪念馆》的系列教程。dtns.network是一款主要由JavaScript编写的智体世界…

人工智能万卡 GPU 集群的硬件和网络架构

万卡 GPU 集群互联:硬件配置和网络设计 一、背景 自从 OpenAI 推出 ChatGPT 以来,LLM 迅速成为焦点关注的对象,并取得快速发展。众多企业纷纷投入 LLM 预训练,希望跟上这一波浪潮。然而,要训练一个 100B 规模的 LLM&a…

OpenWrt U盘安装使用 详细教程 x86/64平台 软路由实测 系列一

1 官方稳定 版:OpenWrt 23.05 OpenWrt Downloads #根据实际情况选择 PC支持uefi,选择版本:https://downloads.openwrt.org/releases/23.05.3/targets/x86/64/openwrt-23.05.3-x86-64-generic-ext4-combined-efi.img.gz 2 rufus 制作U盘启动 3 制作好的U盘,接入主…

经典链表题-链表回文结构

🎉🎉🎉欢迎莅临我的博客空间,我是池央,一个对C和数据结构怀有无限热忱的探索者。🙌 🌸🌸🌸这里是我分享C/C编程、数据结构应用的乐园✨ 🎈🎈&…

传输层——UDP

在学习计算机网络的过程中,我们知道OSI七层协议模型,但是在实际开发应 用中我们发现OSI七层协议模型并不适合实施,因为OSI上三层通常都是由开 发人员统一完成的,这三层之间在实现过程中没有一个明确的界限,所以我 们更…

Windows平台C#版RTSP转RTMP直播推送定制版

技术背景 前几年我们发布了C版的多路RTMP/RTSP转RTMP转发官方定制版。在秉承低延迟、灵活稳定、低资源占用的前提下,客户无需关注开发细节,只需图形化配置转发等各类参数,实现产品快速上线目的。 如监控类摄像机、NVR等,通过厂商…

关于堆排序

今天我们不刷力扣了,我们来复习(手撕)一下数据结构中的八大排序算法之一,堆排序 基本概念: 堆是一种特殊的树形数据结构,即完全二叉树。 堆分为大顶堆和小顶堆: 大顶堆:每个节点的值…

手机上制作证件照

最近由于需要给老姐弄一组证件照,找了一通手机上的软件,找到一款性价比较高的,详细流程记录下来。vx小程序上搜索"泰世茂证件照",打开首页如下图所示∶ 单击"开始制作" ,选择一个证件照类别&#…

Python中Web开发-FastAPI框架

大家好,在当今Web开发领域,高性能、易用性和可扩展性是开发者们追求的目标。Python作为一种流行的编程语言,在Web开发领域也有着强大的影响力。而在众多的Python Web框架中,FastAPI凭借其快速、现代和易用的特性,成为了…

语雀——云知识库/笔记

对于日常进行学习/创作或是记录学习、工作内容与心得的群体来说,能够及时同步的云笔记应用有着广泛的应用场景。近期,我也探索了许多款不同的软件应用,今天来分享一款很有特点的应用——语雀。 语雀,为每一个人提供优秀的文档和知…

docker-file 网络

docker挂载 1.绑定挂载(Bind Mounts):绑定挂载是将主机上的文件或目录挂载到容器中。 docker run -v /host/path:/container/path image_name 2.卷挂载(Volume Mounts):卷挂载将 Docker 数据卷挂载到容器中…

[数据结构1.0]计数排序

读者老爷好,本鼠鼠最近学了计数排序,浅浅介绍一下! 目录 1.统计相同元素出现次数 2.根据统计的结果将序列回填到原来的序列中 3.相对映射计数排序 计数排序又称为鸽巢原理,是对哈希直接定址法的变形应用,是非比较排…

AI语音及其应用

文章目录 一、基本认识二、AI语音应用场景三、真人录音与AI配音的区别四、AI语音创作基本步骤 本文将简单了解下AI语音、应用场景及其优势和创作核心步骤。 一、基本认识 AI语音是指基于人工智能技术开发的语音识别和语音合成系统。语音识别是指计算机识别和理解人类语音的能力…

决定了,将ChatGPTer开源!主打一个大模型人人可用。

一个快速上手且极易部署的类ChatGPT开源应用,可接入 OPENAI API 或 通义千问API 开源地址: https://github.com/isnl/EsChat 大声(偷偷)告诉你:通义千问有免费API额度可白嫖!!! 版本特性 OPENAI 和 通义千…

北航提出part2whole:可控⼈体图像⽣成的统⼀参考框架,可从任何数量和不同来源的参考人体部位图像中生成逼真的、高质量的各种姿势的人体人物图。

Parts2Whole,它可以从任何数量和不同来源的参考人体部位图像中生成逼真的、高质量的各种姿势的人体人物。我们的方法保持了与相应条件语义区域的高度一致性,同时保证了整体之间的多样性和协调性。 (a)以不同人的参考图像为条件生成人的图像。每对包括4个…

6.Redis之String命令

1.String类型基本介绍 redis 所有的 key 都是字符串, value 的类型是存在差异的~~ 一般来说,redis 遇到乱码问题的概率更小~~ Redis 中的字符串,直接就是按照二进制数据的方式存储的. (不会做任何的编码转换【讲 mysql 的时候,知道 mysql 默认的字符集, 是拉丁文,插入中文…

ChatGLM2-6B 模型基于 [P-Tuning v2]的微调

ChatGLM2-6B-PT 一、介绍 1、本文实现对于 ChatGLM2-6B 模型基于 [P-Tuning v2](https://github.com/THUDM/P-tuning-v2) 的微调 2、运行至少需要 7GB 显存 3、以 [ADGEN](https://aclanthology.org/D19-1321.pdf) (广告生成) 数据集为例介绍代码的使用方法。 模型部署参考…

OC笔记之foundation框架

OC学习笔记(三) 文章目录 OC学习笔记(三)常用Foundation框架结构体NSRangeNSRange结构体的定义定义 NSRange 的方法打印Range的相关信息NSRange的实际运用查找子字符串返回NSRange结构体 NSPointNSRect NSStringNSString的创建NSS…

Python文件操作(Excel、PDF、XML、Word)

大家好,在现代数据驱动的世界中,对于数据的处理和管理是至关重要的。Python作为一种强大而灵活的编程语言,提供了丰富的工具和库来处理各种文件格式。本文将探讨Python中的文件操作,重点介绍如何使用Python处理Excel、PDF、XML和W…