第一次面向对象任务--购物车

0. 人员分工

任务 姓名
系统功能结构设计,流程图,功能描述 兰心怡
前期调查,博客制作,部分代码 王思嘉

1. 前期调查

1)我们以京东上买东西为例,进去界面可以看到查询商品

2)点击想要的商品可以加去购物车

3)在购物车中可以增加或删除商品,并且可以计算出总金额

2. 系统功能结构图

3. 系统描述

4.UML类图

1)Product类

2)联系

5.本系统哪里体现了面向对象的封装性

**体现在将商品类的对象属性都设置为private,外部无法直接访问到它的属性,只能通过getter(getXX)、setter(setXX)来访问。
**面向对象的封装性就是把类的这些内部的信息统一保护起来,防止外包随意修改内部数据,保证数据的安全性,保证外部尽可能正确地使用这个类。

6.购物车相关运行成果展示

1)商品展示

2)添加商品

3)删除商品

4)查看购物车

5)计算总金额

7.项目包结构与关键代码:

1)购物车的包结构

2)Product类

package shoppingCart;

public class Product {
	private static int[] productId = new int[100];// 商品id
	private static String[] productName = new String[100];// 商品名称
	private static double[] productPrice = new double[100];// 商品价格
	private static int[] productCount = new int[100];//商品在购物车中的数量
	
	public static int[] getProductId() {
		return productId;
	}
	public static void setProductId(int[] productId) {
		Product.productId = productId;
	}
	public static String[] getProductName() {
		return productName;
	}
	public static void setProductName(String[] productName) {
		Product.productName = productName;
	}
	public static double[] getProductPrice() {
		return productPrice;
	}
	public static void setProductPrice(double[] productPrice) {
		Product.productPrice = productPrice;
	}
	public static int[] getProductCount() {
		return productCount;
	}
	public static void setProductCount(int[] productCount) {
		Product.productCount = productCount;
	}
	
	public static void list() {
		for(int i = 0; i < 9; i++) {
			productId[i] = i;
			switch (i) {
			case 0:
				productName[i] = "羽绒服";
				productPrice[i] = 210.8;
				productCount[i] = 1;
				break;
			case 1:
				productName[i] = "项链";
				productPrice[i] = 2000;
				productCount[i] = 0;
				break;
			case 2:
				productName[i] = "耳环";
				productPrice[i] = 157.0;
				productCount[i] = 0;
				break;
			case 3:
				productName[i] = "连衣裙";
				productPrice[i] = 218.3;
				productCount[i] = 0;
				break;
			case 4:
				productName[i] = "毛衣";
				productPrice[i] = 177.6;
				productCount[i] = 2;
				break;
			case 5:
				productName[i] = "围巾";
				productPrice[i] = 88.4;
				productCount[i] = 1;
				break;
			case 6:
				productName[i] = "手镯";
				productPrice[i] = 120.8;
				productCount[i] = 0;
				break;
			case 7:
				productName[i] = "背包";
				productPrice[i] = 168;
				productCount[i] = 1;
				break;
			case 8:
				productName[i] = "牛仔裤";
				productPrice[i] = 154.8;
				productCount[i] = 0;
				break;
			}
		}
	}
	
	public static void showProduct() {
		System.out.println("ID 商品名 价格");
		for (int i = 0; i < 9; i++) {
			System.out.println(productId[i] + " " + productName[i] + " " + productPrice[i]);
		}
	}
	
}

3)shopCart代码

package shoppingCart;

public class ShopCart {
	public static void showCart() {
		System.out.println("ID 商品名 价格 数量");
		for(int i = 0; i < 9; i++) {
			if(Product.getProductCount()[i] > 0) {
				System.out.println(Product.getProductId()[i] + " " + Product.getProductName()[i] + " " + Product.getProductPrice()[i]+" "+Product.getProductCount()[i]);
			}
		}
	}
		
	public static void add(int productId, int addNumber) {
		for(int i = 0; i < 9; i++) {
			if(Product.getProductId()[i] == productId) {
				Product.getProductCount()[i]+=addNumber;
			}
		}
	}
		
	public static void delete(int productId, int deltNumber) {
		for(int i = 0; i < 9; i++) {
			if(Product.getProductId()[i] == productId) {
				if(Product.getProductCount()[i]-deltNumber < 0) {
					System.out.println("删除无效");
				}else {
					Product.getProductCount()[i]-=deltNumber;
					System.out.println("删除成功");
				}
			}
		}
	}

	
	public static void find(int productId) {
		for(int i = 0; i < 9; i++) {
			if(Product.getProductId()[i] == productId) {
				System.out.println(Product.getProductId()[i] + " " + Product.getProductName()[i] + " " +Product.getProductPrice()[i]);
			}
		}
	}
	
	public static void total() {
		int sum=0;
		for(int i = 0; i < 9; i++) {
			if(Product.getProductCount()[i] > 0) {
				sum+=Product.getProductPrice()[i]*Product.getProductCount()[i];
			}
		}
		System.out.println("商品总价格为:"+sum);
	}
}

4)购物车的Main代码

package shoppingCart;

import java.util.Scanner;

public class Main {

	public static void main(String[] args) {
		Scanner sc = new Scanner(System.in);
		Scanner pause = new Scanner(System.in);
		
		Product.list();
		while(true) {
			beginMenu();
			System.out.print("请输入您的选项:");
			int choice = sc.nextInt();
			
		switch(choice) {
		 case 1:
			 Product.showProduct();
			 System.out.println("按任意键+回车返回主界面");
			 String Pause = pause.next();
				break;			 
		 case 2:
			 System.out.println("请输入所查询商品ID");
			 int id = sc.nextInt();
			 ShopCart.find(id);
			 System.out.println("1.加入购物车");
			 System.out.println("2.删除此商品"); 
			 int c1 = sc.nextInt();
			 if(c1 == 1) {
				 System.out.println("请输入所要增加的商品数量");
				 int addNumber = sc.nextInt();
				 ShopCart.add(id, addNumber);
			 }
			 if(c1 == 2) {
				 System.out.println("请输入要减少的商品数量");
				 int deltNumber = sc.nextInt();
				 ShopCart.delete(id, deltNumber);
			 }
			 ShopCart.showCart();
			 System.out.println("按任意键+回车返回主界面");
			 String Pause1 = pause.next();
				break;	
		 case 3:
			 ShopCart.showCart();
			 System.out.println("按任意键+回车返回主界面");
			 String Pause2 = pause.next();
				break;	
		 case 4:
			 ShopCart.showCart();
			 ShopCart.total();
			 System.out.println("按任意键+回车返回主界面");
			 String Pause3 = pause.next();
				break;	
		 case 0:break;
		 } 
		if(choice==0)break;
		
}
   endMenu();			
}
	public static void beginMenu() {
		System.out.println("**********************************");
		System.out.println("******       欢迎光临!        ******");
		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("0)退出");
	}

	public static void endMenu() {
		System.out.println("**********************************");
		System.out.println("****      谢谢惠顾,欢迎下次光临!    ****");
		System.out.println("**********************************");
	}
	}

8.总结与思考

在此次编写购物车中,觉得编写代码首先要了解自己需要创建哪些类,而这些类中又需要哪些属性和方法,确定类的属性和方法可以从想要代码实现的功能入手,从功能出发,确定可能会用到的方法和属性。编写代码过程中尽量使用自己比较浅显易懂的方法和类。一定要注意各个类之间的引用。我们在研究Arrarylist的使用上花费了很多时间,虽然最终不能应用,但在过程中受益匪浅。

posted @ 2021-10-08 11:43  破茧123  阅读(93)  评论(0)    收藏  举报