今日任务

  • 完成购物模块的功能
  • 完成订单模块的功能

1.1      购物模块:

1.1.1    功能演示:

商品详情:

购物车模块:

1.1.2    代码实现:

1.在商品详情的页面中点击【加入购物车】链及.

2.提交到Servlet中:

* 提交购买的商品的数量.

* 提交购买的商品的ID.

3.将购物的信息存入到session中.

* 将购物车的信息存入到session中.

* 购物项对象的封装(购物车中的每个购买商品的信息)

* 商品的对象:

* 数量

* 小计

* 购物车对象的封装(购买所有商品的信息)

* 购物项的集合

* 总计

4.在页面中将购物车的信息获得到.

* 在页面中显示出来.

【购物项的实体的封装:CartItem】

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();

    }

    /*public void setSubtotal(double subtotal) {

        this.subtotal = subtotal;

    }*/
}

【购物车的实体:Cart】

public class Cart {

    // 定义一个购物项的集合的属性:集合采用Map集合,因为移除购物项的时候方便.使用商品的id作为Map的key

    // 使用购物项作为Map的value.

    private Map<String,CartItem> map = new LinkedHashMap<String,CartItem>();

    // 定义购物车中的总计:

    private double total;

    public Map<String, CartItem> getMap() {

        return map;

    }

    public double getTotal() {

        return total;

    }

    // 方法:将购物项添加到购物车

    public void addCart(CartItem cartItem){

        // 判断购物车中是否已经存在该购物项.

        String id = cartItem.getProduct().getPid();

        if(map.containsKey(id)){

            // 如果已经存在:在原来的数量的基础上+新买的数量. 总计发生变化.

            // 获得购物车中的原来购物项的信息

            CartItem _cartItem = map.get(id);

            _cartItem.setCount(_cartItem.getCount()+cartItem.getCount());

        }else{

            // 如果不存在:在集合中添加一个新的购物项. 总计发生变化.

            map.put(id, cartItem);

        }

        total += cartItem.getSubtotal();

    }

    // 方法:从购物车中移除购物项

    public void removeCart(String id){

        // 从map中移除选中的元素.

        // CartItem cartItem = map.get(id);

        CartItem cartItem = map.remove(id);

        // 将总计 - 移除购物项的小计

        total -= cartItem.getSubtotal();

    }

    // 方法:清空购物车

    public void clearCart(){ //

        //  将map集合清空.

        map.clear();

        // 将总结设置为0.

        total = 0;

    }

}

【在购物详情页面点击加入购物车的链接】

public String addCart(HttpServletRequest req,HttpServletResponse resp){

        // 接收参数:

        String pid = req.getParameter("pid");

        int count = Integer.parseInt(req.getParameter("count"));

        try {

            // 封装购物项:

            CartItem cartItem = new CartItem();

            // 商品对象:通过商品ID查询商品.

            ProductService productService = (ProductService) BeanFactory.getBean("productService");

            Product product = productService.findById(pid);

            cartItem.setProduct(product);

            cartItem.setCount(count);

            // 调用购物车中的添加到购物车的方法:

            // Cart cart = new Cart();

            Cart cart = getCart(req);

            cart.addCart(cartItem);

            resp.sendRedirect(req.getContextPath()+"/jsp/cart.jsp");

        } catch (Exception e) {

            e.printStackTrace();

            throw new RuntimeException();

        }

        return null;

    }

【在购物车页面点击清空购物车】

    public String clearCart(HttpServletRequest req,HttpServletResponse resp){

        // 获得购物车对象.

        Cart cart = getCart(req);

        // 调用购物车中的方法:

        cart.clearCart();

        try {

            resp.sendRedirect(req.getContextPath()+"/jsp/cart.jsp");

        } catch (Exception e) {

            e.printStackTrace();

            throw new RuntimeException();

        }

        return null;

    }

【在购物车页面点击删除链接】

public String removeCart(HttpServletRequest req,HttpServletResponse resp){

        try {

            // 接收参数:

            String pid = req.getParameter("pid");

            // 获得购物车:

            Cart cart = getCart(req);

            cart.removeCart(pid);

            // 页面跳转

            resp.sendRedirect(req.getContextPath()+"/jsp/cart.jsp");

        } catch (Exception e) {

            e.printStackTrace();

            throw new RuntimeException();

        }

        return null;

    }

1.2      订单模块:

1.2.1    功能演示:

1.2.2    代码实现:

1.2.2.1  创建表和实体:

CREATE TABLE `orders` (

  `oid` varchar(32) NOT NULL,

  `ordertime` datetime DEFAULT NULL,

  `total` double DEFAULT NULL,

  `state` int(11) DEFAULT NULL,

  `address` varchar(30) DEFAULT NULL,

  `name` varchar(20) DEFAULT NULL,

  `telephone` varchar(20) DEFAULT NULL,

  `uid` varchar(32) DEFAULT NULL,

  PRIMARY KEY (`oid`)

) ENGINE=InnoDB DEFAULT CHARSET=utf8;

CREATE TABLE `orderitem` (

  `itemid` varchar(32) NOT NULL,

  `count` int(11) DEFAULT NULL,

  `subtotal` double DEFAULT NULL,

  `pid` varchar(32) DEFAULT NULL,

  `oid` varchar(32) DEFAULT NULL,

  PRIMARY KEY (`itemid`),

  KEY `fk_0001` (`pid`),

  KEY `fk_0002` (`oid`),

  CONSTRAINT `fk_0001` FOREIGN KEY (`pid`) REFERENCES `product` (`pid`),

  CONSTRAINT `fk_0002` FOREIGN KEY (`oid`) REFERENCES `orders` (`oid`)

) ENGINE=InnoDB DEFAULT CHARSET=utf8;

