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

目录

零. 概览

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

        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

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

为什么单片机不能直接驱动继电器和电磁阀

文章是瑞生网转载,PDF格式文章下载: 为什么单片机不能直接驱动继电器和电磁阀.pdf: https://url83.ctfile.com/f/45573183-1247189072-10b6d1?p7526 (访问密码: 7526)

Vitis HLS 学习笔记--控制驱动TLP-处理deadlock

目录 1. 简介 2. 代码解析 2.1 HLS kernel代码 2.2 查看接口报告 2.3 TestBench 2.4 Dataflow 报告 3. Takeaways 4. 总结 1. 简介 本文是对《Hardware Acceleration Tutorials: FIFO Sizing for Performance and Avoiding Deadlocks》实验内容的详细解释。 首先需要…

蜜罐技术是一种什么防御技术?实现原理是什么?

前言:蜜罐技术的出现改变了这种被动态势,它通过吸引、诱骗攻击者,研究学习攻击者的攻击目的和攻击手段,从而延缓乃至阻止攻击破坏行为的发生,有效保护真实服务资源。 自网络诞生以来,攻击威胁事件层出不穷…

【数据结构(邓俊辉)学习笔记】图01——若干定义

文章目录 1. 概述1.1 邻接 关联1.2 无向 有向1.3 路径 环路 2. 邻接矩阵2.1 接口2.2 邻接矩阵 关联矩阵2.3 实例2.4 顶点和边2.5 邻接矩阵2.6 顶点静态操作2.7 边操作2.7 顶点动态操作2.8 综合评价 1. 概述 1.1 邻接 关联 相对于此前的线性以及半线性结构,图…

AT指令配置模块

图为用串口一发送字符串来配置AT指令模块的字符串发送格式。 后续更新接收字符串的数据处理。 利用stm32给WiFi模块发送AT指令,所以32的发送端连接WiFi模块的接收端,WiFi模块接收AT指令的返回值发送给ch340由电脑显示,所以WiFi模块的TX连接C…

2024年5月大语言模型论文推荐:模型优化、缩放到推理、基准测试和增强性能

前一篇文章总结了关于计算机视觉方面的论文,这篇文章将要总结了2024年5月发表的一些最重要的大语言模型的论文。这些论文涵盖了塑造下一代语言模型的各种主题,从模型优化和缩放到推理、基准测试和增强性能。 大型语言模型(llm)发展迅速,跟上…

0元入驻抖音小店,真的是好事吗?

大家好,我是喷火龙。 抖音小店去年推出0元入驻抖音小店个人店的政策,简而言之就是只要一张身份证就可以开店,不需要营业执照,也不需要交保证金。 很多人一听很心动,因为没有任何成本就可以开店,于是纷纷跑…

echarts配置记录,一些已经废弃的写法

1、normal,4.0以后无需将样式写在normal中了 改前: 改后: DEPRECATED: normal hierarchy in labelLine has been removed since 4.0. All style properties are configured in labelLine directly now. 2、axisLabel中的文字样式无需使用te…

C++Qt操作Lotus Domino数据库 Lotus Domino C++连接Lotus Domino C++快速开发Lotus Domino

java连接domino C#连接domino python连接domino go连接domino,delphi连接domino Excel连接domino Flutter、微信小程序连接domino C 操作 Lotus Domino 数据库:自动化与效率的结合 引言 在企业级应用中,Lotus Domino 提供了一个强大的协作平台&#xff0…

牛客NC324 下一个更大的数(三)【中等 双指针 Java/Go/PHP/C++】参考lintcode 52 · 下一个排列

题目 题目链接: https://www.nowcoder.com/practice/475da0d4e37a481bacf9a09b5a059199 思路 第一步:获取数字上每一个数,组成数组arr 第二步:利用“下一个排列” 问题解题方法来继续作答,步骤:利用lintc…

【Apache Doris】BE宕机问题排查指南

【Apache Doris】BE宕机问题排查指南 背景BE宕机分类如何判断是BE进程是Crash还是OOMBE Crash 后如何排查BE OOM 后如何分析Cache 没及时释放导致BE OOM(2.0.3-rc04) 关于社区 作者|李渊渊 背景 在实际线上生产环境中,大家可能遇…

新建一个STM32工程(精简版)

一、新建一个STM32工程 二、建立三个文件夹 1、Start文件夹里的东西 (1)启动文件:STM32入门教程资料\固件库\STM32F10x_StdPeriph_Lib_V3.5.0\Libraries\CMSIS\CM3\DeviceSupport\ST\STM32F10x\startup\arm (2)STM32…

springboot社区助老志愿服务系统-计算机毕业设计源码96682

摘要 大数据时代下,数据呈爆炸式地增长。为了迎合信息化时代的潮流和信息化安全的要求,利用互联网服务于其他行业,促进生产,已经是成为一种势不可挡的趋势。在图书馆管理的要求下,开发一款整体式结构的社区助老志愿服务…

OFDM 802.11a的FPGA实现(二十)使用AXI-Stream FIFO进行跨时钟(含代码)

目录 1.前言 2.AXI-Stream FIFO时序 3.AXI-Stream FIFO配置信息 4.时钟控制模块MMCM 5.ModelSim仿真 6.总结 1.前言 至此,通过前面的文章讲解,对于OFDM 802.11a的发射基带的一个完整的PPDU帧的所有处理已经全部完成,其结构如下图所示&…

Linux echo命令(在终端输出文本)

文章目录 Linux Echo命令深度解析简介命令语法常见选项- -n:不输出行尾的换行符,这意味着输出后不会换到下一行。- -e:启用反斜杠转义的解释,允许使用特殊字符。- -E:禁用反斜杠转义的解释(默认选项&#x…

CI/CD 管道中的自动化测试:类型和阶段

在上一篇文章中,我们讨论了敏捷团队自动化测试用例的各种用例。其中一种情况是,团队希望将测试与每个构建集成,并将持续集成作为构建过程的一部分。 在本文中,我们将讨论持续集成/持续交付平台中的集成测试。 让我们先从基础知识…

嵌入式全栈开发学习笔记---C语言笔试复习大全22

目录 结构体 结构体的声明 定义结构体变量 访问结构体成员进行初始化 通过结构体变量名访问结构体成员 结构体指针 结构体指针的定义 通过结构体指针访问结构体成员 结构体数组 结构体数组的定义 遍历结构体数组 结构体的长度(笔试重点) 上一…

Attention相关问题笔试解析。

Attention相关问题笔试解析。 题目描述一:【选择】题目描述二:【简答】题目描述三:【代码】Scaled Dot-Product Attention:下面是用PyTorch实现的一个Attention机制的代码。这个实现包括一个简单的Scaled Dot-Product Attention机…

【大模型部署】在C# Winform中使用文生图Stable Diffusion XL 模型

【大模型部署】在C# Winform中使用文生图Stable Diffusion XL 模型 前言 整了一个在C# Winform中调用文生图Stable Diffusion XL的小程序,基于百度智能云千帆平台 步骤 如何注册百度智能云和创建应用,获取API 密钥等和在之前的博客中基本相同&#…

P6160 [Cnoi2020] 向量

[Cnoi2020] 向量 题目背景 向量(vector),指具有大小(Magnitude)和方向(Direction) 的量。 与向量对应的量叫做数量(Scalar),数量只有大小,没有方向。 对于 Cirno 来说,整天环绕氷屋的旋转 Sangetsusei 们是向量而不是数量。 Sun…