菜鸡的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.国家化程序的实现,资源读取 所谓的国际化的程序 ...
随机推荐
- 【C++ Primer Plus】编程练习答案——第10章
1 // chapter10_1_account.h 2 3 #ifndef LEARN_CPP_CHAPTER10_1_ACCOUNT_H 4 #define LEARN_CPP_CHAPTER10 ...
- Spring Bean装配笔记
Spring Bean装配笔记 Spring中的Bean是一个很重要的概念.Spring作为一个Bean容器,它可以管理对象和对象之间的依赖关系,我们不需要自己建立对象,把这部分工作全部转交给容器完成 ...
- 一个关于MySQL指定编码实现的小坑
写在前面 环境:MySQL5.7+,MySQL数据库字符编码实现为utf8,表也为utf8 场景:微信授权获取用户信息(包括昵称)并保存到数据库,有的用户成功了,少数用户却失败了 那么为什么会失败呢? ...
- 每日总结:charcter方法(2021.10.5)
\t 在文中该处插入一个tab键 \b在文中该处插入一个后退键 \n 换行 \r 在文中该处回车 \f 在文中该处插入换页符 方法: isLetter()是否是一个字母 isDigit()是否是一个 ...
- 一时兴起,用python抓了一下美女图片。实现简单。附上实现代码,可以交流。
"""1.定义目标网址 网址2.数据定位 照片3.数据匹配 标签4.数据下载 下载"""import requestsfrom lxml i ...
- 创建线程的4种方法 and 线程的生命周期
线程的启动和运行 方法一:使用start()方法:用来启动一个线程,当调用start方法后,JVM会开启一个新线程执行用户定义的线程代码逻辑. 方法二:使用run()方法:作为线程代码逻辑的入口方法. ...
- Windows用cmd编译运行Java程序
https://www.runoob.com/w3cnote/windows10-java-setup.html
- HCNP Routing&Switching之BGP报文结构、类型和状态
前文我们了解了BGP的邻居建立条件.优化以及BGP认证相关话题,回顾请参考https://www.cnblogs.com/qiuhom-1874/p/15395723.html:今天我们来聊一聊BGP ...
- 如何从一台OPC Server访问多个PLC
项目中遇到如下情况: 1. 整条生产线由多个PLC分别控制,但是所有PLC在同一个局域网内.PLC采用西门子的S7-200 Smart 2. 客户希望在操作工站的电脑(跟PLC在同一个局域网内)上提供 ...
- AIApe问答机器人Scrum Meeting 4.27
Scrum Meeting 3 日期:2021年4月27日 会议主要内容概述:汇报两日工作. 一.进度情况 组员 负责 两日内已完成的工作 后两日计划完成的工作 工作中遇到的困难 李明昕 后端 Tas ...