购物车程序的面向对象设计

本文探讨了如何在京东购物场景中设计数据结构,创建Commodity商品类和ShoppingCart购物车类,实现添加、下架、搜索和计算总价功能。通过UML类图展示了用户、商城、商品等核心组件及其交互过程。
摘要由CSDN通过智能技术生成

人员分工

任务人员
前期调查与功能设计、面向对象设计余锋
面向对象设计、博客制作、代码规范李奇

1. 前期调查

以京东购物为例,我们搜索数据结构和JDK学习笔记,这里就需要一个商品的类,Commodity

 

 屏幕截图 2021-10-03 160112

将他们加入购物车,需要一个购物车类,ShoppingCart

我们发现这里的数量可以调整,且与后来提交的订单有直接关系

 每个商品都有自己独有的编号、名字、单价等,这些就是商品类中的属性

2. 系统功能结构图

 关键代码

public void putOnTheShelf()
    {
        read();
        System.out.println("请输入商品名称,价格,及库存");
        String data=Main.sc.nextLine();
        String dataSplit[] = data.split(" ");
        Commodity commodityIsExist=isExistCommodity(dataSplit[0]);
        if(commodityIsExist!=null)
        mallHashMap.merge(commodityIsExist,Integer.parseInt(dataSplit[2]),Integer::sum);
        else {
            Commodity commodity=new Commodity(dataSplit[0],Double.parseDouble(dataSplit[1]));
            mallHashMap.put(commodity, Integer.valueOf(dataSplit[2]));
        }
        //merge()它将新的值赋值到 key (如果不存在)或更新给定的key 值对应的 value,最后的是remappingFunction,返回参数总和

        writeCommodity();
    }

 关键代码

public void offShelf()
    {
        read();
        System.out.println("请输入下架商品名称");
        String commodityName=Main.sc.nextLine();
        Commodity commodity= isExistCommodity(commodityName);
        if(commodity==null){
            System.out.println("找不到该商品!");
        }else {
            mallHashMap.remove(commodity);
            System.out.println("下架成功!");
        }

        writeCommodity();
    }

关键代码

public void searchCommodity()
    {
        System.out.println("请输入查找的商品名称");
        String commodityName=Main.sc.nextLine();
        Commodity commodity=isExistCommodity(commodityName);
        if(commodity!=null)
        {
            System.out.println("商品名称:"+commodity.getName()+" 商品单价:"+Main.df.format(commodity.getPrice())
                    +" 商品库存:"+mallHashMap.get(commodity));
        }else {
            System.out.println("不存在该商品");
        }
    }

计算商品总价

public double getPrice()
    {
        double sum=0;
        for (Commodity commodity: shoppingCartHashMap.keySet()) {
            sum+=commodity.getPrice()*shoppingCartHashMap.get(commodity);   //单价*键值(即数量)
        }
        return sum;
    }


3. 系统描述


描述
用户在网上商城搜索浏览商品, 一旦看到中意的商品可将商品放入购物车,可放多个。并可在购物车增删商品、获得所有商品价格,最后可点击结算生成订单

用户、商城、商品、购物车、订单

方法

读入、写入、是否存在商品、放入,增加、删除,下架、展示、结算,搜索

4. UML类图与代码

 


Commodity


字段名字、价格、库存stock私有化,体现封装性

package shop;  
 
//商品  
public class Commodity {  
    private String name;   //名称  
    private double price;  //价格  
    private int stock;      //库存  
 
    public Commodity(String name, double price, int stock) {  
        this.name = name;  
        this.price = price;  
        this.stock = stock;  
    }  
 
    public String getName() {  
        return name;  
    }  
 
    public void setName(String name) {  
        this.name = name;  
    }  
 
    public double getPrice() {  
        return price;  
    }  
 
    public void setPrice(double price) {  
        this.price = price;  
    }  
 
    public int getStock() {  
        return stock;  
    }  
 
    public void setStock(int stock) {  
        this.stock = stock;  
    }  
}  



ShoppingCart

image-20211003230140111


用哈希表将商品存入购物车,其中有加入商品,删除商品,清空购物车,结算订单

package shop;

import java.util.ArrayList;
import java.util.HashMap;
import java.util.Map;

//购物车
public class ShoppingCart {
    private HashMap<Commodity,Integer> shoppingCartHashMap;        //哈希容器,前者是商品,后者是数量


    //将num个商品加入购物车
    public void addCommodity(Commodity commodity,int num)
    {
        shoppingCartHashMap.merge(commodity,num,Integer::sum);
        //merge()它将新的值赋值到 key (如果不存在)或更新给定的key 值对应的 value,最后的是remappingFunction,返回参数总和
    }

    //将商品移除购物车
    public void removeCommodity(Commodity commodity,int num)
    {
        shoppingCartHashMap.remove(commodity);
    }

    //计算商品总价
    public int getPrice()
    {
        int sum=0;
        for (Commodity commodity: shoppingCartHashMap.keySet()) {
            sum+=commodity.getPrice()*shoppingCartHashMap.get(commodity);   //单价*键值(即数量)
        }
        return sum;
    }

    //清空购物车
    public void clearShoppingCart(){
        shoppingCartHashMap.clear();
    }
}


Customer


用户名和购物车私有,新建时初始化购物车。

 

package shop;


//顾客
public class Customer {
    private String userName;
    private ShoppingCart shoppingCart=new ShoppingCart();

    public Customer(String userName) {
        this.userName = userName;
    }

    public String getUserName() {
        return userName;
    }

    public ShoppingCart getShoppingCart() {
        return shoppingCart;
    }
}


5. 其他


目前将所有类放在shop包名下,因此可以更好得互相调用


image-20211003231726142

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值