购物车小案例【简单版】

前言

为了巩固MVC的开发模式,下面就写一个购物车的小案例.

①构建开发环境

导入需要用到的开发包

建立程序开发包


②设计实体

书籍实体


    public class Book {

        private String id;
        private String name;
        private String author;
        private String description;
        private double price;

        public Book() {
        }

        public Book(String id, String name, String author, String description, double price) {
            this.id = id;
            this.name = name;
            this.author = author;
            this.description = description;
            this.price = price;
        }

        //...各种setter和getter
    }

购物车与购物项实体

可能我们会这样设计购物车


    /*该类代表的是购物车*/
    public class Cart {

        //关键字是书籍的id,值是书
        private Map<String, Book> bookMap = new LinkedHashMap<>();


    }

上面的做法是不合适的,试想一下:如果我要购买两本相同的书,购物车的页面上就出现了两本书,而不是书*2。买三本相同的书就在购物页面上出现三本书,而不是书*3.

因此,Map集合的值不能是Book对象,那我们怎么才能解决上面所说的问题呢?我们最常用的就是,再写一个实体CartItem(代表购物项)

  • 好的,我们先来写购物项实体吧,等会再写购物车!

    /*购物项代表的是当前书,并表示该书出现了几次*/
    public class CartItem {

        private Book book;
        private int quantity;

        //该购物项(书--不一定只有一本)的价钱应该等于书的数量*价格
        private double price;


        //书的价钱*数量
        public double getPrice() {
            return book.getPrice() * this.quantity;
        }

        public Book getBook() {
            return book;
        }

        public void setBook(Book book) {
            this.book = book;
        }

        public int getQuantity() {
            return quantity;
        }

        public void setQuantity(int quantity) {
            this.quantity = quantity;
        }

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

  • 购物车实体


    /*该类代表的是购物车*/
    public class Cart {

        //关键字是书籍的id,值是书
        private Map<String, CartItem> bookMap = new LinkedHashMap<>();

        //代表着购物车的总价
        private double price;


        //把购物项(用户传递进来的书籍)加入到购物车里边去,也应该是购物车的功能
        public void addBook(Book book) {

            //获取得到购物项
            CartItem cartItem = bookMap.get(book.getId());

            //判断购物车是否存在该购物项,如果不存在
            if (cartItem == null) {

                //创建这个购物项对象
                cartItem = new CartItem();

                //将用户传递过来的书籍作为购物项
                cartItem.setBook(book);

                //把该购物项的数量设置为1
                cartItem.setQuantity(1);

                //把购物项加入到购物车去
                bookMap.put(book.getId(), cartItem);
            } else {

                //如果存在该购物项,将购物项的数量+1
                cartItem.setQuantity(cartItem.getQuantity() + 1);
            }
        }

        //购物车的总价就是所有购物项的价格加起来
        public double getPrice() {

            double totalPrice = 0;

            for (Map.Entry<String, CartItem> me : bookMap.entrySet()) {

                //得到每个购物项
                CartItem cartItem = me.getValue();

                //将每个购物项的钱加起来,就是购物车的总价了!
                totalPrice += cartItem.getPrice();
            }

            return totalPrice;
        }


        public Map<String, CartItem> getBookMap() {
            return bookMap;
        }

        public void setBookMap(Map<String, CartItem> bookMap) {
            this.bookMap = bookMap;
        }


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

③数据库

这里就直接用集合模拟数据库了,简单的domo而已。


    //既然是购物车案例,应该会有增删的操作,通过关键字查询书
  • 8
    点赞
  • 16
    收藏
    觉得还不错? 一键收藏
  • 2
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值