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

mvc架构实现商品的购买(二)

程序员文章站 2024-03-12 10:26:38
在上篇文章中 使用了mode1的模型来实现商品的浏览,这篇文章在上篇的基础上,使用mvc架构实现商品的购买。 运行结果: 相对与上篇文章  我们多了购物车...

在上篇文章中 使用了mode1的模型来实现商品的浏览,这篇文章在上篇的基础上,使用mvc架构实现商品的购买。
运行结果:

mvc架构实现商品的购买(二)

相对与上篇文章  我们多了购物车类
由于我们在购买物品时,购物车需要的属性为购买的商品和数量   所以我们用map的键值来保存购买的商品。
当然还有一个总价格,购物车的方法有 添加商品  删除商品  计算总价格  其中总价格应该在每次添加商品和删除商品时 重新计算  购物车商品集合  只在初始化购物车的时候实例化一次即可

package entity; 
 
import java.util.hashmap; 
 
public class cart { 
  //购物车商品集合 
  private hashmap<items,integer> cart; 
  //总金额 
  private double totalprices; 
  public cart() { 
    cart=new hashmap<items, integer>(); 
    totalprices=0.0; 
  } 
  public hashmap<items, integer> getcart() { 
    return cart; 
  } 
  public void setcart(hashmap<items, integer> cart) { 
    this.cart = cart; 
  } 
  public double gettotalprices() { 
    return totalprices; 
  } 
  public void settotalprices(double totalprices) { 
    this.totalprices = totalprices; 
  } 
  //添加物品进购物车 
  public boolean addtocart(items item,int counts){ 
    //如果当前物品 已经添加过 只增加数量 
    if(cart.containskey(item)){ 
      cart.put(item, cart.get(item)+counts); 
    }else{ 
      cart.put(item, counts); 
    } 
    //重新计算价格 
    caltotalprice(item.getprice()*counts); 
    return true; 
  } 
  //将物品从购物车删除 
  public boolean removefromcart(items item){ 
    if(cart!=null&&cart.containskey(item)){ 
      caltotalprice(-item.getprice()*cart.get(item)); 
      cart.remove(item); 
    } 
    return true; 
  } 
  //计算总金额 
  private void caltotalprice(double price){ 
    totalprices+=price; 
  } 
} 

cartservlet的dogett方法根据action来进行相应的处理

if (request.getparameter("action") != null) { 
      action = request.getparameter("action"); 
 
      if ("add".equals(action)) { // 添加商品 
        if (addgoodstocart(request, response)) { 
          request.getrequestdispatcher("../success.jsp").forward( 
              request, response); 
        } else { 
          request.getrequestdispatcher("../failure.jsp").forward( 
              request, response); 
        } 
 
      } else if ("show".equals(action)) {// 显示购物车 
        request.getrequestdispatcher("../cart.jsp").forward(request, 
            response); 
      } else if ("delete".equals(action)) {// 删除物品 
        deletegoodfromcart(request, response); 
        request.getrequestdispatcher("../cart.jsp").forward(request, 
            response); 
      } 
    } 

当在商品界面 我们点击了放入购物车时 将当前商品的编号传到 购物车的servlet类cartservlet开始处理当前物品 并将当前物品放入购物车

再放入购物车之前 首先判断是否是第一次创建购物车  (购物车肯定只有一个  不能有多个)如果是第一次创建购物车cart
将当前购物车放入session ,然后通过itemsdao对象调用getitembyid(id)方法 获得商品对象  。然后将相应的商品对象 和商品数量放入购物车

