暑假篇之每周两篇文2.0(下)

今天是2022/6/12

前言:个人感觉面向对象这块内容有点小难,它主要难在它的代码量很多,用到的知识点也很多,比方说,方法的调用,定义动态数组,面向对象的基础知识,个人感觉是把我最近学的所有东西都杂糅了起来,跟着课程敲“购物车案例”经常会暂停下来,想想“这个点之前我学过,那个也学过,是什么来着?”因此自己在跟着课程敲完代码后,我会再把它敲一遍,重点是理顺一个整体逻辑

下面我将会把它拆成几个模块分别讲一下它的代码和个人对它的理解

需求:

模拟购物车模块的功能,需要实现添加商品到购物车中去查看购物的商品,同时需要提供修改商品的购买数量结算商品价格功能

分析:

购物车中的每个商品都是一个对象,需要定义一个商品类(Goods)

购物车本身也是一个对象,用数组对象代表它

完成界面架构,让用户选择操作的功能(用switch-case加上方法调用)

1.定义商品类

先定义一个商品类,定义完就不看它了~

package CreatObject;

public class Goods {
    int id;
    String name;
    double price;
    int buyNumber;

}

2.定义购物车对象,使用一个数组对象表示

Goods[] shopCar =new Goods[100];//{null,null,.....}

看不懂这个是什么的请翻看我的暑假第一篇文章,里面有对它讲解

3.搭建操作架构

首先先输出操作指令然后构造一个Scanner类的对象,并且与标准输入流System.in关联
Scanner sc=new Scanner(System.in);
紧接着调用Scanner类对象sc的方法从输入流中获取你需要的输入
String comman = sc.next()。

再然后定义command变量来接收你读到的口令,再利用switch-case判断读到的口令对应哪种情况

