购物车模块总结2

1 前台业务功能

流程:首先产品页面 里面的购买链接 /shopping/cart.do,然后跳转至该对应的类BuyCartAction类进行处理

用formbean收集信息

public class BuyCartForm extends BaseForm {
    private Integer productid;
    private Integer styleid;
    private String directUrl;

}

然后BuyCartAction类处理代码

/**
 * 购物车处理
 */
@Controller("/shopping/cart")
public class BuyCartAction extends Action {
    @Resource ProductInfoService infoService;

    @Override
    public ActionForward execute(ActionMapping mapping, ActionForm form,
            HttpServletRequest request, HttpServletResponse response)
            throws Exception {
        BuyCartForm formbean = (BuyCartForm)form;
        BuyCart cart = WebUtil.getBuyCart(request); //从session中取得购物车
        if(cart == null ){
            cart = new BuyCart();
            request.getSession().setAttribute("buyCart", cart);
        }

        //往cookie里面添加SessionID,这样可以解决不同浏览器共享Session的问题,时间和Session的生命周期一样

        WebUtil.addCookie(response, "JSESSIONID", request.getSession().getId(), request.getSession().getMaxInactiveInterval());
        if(formbean.getProductid()!=null && formbean.getProductid()>0){ //往购物车里面添加商品
            ProductInfo product = infoService.find(formbean.getProductid()); //处理用户的非法输入
            if(product!=null){//下面处理产品的样式,只保留用户选择的样式
                ProductStyle currentStyle = null;
                for(ProductStyle style : product.getStyles()){
                    if(style.getId().equals(formbean.getStyleid())){
                        currentStyle = style;
                        break;
                    }
                }
                product.getStyles().clear();
                product.addProductStyle(currentStyle);
            }
            BuyItem item = new BuyItem(product);//把商品添加进购物车
            cart.addBuyItem(item);
        }        
        return mapping.findForward("buyCart");
    }
}

在struts.xml文件中保存对应的跳转页面

         <!--购物车 -->
        <action path="/shopping/cart" name="buyCartForm" scope="request">
            <forward name="buyCart" path="/WEB-INF/page/shopping/cart.jsp"/>
        </action>

cart.jsp显示页面中显示购物项:

  <!-- loop begin -->
  <c:forEach items="${buyCart.items}" var="item">
       <TR vAlign="top">
        <TD><STRONG><A href="" target="_blank">${item.product.name}</A></STRONG> <span class="h3color">[颜色/样式:<c:forEach items="${item.product.styles}" var="style">${style.name}</c:forEach>]</span><BR><BR></TD>
        <TD width="112" align="center"><SPAN class="price" title="¥${item.product.marketprice}元"><FONT color="black"><S><B>¥${item.product.marketprice}元</B></S></FONT></SPAN></TD>
        <TD width="181"><P align="center"><SPAN class="price"><B>¥${item.product.sellprice} 元</B></SPAN> <BR>
          为您节省:<SPAN class=price>¥${item.product.savedPrice}元 </SPAN><BR> </P></TD>
        <TD align="middle" width="73"><INPUT type="text" style="WIDTH: 30px" maxLength="3" value="${item.amount}"  name="amount_${item.product.id}_<c:forEach items="${item.product.styles}" var="style">${style.id}</c:forEach>" οnkeypress="javascript:InputIntNumberCheck()"></TD>
        <TD align="middle" width="66"><a href="<html:rewrite action="/shopping/cart/manage" />?method=delete&directUrl=${param.directUrl }&buyitemid=${item.product.id}-<c:forEach items="${item.product.styles}" var="style">${style.id}</c:forEach>"><img height="17" src="/images/buy/delete.gif" width="45" border="0"></a></TD>
      </TR>
      <TR vAlign="top">
        <TD colSpan="5"><IMG height=1 src="/images/buy/green-pixel.gif" width="100%" border="0"></TD>
      </TR>
  </c:forEach>
  <!-- loop end -->   
代码注释

<TD align="middle" width="66"><a href="<html:rewrite action="/shopping/cart/manage" />?method=delete&directUrl=${param.directUrl }&buyitemid=${item.product.id}-<c:forEach items="${item.product.styles}" var="style">${style.id}</c:forEach>"><img height="17" src="/images/buy/delete.gif" width="45" border="0"></a></TD>

该代码用于删除一条购物项:

对应1-1,前面表示产品ID,后面为样式ID,用于确定一个购物项

在class BuyCartForm类中有直接方法对buyitemid进行拆开,一个参数可以保存两个值

    public void setBuyitemid(String buyitemid) {
        if(buyitemid!=null){
            String[] ids = buyitemid.split("-");
            if(ids.length==2){
                productid = new Integer(ids[0]);
                styleid = new Integer(ids[1]);
            }
        }
    }

然后就是购物车页面中的删除购物项,清空购物车,修改数量等等操作,对应的类为BuyCartManageAction类

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
完成 Python 购物车的过程中,我们需要掌握以下几个方面的知识: 1. 列表和字典的基本操作:购物车可以使用列表来存储商品,字典可以用来存储商品和价格的对应关系。 2. 输入输出的基本操作:我们需要从用户那里获得输入,然后输出结果给用户。 3. 流程控制语句:我们需要使用 if-else 语句和循环语句来实现购物车的基本逻辑。 4. 函数和模块的使用:我们可以将购物车的不同功能封装成不同的函数,并且将这些函数放在一个模块里,方便我们的调用和管理。 在掌握了以上知识后,我们可以按照以下步骤来实现一个简单的 Python 购物车: 1. 创建一个空的购物车列表和一个空的商品字典。 2. 输出菜单,让用户选择要进行的操作(添加商品、删除商品、显示购物车、结算)。 3. 根据用户选择的操作,调用相应的函数来实现相应的功能。 4. 如果用户选择了结算,计算购物车中商品的总价并输出结果。 5. 退出程序。 以下是一个简单的购物车示例代码,以供参考: ```python # shopping_cart.py # 商品字典 goods = { "apple": 3.5, "banana": 2.8, "orange": 4.0, "watermelon": 6.0, "pear": 3.2 } # 购物车 cart = [] # 添加商品 def add_goods(): name = input("请输入商品名称:") if name in goods: cart.append(name) print("商品添加成功!") else: print("该商品不存在!") # 删除商品 def delete_goods(): name = input("请输入要删除的商品名称:") if name in cart: cart.remove(name) print("商品删除成功!") else: print("购物车中不存在该商品!") # 显示购物车 def show_cart(): if len(cart) == 0: print("购物车为空!") else: print("购物车中的商品有:") for name in cart: print(name) # 结算购物车 def checkout(): if len(cart) == 0: print("购物车为空!") else: total_price = 0 for name in cart: total_price += goods[name] print("您购买的商品总价为:%.2f 元" % total_price) # 输出菜单 def show_menu(): print("欢迎使用购物车程序!") print("1. 添加商品") print("2. 删除商品") print("3. 显示购物车") print("4. 结算") print("5. 退出程序") # 主函数 def main(): while True: show_menu() choice = input("请输入要进行的操作:") if choice == "1": add_goods() elif choice == "2": delete_goods() elif choice == "3": show_cart() elif choice == "4": checkout() elif choice == "5": print("感谢使用购物车程序,下次再见!") break else: print("输入有误,请重新输入!") if __name__ == "__main__": main() ``` 希望这个购物车示例能够帮助你理解 Python 的基本语法和编程思想!
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值