第1次任务:购物车程序的面向对象设计

0 人员分工

|任务|姓名|
| ---- | ---- | ---- |
| Menu类、Product类、面向对象分析 、前期调查、博客编写 |陈佳桐 |
| Cart类、Item类、User类、编码规范 | 付峻霖 |

1 前期调查

本次购物车活动的前期调查主要以京东商城购物车为主要研究对象。

使用过程中,可得出整个流程需要:

1.商品搜索,在商品库中搜索出含有关键字的相关商品

2.点击选择商品,出现商品详情页介绍。

可以看到商品对应的图片,商品对应的价格,选择商品的数量添加进购物车

3.打开购物车,按后放入先显示购物车商品

商品的基础内容:
商品名称,商品单价,
商品数量(可随时调整,不低于0),
单条商品条目的价格

4.购物车中可进行的操作:

清空整个购物车————通过全选商品清除完成
增加删除购物车件数

可自由选择商品进行预结算

5.结算时,可选择支付方式,配送方式,可以进行修改,生成对应的商单。

注:用户还需要进行登录才可进行放入购物车操作,不然只能进行浏览商品操作

登录时需要账号、密码验证。

2.系统功能结构图

3.系统描述:一段用来描述系统功能与流程的文字,用红色字代表可能的对象(名词)或属性,用蓝色字代表可能的方法(动词)。

4.类设计说明

5.面向对象的封装性

在商品porduct部分,与商品相关的名称、价格、编号等属性均使用private关键字进行修饰,外部类要使用时,仅能通过getter方法与setter方法进行访问。

对此进行封装后,避免了商品信息由于用户的操作而发生变化。

6.项目包结构与关键代码

受当前水平限制,目前将所有的类均放置在shoppingCart包中,后期将分离出Product包、User包,即面对三个对象的不同包共同进行。

6.1 菜单类代码

package shoppingCart;

import java.util.Scanner;

public class Menu {
	public static void showMenu() {
		Scanner sc = new Scanner(System.in);
		Scanner pause = new Scanner(System.in);
		while (true) { 
		    //菜单
		    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("**(5)删除商品");
			System.out.println("**(6)清空购物车");
			System.out.println("**(0)退出购物系统");
			
			System.out.println("您的选择是:");
			int choose = sc.nextInt();
			switch (choose) {
			case 1:// 展示商品
				Cart.showProduct();
				System.out.println("<输入任意数字,按回车返回主界面>");
				String Pause = pause.next();
				break;
			case 2:// 商品查询
				System.out.println("请输入商品名称:");
				String name = sc.next();
				Cart.searchProduct(name);
				System.out.println("<输入任意数字,按回车返回主界面>");
				Pause = pause.next();
				break;
			case 3:// 查看购物车
				Cart.showCart();
				System.out.println("<输入任意数字,按回车返回主界面>");
				Pause = pause.next();
				break;
			case 4:// 添加商品
				Cart.addProduct();
				System.out.println("<输入任意数字,按回车返回主界面>");
				Pause = pause.next();
				break;
			case 5:// 删除商品
				Cart.deleteProduct();
				System.out.println("<输入任意数字,按回车返回主界面>");
				Pause = pause.next();
				break;
			case 6:// 清空购物车
				Cart.cleanCart();
				System.out.println("<购物车已清空>");
				System.out.println("<输入任意数字,按回车返回主界面>");
				Pause = pause.next();
				break;
			
			case 0:// 退出
				break;
	        default :
	        	System.out.println("输入错误,拜拜了您咧");
	            break;
			}
			if (choose == 0)
				break;
	   } 
	   //结束菜单
	   System.out.println("***===================================***");
	   System.out.println("***欢迎您的下次光临  集美购物竭诚为您服务***");
	   System.out.println("***===================================***");
	}
	
}

6.2 Cart购物车类

package shoppingCart;
import java.util.Scanner;

//对购物车的商品的增加、删除,整个购物车内容的清空
//这部分内容需要和item和product中的内容联动来看,item的内容炸了,后期放过去

public class Cart {
	private static int[] number = new int[100];
	// 记录商品的数量,数组编号就是对应商品id
	// number[i]=3,即购物车中id=i的商品有3个
	
	public static int[] getNumber() {
		return number;
	}
 
	public static void setNumber(int[] number) {
		Cart.number = number;
	}
	