//向购物车添加商品 
  private boolean addgoodstocart(httpservletrequest request, 
      httpservletresponse response) { 
    string id=request.getparameter("id"); 
    string counts=request.getparameter("num"); 
    items item=dao.getitembyid(integer.parseint(id)); 
    //判断是否是第一次创建购物车 
    if(request.getsession().getattribute("cart")==null){ 
      cart cart=new cart(); 
      request.getsession().setattribute("cart", cart); 
      request.getsession().setattribute("dao", dao); 
    } 
    cart cart=(cart) request.getsession().getattribute("cart"); 
    //将商品添加到购物车 
    if(cart.addtocart(item, integer.parseint(counts))){ 
      return true; 
    }else{ 
      return false; 
    } 
  } 

如果点击了查看购物车   cartservlet重定向到购物车页面

<%@ page language="java" import="java.util.*" contenttype="text/html; charset=utf-8"%> 
<%@ page import="entity.cart" %> 
<%@ page import="entity.items" %> 
<% 
string path = request.getcontextpath(); 
string basepath = request.getscheme()+"://"+request.getservername()+":"+request.getserverport()+path+"/"; 
%> 
 
<!doctype html public "-//w3c//dtd html 4.01 transitional//en"> 
<html> 
 <head> 
  <base href="<%=basepath%>"> 
  <title>my jsp 'cart.jsp' starting page</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"> 
  <!-- 
  <link rel="stylesheet" type="text/css" href="styles.css"> 
  --> 
  <link type="text/css" rel="stylesheet" href="css/style1.css" /> 
  <script language="javascript"> 
    function delcfm() { 
      if (!confirm("确认要删除?")) { 
        window.event.returnvalue = false; 
      } 
    } 
  </script> 
 </head> 
  
 <body> 
  <h1>我的购物车</h1> 
  <a href="goods.jsp">首页</a> >> <a href="goods.jsp">商品列表</a> 
  <hr>  
  <div id="shopping"> 
  <form action="" method="">    
      <table> 
        <tr> 
          <th>商品名称</th> 
          <th>商品单价</th> 
          <th>商品价格</th> 
          <th>购买数量</th> 
          <th>操作</th> 
        </tr> 
        <%  
          //首先判断session中是否有购物车对象 
          if(request.getsession().getattribute("cart")!=null) 
          { 
        %> 
        <!-- 循环的开始 --> 
           <%  
             cart cart = (cart)request.getsession().getattribute("cart"); 
             hashmap<items,integer> goods = cart.getcart(); 
             set<items> items = goods.keyset(); 
             iterator<items> it = items.iterator(); 
              
             while(it.hasnext()) 
             { 
              items i = it.next(); 
           %>  
        <tr name="products" id="product_id_1"> 
          <td class="thumb"><img src="images/<%=i.getpicture()%>" /><a href=""><%=i.getname()%></a></td> 
          <td class="number"><%=i.getprice() %></td> 
          <td class="price" id="price_id_1"> 
            <span><%=i.getprice()*goods.get(i) %></span> 
            <input type="hidden" value="" /> 
          </td> 
          <td class="number"> 
            <%=goods.get(i)%>          
          </td>             
          <td class="delete"> 
           <a href="servlet/cartservlet?action=delete&id=<%=i.getid()%>" onclick="delcfm();">删除</a>                    
          </td> 
        </tr> 
           <%  
             } 
           %> 
        <!--循环的结束--> 
         
      </table> 
       <div class="total"><span id="total">总计:<%=cart.gettotalprices() %>¥</span></div> 
       <%  
        } 
       %> 
      <div class="button"><input type="submit" value="" /></div> 
    </form> 
  </div> 
 </body> 
</html> 

当点击了删除商品 cartservlet类调用删除商品的方法

// 从购物车删除商品 
  private boolean deletegoodfromcart(httpservletrequest request, 
      httpservletresponse response) { 
    //从session中获取购物车对象 
    cart cart = (cart) request.getsession().getattribute("cart"); 
    if (cart != null) { 
      int id = integer.parseint(request.getparameter("id")); 
      if (cart.removefromcart(dao.getitembyid(id))) { 
        return true; 
      } 
    } 
    return false; 
 
  } 

逻辑代码主要如上。

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