任务 | 姓名 |
---|---|
编码规范,面向对象设计 | 王奥运 |
前期调查与功能设计,PPT制作或博客制作 | 陈伟盛 |
前期调查以京东为例,
购物车中展示的项目有:商品名称,商品单价,商品数量,商品总价。其中商品数量可选,商品可删除。
进入结算前,可选多种商品。结算时有一次确认订单,可返回购物车修改。
商品的名称单价数量总价等属性不可直接修改不可访问,只能通过对外接口如查询商品信息,修改数量,删除商品等。
购物车类
package com.jmu.shoppingcart; import java.math.BigDecimal; import java.util.HashMap; import java.util.Map; import java.util.Scanner; public class Cart { private BigDecimal totalPrice = new BigDecimal("1"); Map<Commodity, Integer> cart = new HashMap<>(); public Cart() { } @Override public String toString() { return cart + ""; } public void updateCart() { System.out.print("请输入要修改的商品的名称:"); Scanner Sc = new Scanner(System.in); String name = Sc.nextLine(); Commodity commodity = findCommodity(name); if (commodity != null) { System.out.print("请输入您要修改的数量:"); int number = Integer.valueOf(Sc.nextLine()); int addnumber = cart.get(commodity) - number; if (!updateNumber(commodity, number)) { System.out.println("您输入的数量有误,请重新输入"); updateCart(); } // else { // heixin.commoditys.put(commodity, heixin.commoditys.get(commodity) + addnumber); // } } else { System.out.println("购物车内没有该商品,请重新输入"); updateCart(); } } public boolean updateNumber(Commodity commodity, int number) { if (cart.get(commodity) < number) { return false; } else if (number == 0) { cart.remove(commodity); return true; } cart.put(commodity, number); return true; } public void add(Commodity goods, int number) { if(cart.containsKey(goods)){ cart.put(goods, cart.get(goods)+number); }else { cart.put(goods, number); } } public BigDecimal price() { if (cart.isEmpty()) { return new BigDecimal("0"); } totalPrice = new BigDecimal("0"); cart.forEach((K, V) -> { BigDecimal k = new BigDecimal(K.getPrice() + ""); BigDecimal v = new BigDecimal(V + ""); BigDecimal temp1 = k.multiply(v); totalPrice = totalPrice.add(temp1); //System.out.println(totalPrice); }); return totalPrice; } public Commodity findCommodity(String name) { for (Commodity commodity : cart.keySet()) { if (commodity.getName().equals(name)) { return commodity; } } return null; } public void showCart() { System.out.println("===============您的购物车============="); System.out.println("ID\t\t\tname\t\t\t\tprice\t\t\t\tnumber"); cart.forEach((K,V)->{ System.out.println(K+"\t"+V); }); } }
商品类
package com.jmu.shoppingcart; public class Commodity { private String name; private double price; private int ID; public Commodity(String name, double price, int ID) { this.name = name; this.price = price; this.ID = ID; } 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; } @Override public String toString() { return ID+"\t\t\t"+name+"\t\t\t\t"+price+"\t\t\t\t"; } }
商店类
package com.jmu.shoppingcart; import java.util.HashMap; import java.util.LinkedHashMap; import java.util.Map; public class Store { private static int ID=0; Map<Commodity,Integer> commoditys= new LinkedHashMap<>(); public void add(String name,double price,int number){ Commodity commodity=new Commodity(name,price,ID++); commoditys.put(commodity,number); } public void showStory(){ System.out.println("ID\t\t\tname\t\t\t\tprice\t\t\t\tnumber"); commoditys.forEach((K,V)->{ System.out.println(K+"\t"+V); }); } public Commodity findCommodity(String name) { for (Commodity commodity : commoditys.keySet()) { if(commodity.getName().equals(name)){ return commodity; } } return null; } public int getRepertory(Commodity commodity) { return commoditys.get(commodity); } public void update(Commodity commodity,int number) { commoditys.put(commodity,commoditys.get(commodity)-number); } }