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);
}
}