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

网友投稿 227 2023-06-26


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

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

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

> 添加购物条目

> 修改购物条目的数量

> 删除条目

> 批量删除条目

> 我的购物车,即按用户查询条目

> 查询勾选的条目

1.数据表

复制代码 代码如下:

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 ListfindByUser(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"%>



小技巧: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;

}


版权声明:本文内容由网络用户投稿,版权归原作者所有,本站不拥有其著作权,亦不承担相应法律责任。如果您发现本站中有涉嫌抄袭或描述失实的内容,请联系我们jiasou666@gmail.com 处理,核实后本网站将在24小时内删除侵权内容。

上一篇:java网上图书商城(6)订单模块1
下一篇:微信小程序 底部导航栏目开发资料
相关文章

 发表评论

暂时没有评论,来抢沙发吧~