黑马day05

一、通过商品报价单案例,学会:
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、预习第六天的内容

===================================================

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 199,636评论 5 468
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 83,890评论 2 376
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 146,680评论 0 330
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 53,766评论 1 271
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 62,665评论 5 359
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 48,045评论 1 276
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 37,515评论 3 390
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 36,182评论 0 254
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 40,334评论 1 294
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 35,274评论 2 317
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 37,319评论 1 329
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 33,002评论 3 315
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 38,599评论 3 303
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 29,675评论 0 19
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 30,917评论 1 255
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 42,309评论 2 345
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 41,885评论 2 341

推荐阅读更多精彩内容

  • Android 自定义View的各种姿势1 Activity的显示之ViewRootImpl详解 Activity...
    passiontim阅读 171,263评论 25 707
  • 1. Java基础部分 基础部分的顺序:基本语法,类相关的语法,内部类的语法,继承相关的语法,异常的语法,线程的语...
    子非鱼_t_阅读 31,531评论 18 399
  • 此项目几乎为从0起点的项目,在项目策划与控制中,发现一下问题,总结如下 1.产品之逻辑传递 传递三种方式: 评审...
    逝也阅读 190评论 0 0
  • 1、英文文字云:Owl City和Lenka专辑的对比 Lenka和Owl City都属于电子摇滚风格,而且是那种...
    瀹瞳阅读 307评论 0 0
  • 怀有少女心的女生们可能都憧憬过所谓的一见钟情吧,可一见钟情真的靠谱吗?我想这个答案应该是否定的。 昨天我像往常一样...
    很久不久阅读 852评论 0 0