博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
项目阶段五:购物车
阅读量:3967 次
发布时间:2019-05-24

本文共 9189 字,大约阅读时间需要 30 分钟。

1、购物车模块分析

在这里插入图片描述

2、购物车模型编写

2.1、购物车模型

CartItem.java:

public class CartItem {
private Integer id;//商品编号 private String name;//商品名称 private Integer count;//商品数量 private BigDecimal price;//商品单价 private BigDecimal totalPrice;//商品总价

Cart.java:

public class Cart {
/** * key是商品编号, * value,是商品信息 */ private Map
items= new LinkedHashMap
(); /** * 添加商品项 * @param cartItem */ public void addItem(CartItem cartItem){
// 先查看购物车中是否已经添加过此商品,如果已添加,则数量累加,总金额更新,如果没添加过,直接放到集合中即可 CartItem item = items.get(cartItem.getId()); if(item == null){
// 之前没添加过此商品 items.put(cartItem.getId(),cartItem); }else{
// 已经 添加过的情况 item.setCount(item.getCount() + 1);// 数量 累加 item.setTotalPrice(item.getPrice().multiply(new BigDecimal(item.getCount())));// 更新总金额 } } /** * 通过ID删除商品项 * @param id */ public void deleteItem(Integer id){
items.remove(id); } /** * 清空购物车 */ public void clear(){
items.clear(); } /** * 修改商品数量 * @param id * @param count */ public void updateCount(Integer id,Integer count){
// 先查看购物车中是否此商品。如果,修改商品数量,更新总金额 CartItem cartItem = items.get(id); if(cartItem != null){
cartItem.setCount(count);// 修改商品数量 cartItem.setTotalPrice(cartItem.getPrice().multiply(new BigDecimal(cartItem.getCount())));// 更新总金额 } } /** * 加购的总数量 * @return */ public Integer getTotalCount(){
Integer totalCount = 0; for (Map.Entry
entry : items.entrySet()) {
totalCount += entry.getValue().getCount(); } return totalCount; } /** * 得到总金额 * @return */ public BigDecimal getTotalPrice(){
BigDecimal totalPrice = new BigDecimal(0); for (Map.Entry
entry : items.entrySet()) {
totalPrice = totalPrice.add(entry.getValue().getTotalPrice()); } return totalPrice; } public Map
getItems() {
return items; } public void setItems(Map
items) { this.items = items; } @Override public String toString() { return "Cart{" + "totalCount=" + getTotalCount() + ", totalPrice=" + getTotalPrice() + ", items=" + items + '}'; }}

CartTest.java:

public class CartTest {
@Test public void addItem() {
Cart cart = new Cart(); cart.addItem(new CartItem(1,"安徒生童话",1,new BigDecimal(100),new BigDecimal(100))); cart.addItem(new CartItem(1,"安徒生童话",1,new BigDecimal(100),new BigDecimal(100))); cart.addItem(new CartItem(2,"安徒生童话",1,new BigDecimal(200),new BigDecimal(200))); System.out.println(cart); } @Test public void deleteItem() {
Cart cart = new Cart(); cart.addItem(new CartItem(1,"安徒生童话",1,new BigDecimal(100),new BigDecimal(100))); cart.addItem(new CartItem(1,"安徒生童话",1,new BigDecimal(100),new BigDecimal(100))); cart.addItem(new CartItem(2,"安徒生童话",1,new BigDecimal(200),new BigDecimal(200))); cart.deleteItem(1); System.out.println(cart); } @Test public void clear() {
Cart cart = new Cart(); cart.addItem(new CartItem(1,"安徒生童话",1,new BigDecimal(100),new BigDecimal(100))); cart.addItem(new CartItem(1,"安徒生童话",1,new BigDecimal(100),new BigDecimal(100))); cart.addItem(new CartItem(2,"安徒生童话",1,new BigDecimal(200),new BigDecimal(200))); cart.clear(); System.out.println(cart); } @Test public void updateCount() {
Cart cart = new Cart(); cart.addItem(new CartItem(1,"安徒生童话",1,new BigDecimal(100),new BigDecimal(100))); cart.addItem(new CartItem(1,"安徒生童话",1,new BigDecimal(100),new BigDecimal(100))); cart.addItem(new CartItem(2,"安徒生童话",1,new BigDecimal(200),new BigDecimal(200))); cart.updateCount(2,2); System.out.println(cart); }}

2.2、加入购物车功能的实现

CartServlet 程序中的代码:

public class CartServlet extends BaseServlet {
private BookService bookService = new BookServiceImpl(); /** * 加入购物车 * @param req * @param resp * @throws ServletException * @throws IOException */ protected void addItem(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
// 获取请求的参数 商品编号 int id = WebUtils.parseInt(req.getParameter("id"), 0); // 调用bookService.queryBookById(id):Book得到图书的信息 Book book = bookService.queryBookById(id); // 把图书信息,转换成为CartItem商品项 CartItem cartItem = new CartItem(book.getId(),book.getBookName(),1,book.getPrice(),book.getPrice()); //判断Session域中是否cart属性,没就创建,就获得 Cart cart = (Cart) req.getSession().getAttribute("cart"); if(cart == null){
// 创建一个购物车 cart = new Cart(); req.getSession().setAttribute("cart",cart); } // 调用Cart.addItem(CartItem);添加商品项 cart.addItem(cartItem);// System.out.println(cart); // 重定向回原来商品所在的地址页面// req.getHeader("Referer"):获得地址栏的地址// System.out.println("请求头Referer的值:" + req.getHeader("Referer")); resp.sendRedirect(req.getHeader("Referer")); }}

index.jsp 页面 js 的代码:

	

图解说明,如何跳回添加商品的页面:

在这里插入图片描述

2.3、购物车的展示

<%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core" %><%@ page contentType="text/html;charset=UTF-8" language="java" %>
购物车 <%-- 静态包含 base标签、css样式、jQuery文件 --%> <%@include file="/pages/common/head.jsp"%>
当前购物车为空,去
首页看看没喜欢的商品吧!!!
<%--如果购物车非空的情况--%>
商品名称 数量 单价 金额 操作
${item.value.name} ${item.value.count} ${item.value.price} ${item.value.totalPrice} 删除
<%--如果购物车非空才输出页面的内容--%>
购物车中共${sessionScope.cart.totalCount}件商品
总金额${sessionScope.cart.totalPrice}
清空购物车
去结账
<%--静态包含页脚内容--%> <%@include file="/pages/common/footer.jsp"%>

3、删除购物车商品项

CartServlet 程序:

/** * 删除商品项 * @param req * @param resp * @throws ServletException * @throws IOException */protected void deleteItem(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
// 获取商品编号 int id = WebUtils.parseInt(req.getParameter("id"), 0); // 获取购物车对象 Cart cart = (Cart) req.getSession().getAttribute("cart"); if(cart != null){
// 删除 了购物车商品项 cart.deleteItem(id); // 重定向回原来购物车展示页面 resp.sendRedirect(req.getHeader("Referer")); }}

购物车/pages/cart/cart.jsp 页面的代码:

删除的请求地址:

删除删除的确认提示操作:

4、清空购物车

CartServlet 程序:

protected void clearCart(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
// 1 获取购物车对象 Cart cart = (Cart) req.getSession().getAttribute("cart"); if(cart != null){
// 清空购物车 cart.clear(); // 重定向回原来购物车展示页面 resp.sendRedirect(req.getHeader("Referer")); }}

cart.jsp 页面的内容

给清空购物车添加请求地址,和添加 id 属性

清空购物车清空的确认提示操作:// 给清空购物车绑定单击事件$("#deleteCart").click(function () {	return confirm("你确定清空购物车吗?");});

5、修改购物车商品数量

CartServlet 程序 :

protected void updateCount(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
// 获取请求的参数 商品编号 、商品数量 int id = WebUtils.parseInt(req.getParameter("id"), 0); int count = WebUtils.parseInt(req.getParameter("count"), 1); // 获取Cart购物车对象 Cart cart = (Cart) req.getSession().getAttribute("cart"); if(cart != null){
// 修改商品数量 cart.updateCount(id,count); // 重定向回原来购物车展示页面 resp.sendRedirect(req.getHeader("Referer")); }}

修改 pages/cart/cart.jsp 购物车页面:

	

修改商品数量 js 代码:

// 给输入框绑定 onchange内容发生改变事件$(".updateCount").change(function () {
// 获取商品名称 var name = $(this).parent().parent().find("td:first").text(); // 获取商品数量 var count = this.value; var id = $(this).attr("bookId"); if(confirm("你确认将商品" + name + "数量修改为" + count +"吗?")){
//发起请求。给服务器保存修改 location.href = "http://localhost:8080/MyBookStore/cartServlet?action=updateCount&count=" + count + "&id=" + id; }else{
// defaultValue属性是表单项Dom对象的属性。它表示默认的value属性值。 this.value = this.defaultValue; }});

6、首页,购物车数据回显

在添加商品到购物车的时候,保存最后一个添加的商品名称:

cart.addItem(cartItem);//        System.out.println(cart);// 重定向回原来商品所在的地址页面//        req.getHeader("Referer"):获得地址栏的地址//        System.out.println("请求头Referer的值:" + req.getHeader("Referer"));req.getSession().setAttribute("lastName",book.getBookName());resp.sendRedirect(req.getHeader("Referer"));

在 pages/client/index.jsp 页面中输出购物车信息:

<%--购物车非空的输出--%>
您的购物车中${sessionScope.cart.totalCount}件商品
您刚刚将
${sessionScope.lastName}加入到了购物车中
<%--购物车为空的输出--%>
当前购物车为空,快去挑心仪的商品吧!!!!

转载地址:http://yquki.baihongyu.com/

你可能感兴趣的文章
onTouchEvent方法的使用
查看>>
Android详细解释键盘和鼠标事件
查看>>
Android设置默认Launcher
查看>>
Android判断GPS是否开启和强制帮用户打开GPS
查看>>
Android Studio中通过快捷键来提取提取方法
查看>>
和喜欢的女生聊天 15 分钟以后就找不到话题了怎么办?
查看>>
安卓4.0响应鼠标左右点击事件
查看>>
自定义dialog的布局样式
查看>>
android 之输入法
查看>>
Android4.0之后添加虚拟按键方法
查看>>
将自定义输入法设置为系统默认输入法
查看>>
Android Studio大课堂 - 6.2.打包 - 友盟多渠道包示例
查看>>
实用的欢迎页开源库 AppIntro
查看>>
Windows使用VNC viewer访问Ubuntu 14.04远程桌面的简单方法
查看>>
Android编译大全(六)
查看>>
TVS测试波形比较,让您更懂TVS
查看>>
yum安装对于下载总是失败的rpm包如何处理
查看>>
快速由PCI迁移到PCIe
查看>>
CCD和CMOS图像传感器的快门
查看>>
视频跟踪算法
查看>>