迷你项目练习题6超市与购物车

题目

模拟实现用户购买商品的功能,使用数组模拟商品列表,当购买的商品不存在或者商品库存为0时,抛出自定义异常。用户购买某一个商品时,对异常进行处理,并对库存进行改变。
并实现添加商品到购物车,购物车列表,从购物车删除商品,清空购物车

Product商品类

/**
 * 商品类
 */
public class Product {
    private int id;
    private String name;
    private double price;
    private int countProduct;
    //有参构造
    public Product(int id,String name, double price,int countProduct) {
        this.id = id;
        this.name = name;
        this.price = price;
        this.countProduct = countProduct;
    }
    //Getter&Setter
    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 getId() {
        return id;
    }
    public void setId(int id) {
        this.id = id;
    }
    public int getCountProduct() {
        return countProduct;
    }

    public void setCountProduct(int countProduct) {
        this.countProduct = countProduct;
    }
}

CartItem类 购物项类

/**
 * 购物项类
 */
public class CartItem {
    /*
    产品 数量 小计
     */
    private Product product;
    private int count;
    private double subTotal;
    //有参构造
    public CartItem(Product product, int count) {
        this.product = product;
        this.count = count;
    }
    //Getter & Setter
    public Product getProduct() {
        return product;
    }

    public void setProduct(Product product) {
        this.product = product;
    }

    public int getCount() {
        return count;
    }

    public void setCount(int count) {
        this.count = count;
    }

    public double getSubTotal() {
        return product.getPrice()*count;
    }

    public void setSubTotal(double subTotal) {
        this.subTotal = subTotal;
    }
}

Shop超市类

public class Shop {
    //商品数组
    private Product[] products;
    private int length = 5;
    //构造器
    public Shop() {
        products = new Product[length];
        //产品对象
        products[0] = new Product(1001,"巧克力", 10, 1000);
        products[1]= new Product(1002,"方便面", 2, 1000);
        products[2]= new Product(1003,"矿泉水", 1, 5000);
        products[3] = new Product(1004,"冰红茶", 5, 1000);
        products[4] = new Product(1005,"冰激凌", 1, 1000);
    }

    public Product[] getProducts() {
        return products;
    }
    public void print(){
        for (int i = 0; i < products.length; i++) {
            System.out.print("编号:"+products[i].getId());
            System.out.print("  名称:"+products[i].getName());
            System.out.print("  数量:"+products[i].getCountProduct());
            System.out.println("  单价:"+products[i].getPrice());
        }
    }
}

Cart购物车类

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

/**
 * 购物车类
 */
public class Cart {
    //存储商品的集合
    private Map<Integer,CartItem> map;
    //总价格
    private double total;
    private Shop shop;
    //构造器
    public Cart(Shop shop) {
        map = new HashMap<>();
        this.shop = shop;
    }
    //Getter & Setter
    public Map<Integer, CartItem> getMap() {
        return map;
    }

    public void setMap(Map<Integer, CartItem> map) {
        this.map = map;
    }

    public double getTotal() {
        return total;
    }
    //向购物车中添加商品的方法
    public void add(Integer id,int count) {
        CartItem cartItem = map.get(id);
        //判断商品编号有没有找到
        boolean flag = false;
        for (int i = 0; i < shop.getProducts().length; i++) {
            if (id == shop.getProducts()[i].getId()) {
                flag = true;
                if(cartItem == null){
                    map.put(id, new CartItem(shop.getProducts()[i], count));
                    shop.getProducts()[i].setCountProduct(shop.getProducts()[i].getCountProduct() - count);
                }else {
                    cartItem.setCount(cartItem.getCount() + count);
                   shop.getProducts()[i].setCountProduct(shop.getProducts()[i].getCountProduct() - count);
                }
            }
        }
        if(!flag){
            System.out.println("没有该商品编号");
        }
    }
    //购物车删除商品(连同数量一起删除)
    public void remove(Integer id){
        CartItem cartItem = map.get(id);
        if(map.get(id) == null){
            System.out.println("没有该商品");
        }else {
            cartItem.getProduct().setCountProduct(cartItem.getProduct().getCountProduct() + cartItem.getCount());
            map.remove(id);
        }
    }
    //购物车减少某件商品的数量
    public void remove(Integer id,int count){
        CartItem cartItem = map.get(id);
        if(cartItem ==null){
            System.out.println("没有该商品");
        }else {
            cartItem.getProduct().setCountProduct(cartItem.getProduct().getCountProduct() + count);
            cartItem.setCount(cartItem.getCount() -count);
        }
    }
    //清空购物车
    public void remove(){
        for (Integer integer : map.keySet()) {
            map.get(integer).getProduct().setCountProduct(map.get(integer).getCount() + map.get(integer).getProduct().getCountProduct());
        }
        map.clear();
        total = 0;

    }
    //打印所有商品的方法
    public void print(){
        if(map.size() == 0){
            System.out.println("你的购物车是空的");
        }
        for (Integer integer : map.keySet()) {
            System.out.print("编号:"+map.get(integer).getProduct().getId());
            System.out.print("  名称:"+map.get(integer).getProduct().getName());
            System.out.print("  数量:"+map.get(integer).getCount());
            System.out.println("  小计:"+map.get(integer).getSubTotal());
        }

    }
}

