import java.util.ArrayList;
import java.util.Iterator;
import java.util.List;

interface Book {
   public float getPrice();
   public String getName();
   public String getInfo();
}

//书店
class BookShop {
   private String name;
   //一个书店中有多种书 将书放在集合中
   private List<Book> allBooks;
   //无参构造 用于初始化参数
   public BookShop() {
     this.allBooks = new ArrayList<Book>();
  }
   public BookShop(String name) {
     this();
     this.name = name;
  }
   public String getName() {
     return name;
  }
   public void setName(String name) {
     this.name = name;
  }
   public List<Book> getAllBooks() {
     return allBooks;
  }
   public void setAllBooks(List<Book> allBooks) {
     this.allBooks = allBooks;
  }
   //添加书籍
   public void append(Book book) {
     this.allBooks.add(book);
  }
   //删除书籍
   public void delete(Book book) {
     this.allBooks.remove(book);
  }
   //根据书名查找书籍
   public Book findByName(String name) {
    Book book = null;
    Iterator<Book> iter = this.allBooks.iterator();
     while(iter.hasNext()) {
      Book temp = iter.next();
       if(name.equals(temp.getName())) {
        book = temp;
         break;
      }
    }
     return book;
  }
   //检索书籍
   public List<Book> index(String keyWord) {
    List<Book> bList = new ArrayList<Book>();
    Iterator<Book> iter = this.allBooks.iterator();
     while(iter.hasNext()) {
      Book temp = iter.next();
       //如果遍历出的书名中没有包含keyWord的 则返回-1
       if(temp.getName().indexOf(keyWord)!=-1) {
         //将包含搜索关键字的书添加到集合中
        bList.add(temp);
      }
    }
     return bList;
  }
}
//儿童书
class ChildBook implements Book{
   private float price;
   private String name;
   private String info;
   public ChildBook(String name, float price,String info) {
     this.setName(name);
     this.setPrice(price);
     this.setInfo(info);
  }
   public float getPrice() {
     return price;
  }
   public void setPrice( float price) {
     this.price = price;
  }
   public String getName() {
     return name;
  }
   public void setName(String name) {
     this.name = name;
  }
   public String getInfo() {
     return info;
  }
   public void setInfo(String info) {
     this.info = info;
  }
   public String toString() {
     return "书名:"+ this.getName()+ ",简介:"+ this.getInfo()+ ",价格:"+ this.getPrice();
  }
}
//电脑书
class ComputerBook implements Book{
   private float price;
   private String name;
   private String info;
   public ComputerBook(String name, float price,String info) {
     this.setName(name);
     this.setPrice(price);
     this.setInfo(info);
  }
   public float getPrice() {
     return price;
  }
   public void setPrice( float price) {
     this.price = price;
  }
   public String getName() {
     return name;
  }
   public void setName(String name) {
     this.name = name;
  }
   public String getInfo() {
     return info;
  }
   public void setInfo(String info) {
     this.info = info;
  }
   public String toString() {
     return "书名:"+ this.getName()+ ",简介:"+ this.getInfo()+ ",价格:"+ this.getPrice();
  }
}
public class ColDemo {
   public static void main(String[] args) {
    Book b1 = new ChildBook( "海底三千里",50.0f, "科幻小说");
    Book b2 = new ChildBook( "老鼠捉猫",50.0f, "猫和老鼠的故事");
    Book b3 = new ChildBook( "会飞的鲨鱼",50.0f, "这一刻我飞上了天空");
    Book b4 = new ComputerBook( "Java咖啡馆",30.0f, "JAVA的咖啡哲学");
    Book b5 = new ComputerBook( "Oracle数据库编程",80.0f, "Oracle详解");
    Book b6 = new ComputerBook( "UML教程",40.0f, "UML基础教程");
    Book b7 = new ComputerBook( "Web开发详解",50.0f, "JavaWeb开发书籍");
    BookShop bs = new BookShop( "网上书店");
    bs.append(b1);
    bs.append(b2);
    bs.append(b3);
    bs.append(b4);
    bs.append(b5);
    bs.append(b6);
    bs.append(b7);
     //打印出所有书籍列表
    print(bs.getAllBooks());
     //打印含有关键字的书名列表
    print(bs.index( "J"));
    Book book = bs.findByName( "会飞的鲨鱼");
    System.out.println(book);
  }
   //打印方法
   public static void print(List all) {
    Iterator iter = all.iterator();
     while(iter.hasNext()) {
      Book b = (Book)iter.next();
      System.out.println(b);
    }
  }
}