识别类

购物车

题目:

用户在网上商城搜索并浏览商品,一旦看到中意的商品将商品放入购物车,可放多,可在购物车中增删商品,获得商品价格,最后点击结算生成订单

思维导图展示:

思路:

顾客or商家选择进行账号的登录,进入商城,商品初始化,可以进行商品的浏览与搜索(按名称、编号、类型进行搜索),

在商城浏览过程中可以对所想要的商品直接生成订单进行购买,或者先把所要的商品加入购物车,之后进行购买

用户对于购物车可以进行清空,浏览与搜索自己购买的商品,对商品进行添加或者删除,把自己决定买的商品生成订单进行结算,

生成的订单会体现所购买商品的信息,总价格,用户可以对订单进行取消或者确认,成功购买商品

界面的展示:


流程图展示:

UML图展示:

类:Loginning、Mall、Purchase_order、ShoppingCart

相关代码:

Loginning类:

  • 进行商家或用户的验证登录###

public class Loginning {
	Map<String, String > Customer = new HashMap<String, String >();
	Map<String, String > Seller   = new HashMap<String, String >();

	public boolean input_Customer(String Id,String password)
	{
		Customer.put(Id, password);
		return true;
	}
	public boolean input_Seller(String Id,String password)
	{
		Seller.put(Id, password);
		return true;
	}
	
	public boolean login_Customer(String Id,String password)
	{
			Set<Map.Entry<String, String>> c = Customer.entrySet();
			Iterator<Map.Entry<String, String>> it = c.iterator();
			while (it.hasNext()) {
				Map.Entry<String, String> en = it.next();
				String key = en.getKey();
				String value = en.getValue();
				if(key.equals(Id))
				{
					if(!value.equals(password))
					{
						System.out.println("密码错误!请重新输入!");
						return false;
					}
					else
					{
						System.out.println("登录成功!");
						return true;
						
					}
				}
				
				//System.out.println("key=" + key + " value=" + value);
			}
				System.out.println("账号不存在!请重新输入!");
				return false;
	}
	
	public boolean login_Seller(String Id,String password)
	{
			Set<Map.Entry<String, String>> c = Seller.entrySet();
			Iterator<Map.Entry<String, String>> it = c.iterator();
			while (it.hasNext()) {
				Map.Entry<String, String> en = it.next();
				String key = en.getKey();
				String value = en.getValue();
				if(key.equals(Id))
				{
					if(!value.equals(password))
					{
						System.out.println("密码错误!请重新输入!");
						return false;
					}
					else
					{
						System.out.println("登录成功!");
						return true;
						
					}
				}
				  //System.out.println("key=" + key + " value=" + value);
			}
			
				System.out.println("账号不存在!请重新输入!");
				return false;
	}

}

Mall类:

  • 可通过编号、名称、类型搜索该商品###

  • 对所喜爱的商品进行直接的购买,生成订单###

public class Mall {
	ArrayList<Commodity>commodities = new ArrayList<Commodity>();
	
	public Mall(ArrayList<Commodity> commodities) {
		super();
		this.commodities = commodities;
	}

	public void Show_commodities()
	{
		if(commodities.size()==0)
		{
			System.out.println("对不起,暂无商品信息");
		}
		else {
			for(Commodity e:commodities)
			{
				System.out.println("商品号:"+e.getID()+" "+"商品名称:"+e.getName()+" "+"价格:"+e.getPrice()+" "+"剩余数量:"+e.getLeft_num());
			}	
		}
	}
	
	public void Search_commodities_byID(String ID)
	{
		if(commodities.size()==0)
		{
			System.out.println("对不起,暂无"+ID+"相关信息");
		}
		else {
			for(Commodity e:commodities)
			{
				if(e.getID().equals(ID))
				{
					System.out.println("商品号:"+e.getID()+" "+"商品名称:"+e.getName()+" "+"价格:"+e.getPrice()+" "+"剩余数量:"+e.getLeft_num());
					break;   //区别于name和type   商品id是唯一的
				}
			}
		}
	}
	
	public void Search_commodities_byname(String name)
	{
		if(commodities.size()==0)
		{
			System.out.println("对不起,暂无"+name+"相关信息");
		}
		else {
			for(Commodity e:commodities)
			{
				if(e.getName().equals(name))
				{
					System.out.println("商品号:"+e.getID()+" "+"商品名称:"+e.getName()+" "+"价格:"+e.getPrice()+" "+"剩余数量:"+e.getLeft_num());
				}
			}
		}
	}
	
	public void Search_commodities_bytype(String type)
	{
		if(commodities.size()==0)
		{
			System.out.println("对不起,暂无"+type+"相关信息");
		}
		else {
			for(Commodity e:commodities)
			{
				if(e.getType().equals(type))
				{
					System.out.println("商品号:"+e.getID()+" "+"商品名称:"+e.getName()+" "+"价格:"+e.getPrice()+" "+"剩余数量:"+e.getLeft_num());
				}
			}
		}
	}
	
