第1次任务-面向对象设计(购物车)

一、人员分工

                                                              任务       姓名    
                                             第1次任务-面向对象设计(购物车)     王五辈

二、前期调查

1、搜索商品

2.查看商品信息 

3.操作购物车 

三、系统功能结构图

四、系统描述 

用户进入本系统时可以选择对商城购物车进行操作,若先对商城进行操作 可以查看商城内所有商品商品名单价商品编号),也可以根据id进行查找商品,查看某个商品的信息。然后用户可以使用商品id进行加入购物车的操作。在购物车内用户可以查看购物车内所有商品信息以及要购买的数量。可以改变购买某个商品的数量,也可以删除某个商品,清空购物车。也可以进行全部商品或是单独几个商品的结算,也能看到所有商品的总价

若是管理员,还能在商城功能上删除添加改变商品。

五、类设计说明

UML类图

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

在购物车系统中,面向对象的封装性主要体现在以下几个方面:

  1. 数据的封装:购物车中需要保存商品信息、购物车中的商品数量、总价等数据。这些数据可以封装在一个购物车类中。

  2. 方法的封装:购物车、商城中需要实现添加商品、删除商品、修改商品等功能,这些操作可以封装在购物车、商城类的方法中,使得外部调用者只需要调用接口而无需了解内部实现细节。

本系统并无体现继承以及多态,如果要体现继承与多态,可以在商品类上进行实现,可以定义一个基类Commodity,然后派生出不同的子类来表示不同的商品种类。

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

                        包结构

将功能分为两块,一为与商品有关的类,另一个为处理输入输出的类,通过将相关的类放在同一个包内,可以提高代码的可读性和可维护性。而且将不同功能的代码放入不同的包中,可以实现功能的隔离。这样一来,如果需要修改某个功能,只需要关注该功能所在的包,而无需关心其他包中的代码,减少了代码耦合度,提高了代码的可维护性。 

关键代码

Commodity
public class Commodity {

    private String name;
    private double price;
    private Integer id;

    public Commodity(String name, double price, Integer id) {
        this.name = name;
        this.price = price;
        this.id = id;
    }

    @Override
    public String toString() {
        return "Commodity: " + "[name = " + name + ", price = " + price + ", 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 Integer getId() {
        return id;
    }

    public void setId(Integer id) {
        this.id = id;
    }
}
ShoppingCart
public class ShoppingCart {

    //存储购物车内商品及数量信息
    private final List<CommodityEntry> commodityEntryList = new ArrayList<>();
    //静态内部类 将商品和数量 放在一个类力
    private static class CommodityEntry{

        Commodity commodity;
        int sum;

        public CommodityEntry(Commodity commodity, int sum) {
            this.commodity = commodity;
            this.sum = sum;
        }

        @Override
        public String toString() {
            return commodity.toString() + ", sum = " + sum;
        }
    }
    //查找 commodityEntryList 中 此id 所对应的那个 i
    public int getI(Integer id){
        for(int i = 0; i < commodityEntryList.size(); i++){

            if(commodityEntryList.get(i).commodity.getId().equals(id)){
                return i;
            }
        }
        return -1;
    }
    //添加商品进入购物车
    public boolean add(Commodity commodity, int sum){
        if(getI(commodity.getId()) == -1){
            commodityEntryList.add(new CommodityEntry(commodity, sum));
            return true;
        }
        else{
            commodityEntryList.get(getI(commodity.getId())).sum += sum;
            return false;
        }
    }
    //在购物车中删除商品
    public boolean remove(Integer id){
        if(getI(id) == -1){
            return false;
        }
        commodityEntryList.remove(getI(id));
        return true;
    }
    //修改购物车内商品数量
    public boolean set(Integer id, int sum){
        if(getI(id) != -1){
            commodityEntryList.get(getI(id)).sum = sum;
            return true;
        }
        return false;
    }
    //清空购物车
    public void clear(){
        commodityEntryList.clear();
    }
    //计算购物车内商品总价
    public double calculateSum(){
        double sumPrice = 0;
        for(CommodityEntry commodityEntry: commodityEntryList){

            sumPrice += commodityEntry.sum * commodityEntry.commodity.getPrice();
        }
        return sumPrice;
    }
    //购买商品
    public double calculateSum(String[] strings){
        double sumPrice = 0;
        if(strings[0].equals("All")){
            sumPrice = calculateSum();
            clear();
        }
        else{
            for (String string : strings) {
                Integer id = Integer.valueOf(string);
                int index = getI(id);
                sumPrice += commodityEntryList.get(index).commodity.getPrice() * commodityEntryList.get(index).sum;
                remove(id);
            }
        }
        return sumPrice;
    }
    //输出购物车内商品列表
    public boolean showShoppingCart(){
        for(CommodityEntry commodityEntry : commodityEntryList){
            System.out.println(commodityEntry);
        }
        return commodityEntryList.isEmpty();
    }
}
ShoppingMall
public class ShoppingMall {

