识别类

购物车

题目:

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

思维导图展示:

1233791-20181028195742851-1123165847.png

思路:

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

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

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

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

界面的展示:

1233791-20181118220627406-804416573.png

1233791-20181118220710949-1419251326.png

1233791-20181118221529060-913791688.png

1233791-20181118220744723-876162701.png
1233791-20181118220803476-2027759640.png

流程图展示:

UML图展示:

1233791-20181028222725122-1651462598.png

类: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

转载于:https://www.cnblogs.com/linxiaolu/p/9668968.html

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值