详谈简略式购物车代码

       我所写的这个购物车代码已经有人发布过了

       但我学的时候有些地方并不是很理解,我花了一段时间思考后,便来谈谈我对其的理解

       首先,我们需要思考购物车是什么

       购物车是用来装商品的,而商品有很多,其又有各自的属性,如:价格,数量,名称等。

       那么我们就可以把购物车看成一个容器,来装这些商品,由于我目前所学的知识有限,便把他定义为数组,像这样

        Goodsmodel[] goodscar=new Goodsmodel[100];

        为什么这么定义后面再说

        那我们开始写起来吧

        我们拿了购物车,说明我们要买的东西不止一个(也有可能只有一个),那么就需要写一个商品类,来创造一个个对象,也就是现实生活中所对应的商品,如下

public class Goodsmodel {
    double price;
    int id;
    String name;
    int num;
}

        这里我插一句,就是类与对象的区别,类相当于一个图纸,像房屋图纸,在图纸上有着所需创建房屋的基本属性,而对象,就是这些属性有了具体值后的体现,也就是建成的房屋,所以,我取名叫Goodsmodel,(汉式英语,可以理解吧,emm,驼峰模式忘记了,下次注意),这个类起名叫Goodsmodel后,这个Goodsmodel便成了一个引用型数据类型,我们便可以依据它定义一个包含其对应对象的数组,就是上文所提到的。

        那么我们拿到商品后,就需要把商品加入到购物车中去,那我们是不是还要看看我们买了什么,有可能我们还要改变所买商品的数量,那么我们是不是还要看看我们要花多少钱啊,这些都是一个个方法,这样便于调用和理解,方法如下

public static void addGoods(Goodsmodel[] goodscar,Scanner sc){
}//加入商品
public static void queryGoods(Goodsmodel[] goodscar){
}//查看商品
public static void updateGoods(Goodsmodel[] goodscar,Scanner sc){
}//更改购买商品的数量
public static void moneyGoods(Goodsmodel[] goodscar){
}//所需支付的钱数

    (可不看) 我再来解释下方法为什么这样定义吧,因为方法名称要有意义,并且我们所定义的方法都与购物车有关,所以形参列表中要写其的数据类型的数组,方便调用一个个对象的数据。而形参列表中的Scanner理解起来很简单,就不说了。

     那么,我们要时刻加入商品的信息,查看或者更改,就是随时调用不同的方法,那么,是不是要定义一个死循环,并且可以用switch来分情况调用方法,而switch中的表达式,我们可以用可输入的指令来表示,那我们就要写一个键盘录入技术,并给购物者一个提醒,来输入这些指令,如下

public static void main(String[] args) {
        Goodsmodel[] goodscar=new Goodsmodel[100];
        while (true) {
            System.out.println("您有以下指令");
            System.out.println("加入商品到购物车:add");
            System.out.println("查看商品的信息:query");
            System.out.println("改变商品所购买的数量:update");
            System.out.println("您购买商品的总价格:money");
            Scanner sc=new Scanner(System.in);
            String instruct=sc.next();
            switch (instruct){
                case "add":
                    addGoods(goodscar,sc);
                    break;
                case "query":
                    queryGoods(goodscar);
                    break;
                case "update":
                    updateGoods(goodscar,sc);
                    break;
                case "money":
                    moneyGoods(goodscar);
                    break;
                default:
                    System.out.println("指令错误");
            }
        }
    }

     

        接下来,我们就要把这几个方法的内容写一遍

        首先,是addGoods                     <添加商品>

public static void addGoods(Goodsmodel[] goodscar,Scanner sc){
        Goodsmodel g=new Goodsmodel();
        System.out.println("请输入商品的编号");
        g.id= sc.nextInt();
        System.out.println("请输入商品的名字");
        g.name=sc.next();
        System.out.println("请输入商品的价格");
        g.price=sc.nextDouble();
        System.out.println("请输入商品的数量");
        g.num=sc.nextInt();
        for (int i = 0; i < goodscar.length; i++) {
            if (goodscar[i]==null){
                goodscar[i]=g;
                break;            //此处为保证只加入一个g于数组中处于null状态的元素处
            }


        }
        System.out.println("商品已录入");
    }

        其次,是queryGoods                   <查看商品>

public static void queryGoods(Goodsmodel[] goodscar) {
        System.out.println("编号\t\t\t名字\t\t\t价格\t\t数量");
        for (int i = 0; i < goodscar.length; i++) {
            if (goodscar[i]!=null){
                System.out.println(goodscar[i].id+"\t\t\t"+goodscar[i].name+"\t\t"+goodscar[i].price+"\t"+goodscar[i].num);
            }else {
                break;    //减少不必要的空间占用
            }
        }
    }

        接下来,是updateGoods             <更改商品的数量>

  public static void updateGoods(Goodsmodel[] goodscar,Scanner sc) {
        Out:         
        while (true) {
            System.out.println("请输入你想改变商品的编号");
            int id = sc.nextInt();
            for (int i = 0; i < goodscar.length; i++) {
                if (goodscar[i] != null) {
                    if (goodscar[i].id == id) {
                        System.out.println("您想改变该商品的购买数量为:");
                        goodscar[i].num=sc.nextInt();
                        System.out.println("您已更改成功");
                        break Out;         //跳出死循环,即跳到Out所在的位置
                    }else{
                        System.out.println("未检索到该商品");
                        break ;
                    }
                }else {
                    System.out.println("未检索到该商品");
                    break ;           //跳出for循环
                }

            }
        }


    }

        由于这样写有些繁琐,我们可以再定义一个方法,来达到相同的效果,这样较为简洁方便,如下

​public static void updateGoods(Goodsmodel[] goodscar,Scanner sc) {
        while (true) {
            System.out.println("请输入你想改变商品的编号");
            int id= sc.nextInt();
            if (updateid(goodscar,id)==null){
                System.out.println("未检索到该商品");
            }else {
                System.out.println("请输入你想改变购买商品的数量");
                updateid(goodscar,id).num=sc.nextInt();
                System.out.println("您已更改成功");
                break;
            }
        }

    }
    public static Goodsmodel updateid(Goodsmodel[] goodscar, int id){   //
        for (int i = 0; i < goodscar.length; i++) {
            if (goodscar[i]!=null){
                if (goodscar[i].id==id){
                    return goodscar[i];
                }
            }else {
                return null;     //数组中都为默认值null,没有元素
            }
        }
        return null;    //整个数组找完后,没有一个标号与所输入的编号相同
    }

        最后,是moneyGoods                 <总钱数>

public static void moneyGoods(Goodsmodel[] goodscar) {
        double money=0;
        for (int i = 0; i < goodscar.length; i++) {
            if (goodscar[i]!=null){
                money+=goodscar[i].price*goodscar[i].num;
            }else {
                break;
            }
        }
        System.out.println("您需要支付"+money+"元");
    }

        其实,这个购物车代码很好写,只是比较繁琐,综合性较强而已,但我们可以从中知道该如何结合实际去一步步思考,进而培养独立思考的意识。

 

 

  • 5
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 2
    评论
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值