Test测试类

import java.util.Scanner;

/**
 * 测试类
 */
public class Test {
    public static void main(String[] args) {
        //Scanner类对象
        Scanner sc = new Scanner(System.in);
        //创建超市类对象
        Shop shop = new Shop();
        //创建购物车对象
        Cart cart = new Cart(shop);
        while (true) {
            System.out.println("=================================");
            System.out.println("请选择要执行的功能");
            System.out.println("1.查看商品列表");
            System.out.println("2.向购物车中添加商品");
            System.out.println("3.移除购物车的某种商品");
            System.out.println("4.减少购物车种某种商品的数量");
            System.out.println("5.查看购物车");
            System.out.println("6.清空购物车");
            System.out.println("0.退出程序");
            int select = sc.nextInt();
            switch (select) {
                case 1:
                    shop.print();break;
                case 2:
                //商品列表
                shop.print();
                System.out.println("请输入你要添加的商品编号:");
                int id = sc.nextInt();
                System.out.println("请输入你要添加的商品数量");
                int count = sc.nextInt();
                cart.add(id, count);
                break;
                case 3:
                    System.out.println("请输入要删除的商品的编号:");
                    int idRemove1 = sc.nextInt();
                    cart.remove(idRemove1);
                    break;
                case 4:
                    System.out.println("请输入要减少数量的商品的编号:");
                    int idRemove2 = sc.nextInt();
                    System.out.println("请输入要减少的数量:");
                    int countRemove = sc.nextInt();
                    cart.remove(idRemove2,countRemove);
                    break;
                case 5:
                    cart.print();break;
                case 6:
                    cart.remove();break;
                case 0 :
                    System.out.println("欢迎您的下次光临");
                    System.exit(0);
                    break;
                default:
                    System.out.println("你输入的数字不对,请重试");break;
            }
        }
    }
}
  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
import java.util.HashMap; import java.util.Map; import java.util.Map.Entry; import java.util.Set; /** * 购物车类 */ public class Cart { //创建一个map对象,用来保存商品,key为商品,value为商品的数量 private Map<Goods, Integer> map = new HashMap<Goods, Integer>(); /** * 添加商品到购物车方法 * @param id 商品编号 * @param quantity 商品数量 */ public void addGoods(int id, int quantity){ Goods goods = GoodsDB.goodsMap.get(id); if(goods!=null){ Integer oQuantity = map.get(goods);//获取商品在购物车中原本的数量 if(oQuantity!=null){ oQuantity += quantity; }else{ oQuantity = quantity; } map.put(goods, oQuantity);//添加商品到map中 System.out.println("添加商品"+goods.getName()+"成功!"); }else{ System.out.println("添加失败!商品编号不存在!"); } } /** * 按指定的编号删除商品 * @param id 商品编号 */ public void delGoods(int id){ Goods goods = GoodsDB.goodsMap.get(id); if(goods!=null){ map.remove(goods);//从map删除商品 System.out.println("删除商品"+goods.getName()+"成功!"); }else{ System.out.println("删除失败!商品编号不存在!"); } } /** * 修改商品数量方法 * @param id 商品编号 * @param quantity 要修改的商品数量 */ public void updateGoods(int id, int quantity){ Goods goods = GoodsDB.goodsMap.get(id); if(goods!=null){ map.put(goods, quantity);//从map删除商品 }else{ System.out.println("修改失败!商品编号不存在!"); } } /** * 打印购物车商品列表 */ public void show(){ Set<Entry<Goods, Integer>> entrySet = map.entrySet(); System.out.println("编号\t单价\t数量\t名称\t总价"); for(Entry<Goods, Integer> entry:entrySet){ Goods goods = entry.getKey(); Integer quantity = entry.getValue(); System.out.println(goods.getId()+"\t"+goods.getPrice()+"\t"+quantity+"\t"+goods.getName()+"\t"+goods.getPrice()*quantity); } } }
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

香鱼嫩虾

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值