图书大厦
        开发要求
            现在要求模拟一个图书大厦图书管理的程序结构,可以在图书大厦实现某一类图书的上架操作,下架操作,以及关键字模糊查询的操作
            注:只考虑类结构,图书属性只关注名字与价格
            
        具体内容
            分析:.........
            范例:需要定义的是图书标准
                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笔记 图书馆的更多相关文章

  1. 菜鸡的Java笔记 - java 断言

    断言:assert (了解)        所谓的断言指的是在程序编写的过程之中,确定代码执行到某行之后数据一定是某个期待的内容        范例:观察断言 public class Abnorma ...

  2. 菜鸡的Java笔记 - java 正则表达式

    正则表达式 RegularExpression        了解正则表达式的好处        正则表达式的基础语法        正则表达式的具体操作            content (内容 ...

  3. 菜鸡的Java笔记 数字操作类

    数字操作类        Math 类的使用        Random 类的使用        BigInteger 和 BigDecimal 类的使用                Math 是一 ...

  4. 菜鸡的Java笔记 - java 线程常用操作方法

    线程常用操作方法        线程的命名操作,线程的休眠,线程的优先级            线程的所有操作方法几乎都在 Thread 类中定义好了            线程的命名和取得      ...

  5. 菜鸡的Java笔记 日期操作类

    日期操作类        Date 类与 long 数据类型的转换        SimpleDateFormat 类的使用        Calendar 类的使用                如 ...

  6. 菜鸡的Java笔记 开发支持类库

    开发支持类库 SupportClassLibrary        观察者设计模式的支持类库                    content (内容)        什么是观察者设计模式呢?   ...

  7. 菜鸡的Java笔记 简单JAVA 类的开发原则以及具体实现

    /*  现在要求定义一个雇员信息类 在这个类之中包含有雇员编号 姓名 职位 基本工资 佣金等信息    对于此时给定要求实际上就是描述一类事物,而这样的程序类在在java之中可以将其称为简单java类 ...

  8. 菜鸡的Java笔记 - java 访问控制权限

    java中四种访问控制权限的使用                内容            在java里面一共定义有四个权限,按照由小到大的顺序:private<defaule<prote ...

  9. 菜鸡的Java笔记 国际化程序实现原理

    国际化程序实现原理 Lnternationalization        1. Locale 类的使用        2.国家化程序的实现,资源读取                所谓的国际化的程序 ...

随机推荐

  1. 【SpringBoot技术专题】「权限校验专区」Shiro整合JWT授权和认证实现

    本章介绍一下常用的认证框架Shiro结合springboot以及集合jwt快速带您开发完成一个认证框架机制. Maven配置依赖 <dependency> <groupId>o ...

  2. GoLang设计模式08 - 命令模式

    命令模式是一种行为型模式.它建议将请求封装为一个独立的对象.在这个对象里包含请求相关的全部信息,因此可以将其独立执行. 在命令模式中有如下基础组件: Receiver:唯一包含业务逻辑的类,命令对象会 ...

  3. 踩坑系列《一》数据库建表权限 CREATE command denied to user for table

    今天在表中用Navicat连接服务器上的mysql账号进行建表,报了个这样类似的错, CREATE command denied to user for table 是数据库权限设置的问题,所以无法进 ...

  4. 【MySQL】MySQL(三)存储过程和函数、触发器、事务

    MySQL存储过程和函数 存储过程和函数的概念 存储过程和函数是 事先经过编译并存储在数据库中的一段 SQL 语句的集合 存储过程和函数的好处 存储过程和函数可以重复使用,减轻开发人员的工作量.类似于 ...

  5. CountBoard 是一个基于Tkinter简单的,开源的桌面日程倒计时应用

    CountBoard 是一个基于Tkinter简单的,开源的桌面日程倒计时应用. 项目地址 https://github.com/Gaoyongxian666/CountBoard 基本功能 置顶功能 ...

  6. MyBatis原生批量插入的坑与解决方案!

    前面的文章咱们讲了 MyBatis 批量插入的 3 种方法:循环单次插入.MyBatis Plus 批量插入.MyBatis 原生批量插入,详情请点击<MyBatis 批量插入数据的 3 种方法 ...

  7. captcha_trainer 验证码识别-训练 使用记录

    captcha_trainer 验证码识别-训练 使用记录 在爬数据的时候,网站出现了验证码,那么我们就得去识别验证码了.目前有两种方案 接入打码平台(花钱,慢) 自己训练(费时,需要GPU环境,快) ...

  8. python字符串调用举例

    以如下打印为例: my name is tom and my age is 12 方式一:字符串格式化表达式 name = 'tom' age = 12 print("my name is ...

  9. 小白自制Linux开发板 八. Linux音频驱动配置

    不知不觉小白自制开发板系列已经到第八篇了,本篇要配置的是音频驱动,也算是硬件部分的最后一片了,积攒的文章也差不多全放完了,后续更新可能会放缓,还请见谅. 对于F1C200s是自带了多媒体处理功能的,所 ...

  10. gawk使用方法简介

    转载:gawk 使用方法简介 - 简书 (jianshu.com) gawk 是最初 Unix 系统上 awk 程序的 GNU 版本.相对于作为流式编辑器的 sed 而言,它提供了更为强大的编程语言特 ...