java网上图书商城(4)购物车模块1

本文实例为大家分享了购物车模块的具体代码,供大家参考,具体内容如下

使用的不是session,也不是cookie,而是表

java网上图书商城(4)购物车模块1_第1张图片

> 添加购物条目
> 修改购物条目的数量
> 删除条目
> 批量删除条目
> 我的购物车,即按用户查询条目
> 查询勾选的条目 

1.数据表

java网上图书商城(4)购物车模块1_第2张图片

复制代码 代码如下:
insert  into `t_cartitem`(`cartItemId`,`quantity`,`bid`,`uid`,`orderBy`) values ('B8939FC55131469CAB11E3924D40185B',1,'CE01F15D435A4C51B0AD8202A318DCA7','xxx',11); 

2.CartItem

public class CartItem {
 private String cartItemId;// 主键
 private int quantity;// 数量
 private Book book;// 条目对应的图书
 private User user;// 所属用户
 
 // 添加小计方法
 public double getSubtotal() {
 /*
 * 使用BigDecimal不会有误差
 * 要求必须使用String类型构造器
 */
 BigDecimal b1 = new BigDecimal(book.getCurrPrice() + "");
 BigDecimal b2 = new BigDecimal(quantity + "");
 BigDecimal b3 = b1.multiply(b2);
 return b3.doubleValue();
 }

 public String getCartItemId() {
 return cartItemId;
 }

 public void setCartItemId(String cartItemId) {
 this.cartItemId = cartItemId;
 }

 public int getQuantity() {
 return quantity;
 }

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

 public Book getBook() {
 return book;
 }

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

 public User getUser() {
 return user;
 }

 public void setUser(User user) {
 this.user = user;
 }
} 

小技巧:Java中四舍五入 BigDecimal不会有误差

// 添加小计方法
public double getSubtotal() {
 /*
 * 使用BigDecimal不会有误差
 * 要求必须使用String类型构造器
 */
 BigDecimal b1 = new BigDecimal(book.getCurrPrice() + "");
 BigDecimal b2 = new BigDecimal(quantity + "");
 BigDecimal b3 = b1.multiply(b2);
 return b3.doubleValue();
}
 

3.通过用户查询购物车条目

我的购物车条目中每个条目需要显示图书的图片 书名 单价 ,这说明需要多表查询

public List findByUser(String uid) throws SQLException {
 String sql = "select * from t_cartitem c, t_book b where c.bid=b.bid and uid=? order by c.orderBy";
 List> mapList = qr.query(sql, new MapListHandler(), uid);
 return toCartItemList(mapList);
}

4.添加购物车条目----增

jsp

我要买:

CartItemServlet

public String add(HttpServletRequest req, HttpServletResponse resp)
 throws ServletException, IOException {
 /*
 * 1. 封装表单数据到CartItem(bid, quantity)
 */
 Map map = req.getParameterMap();
 CartItem cartItem = CommonUtils.toBean(map, CartItem.class);
 Book book = CommonUtils.toBean(map, Book.class);
 User user = (User)req.getSession().getAttribute("sessionUser");
 cartItem.setBook(book);
 cartItem.setUser(user);
 cartItemService.add(cartItem);
 return myCart(req, resp);
}

CartItemService

public void add(CartItem cartItem) {
 try {
 /*
 * 1. 使用uid和bid去数据库中查询这个条目是否存在
 */
 CartItem _cartItem = cartItemDao.findByUidAndBid(
 cartItem.getUser().getUid(),
 cartItem.getBook().getBid());
 if(_cartItem == null) {//如果原来没有这个条目,那么添加条目
 cartItem.setCartItemId(CommonUtils.uuid());
 cartItemDao.addCartItem(cartItem);
 } else {//如果原来有这个条目,修改数量
 // 使用原有数量和新条目数量之各,来做为新的数量
 int quantity = cartItem.getQuantity() + _cartItem.getQuantity();
 // 修改这个老条目的数量
 cartItemDao.updateQuantity(_cartItem.getCartItemId(), quantity);
 }
 } catch(Exception e) {
 throw new RuntimeException(e);
 }
} 

CartItemDao

public void addCartItem(CartItem cartItem) throws SQLException {
 String sql = "insert into t_cartitem(cartItemId, quantity, bid, uid)" +
 " values(?,?,?,?)";
 Object[] params = {cartItem.getCartItemId(), cartItem.getQuantity(),
 cartItem.getBook().getBid(), cartItem.getUser().getUid()};
 qr.update(sql, params);
}

 5.购物车模块页面javascript----查 

计算总计

给全选添加click事件

给所有条目的复选框添加click事件

给减号添加click事件

给加号添加click事件

批量删除

 list.jsp 

<%@ page language="java" import="java.util.*" pageEncoding="UTF-8"%>
<%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core" %>
<%@ taglib prefix="fn" uri="http://java.sun.com/jsp/jstl/functions"%>

 


 
  cartlist.jsp
  
  
  
    
  
  
  
  
  
  
  

 
 


  
  
您的购物车中暂时没有商品
商品名称 单价 数量 小计 操作
${cartItem.book.bname } ¥${cartItem.book.currPrice } ¥${cartItem.subtotal } 删除
批量删除 总计:¥

小技巧:js中四舍五入round.js

// 5. 把总计显示在总计元素上
$("#total").text(round(total, 2));//round()函数的作用是把total保留2位 


6.批量删除功能----删

jsp

function batchDelete() {
 // 1. 获取所有被选中条目的复选框
 // 2. 创建一数组,把所有被选中的复选框的值添加到数组中
 // 3. 指定location为CartItemServlet,参数method=batchDelete,参数cartItemIds=数组的toString()
 var cartItemIdArray = new Array();
 $(":checkbox[name=checkboxBtn][checked=true]").each(function() {
  cartItemIdArray.push($(this).val());//把复选框的值添加到数组中
 });
 location = "/goods/CartItemServlet?method=batchDelete&cartItemIds=" + cartItemIdArray;
}

删除一个

if(quantity == 1) {
 if(confirm("您是否真要删除该条目?")) {
  location = "/goods/CartItemServlet?method=batchDelete&cartItemIds=" + id;
 }
} else {
 

7.修改数量----改  

jsp

// 请求服务器,修改数量。
function sendUpdateQuantity(id, quantity) {
 $.ajax({
 async:false,
 cache:false,
 url:"/goods/CartItemServlet",
 data:{method:"updateQuantity",cartItemId:id,quantity:quantity},
 type:"POST",
 dataType:"json",
 success:function(result) {
 //1. 修改数量
 $("#" + id + "Quantity").val(result.quantity);
 //2. 修改小计
 $("#" + id + "Subtotal").text(result.subtotal);
 //3. 重新计算总计
 showTotal();
 }
 });
}

servlet

public String updateQuantity(HttpServletRequest req, HttpServletResponse resp)
 throws ServletException, IOException {
 String cartItemId = req.getParameter("cartItemId");
 int quantity = Integer.parseInt(req.getParameter("quantity"));
 CartItem cartItem = cartItemService.updateQuantity(cartItemId, quantity);
 
 // 给客户端返回一个json对象
 StringBuilder sb = new StringBuilder("{");
 sb.append("\"quantity\"").append(":").append(cartItem.getQuantity());
 sb.append(",");
 sb.append("\"subtotal\"").append(":").append(cartItem.getSubtotal());
 sb.append("}");
 
 resp.getWriter().print(sb);
 return null;
}

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持脚本之家。

你可能感兴趣的:(java网上图书商城(4)购物车模块1)