• 【java学习】 面向对象编程+java购物车系统


    一、设计对象

    在这里插入图片描述

    1. 类和对象是什么?
    • 类:是共同特征的描述(设计图);
    • 对象:是真实存在的具体实例;
    1. 如何设计类?
    public class类名{
    	1、成员变量(代表属性的,一般是名词)
    	2、成员方法(代表行为的,一般是动词)
    }
    
    • 1
    • 2
    • 3
    • 4
    1. 如何创建对象?
    类名对象名= new 类名();
    
    • 1
    1. 拿到对象后怎么访问对象的信息?
    对象.成员变量;
    对象.成员方法(...)
    
    • 1
    • 2
    1. 定义类有哪些建议,有什么需要注意的?
    • 类名首字母建议大写、英文、有意义,满足驼峰模式,不能用关键字,满足标志符规定
    • 一个代码文件中可以定义多个类,但是只能一个类是public修饰的,public修饰的类名必须是Java代码的文件名称。
    • 一个代码文件最好只定义一个类
    1. 成员变量的格式是什么样的,有什么特点?
    • 成员变量的完整格式是:修饰符 数据类型 变量名称 = 初始化值;
    • 一般无需为成员变量指定初始化值,存在默认值。

    二、内存机制

    在这里插入图片描述

    三、购物车系统

    需求:

    • 模拟购物车模块的功能,需要实现添加商品到购物车中去,同时需要提供修改商品的购买数量,结算商品价格功能(请使用面向对象编程来解决)。

    分析:

    • 购物车中的每个商品都是一个对象,需要定义一个商品类。
    • 购物车本身也是一个对象:可以使用数组对象代表它。
    • 完成界面架构,让用户选择操作的功能。

    代码:

    Goods.java

    package com.ith.demo;
    
    public class Goods {
        int id;  //编号
        String name;   //名称
        double price; //价格
        int buyNumber; //购买数量
    }
    
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9

    ShopCarTest.java

    package com.ith.demo;
    
    import java.util.Scanner;
    
    public class ShopCarTest {
        public static void main(String[] args) {
            Goods[] shopCar = new Goods[100];//最多100商品,装的商品地址
            while (true) {
                System.out.println("请选择想要操作的命令");
                System.out.println("添加商品到购物车:add");
                System.out.println("查询购物车商品展示:query");
                System.out.println("修改商品购买数量:update");
                System.out.println("结算金额:pay");
                System.out.println("退出:exit");
    
                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;
                    case "exit":
                        //退出
                        return;
                    default:
                        System.out.println("没有该功能!");
                }
            }
        }
        //结算金额
        public static void payGoods(Goods[] shopCar) {
            queryGoods(shopCar);
            double money = 0;
            for (int i = 0; i < shopCar.length; i++) {
                Goods g = shopCar[i];
                if(g != null){
                    money += ( g.buyNumber * g.price );
                }else{
                    break;
                }
            }
            System.out.println("订单总金额是:"+money);
        }
        //修改商品购买数量
        public static void updateGoods(Goods[] shopCar,Scanner sc) {
            while (true){
                System.out.println("请输入要修改的商品id");
                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;
                }
            }
    
        }
    
        //查询id
        public static Goods getGoodsById(Goods[] shopCar,int id){
            for (int i = 0; i < shopCar.length; i++) {
                Goods g = shopCar[i];
                if(g !=null)
                {
                    if(g.id == id)
                    {
                        return g;
                    }
                }else
                {
                    return null;
                }
            }
            return null;
        }
    
        //添加商品到购物车
        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();
            g.id = id;
            g.buyNumber = buyNumber;
            g.price = price;
            g.name = name;
    
            for (int i = 0; i < shopCar.length; i++) {
                if(shopCar[i] == null){
                    shopCar[i] = g;
                    break;
                }
            }
            System.out.println("您的商品" + name + "已经添加到购物车!");
        }
        //查询购物车商品展示
        public 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];
                if(g != null){
                    System.out.println(g.id + "\t\t" + g.name + "\t\t\t" +g.price +"\t\t\t"+ g.buyNumber);
                }else{
                    break;
                }
    
            }
    
        }
    }
    /*
    输出:
    
    请选择想要操作的命令
    添加商品到购物车:add
    查询购物车商品展示:query
    修改商品购买数量:update
    结算金额:pay
    退出:exit
    请输入命令:
    add
    请输入购买商品的编号:
    1
    请输入购买商品的名称:
    鼠标
    请输入购买商品的数量:
    2
    请输入购买商品的价格:
    100
    您的商品鼠标已经添加到购物车!
    请选择想要操作的命令
    添加商品到购物车:add
    查询购物车商品展示:query
    修改商品购买数量:update
    结算金额:pay
    退出:exit
    请输入命令:
    add
    请输入购买商品的编号:
    2
    请输入购买商品的名称:
    键盘
    请输入购买商品的数量:
    1
    请输入购买商品的价格:
    1000
    您的商品键盘已经添加到购物车!
    请选择想要操作的命令
    添加商品到购物车:add
    查询购物车商品展示:query
    修改商品购买数量:update
    结算金额:pay
    退出:exit
    请输入命令:
    add
    请输入购买商品的编号:
    3
    请输入购买商品的名称:
    电脑
    请输入购买商品的数量:
    1
    请输入购买商品的价格:
    10000
    您的商品电脑已经添加到购物车!
    请选择想要操作的命令
    添加商品到购物车:add
    查询购物车商品展示:query
    修改商品购买数量:update
    结算金额:pay
    退出:exit
    请输入命令:
    query
    ===============购物车信息如下===============
    编号		名称			价格			购买数量
    1		鼠标			100.0			2
    2		键盘			1000.0			1
    3		电脑			10000.0			1
    请选择想要操作的命令
    添加商品到购物车:add
    查询购物车商品展示:query
    修改商品购买数量:update
    结算金额:pay
    退出:exit
    请输入命令:
    update
    请输入要修改的商品id
    1
    请输入:鼠标商品最新购买数量:
    1
    修改成功!
    ===============购物车信息如下===============
    编号		名称			价格			购买数量
    1		鼠标			100.0			1
    2		键盘			1000.0			1
    3		电脑			10000.0			1
    请选择想要操作的命令
    添加商品到购物车:add
    查询购物车商品展示:query
    修改商品购买数量:update
    结算金额:pay
    退出:exit
    请输入命令:
    pay
    ===============购物车信息如下===============
    编号		名称			价格			购买数量
    1		鼠标			100.0			1
    2		键盘			1000.0			1
    3		电脑			10000.0			1
    订单总金额是:11100.0
    请选择想要操作的命令
    添加商品到购物车:add
    查询购物车商品展示:query
    修改商品购买数量:update
    结算金额:pay
    退出:exit
    请输入命令:
    exit
    
     */
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20
    • 21
    • 22
    • 23
    • 24
    • 25
    • 26
    • 27
    • 28
    • 29
    • 30
    • 31
    • 32
    • 33
    • 34
    • 35
    • 36
    • 37
    • 38
    • 39
    • 40
    • 41
    • 42
    • 43
    • 44
    • 45
    • 46
    • 47
    • 48
    • 49
    • 50
    • 51
    • 52
    • 53
    • 54
    • 55
    • 56
    • 57
    • 58
    • 59
    • 60
    • 61
    • 62
    • 63
    • 64
    • 65
    • 66
    • 67
    • 68
    • 69
    • 70
    • 71
    • 72
    • 73
    • 74
    • 75
    • 76
    • 77
    • 78
    • 79
    • 80
    • 81
    • 82
    • 83
    • 84
    • 85
    • 86
    • 87
    • 88
    • 89
    • 90
    • 91
    • 92
    • 93
    • 94
    • 95
    • 96
    • 97
    • 98
    • 99
    • 100
    • 101
    • 102
    • 103
    • 104
    • 105
    • 106
    • 107
    • 108
    • 109
    • 110
    • 111
    • 112
    • 113
    • 114
    • 115
    • 116
    • 117
    • 118
    • 119
    • 120
    • 121
    • 122
    • 123
    • 124
    • 125
    • 126
    • 127
    • 128
    • 129
    • 130
    • 131
    • 132
    • 133
    • 134
    • 135
    • 136
    • 137
    • 138
    • 139
    • 140
    • 141
    • 142
    • 143
    • 144
    • 145
    • 146
    • 147
    • 148
    • 149
    • 150
    • 151
    • 152
    • 153
    • 154
    • 155
    • 156
    • 157
    • 158
    • 159
    • 160
    • 161
    • 162
    • 163
    • 164
    • 165
    • 166
    • 167
    • 168
    • 169
    • 170
    • 171
    • 172
    • 173
    • 174
    • 175
    • 176
    • 177
    • 178
    • 179
    • 180
    • 181
    • 182
    • 183
    • 184
    • 185
    • 186
    • 187
    • 188
    • 189
    • 190
    • 191
    • 192
    • 193
    • 194
    • 195
    • 196
    • 197
    • 198
    • 199
    • 200
    • 201
    • 202
    • 203
    • 204
    • 205
    • 206
    • 207
    • 208
    • 209
    • 210
    • 211
    • 212
    • 213
    • 214
    • 215
    • 216
    • 217
    • 218
    • 219
    • 220
    • 221
    • 222
    • 223
    • 224
    • 225
    • 226
    • 227
    • 228
    • 229
    • 230
    • 231
    • 232
    • 233
    • 234
    • 235
    • 236
    • 237
    • 238
    • 239
    • 240
    • 241
    • 242
    • 243
    • 244
    • 245

    四、构造器

    在这里插入图片描述
    可以使代码更简洁

    构造器

    1.构造器的作用?

    • 初始化类的对象, 并返回对象的地址。

    2.构造器有几种,各自的作用是什么?

    • 无参数构造器: 初始化对象时,成员变量的数据均采用默认值。
    • 有参数构造器: 在初始化对象的时候,同时可以接收参数为对象进行赋值。

    3.构造器有哪些注意事项?

    • 任何类定义出来, 默认就自带了无参数构造器,写不写都有。
    • 一旦定义了有参数构造器,无参数构造器就没有了,此时就需要自己写无参数构造器了。

    this关键字的作用

    可以用于指定访问当前对象的成员变量、成员方法。

    1. this关键字是什么?
    • 出现在构造器和成员方法中,代表当前对象的地址。
    1. this关键字在构造器中、成员方法中可以做什么?
    • 可以用于指定访问当前对象的成员。
  • 相关阅读:
    第十章 配置 IIS 以与 Web 网关配合使用 (Windows) - 映射 InterSystems IRIS 文件扩展名
    【vue3】:前端登录功能解决方案
    【转载】 Bytedance火山引擎智能拥塞控制算法 VICC
    智能文档处理IDP关键技术与实践
    springboot使用redis实现消息队列功能,redis使用list和stream实现消息队列功能,redis实现消息队列的风险点分析
    带你玩转 Redis 的 SortedSet 数据类型
    【web前端】JavaScript 笔记小结(Day 2)
    openfeign客户端调用远程服务端接口,传递参数为null及服务端接口返回值为null的情况
    可扩展性对物联网管理系统有哪些影响?
    AD7021C 触摸感应加灯光调节芯片IC 可用于触摸台灯、触摸玩具灯等
  • 原文地址:https://blog.csdn.net/weixin_46112690/article/details/127672062