	/**
	 * 1.显示数据库中的所有商品
	 */
	public static void showProduct() {
		System.out.println("ID	商品名	        价格"); //展示商品数据库
		for (int i = 0; i < Product.getNumber(); i++) {
			System.out.println(Product.getId()[i] + "	" + Product.getName()[i] + "	" + Product.getPrice()[i]);
		}
	}
	
	/**
	 * 2.搜索商品功能
	 */
	public static int searchProduct(String Name) {  //搜索商品
		Scanner sc = new Scanner(System.in);
		for (int i = 0; i < Product.getNumber(); i++) {
			if (Name.equals(Product.getName()[i])) {     //比较输入的值是否有对应的商品序号
				System.out.println("查询结果:");
				System.out.println("编号  	商品名	价格");
				System.out.println(Product.getId()[i] + "	" + Product.getName()[i] + "	" + Product.getPrice()[i]);
				
				//判断是否存在此商品
				int flag=0;//没有此商品
				for(int j=0;j<Product.getNumber();j++)
					if (Cart.getNumber()[j] != 0)//id为i的商品数量为0,代表购物车没有此商品
						flag=1;
				if(flag==0)
				{
					System.out.println("购物车没有此商品!");
					System.out.print("是否将该商品添加到购物车(1/0)");
				}
				else
				{
					System.out.println("购物车已有此商品");
					System.out.print("是否还要将该商品添加到购物车(1/0)");
				}
				
				int chioce = sc.nextInt();
				if (chioce == 1) {
					System.out.println("请输入您需要添加的商品的数量:");
					int addNumber = sc.nextInt();
					
					for (int j = 0; j < Product.getNumber(); j++) {
						if (j == Product.getId()[i]) {//循环遍历商品ID,找到后累加数量
							number[j] += addNumber;   //number添加的数值就是添加在购物车中的值,可重新叠加购买
							System.out.println("已加入购物车!");// 在购物车单中添加商品
						}
					}
				}
				return 1;
			}
		}
		//循环结束都没有找到,说明数据库不存在此商品
		System.out.println("查询结果:");
		System.out.println("未搜索到此商品");
		return 0;
	}
	
	/**
	 * 3.展示购物车
	 */
	public static void showCart() {// 显示购物车中的商品
		double countCartPay = 0;
		System.out.println("*******购物车全部商品*******");
		System.out.println("商品ID" + "	" + "商品名" + "	" + "商品单价" + "	  " + "购买数量"+"	  " + "该商品总金额");
 
		for (int i = 0; i < Product.getNumber(); i++) {
			if (Cart.getNumber()[i] != 0) {
				System.out.println(Product.getId()[i] + "	" + Product.getName()[i] + "	" + Product.getPrice()[i]
						+ "  " + Cart.getNumber()[i] +"  "+Product.getPrice()[i]*Cart.getNumber()[i]);
			}
			countCartPay = countCartPay + (Cart.getNumber()[i] * Product.getPrice()[i]);//商品数量x商品单价,总和即为最终价钱
		}
		System.out.println();
		System.out.println("您的当前购物车账单为:  " + String.format("%.2f", countCartPay));//借用format,进行常规类型格式化
	}
	
	/**
	 * 4.实现添加商品功能
	 */
	public static void addProduct() {	// 添加商品
		showProduct();//展示商品数据库
		
		Scanner sc = new Scanner(System.in);
		System.out.println("请输入您需要添加的商品的对应ID:");
		int addId = sc.nextInt();
		
		//判断购物车是否存在此商品
		int flag=0;//没有此商品
		for(int i=0;i<Product.getNumber();i++)
			if (Cart.getNumber()[i] != 0)//id为i的商品数量为0,代表购物车没有此商品
				flag=1;
		if(flag==0)
		{
			System.out.println("购物车没有此商品!");
			
		}
		else
		{
			System.out.println("购物车已有此商品");
		}		
		System.out.println("请输入您需要添加的商品的数量:");
		int addNumber = sc.nextInt();
		
		for (int i = 0; i < Product.getNumber(); i++) {
			if (i == addId) {
				number[i] += addNumber;   //number添加的数值就是添加在购物车中的值,可重新叠加购买
				System.out.println("已加入购物车!");// 在购物车单中添加商品
			}
		}
	}
	