	public void add_item_to_cart(ShoppingCart cart,String Id)   //一般都是商品存在才有加入购物车的选项
	{
		boolean flag = false;   //not find in cart
		for(Commodity_entry e:cart.cart_item)
		{
			if(e.getItem().getID().equals(Id))
			{
				e.total_quantity++;
				flag = true;      //finded
			}
		}
		
		if(!flag)  //not find 
		{ 
			for(Commodity e:commodities)   //search by id in the mall
			{
				if(e.getID().equals(Id))   //find
				{
					cart.add_item_to_cart(e, 1); 
					break;
				}
			}
		}
	}
	public void add_to_purchase_order(String Id,Purchase_order order)
	{
		Commodity_entry items;
		for(Commodity e:commodities)
		{
			if(e.getID().equals(Id))
			{
				items = new Commodity_entry(e,1);
				order.order_item.add(items);     //finish adding to order 
				break;   //id always is the only one
			}
		}
	}
}

Purchase_order类:

  • 生成订单,显示所购买的商品信息###

  • 订单的成功下单与取消###

public class Purchase_order {
	ArrayList<Commodity_entry>order_item = new ArrayList<Commodity_entry>();
	public void show_order_item()
	{
		for(Commodity_entry e:order_item)
		{
			System.out.println("商品号:"+e.getItem().getID()+" "+"商品名称:"+e.getItem().getName()+" "+"价格:"+e.getItem().getPrice()+" "+"购买数量:"+e.total_quantity+" "+"总价格:"+e.getTotal_price());
		}
	}
	public void finish_order_item()
	{
		int total_price = 0;
		for(Commodity_entry e:order_item)
		{
			total_price += e.total_quantity;
		}
		System.out.println("你已经成功下单!共花费:"+total_price);
		order_item.clear();  
	}
	public void cancel_order_item()
	{
		System.out.println("你已经取消订单!");
		order_item.clear();  
	}
	
}

ShoppingCart类:

  • 购物车的清空处理###

  • 对购物车的商品进行展示,添加与删除###

  • 从购物车里对商品生成订单信息###

public class ShoppingCart {
	ArrayList<Commodity_entry>cart_item = new ArrayList<Commodity_entry>();
	//Purchase_order order = new Purchase_order();
	public void clear_cart()
	{
		/*Scanner sc = new Scanner(System.in);
		System.out.println("确定要清空购物车");*/
		
		cart_item.clear();
		System.out.println("你已成功清空购物车!");
	}
	
	public void remove_item_from_cart(String Id)
	{
		for(Commodity_entry e:cart_item)
		{
			if(e.getItem().getID().equals(Id))
			{
				cart_item.remove(e);
			}
		}
	}
	public void add_item_to_cart(Commodity add,int total_quantity)   //one item has only one id
	{
		boolean flag = false;   //not find already
		for(Commodity_entry e:cart_item)
		{
			if(e.getItem().getID().equals(add.getID()))
			{
				e.total_quantity++;
				flag = true;    //finded
			}
		}
		if(!flag)  //not find 
		{
			Commodity_entry add_entry = new Commodity_entry(add,total_quantity);
			cart_item.add(add_entry);   //succeed int adding to cart
			
		}
	}
	
	public void show_cart()    //
	{
		if(cart_item.size()==0)
		{
			System.out.println("你的购物车里空空如也!");
		}
		else {
			for(Commodity_entry e:cart_item)
			{
				System.out.println("商品号:"+e.getItem().getID()+" "+"商品名称:"+e.getItem().getName()+" "+"价格:"+e.getItem().getPrice()+" "+"购买数量:"+e.total_quantity+" "+"总价格:"+e.getTotal_price());
			}
		}
	}
	public void add_to_purchase_order(String Id,Purchase_order order)
	{
		for(Commodity_entry e:cart_item)
		{
			if(e.getItem().getID().equals(Id))
			{
				order.order_item.add(e);     //finish adding to order 
			}
		}
	}
}

总结:

继承问题:

  • 继承要符合is-a关系!##

  • 一开始因为商城与购物车都有浏览,搜索商品的功能,并且购物车的功能比商城多,可在其之上进行添加,所以想用购物车extends商城,但是购物车不是商城,不能以此为继承

接口问题:

  • 接口符合has-a关系###

  • 购物车面向对象的实现功能有一些是重复的,对于符合has-a关系,可以尝试使用接口,不过该题定义接口的话使用好像不多,定不定义差别不是很大

面向对象:

  • 以对象出发,避免面向过程###

  • 要以对象为考虑而不是像C那样细节片式展示
  • 从类的框架出发,以类为整体,以类传输,采用封装、继承、多态等设计方法
  • 面向对象与面向过程的区别####

  • 面向过程:
    分析出解决问题所需要的步骤,然后用函数把这些步骤一步一步实现,使用的时候一个一个依次调用
  • 面向对象:
    把构成问题事务分解成各个对象,建立对象的目的不是为了完成一个步骤,而是为了描叙某个事物在整个解决问题的步骤中的行为,
    面向对象是以功能来划分问题,而不是步骤

相关信息的链接:

Java类的定义及其实例化:https://blog.csdn.net/yongchaocsdn/article/details/53572983

Java类的定义、声明及使用:https://blog.csdn.net/miao_9/article/details/62057732

java Map集合框架之LinkedHashMap:https://blog.csdn.net/u011659172/article/details/50634308

面向对象和面向过程的区别以及优缺点:https://blog.csdn.net/shznt/article/details/50382942

posted @ 2018-09-18 20:03  hahaha233  阅读(367)  评论(0编辑  收藏  举报