    //存储商品信息
    private final Map<Integer, Commodity> commodityEntry = new HashMap<>();

    //增加商品
    public boolean put(Commodity commodity){
        if(commodityEntry.containsKey(commodity.getId())){
            return false;
        }
        commodityEntry.put(commodity.getId(), commodity);
        return true;
    }
    //通过id获取商品
    public Commodity getValue(Integer id){
        return commodityEntry.get(id);
    }
    //展示全部商品列表
    public boolean showShoppingMall(){

        Set<Map.Entry<Integer, Commodity>> entries = commodityEntry.entrySet();
        for(Map.Entry<Integer, Commodity> mp : entries){
            System.out.println(mp.getValue());
        }
        return commodityEntry.isEmpty();
    }
    //删除商品
    public Commodity remove(Integer id){
       return commodityEntry.remove(id);
    }
    //修改商品信息
    public boolean set(Integer id, Commodity commodity){
        if(!commodityEntry.containsKey(id)){
            return false;
        }
        commodityEntry.put(id, commodity);
        return true;
    }
    //以商品编号来查找商品
    public Commodity find(Integer id){

        return commodityEntry.get(id);
    }
}
Main
public class Main {

    public static void main(String[] args) {

        Scanner scanner = new Scanner(System.in);
        ShoppingMall shoppingMall = new ShoppingMall();
        shoppingMall.put(new Commodity("手机",1000, 1001));
        shoppingMall.put(new Commodity("洗衣液",2000, 1002));
        shoppingMall.put(new Commodity("笔记本",3000, 1003));
        shoppingMall.put(new Commodity("水壶",4000, 1004));
        shoppingMall.put(new Commodity("手表",5000, 1005));
        shoppingMall.put(new Commodity("耳机",6000, 1006));
        shoppingMall.put(new Commodity("鼠标",7000, 1007));
        shoppingMall.put(new Commodity("键盘",8000, 1008));
        shoppingMall.put(new Commodity("行李箱",9000, 1009));
        shoppingMall.put(new Commodity("手环",10000, 1010));


        ShoppingCart shoppingCart = new ShoppingCart();
        shoppingCart.add(shoppingMall.getValue(1001), 10);
        shoppingCart.add(shoppingMall.getValue(1002), 20);
        shoppingCart.add(shoppingMall.getValue(1003), 30);
        shoppingCart.add(shoppingMall.getValue(1004), 40);
        shoppingCart.add(shoppingMall.getValue(1005), 50);
        while(true) {
            Menu.mainMenu();
            boolean loop =false;
            switch (scanner.nextInt()) {
                case 1:
                    Menu.ShoppingMallMenu();
                    int n = scanner.nextInt();
                    switch (n){
                        case 1:
                            if(shoppingMall.showShoppingMall()){
                                System.out.println("商品列表为空");
                            }
                            break;
                        case 2:
                            System.out.println("请输入商品的编号");
                            Integer id = scanner.nextInt();
                            System.out.println("请输入商品的名称");
                            String name = scanner.next();
                            System.out.println("请输入商品的价格");
                            double price = scanner.nextDouble();
                            if(shoppingMall.put(new Commodity(name, price, id))){
                                System.out.println("添加成功");
                            } else{
                                System.out.println("商品已存在,加入失败");
                            }
                            break;
                        case 3:
                            System.out.println("请输入商品的编号");
                            if(shoppingMall.remove(scanner.nextInt()) == null){
                                System.out.println("删除失败,不存在改商品");
                            } else{
                                System.out.println("删除成功");
                            }
                            break;
                        case 4:
                            System.out.println("请输入商品的编号");
                            id = scanner.nextInt();
                            System.out.println("请输入商品的名称");
                            name = scanner.next();
                            System.out.println("请输入商品的价格");
                            price = scanner.nextDouble();
                            if(shoppingMall.set(id, new Commodity(name, price, id))){
                                System.out.println("不存在该商品,修改失败");
                            } else{
                                System.out.println("修改成功");
                            }
                            break;
                        case 5:
                            System.out.println("请输入要查找的商品编号");
                            Commodity commodity = null;
                            if( (commodity= shoppingMall.find(scanner.nextInt())) != null){
                                System.out.println(commodity);
                            }else{
                                System.out.println("该商品不存在,查找失败");
                            }
                            break;
                        case 6:
                            break;
                        case 7:
                            loop = true;
                            break;
                    }
                    break;
                case 2:
                    Menu.ShoppingCartMenu();
                    switch(scanner.nextInt()){
                        case 1:
                            if(shoppingCart.showShoppingCart()){
                                System.out.println("购物车为空");
                            }
                            break;
                        case 2:
                            System.out.println("请输入商品的编号 以及购买数量");
                            if(shoppingCart.add(shoppingMall.getValue(scanner.nextInt()), scanner.nextInt())){
                                System.out.println("添加成功");
                            } else {
                                System.out.println("购物车内已有,增加购买数量");
                            }
                            break;
                        case 3:
                            System.out.println("请输入要删除的商品的编号");
                            if(!shoppingCart.remove(scanner.nextInt())){
                                System.out.println("购物车内没有该商品,删除失败");
                            }
                            else{
                                System.out.println("删除成功");
                            }
                            break;
                        case 4:
                            System.out.println("请输入更改的商品编号 以及购买数量");
                            if(shoppingCart.set(scanner.nextInt(), scanner.nextInt())){
                                System.out.println("更改成功");
                            } else{
                                System.out.println("购物车内无此商品, 更改失败");
                            }
                            break;
                        case 5:
                            shoppingCart.clear();
                            break;
                        case 6:
                            System.out.println("要购买全部商品吗?Yes or No");
                            String str = scanner.next();
                            if(str.equals("Yes")){
                                String[] strings = {"All"};
                                System.out.println("您需要支付:" + shoppingCart.calculateSum(strings));
                            }else {
                                System.out.println("请输入要购买的商品编号");
                                str = scanner.nextLine();
                                String s = scanner.nextLine();
                                String[] strings = s.split(" ");
                                System.out.println("您需要支付:" + shoppingCart.calculateSum(strings));
                            }
                            break;
                        case 7:
                            System.out.println("购物车内商品总价为: " + shoppingCart.calculateSum());
                            break;
                        case 8:
                            break;
                        case 9:
                            loop = true;
                            break;
                    }
                    break;
                case 3:
                    loop = true;
            }
            if(loop) break;
        }
    }
}
Menu 

 