	/**
	 * 5.实现删除商品功能
	 */
	public static void deleteProduct() {//删除购物车商品
		showCart();
		
		System.out.println();
		Scanner sc = new Scanner(System.in);
		System.out.println("请输入您需要删除的商品的对应ID:");
		int deleteId = sc.nextInt();
		
		//判断是否存在此商品
		int flag=0;//没有此商品
		if (Cart.getNumber()[deleteId] != 0)//id为i的商品数量为0,代表购物车没有此商品
			flag=1;
		if(flag==0)
		{
			System.out.println("购物车没有此商品!");
		}
		else
		{
			System.out.println("请输入您需要减少的商品的数量:");
			int deleteNumber = sc.nextInt();
			
			for (int i = 0; i < Product.getNumber(); i++) {
				if (i == deleteId) {//找到对应的商品
					number[i] = number[i] - deleteNumber;//删除对应数量的商品
					if (number[i] < 0)
					number[i] = 0;// 商品数量不能小于0
				}
			}
			System.out.println("已删除!");// 在购物车单中删除商品
		}
	}
	
	/**
     * 6.清空购物车
     */
	public static void cleanCart() {// 清空购物车商品
		// 令每一个商品的对应number均为0
		for (int i = 0; i < Product.getNumber(); i++) {
			number[i] = 0;// 商品数量不能小于0,使数量为0;
		}
	}
}

6.3 商品product类

package shoppingCart;
import java.util.Scanner;
public class Product {      //用户搜索商品时
	private static String[] name = new String[200] ;//商品名称
    private static double[] price = new double [50];//商品价格
    private static int number = 8;//展示商品数量
    private static int[] id =new int [100];//商品编号
    private String introduction;//商品介绍
 
	public static String[] getName() {
		return name;
	}

	public static void setName(String[] name) {
		Product.name = name;
	}

	public static double[] getPrice() {
		return price;
	}

	public static void setPrice(double[] price) {
		Product.price = price;
	}

	public static int getNumber() {
		return number;
	}

	public static void setNumber(int number) {
		Product.number = number;
	}

	public static int[] getId() {
		return id;
	}

	public static void setId(int[] id) {
		Product.id = id;
	}
	public String getIntroduction() {
		return introduction;
	}

	public void setIntroduction(String introduction) {
		this.introduction = introduction;
	}
	
	
	public static void product() {        //商品库里的商品全部内容的存放

		for(int i=0;i<9;i++) {
			Product.id[i]=i;
		}
		name[0] = "vivo X60 ";
		price[0] = 2988.0;
	
		name[1] = "唐诗三百首全集";
		price[1] = 9.90;
	
		name[2] = "宿有千香大闸蟹";
		price[2] = 320.0;
	
		name[3] = "惠威蓝牙音箱";
		price[3] = 599.0;
	
		name[4] = "山海经典藏版";
		price[4] = 53.1;
	
		name[5] = "中国电信流量卡";
		price[5] = 9.6;
	
		name[6] = "361炫酷跑鞋";
		price[6] = 107.99;
		
		name[7] = "小天才电话手表";
		price[7] = 388.88;
	
	}
}

6.4 用户User类

package shoppingCart;

public class User {
	private String uid;//用户编号
	private String name;//用户名
	private String loginPwd;//登陆密码
	private String addr;//收货地址
	private String mobile;//电话号码
	public String getName() {
		return name;
	}
	public void setName(String name) {
		this.name = name;
	}
	public String getLoginPwd() {
		return loginPwd;
	}
	public void setLoginPwd(String loginPwd) {
		this.loginPwd = loginPwd;
	}
	public String getAddr() {
		return addr;
	}
	public void setAddr(String addr) {
		this.addr = addr;
	}
	public String getUid() {
		return uid;
	}
	public String getMobile() {
		return mobile;
	}
	public void setMobile(String mobile) {
		this.mobile = mobile;
	}
	
}

6.5 Item类

package shoppingCart;

public class Item {  //用户放入购物车的一个商品的情况
       private Product product; //放入商品
       private int id;//放入商品的依次编号
       private int quantity=1;//放入的商品数量,默认最低值为1
       private Double totalMoney;//该商品总金额
	public Product getProduct() {
		return product;
	}
	public void setProduct(Product product) {
		this.product = product;
	}
	public int getId() {
		return id;
	}
	public void setId(int id) {
		this.id = id;
	}
	public int getQuantity() {
		return quantity;
	}
	public void setQuantity(int quantity) {
		this.quantity = quantity;
	}
}
posted @ 2021-10-21 16:51  落叶满长安  阅读(86)  评论(0编辑  收藏  举报