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

一、人员分工

任务 姓名
编码规范,面向对象设计 王奥运
前期调查与功能设计,PPT制作或博客制作 陈伟盛

二、前期调查

前期调查以京东为例,
购物车中展示的项目有:商品名称,商品单价,商品数量,商品总价。其中商品数量可选,商品可删除。
第1次任务:购物车程序的面向对象设计
进入结算前,可选多种商品。结算时有一次确认订单,可返回购物车修改。
第1次任务:购物车程序的面向对象设计

三、系统功能结构图

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

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

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

五、UML类图:类的关键属性与方法、类与类之间的关系。每个类的功能描述。可使用ProcessOn绘制。

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

六、本系统哪里体现了面向对象的封装性。可选:哪里体现了继承与多态。

商品的名称单价数量总价等属性不可直接修改不可访问,只能通过对外接口如查询商品信息,修改数量,删除商品等。

七、项目包结构与关键代码:项目的包结构(为什么要这样设计包结构),主要功能(如网购物车添加、删除商品)的流程图与关键代码。

购物车类

package com.jmu.shoppingcart;

import java.math.BigDecimal;
import java.util.HashMap;
import java.util.Map;
import java.util.Scanner;

public class Cart {
    private BigDecimal totalPrice = new BigDecimal("1");
    Map<Commodity, Integer> cart = new HashMap<>();
    public Cart() {

    }

    @Override
    public String toString() {
        return cart + "";

    }
    public void updateCart() {
        System.out.print("请输入要修改的商品的名称:");
        Scanner Sc = new Scanner(System.in);
        String name = Sc.nextLine();
        Commodity commodity = findCommodity(name);
        if (commodity != null) {
            System.out.print("请输入您要修改的数量:");
            int number = Integer.valueOf(Sc.nextLine());
            int addnumber = cart.get(commodity) - number;
            if (!updateNumber(commodity, number)) {
                System.out.println("您输入的数量有误,请重新输入");
                updateCart();
            }
//            else {
//                heixin.commoditys.put(commodity, heixin.commoditys.get(commodity) + addnumber);
//            }
        } else {
            System.out.println("购物车内没有该商品,请重新输入");
            updateCart();
        }
    }
    public boolean updateNumber(Commodity commodity, int number) {
        if (cart.get(commodity) < number) {
            return false;
        } else if (number == 0) {
            cart.remove(commodity);
            return true;
        }
        cart.put(commodity, number);
        return true;
    }

    public void add(Commodity goods, int number) {
        if(cart.containsKey(goods)){
            cart.put(goods, cart.get(goods)+number);
        }else {
            cart.put(goods, number);
        }
    }



    public BigDecimal price() {
        if (cart.isEmpty()) {
            return new BigDecimal("0");
        }
        totalPrice = new BigDecimal("0");
        cart.forEach((K, V) -> {
            BigDecimal k = new BigDecimal(K.getPrice() + "");
            BigDecimal v = new BigDecimal(V + "");
            BigDecimal temp1 = k.multiply(v);
            totalPrice = totalPrice.add(temp1);
            //System.out.println(totalPrice);
        });
        return totalPrice;
    }

    public Commodity findCommodity(String name) {
        for (Commodity commodity : cart.keySet()) {
            if (commodity.getName().equals(name)) {
                return commodity;
            }
        }
        return null;
    }
    public  void showCart() {
        System.out.println("===============您的购物车=============");
        System.out.println("ID\t\t\tname\t\t\t\tprice\t\t\t\tnumber");
        cart.forEach((K,V)->{
            System.out.println(K+"\t"+V);
        });
    }
}

商品类

package com.jmu.shoppingcart;

public class Commodity {
    private String name;
    private double price;
    private int  ID;

    public Commodity(String name, double price, int ID) {
        this.name = name;
        this.price = price;
        this.ID = ID;
    }

    public String getName() {
        return name;
    }

    public void setName(String name) {
        this.name = name;
    }

    public double getPrice() {
        return price;
    }

    public void setPrice(double price) {
        this.price = price;
    }

    public int getID() {
        return ID;
    }

    public void setID(int  ID) {
        this.ID = ID;
    }
    @Override
    public String toString() {
        return ID+"\t\t\t"+name+"\t\t\t\t"+price+"\t\t\t\t";
    }

}

商店类

package com.jmu.shoppingcart;

import java.util.HashMap;
import java.util.LinkedHashMap;
import java.util.Map;

public class Store {
    private static int ID=0;
    Map<Commodity,Integer> commoditys= new LinkedHashMap<>();
    public void add(String name,double price,int number){
        Commodity commodity=new Commodity(name,price,ID++);
        commoditys.put(commodity,number);
    }

    public void showStory(){
        System.out.println("ID\t\t\tname\t\t\t\tprice\t\t\t\tnumber");
        commoditys.forEach((K,V)->{
            System.out.println(K+"\t"+V);
        });
    }
    public Commodity findCommodity(String name) {
        for (Commodity commodity : commoditys.keySet()) {
            if(commodity.getName().equals(name)){
                return commodity;
            }
        }
        return null;
    }

    public int getRepertory(Commodity commodity) {
        return commoditys.get(commodity);
    }

    public void update(Commodity commodity,int number) {
        commoditys.put(commodity,commoditys.get(commodity)-number);
    }
}

上一篇:餐饮、零售等应用程序之购物车设计


下一篇:读书笔记:《流畅的Python》第六章 使用一等函数实现设计模式