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


    任务 姓名
    编码规范、前期调查与功能设计、博客制作 黄帅
    面向对象设计、博客制作、功能设计 韩龙飞

    本次的作业内容:
    要求体验商城的商品搜索、购物车中商品的加入和删除操作以及下单等功能。在观察各大网络商城的购物车之后,根据其特点自制一个购物车小程序。
    目标:

    • 学会使用讲故事的方式找到系统中可能包含的类与属性
    • 理解封装

    任务:

    1.编码规范

    驼峰命名法
    不使用拼音和英文组合
    方法名、参数名、成员变量、局部变量都统一使用 lowerCamelCase 风格
    包名统一使用小写,点分隔符之间有且仅有一个自然语义的英语单词。
    包名统一使用单数形式,但是类名如果有复数含义,类名可以使用复数形式。

    2.前期调查与功能设计

    我们以京东商城为例来进行探讨,首先,进入商城主界面时,我们可以看到许多商城中的物品,而上方的搜索栏可以帮助我们搜索想要的物品。

    点击物品图标,我们可以看到物品的详细信息,还可以执行“加入购物车“这一操作。

    进入购物车时,我们能够看到自己购买了什么东西、购买多少个,以及预估的结算价格,而且我们可以在购物车中执行删除操作,能够删除任意商品、任意数量。

    从以上观察的情况来看,购物车程序所需要实现的功能大致有:

    • 需要有商品的搜索功能(可能需要一个用户类来识别并执行用户操作)
    • 需要有购物车中物品的添加功能和删除功能(需要一个购物车类来存放购买物品的数量和总价)
    • 在购物车中需要有显示结算总价的程序(需要一个账单类来打印支付凭条)
    • 由于个人设计的程序中的商品不会像网络商场一样多的数不过来,所以可以考虑做出一个可以显示商城中所有商品的商品清单功能。(需要一个商品类来存储商品的基本信息,还可能有全部商品信息输出的功能)

    3.面向对象设计


    在上述的故事中,用红色字代表可能的对象(名词)或属性,用蓝色字代表可能的方法(动词)。
    这样,通过讲故事的方法,我们就可以思路清晰的找出一个程序所需要的类和其中的方法。

    4.系统功能结构图

    5.系统描述


    6.UML类图

    7.面向对象的封装性

    • Mall类中将商品的属性声明为private并用setter、getter的方法进行数据封装

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

    项目包结构

    1.shopping包

    该包中有一个Main类,用来进行用户与程序的人机交互。

    2.Mall包

    该包主要有商城中商品的信息和购物车的增、删、改、查等一系列操作的核心方法。

    3.display包

    可视化界面,方便用户操作。
    按类进行分包方便后续查找修补,有逻辑性,而且不用在main中频繁的导入类。只需要把Main类导入其他包中的类就可以了。

    主要功能


    关键代码

    package shop;
    
    import java.math.BigDecimal;
    import java.util.Scanner;
    
    public class Mall {
    	private static int goodsNumber = 10;
    	private static int[] goodsId = new int[100];
    	private static String[] goodsName = new String[100];
    	private static BigDecimal[] goodsPrice = new BigDecimal[100];
    
    	public static int getGoodsNumber() {
    		return goodsNumber;
    	}
    
    	public static void setGoodsNumber(int goodsNumber) {
    		Mall.goodsNumber = goodsNumber;
    	}
    
    	public static int[] getGoodsId() {
    		return goodsId;
    	}
    
    	public static void setGoodsId(int[] goodsId) {
    		Mall.goodsId = goodsId;
    	}
    
    	public static String[] getGoodsName() {
    		return goodsName;
    	}
    
    	public static void setGoodsName(String[] goodsName) {
    		Mall.goodsName = goodsName;
    	}
    
    	public static BigDecimal[] getGoodsPrice() {
    		return goodsPrice;
    	}
    
    	public static void setGoodsPrice(BigDecimal[] goodsPrice) {
    		Mall.goodsPrice = goodsPrice;
    	}
    
    	public static void showGoods() {
    		System.out.println("商品ID	商品名	商品价格");
    		for (int i = 0; i < goodsNumber; i++) {
    			System.out.println(goodsId[i] + "	" + goodsName[i] + "	" + goodsPrice[i]);
    		}
    	}
    
    	public static void buy(Scanner goodsId) {
    		System.out.println("请输入您需要的商品的对应ID:");
    		int choiceGoods = goodsId.nextInt();
    		System.out.println("请输入您需要的商品的数量:");
    		int choiceAddNumber = goodsId.nextInt();
    		if (ShoppingCart.addGoods(choiceGoods, choiceAddNumber))
    			System.out.println("添加成功!");// 在购物车单中添加商品
    		else
    			System.out.println("添加失败!");// 判断输入参数是否有效
    		System.out.println("是否继续购买购买?[是(1)/否(0)]");
    		int choice = goodsId.nextInt();
    		if (choice == 1)
    			buy(goodsId);
    	}
    
    	public static boolean searchGoodsFromId(int id) {
    		Scanner search = new Scanner(System.in);
    		for (int i = 0; i < goodsNumber; i++) {
    			if (id == goodsId[i]) {
    				System.out.println("已找到该商品 : ");
    				System.out.println();
    				System.out.println("商品ID	商品名	商品价格");
    				System.out.println(goodsId[i] + "	" + goodsName[i] + "	" + goodsPrice[i]);
    
    				System.out.print("是否添加到购物车?[是(1)/否(0)] :");
    				int chioce = search.nextInt();
    				if (chioce == 1) {
    					System.out.print("添加数量?:");
    					int number = search.nextInt();
    					if (ShoppingCart.addGoods(goodsId[i], number))
    						System.out.println("添加成功!");// 在购物车单中添加商品
    					else
    						System.out.println("添加失败!");
    				}
    				return true;
    			}
    		}
    		return false;
    	}
    
    	
    
    	public static void searchGoodsFromName() {
    		Scanner search = new Scanner(System.in);
    		System.out.println("请输入商品名称:");
    		String name = search.next();
    		int flag = 0;
    		for (int i = 0; i < goodsNumber; i++) {
    			if (goodsName[i].indexOf(name) != -1) {
    				flag++;
    				if (flag == 1) {
    					System.out.println("查找结果如下 : ");
    					System.out.println();
    					System.out.println("商品ID	商品名	商品价格");
    				}
    				System.out.println(goodsId[i] + "	" + goodsName[i] + "	" + goodsPrice[i]);
    			}
    		}
    		
    		if(flag==0) {
    			System.out.println("没有找到该商品!");
    			System.out.println("是否继续查找?[是(1)/否(0)]");
    			int choise = search.nextInt();
    			if(choise==1) 
    				searchGoodsFromName();
    			return;
    		}
    		System.out.println("是否进行购买?[是(1)/否(0)]");
    		int choise = search.nextInt();
    		if(choise==1) {
    			buy(search);
    		}
    		System.out.println("是否继续查找?[是(1)/否(0)]");
    		choise = search.nextInt();
    		if(choise==1) 
    			searchGoodsFromName();
    		
    	}
    
    	public static void showList() {
    		list();
    	}
    
    	private static void list() {
    		for (int i = 0; i < 10; i++) {
    			goodsId[i] = i;
    			switch (i) {
    			case 0:
    				goodsName[i] = "白色眼镜";
    				goodsPrice[i] = new BigDecimal("10.5");
    				break;
    			case 1:
    				goodsName[i] = "牙刷";
    				goodsPrice[i] = new BigDecimal("6.0");
    				break;
    			case 2:
    				goodsName[i] = "黄色眼镜";
    				goodsPrice[i] = new BigDecimal("4");
    				break;
    			case 3:
    				goodsName[i] = "牙膏";
    				goodsPrice[i] = new BigDecimal("3");
    				break;
    			case 4:
    				goodsName[i] = "铅笔";
    				goodsPrice[i] = new BigDecimal("1");
    				break;
    			case 5:
    				goodsName[i] = "矿泉水";
    				goodsPrice[i] = new BigDecimal("2");
    				break;
    			case 6:
    				goodsName[i] = "水桶";
    				goodsPrice[i] = new BigDecimal("22");
    				break;
    			case 7:
    				goodsName[i] = "水彩笔";
    				goodsPrice[i] = new BigDecimal("5");
    				break;
    			case 8:
    				goodsName[i] = "泡面";
    				goodsPrice[i] = new BigDecimal("4");
    				break;
    			case 9:
    				goodsName[i] = "袜子";
    				goodsPrice[i] = new BigDecimal("6");
    				break;
    			}
    		}
    	}
    }
    
    
    package shop;
    
    import java.math.BigDecimal;
    
    import javax.xml.catalog.Catalog;
    
    public class ShoppingCart {
    	private static int[] cartNumber = new int[100];
    
    	public static int[] getCartNumber() {
    		return cartNumber;
    	}
    
    	public static void setCartNumber(int[] cartNumber) {
    		ShoppingCart.cartNumber = cartNumber;
    	}
    	public static boolean addGoods(int goodsId,int goodsAddNumber) {
    		for (int i = 0; i < Mall.getGoodsNumber(); i++) {
    			if(i==goodsId) {
    				cartNumber[i]+=goodsAddNumber;
    				return true;
    			}
    		}
    		return false;
    	}
    	public static boolean subGoods(int goodsId,int goodsSubNumber) {
    		for (int i = 0; i < Mall.getGoodsNumber(); i++) {
    			if(i==goodsId) {
    				cartNumber[i]-=goodsSubNumber;
    				if(cartNumber[i]<0)
    					cartNumber[i]=0;
    				return true;
    			}
    		}
    		return false;
    	}
    	public static void cleanGoods() {
    		for (int i = 0; i < Mall.getGoodsNumber(); i++) {
    			cartNumber[i]=0;
    		}
    		System.out.println("<购物车内物品已清空>");
    	}
    	public static void showCart() {// 显示购物车中的商品
    		BigDecimal countCartPay = new BigDecimal("0");
    		System.out.println("———————————— 您的购物车 ————————————");
    		System.out.println("商品ID" + "	" + "商品名" + "	" + "商品单价" + "	  " + "购买数量");
    		System.out.println();
    		for (int i = 0; i < Mall.getGoodsNumber(); i++) {
    			if(cartNumber[i]!=0) {
    				System.out.println(Mall.getGoodsId()[i] + "	" + Mall.getGoodsName()[i] + "	"
    						+ Mall.getGoodsPrice()[i] + "	* " + cartNumber[i]);
    			}
    			BigDecimal num=new BigDecimal(Integer.toString(cartNumber[i]));
    			BigDecimal beAdd = Mall.getGoodsPrice()[i].multiply(num);
    			countCartPay =countCartPay.add(beAdd);
    		}
    		System.out.println();
    		System.out.println("	您应支付 :  " +  countCartPay+"元");
    		
    	}
    }
    
    
  • 相关阅读:
    【转】 GetProcAddress()用法
    AutoCAD开发小记
    Visual Studio 2015正式版发布
    【VS2010]如何删除【附加依赖项】中“继承的值”?
    OpenCV入门指南
    Visual Studio 遇到了异常。这可能是由某个扩展导致的。
    VS2010在WIN7下安装报错“下列组件安装失败”如何解决
    获取系统日期时间的简单方法
    免费在线pdf互转工具
    应用层vc实现三种文件监视方法
  • 原文地址:https://www.cnblogs.com/jingzheng001/p/15367738.html
Copyright © 2020-2023  润新知