第1次任務:購物車程式的面向物件設計
阿新 • • 發佈:2021-10-04
目錄
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;
}
}