购物车
设计一个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>");
}
%>