欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页  >  IT编程

javaweb图书商城设计之购物车模块(3)

程序员文章站 2024-03-12 13:01:20
本文继续为大家分享了javaweb图书商城中购物车模块,供大家参考,具体内容如下 购物车存储 保存在session中 保存在cookie中 保存在数据库中 1...

本文继续为大家分享了javaweb图书商城中购物车模块,供大家参考,具体内容如下

购物车存储

保存在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(int count) {
    this.count = count;
  }
}

2、添加购物车条目

javaweb图书商城设计之购物车模块(3)

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


<!doctype html public "-//w3c//dtd html 4.01 transitional//en">
<html>
 <head>
  <title>购物车列表</title>

  <meta http-equiv="pragma" content="no-cache">
  <meta http-equiv="cache-control" content="no-cache">
  <meta http-equiv="expires" content="0">
  <meta http-equiv="keywords" content="keyword1,keyword2,keyword3">
  <meta http-equiv="description" content="this is my page">
  <meta http-equiv="content-type" content="text/html;charset=utf-8">
  <!--
  <link rel="stylesheet" type="text/css" href="styles.css">
  -->
<style type="text/css">
  * {
    font-size: 11pt;
  }
  div {
    margin:20px;
    border: solid 2px gray;
    width: 150px;
    height: 150px;
    text-align: center;
  }
  li {
    margin: 10px;
  }

  #buy {
    background: url(<c:url value='/images/all.png'/>) no-repeat;
    display: inline-block;

    background-position: 0 -902px;
    margin-left: 30px;
    height: 36px;
    width: 146px;
  }
  #buy:hover {
    background: url(<c:url value='/images/all.png'/>) no-repeat;
    display: inline-block;

    background-position: 0 -938px;
    margin-left: 30px;
    height: 36px;
    width: 146px;
  }
</style>
 </head>

 <body>
<h1>购物车</h1>
<c:choose>
  <%-- 如果没有车,或车的内容集合为0长 --%>
  <c:when test="${empty sessionscope.cart or fn:length(sessionscope.cart.cartitems) eq 0}">
    <img src="<c:url value='/images/cart.png'/>" width="300"/>
  </c:when>
  <c:otherwise>
<table border="1" width="100%" cellspacing="0" background="black">
  <tr>
    <td colspan="7" align="right" style="font-size: 15pt; font-weight: 900">
      <a href="<c:url value='/cartservlet?method=clear'/>">清空购物车</a>
    </td>
  </tr>
  <tr>
    <th>图片</th>
    <th>书名</th>
    <th>作者</th>
    <th>单价</th>
    <th>数量</th>
    <th>小计</th>
    <th>操作</th>
  </tr>

<c:foreach items="${sessionscope.cart.cartitems }" var="cartitem">
  <tr>
    <td><div><img src="<c:url value='/${cartitem.book.image }'/>"/></div></td>
    <td>${cartitem.book.bname }</td>
    <td>${cartitem.book.author }</td>
    <td>${cartitem.book.price }元</td>
    <td>${cartitem.count }</td>
    <td>${cartitem.subtotal }元</td>
    <td><a href="<c:url value='/cartservlet?method=delete&bid=${cartitem.book.bid }'/>">删除</a></td>
  </tr>
</c:foreach>

  <tr>
    <td colspan="7" align="right" style="font-size: 15pt; font-weight: 900">
      合计:${sessionscope.cart.total }元
    </td>
  </tr>
  <tr>
    <td colspan="7" align="right" style="font-size: 15pt; font-weight: 900">
      <a id="buy" href="<c:url value='/orderservlet?method=add'/>"></a>
    </td>
  </tr>
</table>
  </c:otherwise>
</c:choose>
 </body>
</html>

public class cartservlet extends baseservlet {
  /**
   * 添加购物条目
   * @param request
   * @param response
   * @return
   * @throws servletexception
   * @throws ioexception
   */
  public string add(httpservletrequest request, httpservletresponse response)
      throws servletexception, ioexception {
    /*
     * 1. 得到车
     * 2. 得到条目(得到图书和数量)
     * 3. 把条目添加到车中
     */
    /*
     * 1. 得到车
     */
    cart cart = (cart)request.getsession().getattribute("cart");
    /*
     * 表单传递的只有bid和数量
     * 2. 得到条目
     *  > 得到图书和数量
     *  > 先得到图书的bid,然后我们需要通过bid查询数据库得到book
     *  > 数量表单中有
     */
    string bid = request.getparameter("bid");
    book book = new bookservice().load(bid);
    int count = integer.parseint(request.getparameter("count"));
    cartitem cartitem = new cartitem();
    cartitem.setbook(book);
    cartitem.setcount(count);

    /*
     * 3. 把条目添加到车中
     */
    cart.add(cartitem);

    return "f:/jsps/cart/list.jsp";
  }

  /**
   * 清空购物条目
   * @param request
   * @param response
   * @return
   * @throws servletexception
   * @throws ioexception
   */
  public string clear(httpservletrequest request, httpservletresponse response)
      throws servletexception, ioexception {
    /**
     * 1. 得到车
     * 2. 设置车的clear
     */
    cart cart = (cart)request.getsession().getattribute("cart");
    cart.clear();
    return "f:/jsps/cart/list.jsp";
  }

  /**
   * 删除购物条目
   * @param request
   * @param response
   * @return
   * @throws servletexception
   * @throws ioexception
   */
  public string delete(httpservletrequest request, httpservletresponse response)
      throws servletexception, ioexception {
    /*
     * 1. 得到车
     * 2. 得到要删除的bid
     */
    cart cart = (cart)request.getsession().getattribute("cart");
    string bid = request.getparameter("bid");
    cart.delete(bid);
    return "f:/jsps/cart/list.jsp";
  }
}

3、清空条目

javaweb图书商城设计之购物车模块(3)

4、删除购物车条目

javaweb图书商城设计之购物车模块(3)

5、我的购物车

top.jsp中存在一个链接:我的购物车

我的购物车直接访问/jsps/cart/list.jsp,它会显示session中车的所有条目。

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