购物车程序的面向对象设计
1.人员分工:
姓名 | 任务 |
陈丹宇 | 编码规范、面向对象设计、功能设计 |
韦早辉 | 前期调查、博客制作 |
2.前期调查:
2.1登录京东我们可以在搜索栏中搜索先要购买的商品名称
2.2搜索后可以看见商品的名称,价格,然后将心仪的一定数量的商品添加入购物车
2.3在购物车我们可以看见商品的总价,删除一定数量的商品,或者一键清空购物车,最后进行结账
3.系统系统描述:
登录京东,然后在搜索栏中输入商品名称,搜索后可以看见商品的编号,名称,价格,然后将心仪的一定数量的商品添加至购物车,在购物车中可见看见所展示的商品,可以对一定数量的商品进行删除或者清空购物车,最后得出商品的总价后结账
4.系统结构图:
5.UML类图:
6.体现了面向对象的封装性:
在同一个包内调用Class文件
7.程序的实现
7.1浏览商品及功能界面
7.2实现向购物车内添加商品
7.3删除购物车内的物品
7.4查看购物车内的商品
7.5实现结账功能
7.6清空购物车
8.项目包结构与关键代码:
8.1Main类
package Shoppingcart; import java.util.Scanner; public class Main { public static void main(String[] args){ Product[] products = new Product[4]; products[0] = new Product(100,"华为P50",4988); products[1] = new Product(200,"小米11",3699); products[2] = new Product(300,"红魔6s",4899); products[3] = new Product(400,"苹果13",6799); Scanner scanner = new Scanner(System.in); System.out.println("是否开始购物?(Y/N)"); String ans = scanner.nextLine(); if (ans.equals("Y") || ans.equals("y")){ ShoppingCart shoppingCart = new ShoppingCart(); System.out.println("\t\t华强手机旗舰店"); Menu.show(); 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("==========================================="); int choose = scanner.nextInt(); if (choose == 1){ System.out.println("请输入您要添加的商品的编号"); int productNum = scanner.nextInt(); Product p = getProduct(productNum,products); if (p != null){ System.out.println("请输入要该类商品的添加数量"); int addCount = scanner.nextInt(); shoppingCart.addProducts(p,addCount); }else { System.out.println("输入的商品编号有误!"); } } if (choose == 2){ System.out.println("请输入您要删除的商品的编号"); int productNum = scanner.nextInt(); Product p = getProduct(productNum,products); if (p != null){ System.out.println("请输入要该类商品的删除数量"); int delCount = scanner.nextInt(); shoppingCart.removeProducts(p,delCount); }else { System.out.println("输入的商品编号有误!"); } } if (choose == 3){ shoppingCart.clearShoppingCar(); }if (choose == 4){ shoppingCart.lookCart(); } if (choose == 5){ shoppingCart.checkOut(); }if (choose == 6){ System.out.println("感谢您的惠顾,祝您生活愉快!"); break; } } } else { System.exit(0); } } //传入一个商品编号 返回一个商品 public static Product getProduct(int num,Product[] products){ for (int i=0 ;i<products.length;i++){ int id = products[i].getId(); if (id == num){ return products[i]; } } return null; } }
8.2Menu类
package Shoppingcart; public class Menu{ public static void show(){ System.out.println("==========================================="); Product[] products = new Product[4]; products[0] = new Product(100,"华为P50",4988); products[1] = new Product(200,"小米11",3699); products[2] = new Product(300,"红魔6s",4899); products[3] = new Product(400,"苹果13",6799); System.out.println(products[0]); System.out.println(products[1]); System.out.println(products[2]); System.out.println(products[3]); System.out.println("==========================================="); } }
8.3Product类
package Shoppingcart; public class Product{ private Integer id; private String name; private double price; public Product(Integer id, String name, double price) { this.id = id; this.name = name; this.price = price; } public Integer getId() { return id; } public void setId(Integer id) { 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; } @Override public String toString() { System.out.println("编号"+"\t"+"商品名"+"\t "+"售价"); return id+"\t"+name+"\t "+price; // // " 编号:" + id + // " 名称:" + name + // " 单价:" + price ; } }
8.4ShoppingCart类
package Shoppingcart; import java.util.HashMap; import java.util.Map; import java.util.TreeMap; public class ShoppingCart { private Map<Product,Integer> cars; private double totalPrice; public ShoppingCart(){ cars = new HashMap<>(); } //对外提供添加多个一类商品的方法 public void addProducts(Product p,Integer num){ if (num<=0){ System.out.println("商品数量不能小于1!"); return; } if (cars.containsKey(p)){ //说明购物车已经包含此商品了 这时需要累加 商品的数量 int productcount_before = cars.get(p); int productcount_after = productcount_before + num; cars.put(p,productcount_after); System.out.println("添加商品成功!"); }else { //程序执行到这里说明购物车中没有此商品 则添加 cars.put(p,num); System.out.println("添加商品成功!"); } double price = (p.getPrice())*num; totalPrice = totalPrice + price; } //提供添加一个商品的方法 public void addProducts(Product product){ addProducts(product,1); System.out.println("添加一个商品成功!"); } //删除一类商品(指定数量) public void removeProducts(Product product,Integer deletenum){ if (!cars.containsKey(product)){ System.out.println("您要删除的商品不存在!"); return; } //获取这个商品此时的数量 要删除的数量不能大于这个数量 int productNum = cars.get(product); if (deletenum>productNum){ System.out.println("删除的商品数量不能大于已有的数量!"); return; } //更新key,重复 value覆盖 int afterDelete = productNum - deletenum; //判断删除的数量是否的存在的数量相等 如果相等 则应连同商品删除 if (productNum == deletenum){ cars.remove(product); System.out.println("删除商品成功!"); }else { cars.put(product,afterDelete); System.out.println("删除商品成功!"); } //删去对应的价格 double price = (product.getPrice()) * deletenum; totalPrice = totalPrice - price; } //清空购物车 public void clearShoppingCar(){ if (cars.size()<=0){ System.out.println("购物车还没有商品"+"\n"); return; } cars.clear(); totalPrice = 0.0; System.out.println("清空购物车成功!"); } //结账 public void checkOut(){ if (cars.size()<=0){ System.out.println("购物车还没有商品"+"\n"); return; }else { System.out.println("\t\t购物详单"+"\n"); System.out.println("==============================================================\n"); for (Map.Entry<Product,Integer> me : cars.entrySet()){ int num = me.getValue(); Product product = me.getKey(); int pid = product.getId(); String pname = product.getName(); double price = product.getPrice(); System.out.println("商品编号:"+pid+" 商品名称:"+pname+" 商品单价:"+price+" 商品数量:"+num+"\n"); } System.out.println("==============================================================\n"); System.out.println("总价:"+totalPrice+"\n"); System.out.println("祝您购物愉快,欢迎下次光临!"); clearShoppingCar(); } } //查看购物车 public void lookCart(){ if (cars.size()<=0){ System.out.println("购物车里没有商品"+"\n"); return; }else { System.out.println("您的购物车"+"\n\n"); for (Map.Entry<Product,Integer> me : cars.entrySet()){ int num = me.getValue(); Product product = me.getKey(); int pid = product.getId(); String pname = product.getName(); double price = product.getPrice(); System.out.println("商品编号:"+pid+" 商品名称:"+pname+" 商品单价:"+price+" 商品数量:"+num+"\n"); } } } }
总结
购物车的应用是我和小伙伴写的第一个程序,因此大部分是在模仿,代码层面第一次接触hashMap类,其中的大部分方法还是容易忘记,以及在Object中的默认方法是我们今后学习需要特别注意的地方。
最后感谢DanceDonkey博主的代码参考。