购物车

设计一个CartItem类用来存放购物车中的商品信息,如商品ID,商品名称,商品单价,商品数量;此外还需有一个计算购物车中每种商品的总价格的方法

设计一个Cart类,里面有一变量private List<CartItem> items = new ArrayList<CartItem>();此外还有一个addItem(CartItem ci)方法和getTotalPrice()方法

public void addItem(CartItem ci) {
    if(items.size()==0){
       items.add(ci);
    } else {
       for(int i=0; i<items.size(); i++) {
          if(ci.getProductId() == items.get(i).getProductId()) {
             items.get(i).setCount(items.get(i).getCount() + 1);
             return;
          }
       }
       items.add(ci);
    }
 }

public double getTotalPrice() {
    double totalPrice=0.0;
    for(int i=0; i<items.size(); i++) {
       totalPrice += items.get(i).getTotalPrice();
    }
    return totalPrice;
 }

当加入购物车时,不能点击一次就new Cart();,应使用session(典型的session的应用)

应将购物车放到session里保存起来,只要不关页面,session的东西永远保存,只管往里加商品就OK。

<%

Cart cart = (Cart)session.getAttribute("cart");

if(cart == null) {

  cart = new Cart();

  session.setAttribute("cart", cart);

}

%>

以上写法等同于下面的写法:

<jsp:useBean id="cart" class="包名.Cart" scope="session"></jsp:useBean>

由于用户可以在购物车中手动修改每种购买商品的数量,故在cart.jsp中数量的设计如下:

<td><input type="text" name="p<%=ci1.getProductId() %>" value="<%=ci1.getCount() %>" /></td>

提交到cartupdate.jsp后接收如下:
<%
Cart cart = (Cart)session.getAttribute("cart");
List<CartItem> items = cart.getItems();
for(int i=0; i<items.size(); i++) {
   String strCount = request.getParameter("p" + items.get(i).getProductId());
   int count = Integer.parseInt(strCount);
   items.get(i).setCount(count);
}
out.println("修改成功");
 %>

//自动跳转的设计
<center>
  3秒后自动跳转界面......
  <div id="num"></div>
</center>
<script type="text/javascript">
   var leftTime = 3000;
   function go() {
      document.getElementById("num").innerText = leftTime/1000 + "秒......";
      leftTime -=1000;
      if(leftTime == 0){

       window.clearInterval(intervalId);
         document.location.href="cart.jsp";
      }
   }
   var intervalId = window.setInterval(go,1000);//等同于var intervalId = window.setInterval("go()",1000);

</script>

setTimeout(go,1000);是隔1s后执行go函数setInterval(go,1000);是每隔1s后执行go函数

当计算总价钱时由于是double类型的,可能会出现小数点后很多位的情况,解决方法:
总共:<%=Math.round(cart.getTotalPrice()*100)/100.0 %>元

判断用户是否登录的方法:

<%
User u = (User)session.getAttribute("user");
if(u == null) {
   out.println("您尚未登录,若要继续购买,则按市场价处理,");
   out.println("<a href=register.jsp>注册</a>");
   out.println("是免费的!");
   out.println("<a href=login.jsp>登录</a>");
}

%>

 

posted on 2013-08-01 18:16  凯特的宝贝世界  阅读(311)  评论(0编辑  收藏  举报