菜鸡的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.国家化程序的实现,资源读取 所谓的国际化的程序 ...
随机推荐
- 二、mybatis之数据输出
上一篇我们做了一个入门案例,是我们做mybatis的基本步骤,不熟悉的可以回顾一下https://www.cnblogs.com/jasmine-e/p/15330355.html,在这篇文章中只是简 ...
- 通过Git在本地局域网中的两台电脑间同步代码
0.前言 一般情况下同步代码可以通过在GitHub/GitLab等网站新建远程仓库,所有机器都向仓库推送或者从仓库下拉更新. 上述过程步骤也不算复杂,不过有时候我们考虑到仓库的安全性等因素,只想在局域 ...
- HTML元素的三种类型及其转换
HTML元素的三大类型 1.块元素 可以设置宽高大小,默认宽度为100%,并且独占一行. 例如:p ul li h1~h6 div form table 2.内联(行内)元素 无法设置宽高,元素大小随 ...
- Linux 下 SVN 的安装和配置
SVN 是一个自由开源的版本管理系统,它可以按照时间的顺序去管理文件.目录以及对其进行的修改.于今,它被广泛的用于互联网公司的项目版本管理中 工作原理 它的工作原理如下图所示 它是由一个SVN服务器和 ...
- InstallScript脚本语言基本知识(一)
1.自定义函数 1 //函数的声明:prototype 返回值 函数名(形参类型1,...) 2 export prototype STRING GetPreDir(STRING); 3 4 //函数 ...
- 3DGIS开发使用的开源项目
gdal proj4 vcglib assimp libjpg libpng osg libtess2 cesiumjs glm
- Python中字符串常用方法
capitalize() String.capitalize() 将字符串首字母变为大写 name = 'xiaoming' new_name = name.capitalize() print(ne ...
- webRTC中语音降噪模块ANS细节详解(二)
上篇(webRTC中语音降噪模块ANS细节详解(一))讲了维纳滤波的基本原理.本篇先给出webRTC中ANS的基本处理过程,然后讲其中两步(即时域转频域和频域转时域)中的一些处理细节. ANS的基本处 ...
- JAVA的array中indexOf
记得龙哥有个重构的文章里说直接判断啥的. 今天看JDK ArrayList,看到了他的 indexOf,他先判断,后进入循环,看似写了两遍for 循环,但是简单明了暴力.i like it . pub ...
- 了解 js 堆内存 、栈内存 。
js中的堆内存与栈内存 在js引擎中对变量的存储主要有两种位置,堆内存和栈内存. 和java中对内存的处理类似,栈内存主要用于存储各种基本类型的变量,包括Boolean.Number.String.U ...