菜鸡的Java笔记 图书馆
图书大厦
开发要求
现在要求模拟一个图书大厦图书管理的程序结构,可以在图书大厦实现某一类图书的上架操作,下架操作,以及关键字模糊查询的操作
注:只考虑类结构,图书属性只关注名字与价格
具体内容
分析:.........
范例:需要定义的是图书标准
interface Book{ // 准备出图书信息
public String getTitle(); // 得到书的名字
public double getPrice();//得到书的价钱
}
范例:定义图书大厦,一个图书大厦要保存有多本书的信息,所以图书大厦应该使用链表
class BookShop{
private Link books = new LinkImpl();// 表示的是所有的书
public void add(Book book){//上架图书
this.books.add(book);// 向链表中保存数据
}
public void delete(Book book){//下架图书
this.books.remove(book);
}
public Link search(String keyWord){
Link result = new LinkImpl();
Object[] obj = this.books.toArray();// 将所有的数据转变为 Object 数组
for(int x = 0;x < obj.length; x ++){
Book book = (Book)obj[x];
if(book.getTitle().contains(keyWord)){ // 有此关键字
result.add(book);
}
}
return result;
}
}
现在有了接口了,下面定义子类的时候只需要实现接口覆写方法即可。程序里面包含有 Link 接口的 remove() 方法
这个方法如果要想正常执行,则需要覆写 equals() 方法
范例:定义计算机类图书
class ComputerBook implements Book{
private String title;
private double price;
public ComputerBook(String title,double price){
this.title = title;
this.price = price;
}
public boolean equals(Object obj){
if(this == obj){
return true;
}
if(obj == null){
return false;
}
if(!(obj instanceof ComputerBook)){
return false;
}
ComputerBook b = (ComputerBook)obj;
if(this.title.equals(b.title) && this.price == b.price){
return true;
}
return false;
}
public String getTitle(){
return this.title;
}
public double getPrice(){
return this.price;
}
public String toString(){
return "【计算机类图书】名称 = "+this.title
+",价格 = "+this.price;
}
}
范例:定义数字类图书
class MathBook implements Book{
private String title;
private double price;
public MathBook(String title,double price){
this.title = title;
this.price = price;
}
public boolean equals(Object obj){
if(this == obj){
return true;
}
if(obj == null){
return false;
}
if(!(obj instanceof MathBook)){
return false;
}
MathBook b = (MathBook)obj;
if(this.title.equals(b.title) && this.price == b.price){
return true;
}
return false;
}
public String getTitle(){
return this.title;
}
public double getPrice(){
return this.price;
}
public String toString(){
return "【数学类图书】名称 = "+this.title
+",价格 = "+this.price;
}
}
范例:进行代码的测试
interface Link{
}
class LinkImpl implements Link{ // 外部的程序只关心此类
}
interface Book{// 准备出图书信息
public String getTitle(); // 得到书的名字
public double getPrice();//得到书的价钱
}
class BookShop{
private Link books = new LinkImpl();// 表示的是所有的书
public void add(Book book){//上架图书
this.books.add(book);// 向链表中保存数据
}
public void delete(Book book){//下架图书
this.books.remove(book);
}
public Link search(String keyWord){
Link result = new LinkImpl();
Object[] obj = this.books.toArray();// 将所有的数据转变为 Object 数组
for(int x = 0;x < obj.length; x ++){
Book book = (Book)obj[x];
if(book.getTitle().contains(keyWord)){ // 有此关键字
result.add(book);
}
}
return result;
}
}
class ComputerBook implements Book{
private String title;
private double price;
public ComputerBook(String title,double price){
this.title = title;
this.price = price;
}
public boolean equals(Object obj){
if(this == obj){
return true;
}
if(obj == null){
return false;
}
if(!(obj instanceof ComputerBook)){
return false;
}
ComputerBook b = (ComputerBook)obj;
if(this.title.equals(b.title) && this.price == b.price){
return true;
}
return false;
}
public String getTitle(){
return this.title;
}
public double getPrice(){
return this.price;
}
public String toString(){
return "【计算机类图书】名称 = "+this.title
+",价格 = "+this.price;
}
}
class MathBook implements Book{
private String title;
private double price;
public MathBook(String title,double price){
this.title = title;
this.price = price;
}
public boolean equals(Object obj){
if(this == obj){
return true;
}
if(obj == null){
return false;
}
if(!(obj instanceof MathBook)){
return false;
}
MathBook b = (MathBook)obj;
if(this.title.equals(b.title) && this.price == b.price){
return true;
}
return false;
}
public String getTitle(){
return this.title;
}
public double getPrice(){
return this.price;
}
public String toString(){
return "【数学类图书】名称 = "+this.title
+",价格 = "+this.price;
}
}
public class actualCombat{
public static void main(String args[]){
BookShop shop = new BookShop();
shop.add(new ComputerBook("java开发",79.0));
shop.add(new ComputerBook("java数据库编程",69.0));
shop.add(new ComputerBook("java网络编程",76.0));
shop.add(new ComputerBook("数学与java",59.0));
shop.add(new ComputerBook("java与线性代数",49.0));
shop.add(new ComputerBook("网络数学",29.0));
shop.delete(new ComputerBook("java数据库编程",69.0)); // 下架操作
Link tepm = shop.search("java"); // 模糊查询
Object obj[] = tepm.toArray(); // 变为对象数组
for(int x = 0;x < obj.length;x ++){
System.out.println(obj[x]);
}
}
}
这样的程序模型可以在生活中不断演变,例如:一个公园可以有很多的树,种树和砍
一个停车场里可以停放轿车,卡车,电动车
总结
这样的操作模型之中,对于链表只是使用
本程序是以接口为主的编程操作,这种形式在开发中随处可见
菜鸡的Java笔记 图书馆的更多相关文章
- 菜鸡的Java笔记 - java 断言
断言:assert (了解) 所谓的断言指的是在程序编写的过程之中,确定代码执行到某行之后数据一定是某个期待的内容 范例:观察断言 public class Abnorma ...
- 菜鸡的Java笔记 - java 正则表达式
正则表达式 RegularExpression 了解正则表达式的好处 正则表达式的基础语法 正则表达式的具体操作 content (内容 ...
- 菜鸡的Java笔记 数字操作类
数字操作类 Math 类的使用 Random 类的使用 BigInteger 和 BigDecimal 类的使用 Math 是一 ...
- 菜鸡的Java笔记 - java 线程常用操作方法
线程常用操作方法 线程的命名操作,线程的休眠,线程的优先级 线程的所有操作方法几乎都在 Thread 类中定义好了 线程的命名和取得 ...
- 菜鸡的Java笔记 日期操作类
日期操作类 Date 类与 long 数据类型的转换 SimpleDateFormat 类的使用 Calendar 类的使用 如 ...
- 菜鸡的Java笔记 开发支持类库
开发支持类库 SupportClassLibrary 观察者设计模式的支持类库 content (内容) 什么是观察者设计模式呢? ...
- 菜鸡的Java笔记 简单JAVA 类的开发原则以及具体实现
/* 现在要求定义一个雇员信息类 在这个类之中包含有雇员编号 姓名 职位 基本工资 佣金等信息 对于此时给定要求实际上就是描述一类事物,而这样的程序类在在java之中可以将其称为简单java类 ...
- 菜鸡的Java笔记 - java 访问控制权限
java中四种访问控制权限的使用 内容 在java里面一共定义有四个权限,按照由小到大的顺序:private<defaule<prote ...
- 菜鸡的Java笔记 国际化程序实现原理
国际化程序实现原理 Lnternationalization 1. Locale 类的使用 2.国家化程序的实现,资源读取 所谓的国际化的程序 ...
随机推荐
- Winform 窗体自适应
前言 在使用 Winform 开发过程中,经常发些因为显示器分辨率.窗体大小改变,控件却不能自适应变化,几经查找资料,和大佬的代码.经过细小修改,终于可以让窗体在外界影响下,窗体内背景图片.控件都会自 ...
- Batch Normalization和Layer Normalization
Batch Normalization:对一个mini batch的样本,经过一个nueron(或filter)后生成的feature map中的所有point进行归一化.(纵向归一化) Layer ...
- T-SQL——透视PIVOT动态获取待扩展元素集
目录 0.背景说明 1.准备测试数据 2.示例1--利用SELECT循环赋值 3.示例2--使用游标 4.示例3--使用FOR XML PATH() 5. 参考 志铭-2021年10月8日 00:57 ...
- 升级了 Windows 11 正式版,有坑吗?
今天磊哥去公司上班,惊喜的发现 Windows 提示更新了,并且是 Windows 11 正式版,这太让人开心了,二话不说"先升为敬". 下载更新 下载完咱就重启更新呗. Wi ...
- 基于go语言学习工厂模式
工厂模式 简单工厂模式(Simple Factory) 定义 优点 缺点 适用范围 代码实现 工厂方法模式(Factory Method) 定义 优点 缺点 适用范围 代码实现 抽象工厂模式(Abst ...
- 记录一次基于VuePress + Github 搭建个人博客
最终效果图 网站:https://chandler712.github.io/ 一.前言 VuePress 是尤雨溪推出的支持 Vue 及其子项目的文档需求而写的一个项目,UI简洁大方,官方文档详细容 ...
- SAE助力南瓜电影7天内全面Severless
作者:李刚(寻如),阿里云解决方案架构师 南瓜电影APP是国内领先的专注于影视精品化运营的垂直类视频产品,在移动互联网.IPTV.OTT等客户端,面向广大中产阶级精英群体,提供有异于院线及其他视频平台 ...
- Lamport时间戳论文笔记
本文主要参考文献[1]完成. 声明:本人仅在博客园发表了本文章,笔名LightningStar,其他网站均为转载. 笔记 私以为,论文中作者的核心工作是为分布式系统建立了一种数学模型,并基于这种数学模 ...
- pure-ftpd管理FTP服务器,创建文件夹可以,但上传下载文件不行
两种原因 1.因为pure-ftpd的防火墙端口问题 # Port range for passive connections replies. - for firewalling. PassiveP ...
- 洛谷4234最小差值生成树 (LCT维护生成树)
这也是一道LCT维护生成树的题. 那么我们还是按照套路,先对边进行排序,然后顺次加入. 不过和别的题有所不同的是: 在本题中,我们需要保证LCT中正好有\(n-1\)条边的时候,才能更新\(ans\) ...