1.2.2.2  生成订单:

【在购物车的页面点击提交订单】

提交到Servlet:

* 封装订单和订单项.

* 调用业务层

* 清空购物车

* 页面跳转

【JAVAWEB学习笔记】网上商城实战3:购物模块和订单模块的更多相关文章

  1. 【JAVAWEB学习笔记】网上商城实战5:后台的功能模块

    今日任务 完成后台的功能模块 1.1      网上商城的后台功能的实现: 1.1.1    后台的功能的需求: 1.1.1.1  分类管理: [查询所有分类] * 在左侧菜单页面中点击分类管理: * ...

  2. JAVAWEB贵美网上商城完整项目源码(SSH2)

    JAVAWEB贵美网上商城完整项目源码(SSH2) 贵美网上商城原是北大青鸟的一个内部项目,项目采用 struts2+spring4+hibernate4+MySQL等技术实现,数据库连接池采用c3p ...

  3. JavaWeb学习笔记总结 目录篇

    JavaWeb学习笔记一: XML解析 JavaWeb学习笔记二 Http协议和Tomcat服务器 JavaWeb学习笔记三 Servlet JavaWeb学习笔记四 request&resp ...

  4. javaweb学习笔记整理补课

    javaweb学习笔记整理补课 * JavaWeb: * 使用Java语言开发基于互联网的项目 * 软件架构: 1. C/S: Client/Server 客户端/服务器端 * 在用户本地有一个客户端 ...

  5. 【JAVAWEB学习笔记】网上商城实战:环境搭建和完成用户模块

    网上商城实战 今日任务 完成用户模块的功能 1.1      网上商城的实战: 1.1.1    演示网上商城的功能: 1.1.2    制作目的: 灵活运用所学知识完成商城实战. 1.1.3    ...

  6. 【JAVAWEB学习笔记】网上商城实战1:环境搭建和完成用户模块

    今日任务 完成用户模块的功能 1.1      网上商城的实战: 1.1.1    演示网上商城的功能: 1.1.2    制作目的: 灵活运用所学知识完成商城实战. 1.1.3    数据库分析和设 ...

  7. Javaweb学习笔记——(二十四)——————图书商城项目

    图书商城          环境搭建         1.导入原型             *用户模块             *分类模块             *图书模块              ...

  8. 【JAVAWEB学习笔记】06_jQuery基础

    接05的学习笔记. 四.使用JQ完成省市二级联动 1.需求分析 使用jquery完成省市二级联动 2.技术分析 2.1数组的遍历操作 方式一: $(function(){ // 全选/ 全不选 $(& ...

  9. javaweb学习笔记(二)

    一.javaweb学习是所需要的细节 1.Cookie的注意点 ① Cookie一旦创建,它的名称就不能更改,Cookie的值可以为任意值,创建后允许被修改. ② 关于Cookie中的setMaxAg ...

随机推荐

  1. 在mysql 5.6的环境下修改生产环境的表结构(在线ddl) ----工具pt-osc

    随着需求的变化越来越快,在线修改表结构变得越来越需要. 在mysql5.6以前,mysql的修改表结构操作会锁表,这样就会造成开发人员或者DBA修改表结构必须要等到凌晨流量谷值或者停服修改.这样必定会 ...

  2. MySQL 5.7贴心参数之 log_timestamps

    写在前面 使用 MySQL 的过程中,经常会有人碰到这么一个问题,看错误日志.慢查询日志的时候,时间总是和本地时间对不上,差了 8 个小时,这样分析起来就相对麻烦了一些. 新改进 对于不知道是什么原因 ...

  3. 简单的RTSP消息交互过程

    C表示RTSP客户端,S表示RTSP服务端 第一步:查询服务器端可用方法 1. C->S:OPTION request       //询问S有哪些方法可用 2. S->C:OPTION ...

  4. android参数传递的几种方法

    Intent Intent i=new Intent(当前Activity.this,目标Activity.class); 1.传单值 传入: i. i.putExtra("名称" ...

  5. python自动化测试应用-番外篇--接口测试2

    篇2                 book-python-auto-test-番外篇--接口测试2 --lamecho辣么丑 大家好! 我是lamecho(辣么丑),今天将继续上一篇python接 ...

  6. 蓝桥杯- 煤球数目-java

    /* (程序头部注释开始) * 程序的版权和版本声明部分 * Copyright (c) 2016, 广州科技贸易职业学院信息工程系学生 * All rights reserved. * 文件名称: ...

  7. Lucene5.5.4入门以及基于Lucene实现博客搜索功能

    前言 一直以来个人博客的搜索功能很蹩脚,只是自己简单用数据库的like %keyword%来实现的,所以导致经常搜不到想要找的内容,而且高亮显示.摘要截取等也不好实现,所以决定采用Lucene改写博客 ...

  8. Struts2之2.5.10.1HelloWorld

    Struts2.5.10.1是目前为止最新的版本,struts2建议持续跟进,理由大家都懂.好了,下面步入正题. 基于struts2.5.10.1建立一个HelloWorld,基于注解的哈! 工具:e ...

  9. ConcurrentHashMap实现原理及源码分析

    ConcurrentHashMap实现原理 ConcurrentHashMap源码分析 总结 ConcurrentHashMap是Java并发包中提供的一个线程安全且高效的HashMap实现(若对Ha ...

  10. 1.各个浏览器内核?经常遇到的浏览器兼容性有哪些?解决办法?常用的hack技巧?

    IE: trident内核 Firefox(火狐):gecko内核 Safari(苹果):webkit内核 Opera(欧鹏):以前是presto内核,现在是Blink内核 Chrome:Blink ...