Java-购物车实践与应用

购物车程序的面向对象设计

1.人员分工:

姓名 任务
陈丹宇 编码规范、面向对象设计、功能设计
韦早辉 前期调查、博客制作

2.前期调查:

2.1登录京东我们可以在搜索栏中搜索先要购买的商品名称
Java-购物车实践与应用
2.2搜索后可以看见商品的名称,价格,然后将心仪的一定数量的商品添加入购物车
Java-购物车实践与应用
2.3在购物车我们可以看见商品的总价,删除一定数量的商品,或者一键清空购物车,最后进行结账
Java-购物车实践与应用

3.系统系统描述:

登录京东,然后在搜索栏中输入商品名称,搜索后可以看见商品的编号名称价格,然后将心仪的一定数量的商品添加至购物车,在购物车中可见看见所展示的商品,可以对一定数量的商品进行删除或者清空购物车,最后得出商品的总价结账

4.系统结构图:

Java-购物车实践与应用

5.UML类图:

Java-购物车实践与应用

6.体现了面向对象的封装性:

在同一个包内调用Class文件

7.程序的实现

7.1浏览商品及功能界面

Java-购物车实践与应用

7.2实现向购物车内添加商品

Java-购物车实践与应用

7.3删除购物车内的物品

Java-购物车实践与应用

7.4查看购物车内的商品

Java-购物车实践与应用

7.5实现结账功能

Java-购物车实践与应用

7.6清空购物车

Java-购物车实践与应用

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博主的代码参考。

上一篇:Day420.商品详细_异步编排优化代码 -谷粒商城


下一篇:WEB信息收集之搜索引擎