课时144:综合实战:超市购物车

简介: 本案例旨在运用面向对象编程的概念,模拟小明去超市购物的生活场景。1.场景概述2.代码实现步骤3.代码优缺点分析

课时144:综合实战:超市购物车

 

摘要:本案例旨在运用面向对象编程的概念,模拟小明去超市购物的生活场景。

1.场景概述

2.代码实现步骤

3.代码优缺点分析

 

01.场景概述

 

具体流程为:小明作为客户端,将购买的商品放入购物车,最后到收银台进行统一结账。购物车主要用于存放商品,我们关注商品的名称、价格等信息;收银台的主要功能是对购物车中的商品进行结算。

image.png  

 

02.代码实现步骤

 

2.1定义商品标准

首先,我们需要定义一个商品的标准,用于规范商品的基本属性。以下是示例代码:

interface IGoods {    // 定义商品标准
    public String getName();
    public double getPrice();
}

在这个接口中,我们定义了两个方法getName()getPrice(),分别用于获取商品的名称和价格。

 

2.2定义购物车标准

为了避免类与类之间的强耦合,我们需要定义一个购物车的标准。购物车应具备添加商品、删除商品以及返回所有商品信息的功能。以下是示例代码:

interface IShopCar {    // 定义购物车
    public void add (IGoods goods);    //添加商品信息
    public void delete (IGoods goods);    // 删除商品
public Object[ ] getAll() ;    // 获得购物车中的全部商品信息
}

 

2.3定义一个购物车的实现类

接下来,我们需要实现购物车接口,创建一个具体的购物车类。这里我们使用链表来存储商品信息,以避免数组内容频繁修改带来的麻烦。以下是示例代码:

class ShopCar implements IShopCar {   // 定义购物车
    private ILink<IGoods> Allgoodses = new LinkeImpl<IGoods>();
    public void add (IGoods goods) {
        this.allGoodses.add(goods)
    }
    public void delete (IGoods goods) {
        this.allGoodses.remove (goods);
    }
    public Object[ ] getAll () {
        return this.allGoodses.toArray();
    }
}

 

2.4定义收银台类

收银台类负责对购物车中的商品进行结算,计算商品的总价和总数量。以下是示例代码:

class Cashier {    // 定义收银台
    private IShopCar shopcar;
    public Cashier(IShopCar shopcar) {
        this.shopcar = shopcar;
    }
public double allPrice() {    // 计算总价
    double all = 0.0;
        Object result = this.shopcar.getAll ();
        for (Object obj : result) {
                IGoods goods = (IGoods) obj;
                all += goods.getPrice();
            }
            return all ;
        }
    public int allCount() {    // 商品数量
        return this.shopcar.getAll ().length;
    }
}

 

2.5定义具体商品类

我们定义两个具体的商品类:图书类和背包类,它们都需要实现IGoods接口。同时,为了能够正确删除商品,我们需要重写equals()方法。以下是图书类的示例代码:

