一、通过商品报价单案例,学会:
1、自定义数据类型的定义和使用
2、ArrayList的定义和使用
二、通过购物小票案例,学会:
1、熟练的对代码重构
知识点
AM:
01项目概述
1、商品报价单加入数据封装
A:这里商品报价单是第一天和第二天的内容,就是展示商品的内容,只是添加了数据的封装
2、超市管理系统加入数据封装(购物小票)
A:就是我们之前做的购物小票,添加了数据的封装
3、超市管理系统追加需求(选做)
A:难度较大属于选做范围
02自定义类型
1、复习第一天的商品报价单代码
A:需求
* 使用Java自定义类型完成对超市的商品报价单进行业务模型封装
* 完成自由创建多个商品
B:需求分析
* 使用类的方式抽象出所有数据的业务模型
* 将商品的各种属性以商品为单位封装出一个商品类,并使用
* 使用ArrayList容器存储数据
2、类的定义
A:类的说明
* 在Java中将现实生活中的事物抽象成一个类,每个类都有成员属性
* 任何编程语言都需要将现实生活中的事物抽象成代码。这些为了映射现实事物数据的单位叫做业务模型。
* 代码映射现实事物的过程就是定义类的过程
B:定义格式
创建文件(.java文件),与类名相同
class 类名{
数据类型 属性名称;
数据类型 属性名称2;
…
}
例如:
class Person {
String name;
int age;
double Hight;
....
}
C:类的使用
* 导包:同一目录下不需要导包
* 创建对象:Person zhangsan = new Person();
* 调用方法: 我们现在不涉及调用方法
* 访问属性:对象名.属性名 (这是当前的方式,后期会采取调用方法的方式替代掉直接访问的方式来完成对属性的访问。)
zhangsan.age = 23;
D:商品报价单加入类的封装
* 定义水果类
public class Fruit {
//编号
int number;
//名称
String name;
//价格
double price;
//计价单位
String unit;
//品质
char level;
}
======================================================================================
03ArrayList的使用
1、ArrayList简介
A:是一种引用类型,使用方式与其他引用类型使用方式相同。是Java预先已经定义好的类
B:与数组类似,均将元素从0开始编号,但是它比数组更方便。
因为他的长度可变,并且访问数据的方式也不同,可以调用功能强大的方法来满足不同需求
2、ArrayList的使用
A:导包:import java.util.ArrayList;
B:创建对象:
类名<集合内元素类型> 变量 = new 类名<集合内元素类型>();
ArrayList<Integer> list = new ArrayList<>();
例如:?
介绍菱形泛型?
* 注意:基本类型需要存放对应的引用类型
ArrayList<Integer> yyYY = new ArrayList<Integer>();
ArrayList<Double> zzZZ = new ArrayList<Double>();
C:调用方法:
* 向集合中添加元素:list.add();
* 获取集合长度:list.size();
* 根据指定索引获取集合元素:list.get(索引);
04ArrayList重构商品报价单
1、ArrayList重构商品报价单
A:使用ArrayList集合存储所有水果
B:演示快速抽取方法
05自定义类型与ArrayList总结
1、自定义类型
A:任何编程语言都需要将现实生活中的事物抽象成代码。这些为了映射现实事物的单位叫做业务模型
B:自定义数据类型映射业务模型
* 类就是数据类型,与之前学习的所有引用数据类型相同,只是现在,我们自己定义一种引用数据类型
* 业务模型类的定义
* 类是现实事物的抽象。需要将现实生活中的属性一一定义
* 我们可以将现实的事物抽象成一个类,格式如下
class SuperStar { //类型名称
String name; //名称属性
int age; //年龄属性
String sex; //性别属性
String address; //地区属性
}
* 业务模型类的使用
业务类的使用就是为了创建实例对象。
导包:将所有类定义在一个包下,则不需要导包。
创建对象:数据类型 变量(对象名) = new 数据类型();
访问属性:变量名.属性名
2、ArrayList集合容器
A:为什么使用ArrayList
* 虽然数组容器效率最快,但是开发中我们使用的数组并不多。因为它的长度不可变!
* 而使用ArrayList集合,它的底层也是数组实现的,效率一样,但是ArrayList的长度是可变的。
* 并且可以调用功能强大的方法来满足不同需求
B:ArrayList集合与数组的区别
* 数组长度不可变,可以存储任意类型,有索引
* 集合长度可变,只能存储引用数据类型(存储基本数据类型时会自动转成对应的引用数据类型),也有索引
* 数组并没有提供操作其元素的方法,而集合提供了很多方法操作其元素
* int->Integer
* double->Double
* float->Float
* char->Character
C:ArrayList集合的使用
* ArrayList的创建
* 与其他普通的引用数据类型创建方式完全相同:
* 类名<集合内元素类型> 变量 = new 类名<集合内元素类型>();
* ArrayList<String> xxXX = new ArrayList<String>();
* ArrayList<Integer> yyYY = new ArrayList<Integer>();
* ArrayList方法介绍
* 直接向集合添加元素:add(元素);
* 在指定索引处向集合添加元素:add(索引,元素);
* 删除指定索引位置的元素:remove(索引);
* 修改指定索引位置的元素:set(索引,元素);
* 获取集合长度:size();
* 根据指定索引获取集合元素:list.get(索引);
======================================================================================
06超市购物小票自定义类型与List代码重构分析
1、超市购物小票自定义类型与List代码重构分析
A:将第四天的超市管理系统代码赋值到day05项目中
B:代码分析
* 将操作数组的代码替换为集合(需要两个集合,一个记录货物数据,一个记录流水数据)
* 用到数据的地方都采用集合的方式访问数据
* 超市管理系统中存放的是货物而不是水果,需要再定义一个货物类(商品项GoodsItem)
07物品项数据模型定义
1、物品项数据模型定义
A:案例代码(定义商品项GoodsItem)
public class GoodsItem {
String ID; //编号
String name; //商品名称
double price; //商品单价
String unit; //商品单位
int number; //商品数量
double money; //商品总价
}
08自定义数据类型完成代码重构
1、自定义数据类型完成代码重构
A:重构过程
* 在成员位置定义两个静态的GoodsItem对象
* init()方法中给成员变量位置定义的两个GoodsItem对象进行初始化(赋值)
* 在main方法里调用init初始化数据的方法
* 将其它的直接使用属性的地方改成"对象名.属性"的方式
09集合完成代码重构
1、集合完成代码重构
A:重构过程
* 在成员位置定义静态集合对象用于多个方法访问
* 将成员位置上定义两个商品项的代码移动到init方法中(要去掉static关键字),并将两个商品对象添加到集合中
* 更改用户退出系统时数据清零的代码,只需要遍历集合,获取集合中的每个对象,将每个对象的number置为0,money置为0
* 购买的过程中要打印商品报价单,将逐条打印商品信息的代码改为遍历商品项,然后打印
* 用户输入购买数量的代码改成循环遍历
* 打印小票的过程也要改成循环遍历
* 计算汇总改成循环遍历
* 商品项的统计,只有用户购买了商品才统计否则不统计
中午作业:
1、练习超市购物管理系统最终案例。
掌握:自定义类的使用 ArrayList集合的使用
======================================================================================
PM:
可以放一个小品
10案例1与案例2的代码重构总结
1、案例1与案例2的代码重构总结
A:补充
* (附加)我们在完成本案例时,由于知识点不够完全,许多地方设计的比较繁琐,如没有明确区分开物品与物品项的概念。
* 这些在我们学习完后边的知识(尤其是面向对象与数据库)后,可以完成更为简单的设计。
B:记录流水信息,之前用的是数组,这里要改成集合
* 成员位置定义的数组改成集合(针对流水账处理的)
* 更改打印小票记流水的代码
* 展示流水,之前的代码是遍历数组改成遍历集合
* 总收入查询,之前的代码是遍历数组改成遍历集合
11超市系统追加需求
1、超市系统追加需求
A:库存商品清单
B:添加新商品
2、需求分析
A:库存商品清单
* 查账界面的库存清单查询功能与报价单功能类似。我们可以抽取出报价单功能,在查询界面再次调用
======================================================================================
12展示商品库存(商品报价单)代码实现
1、代码实现逻辑
A:在switch中增加一个case,调用展示库存清单方法showGoodsList()
B:在buy()买方法中的展示商品列表的代码直接替换为showGoodsList()方法
C:showGoodsList()方法代码
//定义库存清单查询功能
public static void showGoodsList() {
//遍历集合,依次获取其中的每一个商品项元素
for(int i=0; i<list.size(); i++){
GoodsItem thisItem = list.get(i);
//获取当前商品项的各个属性
System.out.println(thisItem.ID+" "+thisItem.name+" "+thisItem.price+" "+thisItem.unit);
}
}
13添加新商品方法实现
1、添加新商品方法实现
A:需求分析
* 目前的商品是固定的,即超市中只有这两个商品,但是老板应该具备新添加物品的功能。所以在操作的界面应该再加入添加新物品的功能。
* 添加新物品的过程实际上就是新加物品项对象,再将其添加进集合中的过程。
* 我们发现,如果使用自定义类与集合容器,我们只需要关心集合中的内容即可。
* 但凡使用到集合数据的地方其代码均不需要更改。这是不封装的代码完全做不到的事情!
B:代码实现逻辑分析过程
* 在switch中添加一个case,调用添加新商品方法addGoodsItem()
* 添加新商品,商品信息应该由用户输入,而输入的信息包含int类型、String类型等,所以要定义录入int类型数据的方法和录入String类型数据的方法
C:addGoodsItem()方法代码
//添加新商品方法
public static void addGoodsItem() {
//用户录入信息
System.out.println("请输入您要添加商品的编号:");
String ID = enterString();
System.out.println("请输入您要添加商品的名称:");
String name = enterString();
System.out.println("请输入您要添加商品的单价:");
double price = enterDouble();
System.out.println("请输入您要添加商品的单位:");
String unit = enterString();
//使用用户录入的信息创建一个新的商品项
GoodsItem newItem = new GoodsItem();
newItem.ID = ID;
newItem.name = name;
newItem.price = price;
newItem.unit = unit;
//将新商品项添加到存储所有商品数据的集合中
list.add(newItem);
}
//键盘录入整数方法
public static int enterNumber() {
Scanner sc = new Scanner(System.in);
int enterNubmer = sc.nextInt();
return enterNubmer;
}
//键盘录入字符串的方法
public static String enterString() {
Scanner sc = new Scanner(System.in);
String enterString = sc.next();
return enterString;
}
//键盘录入小数方法
public static double enterDouble() {
Scanner sc = new Scanner(System.in);
double enterNubmer = sc.nextDouble();
return enterNubmer;
}
======================================================================================
14_总结
自己总结
今日代码量大,开始练习
水果项:
class Fruit {
String name;
String ID;
double price;
String unit;
}
集合:ArrayList
1、导包:impoert java.util.ArrayList;
2、ArrayList<数据类型> list = new ArrayList<>();
3、调用方法:
list.size();
list.add();
list.set(索引,数据);
list.remove();
list.get(索引);
===================================================
面试题:
1、ArrayList的定义格式和使用
2、ArrayList集合与数组的区别
练习题:
1、练习商品报价单加入数据封装的代码实现、超市管理系统加入数据封装代码实现、超市管理系统追加展示库存清单、添加新商品代码实现。
2、熟练使用ArrayList集合中的各个方法
作业:
1、定义一个自定义类型Student,包含三个属性姓名、年龄、性别,创建三个学生对象存入ArrayList集合中,并遍历输出。
2、以下选项错误的是?
A.获取数组的长度用length方法
B.获取字符串的长度用length属性
C.获取集合ArrayList的长度用length方法
D.获取数组的长度用length属性
E.获取字符串的长度用length方法
F.获取集合ArrayList的长度用length属性
G.获取集合ArrayList的长度用size属性
H.获取集合ArrayList的长度用size方法
预习:
1、预习第六天的内容
===================================================
网友评论