编程练习(购物车demo)

package com.springboot.demo.cart;

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

public class CartTest {
public static final String SUM_COST_STR = " 你一共需要支付:%f元";
private static final Map<Integer, Goods> GOODS_MAP = new HashMap<Integer, Goods>() {{
put(1, new Goods(1, “香蕉”, 5.03, 30));
put(2, new Goods(2, “辣条”, 1.03, 20));
put(3, new Goods(3, “大米”, 15.03, 10));
put(4, new Goods(4, “面条”, 35.03, 5));
}};

private static final Map<Integer, Runnable> PRINT_FUNCTION_STR_MAP = new HashMap<Integer, Runnable>() {{
    put(1, () -> System.out.println("----功能列表----"));
    put(2, () -> System.out.println("(1)添加商品到购物车"));
    put(3, () -> System.out.println("(2)查看商品属性"));
    put(4, () -> System.out.println("(3)删除购物车商品"));
    put(5, () -> System.out.println("(4)查看购物车所有商品"));
    put(6, () -> System.out.println("(5)结账(打印小票)"));
}};

private static final Map<Integer, CarAddFunction<Goods>> PRINT_ADD_CART_STR_MAP = new HashMap<Integer, CarAddFunction<Goods>>() {{
    put(1, (goods) -> {
        System.out.println("请输入商品的编号");
        goods.setId(SC.nextInt());
        return goods;
    });

    put(2, (goods) -> {
        System.out.println("请输入添加的商品名称");
        goods.setName(SC.next());
        return goods;

    });
    put(3, (goods) -> {
        System.out.println("请输入" + goods.getName() + "的单价");
        goods.setPrice(SC.nextDouble());
        return goods;
    });

    put(4, (goods) -> {
        System.out.println("请输入" + goods.getName() + "的数量");
        goods.setNumbers(SC.nextInt());
        return goods;
    });

}};

private static final Scanner SC = new Scanner(System.in);

private static final Map<Integer, Runnable> FUNCTION_MAP = new HashMap<Integer, Runnable>() {{
    put(0, () -> System.out.println("不在访问功能列表中......"));
    put(1, () -> {
        addCart();
        businessListPrint();
    });
    put(2, () -> {
        findCartById();
        businessListPrint();
    });
    put(3, () -> {
        deleteCartById();
        businessListPrint();
    });
    put(4, () -> {
        view();
        businessListPrint();
    });
    put(5, () -> {
        print();
        businessListPrint();
    });

}};
private static final String CART_LIST_STR = "-----------购物清单-----------";
private static final String CART_LIST_HEAD_STR = "编号\t名字\t价格\t数量";
private static final String T_SEPARATOR_STR = "\t";
private static final String WELCOME_STR = "------欢迎光临XXX XXX超市-------";
private static final String NO_CART_GOODS_MESSAGE = "你未购买任何商品";
private static final String REPERTORY_STR = "----------------------------";
private static final String INPUT_DELETE_ID_STR = "请输入要删除商品的编号";
private static final String INPUT_NOT_CART_ID_STR = "该商品编号不存在,请重新输入";
private static final String DELETE_CART_SUCCESS = "商品的编号删除成功";
private static final String NO_INPUT_GOODS_ID_STR = "该商品编号不存在,请重新输入(y/n)";
private static final String YES_STR = "y";


public static void main(String[] args) {
    businessListPrint();
}

@FunctionalInterface
public interface CarAddFunction<T> {
    T get(T t);
}

private static void businessListPrint() {
    // 打印功能列表
    PRINT_FUNCTION_STR_MAP.values().forEach(Runnable::run);
    // 输入业务编号
    int way = SC.nextInt();
    // 业务选择
    FUNCTION_MAP.get(way).run();
}

private static void addCart() {
    // 打印商品编号输入提示
    Goods goods = PRINT_ADD_CART_STR_MAP.get(1).get(new Goods());

    // 添加购物车
    toAddCart(goods);
}

/**
 * 执行添加购物车
 *
 * @param goods 商品实体类
 */
private static void toAddCart(Goods goods) {
    // 购物车存在该商品
    if (!notExistId(goods.getId())) {
        goods.setNumbers(goods.getNumbers() + 1);
        return;
    }

    // 购物车不存在该商品
    PRINT_ADD_CART_STR_MAP.keySet().stream().filter(id -> id != 1).forEach(id -> PRINT_ADD_CART_STR_MAP.get(id).get(goods));
    GOODS_MAP.put(goods.getId(), goods);
}

/**
 * 查看购物车
 */
public static void view() {
    System.out.println(CART_LIST_STR);
    System.out.println(CART_LIST_HEAD_STR);
    GOODS_MAP.values().forEach(g -> {
        String goodsStr = g.getId() + T_SEPARATOR_STR + g.getName() + T_SEPARATOR_STR + g.getPrice() + T_SEPARATOR_STR + g.getNumbers();
        System.out.println(goodsStr);
    });
    System.out.println();
}

/**
 * 打印小票
 */
public static void print() {
    //总价
    double sum = 0;
    System.out.println(WELCOME_STR);
    System.out.println(CART_LIST_STR);
    if (noCartGoods()) {
        System.out.println(NO_CART_GOODS_MESSAGE);
        return;
    }
    System.out.println(CART_LIST_HEAD_STR);
    for (Goods g : GOODS_MAP.values()) {
        String goodsStr = g.getId() + T_SEPARATOR_STR + g.getName() + T_SEPARATOR_STR + g.getPrice() + T_SEPARATOR_STR + g.getNumbers();
        System.out.println(goodsStr);
        sum += g.getPrice() * g.getNumbers();
    }
    System.out.println(REPERTORY_STR);
    System.out.printf(SUM_COST_STR, sum);
    System.out.println();
}

/**
 * 购物车是否存在商品
 *
 * @return 如果不存在,返回true;否则,返回false
 */
private static boolean noCartGoods() {
    return GOODS_MAP.values().size() == 0;
}

/**
 * 根据商品编号删除购物车商品
 */
private static void deleteCartById() {
    System.out.println(INPUT_DELETE_ID_STR);
    int id = SC.nextInt();
    if (notExistId(id)) {
        System.out.println(INPUT_NOT_CART_ID_STR);
        if ("y".equals(SC.next())) {
            findCartById();
        }
        return;
    }
    GOODS_MAP.remove(id);
    System.out.println(DELETE_CART_SUCCESS);
    System.out.println();
    System.out.println();
}

/**
 * 根据商品编号查看购物车商品
 */
private static void findCartById() {
    int id = PRINT_ADD_CART_STR_MAP.get(1).get(new Goods()).getId();
    if (notExistId(id)) {
        System.out.println(NO_INPUT_GOODS_ID_STR);
        String flag = SC.next();
        if (YES_STR.equals(flag)) {
            findCartById();
        }
        return;
    }
    System.out.println(GOODS_MAP.get(id).toString());
    System.out.println();
}

/**
 * 是否存在商品编号
 *
 * @param id 商品编号
 * @return 如果不存在,则返回true;否则,返回false
 */
private static boolean notExistId(int id) {
    return !GOODS_MAP.containsKey(id);
}

}

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

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值