1. 程式人生 > 其它 >Java購物車應用與實踐

Java購物車應用與實踐

購物車程式的面向物件設計

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博主的程式碼參考。