1. 程式人生 > 其它 >第1次任務:購物車程式的面向物件設計

第1次任務:購物車程式的面向物件設計

目錄

0. 人員分工

任務 人員
編碼規範、前期調查與功能設計 曹卉潼
面向物件設計、部落格製作 汪月月

1. 前期調查



2. 系統功能結構圖

3. 系統描述

使用者在商城中可以搜尋檢視,看到想買的商品可以將商品加入購物車,並且可以對購物車中的商品進行新增刪除
購物車可以展示所有商品價格,名稱,也可以清空購物車,最後選擇結算
商場通過從檔案讀取資料,得到商品資料,並存在陣列中

  • 選單展示

4. UML類圖

5. 本系統體現的面向物件的封裝性

對商品的屬性在程式開始時就是不能改變的為了防止被改變,採用private進行修飾,可以防止其他操作改變其值,使用時只能通過getter和setter方法進行訪問。

對商城中的所有商品,也是固定不變的,不論購物車中怎麼刪除,商品都會在商場中,所以用private進行修飾,對原有資料進行保護。

6. 系統功能展示

  • 檢視商場的所有商品

  • 按照編號搜尋商品並詢問是否加購物車

  • 按照名稱搜尋商品並詢問是否加入購物車

  • 按照型別搜尋商品

  • 檢視購物車

  • 刪除購物車中某商品

  • 顯示當前購物車的總價格

  • 清空購物車

7. 專案包結構與關鍵程式碼

設計了兩個包結構分別是shopping和User,目的是在後面繼續不從程式碼時,可以對使用者資訊進行保護,shopping包中有商城,商品,購物車以及Main類
shopping包中Cart類

package shopping;
/*
 * Cart類
 * 存放物品的items陣列
 * 加入購物車的方法:add()
 * 從購物車中刪除商品的方法:delete()
 * 清空購物車的方法:clear()
 * 展示購物車內容的方法:show()
 */
import java.util.ArrayList;
public class Cart {
	private static ArrayList<Commodity> items = new ArrayList<>();//存放商品的容器
	
	public static void add(Commodity item) {//加入購物車
		items.add(item);
		
	}
	public static  void delete(int id) {//刪除某商品
		Commodity item=Mall.getCommodities().get(id-1);
		items.remove(item);
	}
	public static  void clear() {//清空購物車
		items.clear();
	}
	public static void show() {//展示購物車內容
		System.out.println("當前購物車共有"+items.size()+"件商品");
		for (Commodity commodity : items) {
			System.out.printf("Id: %d, name: %s, price: %.2f", commodity.getId(),commodity.getName(), commodity.getPrice());
			System.out.println();
		}
	}
	
	public static void PrintSumPrice() {//購物車總價格
		double x = 0;
		for (Commodity commodity : items) {
			x += commodity.getPrice();
		}
		System.out.printf("當前購物車總價格為:%.2f",x);
	}
}

shopping包中Mall類

package shopping;
/*
 * Mall類
 * 儲存商場所有商品的容器 commodities
 * 初始化載入商品的方法:
 * 展示所有商品的方法:
 * 搜尋功能
 * 1. 按編號搜尋的方法:
 * 2. 按名字搜尋的方法:
 * 3. 按型別搜尋的方法:
 */
import java.io.IOException;
import java.nio.file.Paths;
import java.util.ArrayList;
import java.util.Scanner;

public class Mall {
	static Scanner in = new Scanner(System.in);
	private static ArrayList<Commodity> commodities = new ArrayList<>();
	public static ArrayList<Commodity> getCommodities() {
		return commodities;
	}
	public static void setCommodities(ArrayList<Commodity> commodities) {
		Mall.commodities = commodities;
	}

	public static void SumCommodity() {//載入商品
		try (Scanner scanner = new Scanner(Paths.get("data.csv").toFile())) {
			String DELIMITER = ",";// CSV檔案分隔符
			scanner.useDelimiter(DELIMITER);// 設定分隔符
			String s = scanner.nextLine();// 讀取
			while (scanner.hasNext()) {
				String line = scanner.nextLine();
				String[] str = line.split(",");
				int id = Integer.parseInt(str[0]);
				String name = str[1];
				double price = Double.parseDouble(str[2]);
				String type = str[3];
				String address = str[4];
				commodities.add(new Commodity(id, name, price, type, address));
			}
		} catch (IOException ex) {
			ex.printStackTrace();
		}
	}
	public static void showAll() {// 展示商場的所有商品
		for (Commodity item : commodities) {
			System.out.println(item.toString());
		}
	}
	public static void SearchId(int id) {//按編號搜尋商品
		
		int i,flag=0;
		for (i = 0; i < commodities.size(); i++) {
			if (commodities.get(i).getId()==id) {
				System.out.println("ID為"+id+"的商品是:");
				System.out.println(commodities.get(i).toString());
				System.out.println("請問您是否需要加入購物車1/0:");
				int op=in.nextInt();
				if(op==1) {
					Cart.add(commodities.get(i));
					System.out.println("商品已加入購物車");
					flag=1;
				}
			}
		}
		if(flag==0)
			System.out.println("沒有找到該商品");
	}
	public static void SearchName(String name) {//按名稱搜尋商品
		int flag=0;
		for (int i = 0; i < commodities.size(); i++) {
			if (commodities.get(i).getName().equals(name)) {
				System.out.println("名稱為"+name+"的商品是:");
				System.out.println(commodities.get(i).toString());
				System.out.println("請問您是否需要加入購物車1/0:");
				int op=in.nextInt();
				if(op==1) {
					Cart.add(commodities.get(i));
					System.out.println("商品已加入購物車");
					flag=1;
				}
			}
		}
		if(flag==0)
			System.out.println("沒有找到該商品");
	}
	public static ArrayList<Commodity> SearchType(String type) {// 按型別搜尋商品
		int i = 0;
		ArrayList<Commodity> list = new ArrayList<>();
		for (i = 0; i < commodities.size(); i++) {
			if (commodities.get(i).getType().equals(type)) {
				list.add(commodities.get(i));
			}
		}
		return list;
	}
}