图书商城:购物车模块

本文探讨了图书商城购物车的实现方式,包括存储在session、cookie和数据库中的选择。详细介绍了购物车的结构,如CartItem类和Cart类,并阐述了添加、清空、删除购物车条目以及如何展示我的购物车功能。
摘要由CSDN通过智能技术生成

购物车存储

  • 保存在session中
  • 保存在cookie中
  • 保存在数据库中

1、创建相关类

购物车的结构:

  • CartItem:购物车条目,包含图书和数量
  • Cart:购物车,包含一个Map
/**
 * 购物车类
 */
public class Cart {
   
    private Map<String,CartItem> map = new LinkedHashMap<String,CartItem>();

    /**
     * 计算合计
     * @return
     */
    public double getTotal() {
        // 合计=所有条目的小计之和
        BigDecimal total = new BigDecimal("0");
        for(CartItem cartItem : map.values()) {
            BigDecimal subtotal = new BigDecimal("" + cartItem.getSubtotal());
            total = total.add(subtotal);
        }
        return total.doubleValue();
    }

    /**
     * 添加条目到车中
     * @param cartItem
     */
    public void add(CartItem cartItem) {
        if(map.containsKey(cartItem.getBook().getBid())) {
  //判断原来车中是否存在该条目
            CartItem _cartItem = map.get(cartItem.getBook().getBid());//返回原条目
            _cartItem.setCount(_cartItem.getCount() + cartItem.getCount());//设置老条目的数量为,其自己数量+新条目的数量
            map.put(cartItem.getBook().getBid(), _cartItem);
        } else {
            map.put(cartItem.getBook().getBid(), cartItem);
        }
    }

    /**
     * 清空所有条目
     */
    public void clear() {
        map.clear();
    }

    /**
     * 删除指定条目
     * @param bid
     */
    public void delete(String bid) {
        map.remove(bid);
    }

    /**
     * 获取所有条目
     * @return
     */
    public Collection<CartItem> getCartItems() {
        return map.values();
    }
}
/**
 * 购物车条目类
 * 
 */
public class CartItem {
   
    private Book book;// 商品
    private int count;// 数量

    /**
     * 小计方法
     * @return
     * 处理了二进制运算误差问题
     */
    public double getSubtotal() {
  //小计方法,但它没有对应的成员!
        BigDecimal d1 = new BigDecimal(book.getPrice() + "");
        BigDecimal d2 = new BigDecimal(count + "");
        return d1.multiply(d2).doubleValue();
    }

    public Book getBook() {
        return book;
    }

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

    public int getCount() {
        return count;
    }

    public void setCount(
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值