识别类
购物车
题目:
用户在网上商城搜索并浏览商品,一旦看到中意的商品将商品放入购物车,可放多,可在购物车中增删商品,获得商品价格,最后点击结算生成订单
思维导图展示:
思路:
顾客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那样细节片式展示
- 从类的框架出发,以类为整体,以类传输,采用封装、继承、多态等设计方法
-
面向对象与面向过程的区别####
- 面向过程:
分析出解决问题所需要的步骤,然后用函数把这些步骤一步一步实现,使用的时候一个一个依次调用 - 面向对象:
把构成问题事务分解成各个对象,建立对象的目的不是为了完成一个步骤,而是为了描叙某个事物在整个解决问题的步骤中的行为,
面向对象是以功能来划分问题,而不是步骤