class Book implements IGoods {    // 定义图书
    private String name;
    private double price;
    public Book(String name, double price) {
        this.name = name;
        this.price = price;
    }
    public String getName() {
        return this.name;
    }
    public double getPrice() {
        return this.price;
    }
    public boolean equals(Object obj) {
        if (obj == null) {
            return false;
        }
        if (this == obj) {
            return true;
        }
        if (!(obj instanceof Book)) {
           return fales ;
        Book book = (Book) obj;
        return this.name.equals(book.name) && this.price == book.price;
    }
Public String toString() {
    return "【图书信息】名称:" + this.name + "、价格" + this.price;
    }
}
class Bag implements IGoods {    // 定义背包
    private String name;
    private double price;
    public Bag(String name, double price) {
        this.name = name;
        this.price = price;
    }
    public String getName() {
        return this.name;
    }
    public double getPrice() {
        return this.price;
    }
    public boolean equals(Object obj) {
        if (obj == null) {
            return false;
        }
        if (this == obj) {
            return true;
        }
        if (!(obj instanceof Bag)) {
           return fales ;
        Bag bag = (Bag) obj;
        return this.name.equals(bag.name) && this.price == bag.price;
    }
Public String toString() {
    return "【背包信息】名称:" + this.name + "、价格" + this.price;
    }
}

 

2.6代码测试

最后,我们编写测试代码,模拟小明购物和结账的过程。以下是示例代码:

public class JavaDemo {
    public static void main(String[] args) {
        IShopCar car = new ShopCar();
        car.addGoods(new Book("Java开发", 79.8));
        car.addGoods(new Book("Oracle开发", 89.8));
        car.addGoods(new Bag("小强背包", 889.8));
        Cashier cas = new Cashier(car);
        System.out.println("总价格:" + cas.allPrice() + "、购买总数量:" + cas.allCount());
    }
}

image.png

 

03.代码优缺点分析

 

3.1优点

通过使用链表存储商品信息,避免了数组内容频繁修改带来的麻烦,提高了代码的灵活性和可维护性。同时,采用面向对象的编程思想,将不同的功能模块封装在不同的类中,降低了代码的耦合度。

 

3.2缺点

当前代码存在一定的局限性,例如不能存储商品的购买数量。若要实现该功能,仅依靠链表是不够的,需要学习更加复杂的数据结构。

相关文章
|
12月前
|
前端开发 Java 关系型数据库
超市商品管理系统的设计与实现(论文+源码)_kaic
超市商品管理系统的设计与实现(论文+源码)_kaic
|
4月前
|
安全 搜索推荐 数据挖掘
虾皮店铺商品API接口的开发、运用与收益
虾皮(Shopee)作为东南亚领先的电商平台,通过开放API接口为商家和开发者提供了全面的数据支持。本文详细介绍虾皮店铺商品API的开发与运用,涵盖注册认证、API文档解读、请求参数设置、签名生成、HTTP请求发送及响应解析等步骤,并提供Python代码示例。API接口广泛应用于电商导购、价格比较、商品推荐、数据分析等场景,带来提升用户体验、增加流量、提高运营效率等收益。开发者需注意API密钥安全、请求频率控制及遵守使用规则,确保接口稳定可靠。虾皮API推动了电商行业的创新与发展。
356 31
|
9月前
|
数据采集 数据可视化 搜索推荐
Python爬虫技术从去哪儿网获取旅游数据,对攻略进行可视化分析,提供全面的旅游攻略和个性化的出行建议
本文利用Python爬虫技术从去哪儿网获取旅游数据,通过数据处理和可视化分析,提供了全面的旅游攻略和个性化出行建议,同时探讨了热门目的地、出游方式、时间段以及玩法的偏好,为旅游行业和游客提供了有价值的参考信息。
546 9
|
12月前
|
SQL 开发框架 安全
超市商品信息管理系统设计与实现(论文+源码)_kaic
超市商品信息管理系统设计与实现(论文+源码)_kaic
|
12月前
|
存储 关系型数据库 MySQL
校园闲置物品交易平台的设计与实现(论文+源码)_kaic
校园闲置物品交易平台的设计与实现(论文+源码)_kaic
|
12月前
|
数据采集 API
快手商品数据采集神器,助你轻松获取商品详情数据
快手商品数据采集神器,助你轻松获取商品详情数据
|
缓存 算法 搜索推荐
618省心凑背后的新算法——个性化凑单商品打包购推荐
作为购物导购链路的一个重要环节,凑单旨在快速帮助用户找到达成某个满减门槛(比如满300减50)的商品,完成性价比最高的跨店组合结算。
924 0
618省心凑背后的新算法——个性化凑单商品打包购推荐
|
SQL 前端开发 程序员
超市商品信息管理系统设计与实现(论文+源码)
本次主要先介绍研究背景、研究目标及相应价值的基础上,分析了国内外电子商务及相应超市管理系统的研究现状。随着计算机技术和网络技术的发展,顾客购买方式也从商店购买发展到超市管理系统。由于学生对商品的需求非常大,所以我想设计一个超市管理系统信息系统。
419 0
超市商品信息管理系统设计与实现(论文+源码)
|
人工智能 算法
如何让店铺在点评网站上一眼出众?
如何让店铺在点评网站上一眼出众?
160 2
如何让店铺在点评网站上一眼出众?
|
前端开发 JavaScript 搜索推荐
网络购物商场系统的设计与实现(论文+源码)_kaic
近年来,随着网络购物的兴起和普及,针对该市场需求开发一款在线购物系统是大势所趋。和实体店对比,在线购物系统商品种类齐全,价格优惠、还能够送货上门等优势。在此类系统中,用户能够在网上购物,可以随意挑选挑选物美价廉的商品不仅方便而且快捷,并保证线上线下共同受益,促进了经济市场的蓬勃发展。 首先,对系统可靠性、易用性以及安全性进行了分析,接着对5个功能模块流程进行详细的分析;其次,对系统功能实现内容和开发过程仔细介绍,随后,详细阐述了数据库设计内容。系统采用了SSM作为前端主流开发技术,JavaScript语言,数据库为MySQL,完成了登录注册模块、商品详情模块设计、订单支付模块设计、个人中心模块
OSZAR »