public class Menu {

    public static void mainMenu(){

        System.out.println("***************欢迎使用购物车功能***************");
        System.out.println("               1. 查看商城");
        System.out.println("               2. 查看购物车");
        System.out.println("               3. 退出");
        System.out.println("*********************************************");
        System.out.println("请输入你的选择:(1 ~ 2)");
    }
    public static void ShoppingMallMenu(){
        System.out.println("**************欢迎使用商城功能******************");
        System.out.println("               1. 查看商城内全部商品");
        System.out.println("               2. 增加商品");
        System.out.println("               3. 删除商品");
        System.out.println("               4. 修改商品");
        System.out.println("               5. 查找商品");
        System.out.println("               6. 退出至主菜单");
        System.out.println("               7. 退出");
        System.out.println("*********************************************");
        System.out.println("请输入你的选择:(1 ~ 6)");
    }
    public static void ShoppingCartMenu(){
        System.out.println("**************欢迎使用购物车功能******************");
        System.out.println("               1. 查看购物车内全部商品");
        System.out.println("               2. 增加商品至购物车");
        System.out.println("               3. 删除购物车内商品");
        System.out.println("               4. 修改购物车内商品数量");
        System.out.println("               5. 清除购物车");
        System.out.println("               6. 购买商品");
        System.out.println("               7. 计算购物车内商品总价");
        System.out.println("               8. 退出至主菜单");
        System.out.println("               9. 退出");
        System.out.println("*********************************************");
        System.out.println("请输入你的选择:(1 ~ 8)");
    }
}

 

  • 3
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
以下是一个简单的Java面向对象购物系统的代码示例: ```java import java.util.*; class Product { String name; double price; int quantity; public Product(String name, double price, int quantity) { this.name = name; this.price = price; this.quantity = quantity; } public double getTotalPrice() { return price * quantity; } } class ShoppingCart { List<Product> products; public ShoppingCart() { products = new ArrayList<>(); } public void addProduct(Product product) { products.add(product); } public void removeProduct(Product product) { products.remove(product); } public double getTotalPrice() { double totalPrice = 0; for (Product product : products) { totalPrice += product.getTotalPrice(); } return totalPrice; } } public class Main { public static void main(String[] args) { Product p1 = new Product("Book", 10.0, 2); Product p2 = new Product("Pen", 1.0, 5); Product p3 = new Product("Notebook", 3.0, 3); ShoppingCart cart = new ShoppingCart(); cart.addProduct(p1); cart.addProduct(p2); cart.addProduct(p3); System.out.println("Total price: " + cart.getTotalPrice()); } } ``` 在这个示例中,我们定义了两个类:`Product`和`ShoppingCart`。`Product`类用于表示一个商品,包括名称、价格和数量。`ShoppingCart`类用于表示购物,包括产品列表和一些操作方法,如添加和删除产品以及获取总价。 在主方法中,我们创建了三个产品,并将它们添加到购物中。最后,我们打印出购物中所有产品的总价。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值