购物车模块实现(一)
* 学商城项目有一段时间了,一直想写一篇博客,但是找不到时间,其实是懒癌患者。今天做完了商城项目的购物车模块,还有点时间,出来献丑了,还请不当的地方大家多多指正,我一定改正。*
第一步:我们来分析一下购物车。
1.1 购物项对象
1.1.1 商品信息(商品图片和商品价格)
购买数量(判断是否是同一种商品,如果是,商品的数量加 1,如果不是,添加购物项)
小计(购物数量乘以价格,自动计算)
public class CartItem {
private Product product; //购物项中的商品信息
private int count ; //购买数量
private double subtotal; //小计
public Product getProduct() {
return product;
}
public void setProduct(Product product) {
this.product = product;
}
public int getCount() {
return count;
}
public void setCount(int count) {
this.count = count;
}
//小计是自动计算出来的
public double getSubtotal() {
return count * product.getShop_price();
}
}
1.2 购物车对象
包括购物车的属性和功能
属性包括购物车中含有购物项,总计
功能包括清空购物车,添加购物项,清除购物项
public class Cart implements Serializable {
//购物车的属性
//购物项的集合
private Map<Integer,CartItem> map = new LinkedHashMap<Integer, CartItem>();
//将map的value化为单列集合,遍历简单
//Cart对象中有一个CartItems的属性
public Collection<CartItem> getCartItems(){
return map.values();
}
//购物总计
private double total;
public double getTotal() {
return total;
}
//购物车的功能
// 1.将购物项添加到购物车
public void addCart(CartItem cartItem){
/*
* 首先判断购物车中是否含有该购物项
* 如果存在,将count加1,总计
* 如果不存在,将购物项加到购物车中,总计
*
*/
Integer pid = cartItem.getProduct().getPid();
if(map.containsKey(pid)){
CartItem _cartItem = map.get(pid);//获得原来的购物项
_cartItem.setCount(_cartItem.getCount()+cartItem.getCount());
}else {
map.put(pid,cartItem );
}
total += cartItem.getSubtotal();
}
// 2.从购物车移除购物项
public void removeCart(Integer pid){
//将购物项从购物车中移除
CartItem cartItem = map.remove(pid);
//将总计减去购物项的
total -= cartItem.getSubtotal();
}
// 3.清空购物车
public void clearCart(){
//将所有的购物项清空
map.clear();
//总计设置为0
total =0;
}
}
1.3购物车的Action
public class CartAction extends ActionSupport{
//接收count
private Integer count;
//接收pid
private Integer pid;
//注入productService
private ProductService productService;
public void setProductService(ProductService productService) {
this.productService = productService;
}
public void setCount(Integer count) {
this.count = count;
}
public void setPid(Integer pid) {
this.pid = pid;
}
//将购物项添加到购物车
public String addCart(){
//封装一个cartItem对象
CartItem cartItem = new CartItem();
cartItem.setCount(count);
//根据商品id获取商品
Product product = productService.findByPid(pid);
//设置商品
cartItem.setProduct(product);
//将购物项添加到购物车
Cart cart = getCart();
cart.addCart(cartItem);
return "addCart";
}
//从session中获得购物车
private Cart getCart() {
Cart cart = (Cart) ServletActionContext.getRequest().getSession()
.getAttribute("cart");
if (cart == null) {
cart = new Cart();
ServletActionContext.getRequest().getSession()
.setAttribute("cart", cart);
}
return cart;
}
// 清空购物车的执行的方法:
public String clearCart(){
// 获得购物车对象.
Cart cart = getCart();
// 调用购物车中清空方法.
cart.clearCart();
return "clearCart";
}
//购物车中移除购物项
public String removeCart(){
// 获得购物车对象.
Cart cart = getCart();
//调用购物车的清除功能
cart.removeCart(pid);
return "removeCart";
}
//点击我的购物车,完成页面跳转
public String myCart(){
return "myCart";
}
}
第一篇是简单的代码实现,第二篇写一点心得以及涉及到的一些我不懂的巧妙方法,毕竟字数多了,人会产生视觉疲劳。