最后到属于它的那种情况里调用对应的方法

 System.out.println("请您选择如下命令进行操作:");
            System.out.println("添加商品购物车:add");
            System.out.println("查询购物车商品展示:query");
            System.out.println("修改商品购买数量:update");
            System.out.println("结算购买商品的金额:pay");
            Scanner sc=new Scanner(System.in);
            System.out.println("请您输入口令:");
            String command =sc.next();
            switch (command){
                case"add":
                    //添加商品购物车
                    addGoods(shopCar,sc);
                    break;
                case"query":
                    //查询购物车商品展示
                    queryGoods(shopCar);
                    break;
                case"update":
                    //修改商品购买数量
                    updateGoods(shopCar,sc);
                    break;
                case"pay":
                    //结算购买商品的金额
                    payGoods(shopCar);
                    break;
                default:
                    System.out.println("没有该功能:");

 讲到这里,就要强调一下,如果程序执行完一种情况,程序就结束了,但是能结束吗?肯定不能,所以要把上面这大段程序放到一个while循环里,最下面完整的程序里有展示~

说到调用方法,你得有方法可调呀!

接下来分别来讲解这四种方法,分别是添加商品到购物车(addGoods) 查询购物车商品展示(queryGoods) 修改商品的购买数量(updateGoods) 结算购买商品的金额(payGoods)

-------------------------------------------------------------------------------------------------------------------------

方法一:添加商品到购物车(addGoods)

方法即看参数又要看类型。

因为程序直接进入到方法这里不返回什么值所以是void类型,其次对于因为要接收购物车和扫描,要设置两个参数(要带上他们的类型)即Goods [] shopCar 和Scanner sc

public static void addGoods(Goods[] shopCar,Scanner sc) {
        //录入用户输入的购买的商品信息
        System.out.println("请输入购买商品的编号:");
        int id=sc.nextInt();
        System.out.println("请输入购买商品的名称:");
        String name=sc.next();
        System.out.println("请输入购买商品的数量:");
        int buyNumber=sc.nextInt();
        System.out.println("请输入购买商品的价格:");
        double price=sc.nextDouble();

再然后要把购买物品的信息封装为一个商品的对象

用g表示对象名,那么Goods g=new Goods( );

//把这个购买商品的信息封装为一个商品对象
        Goods g=new Goods();//类名 对象名=new 类名();
        g.id=id;
        g.name=name;
        g.price=price;
        g.buyNumber=buyNumber;

把商品包装好后,把商品对象添加到购物车数组中

先遍历,找个没有元素放入的位置,把这个包装完成的对象放在这个位置上

for (int i = 0; i < shopCar.length; i++) {
            if(shopCar[i]==null){
                //说明此位置没有元素存入,把新买的商品添加到此处
                shopCar[i]=g;
                break;
            }
        }
        System.out.println("您的商品"+g.name+"添加到购物车完成!");

 

 第一部分的完整代码在这里,可以从全局上看看

public static void addGoods(Goods[] shopCar,Scanner sc) {
        //录入用户输入的购买的商品信息
        System.out.println("请输入购买商品的编号:");
        int id=sc.nextInt();
        System.out.println("请输入购买商品的名称:");
        String name=sc.next();
        System.out.println("请输入购买商品的数量:");
        int buyNumber=sc.nextInt();
        System.out.println("请输入购买商品的价格:");
        double price=sc.nextDouble();

        //把这个购买商品的信息封装为一个商品对象
        Goods g=new Goods();//类名 对象名=new 类名();
        g.id=id;
        g.name=name;
        g.price=price;
        g.buyNumber=buyNumber;

        //把这个商品对象添加到购物车数组中去
        for (int i = 0; i < shopCar.length; i++) {
            if(shopCar[i]==null){
                //说明此位置没有元素存入,把新买的商品添加到此处
                shopCar[i]=g;
                break;
            }
        }
        System.out.println("您的商品"+g.name+"添加到购物车完成!");
    }

 

-------------------------------------------------------------------------------------------------------------------------------- 

 方法二:查询购物车商品展示(queryGoods)

方法即看参数又要看类型。

因为程序直接进入到方法这里不返回什么值所以是void类型,其次对于因为要只接收购物车,所以设置一个参数(要带上他的类型)即Goods [ ] shopCar 

遍历一遍购物车数组,定义类型为Goods的变量g去接shopCar[i]的地址,然后判断g是否存在(g!=null)如果存在就输出它的信息,否则就break结束遍历,如果不存在它就不会输出商品的信息,只会有你之前输出的下面这个内容

=======查询购物车信息如下=========
编号        名称            价格            购买数量

private static void queryGoods(Goods[] shopCar) {
        System.out.println("=======查询购物车信息如下=========");
        System.out.println("编号\t\t名称\t\t\t价格\t\t\t购买数量");
        for (int i = 0; i < shopCar.length; i++) {
            Goods g=shopCar[i];//定义类型为Goods的变量g去接shopCar[i]的地址
            if(g!=null){
                //展示这个商品对象
                System.out.println(g.id+"\t\t"+g.name+"\t\t\t"+g.price+"\t\t\t"+g.buyNumber);
            }else {
                //遍历结束
                break;
            }
        }
    }

 

---------------------------------------------------------------------------------------------------------------------------------

 方法三:修改商品的购买数量(updateGoods)

方法即看参数又要看类型。

因为程序直接进入到方法这里不返回什么值所以是void类型,其次对于因为要接收购物车和扫描,所以设置两个参数(要带上他的类型)即Goods [ ] shopCar 和Scanner sc

因为有扫描的这个东西,结合要修改id,因此要定义一个int类型的id去接收你扫描的东西,即

int id=sc.nextInt( );

得到id后要判断这个id是不是存在 ,所以这里需要再写一个方法,我将方法名命名为getGoodsById。这个新开的方法跟方法二差不多,先遍历购物车数组,定义类型为Goods的变量g去接shopCar[i]的地址,然后判断g是否存在(g!=null)如果存在就把id(你输入的)赋给g.id即这个对象的id,并返回对象g,如果不存在就返回null(这里的null有两种情况请读者在代码中继续看我的解释)

回到方法三里,定义类型为Goods的变量g去接getGoodsById方法返回来的值,如果g==null那么久只能输出“没有这个商品”,但如果存在的话,就要修改你购买的商品数量,定义一个buyNumber来接收顾客输入的最新的数量,再把这buyNumber赋值给你创建的对象的buyNumber,最后再查询一下你最新的商品的信息,发现数量已经发生了变化

 小米八宝粥的数量从20变为40,成功修改!

附上代码:

 private static void updateGoods(Goods[] shopCar,Scanner sc) {
        //让用户输入要修改商品的id,根据id查询要修改的商品对象
        while (true) {
            System.out.println("请输入要修改的商品:");
            int id=sc.nextInt();
            Goods g=getGoodsById(shopCar,id);
            if(g==null){
                //没有该商品
                System.out.println("对不起,没有购买商品! ");
            }else{
                //说明存在该商品,可以修改它了
                System.out.println("请您输入:"+g.name+"商品最新购买数量:");
                int buyNumber= sc.nextInt();
                g.buyNumber=buyNumber;
                System.out.println("修改完成:");
                queryGoods(shopCar);
                break;
            }
        }
    }
    public static Goods getGoodsById(Goods[]shopCar,int id){
        for (int i = 0; i < shopCar.length; i++) {
            Goods g=shopCar[i];
            if(g!=null){
                //判断id是否是我们要找的
                if(g.id==id){
                    return g;
                }
            }else {
                return null;//找完前面存在的商品都没有找到
            }
        }
        return null;//代表找完100个商品都没有找到id的商品
    }

 

---------------------------------------------------------------------------------------------------------------------------------

方法四:结算购买商品的金额(payGoods)

方法即看参数又要看类型。

因为程序直接进入到方法这里不返回什么值所以是void类型,其次对于因为要只接收购物车,所以设置一个参数(要带上他的类型)即Goods [ ] shopCar 

既然求和那么肯定要定义一个double类型的变量来表示总和,接着遍历购物车数组中的所有商品对象,定义类型为Goods的变量g去接shopCar[i]的地址,然后判断g是否存在(g!=null)如果存在的话,就累加,如果不存在就跳出循环,遍历完数组后,要输出商品总金额!

代码附上:

 private static void payGoods(Goods[] shopCar) {
        //1.定义一个求和变量累积金额
        double money=0;
        //2.便利购物车数组中全部商品对象,累积单交*数量
        for (int i = 0; i < shopCar.length; i++) {
            Goods g=shopCar[i];
            if(g!=null){
                money+=(g.price+g.buyNumber);
            }else{
                break;
            }
        }
        System.out.println("订单金额"+money);
    }

----------------------------------------------------------------------------------------------------------------------

附上完整代码! 


package CreatObject;

import java.util.Scanner;

public class ShopCarTest {
    public static void main(String[] args){
        //定义商品类,用于后期创建商品对象   商品可以看出对象
        //定义购物车对象,使用一个数组对象表示
        Goods[] shopCar =new Goods[100];//{null,null,.....}
        //搭建操作架构
        while (true) {
            //选择的这一大段代码得要用户不断的执行,所以把它放在循环里,ctrl+alt+t选while就可
            System.out.println("请您选择如下命令进行操作:");
            System.out.println("添加商品购物车:add");
            System.out.println("查询购物车商品展示:query");
            System.out.println("修改商品购买数量:update");
            System.out.println("结算购买商品的金额:pay");
            Scanner sc=new Scanner(System.in);
            System.out.println("请您输入口令:");
            String command =sc.next();
            switch (command){
                case"add":
                    //添加商品购物车
                    addGoods(shopCar,sc);
                    break;
                case"query":
                    //查询购物车商品展示
                    queryGoods(shopCar);
                    break;
                case"update":
                    //修改商品购买数量
                    updateGoods(shopCar,sc);
                    break;
                case"pay":
                    //结算购买商品的金额
                    payGoods(shopCar);
                    break;
                default:
                    System.out.println("没有该功能:");
            }
        }
    }

    private static void payGoods(Goods[] shopCar) {
        //1.定义一个求和变量累积金额
        double money=0;
        //2.便利购物车数组中全部商品对象,累积单交*数量
        for (int i = 0; i < shopCar.length; i++) {
            Goods g=shopCar[i];
            if(g!=null){
                money+=(g.price+g.buyNumber);
            }else{
                break;
            }
        }
        System.out.println("订单金额"+money);
    }

    private static void updateGoods(Goods[] shopCar,Scanner sc) {
        //让用户输入要修改商品的id,根据id查询要修改的商品对象
        while (true) {
            System.out.println("请输入要修改的商品:");
            int id=sc.nextInt();
            Goods g=getGoodsById(shopCar,id);
            if(g==null){
                //没有该商品
                System.out.println("对不起,没有购买商品! ");
            }else{
                //说明存在该商品,可以修改它了
                System.out.println("请您输入:"+g.name+"商品最新购买数量:");
                int buyNumber= sc.nextInt();
                g.buyNumber=buyNumber;
                System.out.println("修改完成:");
                queryGoods(shopCar);
                break;
            }
        }
    }
    public static Goods getGoodsById(Goods[]shopCar,int id){
        for (int i = 0; i < shopCar.length; i++) {
            Goods g=shopCar[i];
            if(g!=null){
                //判断id是否是我们要找的
                if(g.id==id){
                    return g;
                }
            }else {
                return null;//找完前面存在的商品都没有找到
            }
        }
        return null;//代表找完100个商品都没有找到id的商品
    }

    private static void queryGoods(Goods[] shopCar) {
        System.out.println("=======查询购物车信息如下=========");
        System.out.println("编号\t\t名称\t\t\t价格\t\t\t购买数量");
        for (int i = 0; i < shopCar.length; i++) {
            Goods g=shopCar[i];//定义类型为Goods的变量g去接shopCar[i]的地址
            if(g!=null){
                //展示这个商品对象
                System.out.println(g.id+"\t\t"+g.name+"\t\t\t"+g.price+"\t\t\t"+g.buyNumber);
            }else {
                //遍历结束
                break;
            }
        }
    }
/*
完成商品添加到购物车的功能
 */
    public static void addGoods(Goods[] shopCar,Scanner sc) {
        //录入用户输入的购买的商品信息
        System.out.println("请输入购买商品的编号:");
        int id=sc.nextInt();
        System.out.println("请输入购买商品的名称:");
        String name=sc.next();
        System.out.println("请输入购买商品的数量:");
        int buyNumber=sc.nextInt();
        System.out.println("请输入购买商品的价格:");
        double price=sc.nextDouble();

        //把这个购买商品的信息封装为一个商品对象
        Goods g=new Goods();//类名 对象名=new 类名();
        g.id=id;
        g.name=name;
        g.price=price;
        g.buyNumber=buyNumber;

        //把这个商品对象添加到购物车数组中去
        for (int i = 0; i < shopCar.length; i++) {
            if(shopCar[i]==null){
                //说明此位置没有元素存入,把新买的商品添加到此处
                shopCar[i]=g;
                break;
            }
        }
        System.out.println("您的商品"+g.name+"添加到购物车完成!");
    }

}
package CreatObject;

public class Goods {
    int id;
    String name;
    double price;
    int buyNumber;

}

 --------------------------------------------------------------------------------------------------------------

个人总结:以上就是购物车案例的所有讲解了,其实在编写这篇文章之前有很多小的点不太明白,但是经过我仔仔细细的分析和拆分后,我发现,这东西我好像懂了~

还是开头前言的那句话,它的难就在用的东西很多,需要站在全局的角度去看每一个方法的分支,如果有什么不太明白的,可以把程序写一写

如果你也喜欢这篇文章的话,给我一个赞吧!

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值