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