菜鸡的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.国家化程序的实现,资源读取 所谓的国际化的程序 ...
随机推荐
- 轻松集成腾讯云短信服务实现短信发送(Java实现)
不论是阿里云还是腾讯云,要想在网站上实现短信发送功能,首先得保证你的网站域名是通过备案的,因为短信签名是需要用到备案过的域名截图,所以域名通过了,申请很快就会审批成功了. (说点题外话,备案的话,需要 ...
- 安全通信协议SSH应用与分析
一.实验简介: 本次实验属于安全协议应用与分析系列 二 实验环境: Windows server 2003 server windows xp 做client 三.实验目的 通过该实验了解SSH服务器 ...
- 缓冲区溢出利用与ShellCode编写
一.实验目的 熟悉编写shellCode的流程 掌握缓冲区溢出的利用 二.实验环境 系统环境:Windows环境 软件环境:C++ ,缓冲区溢出文件链接 三.实验原理 要实施一次有效的缓冲区溢出攻击, ...
- k8s学习笔记(2)- Rancher2.x部署springboot应用及高可用、扩容
前言:上一篇介绍基于k3s环境,使用kubectl部署springboot简单项目应用,本篇介绍基于rancher2.x部署应用程序 1.上篇已部署一个springboot应用,我们可以通过ranch ...
- 从 MVC 到使用 ASP.NET Core 6.0 的最小 API
从 MVC 到使用 ASP.NET Core 6.0 的最小 API https://benfoster.io/blog/mvc-to-minimal-apis-aspnet-6/ 2007 年,随着 ...
- ThreadLocal部分源码分析
结构演进 早起JDK版本中,ThreadLocal内部结构是一个Map,线程为key,线程在"线程本地变量"中绑定的值为Value.每一个ThreadLocal实例拥有一个Map实 ...
- 实现服务器和客户端数据交互,Java Socket有妙招
摘要:在Java SDK中,对于Socket原生提供了支持,它分为ServerSocket和Socket. 本文分享自华为云社区<Java Socket 如何实现服务器和客户端数据交互>, ...
- 从浏览器发送请求给SpringBoot后端时,是如何准确找到哪个接口的?(下篇)
纸上得来终觉浅,绝知此事要躬行 注意: 本文 SpringBoot 版本为 2.5.2; JDK 版本 为 jdk 11. 前言: 前文:你了解SpringBoot启动时API相关信息是用什么数据结构 ...
- stm32直流电机驱动与测速学习总结
通过实验发现,定时器的一个通道控制一个pwm信号. 在正式开始之前也可以参考这个视频学习资料 (stm32直流电机驱动) http://www.makeru.com.cn/live/1392_1218 ...
- 计算机网络之传输层UDP协议
文章转自:https://blog.csdn.net/weixin_43914604/article/details/105453096 学习课程:<2019王道考研计算机网络> 学习目的 ...