友友们又见面了,购物车是日常中常见的,今天来了解一下它的基本框架:完成一个初级版的购物车:
首先了解需要用到的
表: | 用户表 | 商品表 | 订单表 | 购物车表(可无) |
浏览页面: | 用户登录页面 | 商品浏览页面 | 购物车页面 | |
操作页面: | 登录操作页面 | 购物车操作页面 | 购物车删除页面 |
下图是浏览页面间的基本关系与它们的作用:
在此之前下了解一下,自己写页面可能会不怎么美观。所以可以用别人写好的CSS样式,JS样式来美化:
现将美化包导入项目,然后在页面导包如下:
a.首先创建商品表(goods),它的实体类以及dao类(当然包括帮助类),
b.然后创建表格,实例化商品对象调用dao类 查询商品信息赋值给表格。
c.跳转页面到 购物车操作页面,并且传递商品编号(bid)
代码如下:
商品编号
商品名称
商品单价
商品介绍
商品图片
操作
<%
GoodsDao gd=new GoodsDao();
ArrayList glist=gd.getAll();
for(Goods g:glist){
%>
<%=g.getBid() %>
<%=g.getBname() %>
<%=g.getBprice() %>
<%=g.getBinfo() %>
<%} %>
新创建一个订单表(OrderItem)
接收商品数据,将单项商品对象当成一个字段放入订单表,
订单表放入ArrayList集合,然后将集合放入session对象中
代码如下:
<%
//获取商品编号
//获取商品订单数量
String number=request.getParameter("gnumber");
int count=1;
if(number!=null){
count=Integer.valueOf(number);
}
//接收商品id
String id=request.getParameter("bid");
int bid=Integer.valueOf(id);
//构造订单对象
OrderItem oi=new OrderItem();
//给属性赋值
oi.setGoods(new GoodsDao().getById(bid));
//订单中的商品数量
oi.setGnumber(1);
//订单总价
oi.setSumprice();
ArrayList olist= (ArrayList)session.getAttribute("olist");
if(olist==null){
//创建订单集合
olist = new ArrayList();
}
boolean b=true;//默认没有相同订单
//遍历集合判断是否有相同订单
for(int i=0;i
创建表格
获取session对象,用for循环遍历获取订单对象,在表格中浏览
对订单中商品数量可更改,单类订单总额随之更改,修改的数据传回购物车操作页面,
计算商品总价钱
Insert title here
商品图片
商品名称
商品单价
商品介绍
商品数量
订单总价
操作
<%
//获取session中的原订单集合;
ArrayList olist=(ArrayList)session.getAttribute("olist");
//获取session中的新订单集合
ArrayList olist2=(ArrayList)session.getAttribute("olist2");
//判断是否删除过
if(olist2!=null){//有删除
olist=olist2;
}
//订单绑定到页面:
for(OrderItem oi:olist){
%>
<%=oi.getGoods().getBname() %>
<%=oi.getGoods().getBprice() %>
<%=oi.getGoods().getBinfo() %>
<%=oi.getSumprice() %>
<% }%>
<%
int sum=0;
for(int i=0;i
支付:<%=sum %>
4.删除订单
<%
String id=request.getParameter("bid");
int bid=Integer.valueOf(id);
ArrayList olist2=(ArrayList)session.getAttribute("olist");
for(int i=0;i
定义ArrayList集合,
再定义一个boolean值为true
ArrayList olist= (ArrayList)session.getAttribute("olist");
if(olist==null){
//创建订单集合
olist = new ArrayList();
}
boolean b=true;//默认没有相同订单
在将订单放入ArrayList集合时,判断新加订单的商品bid 与集合中订单中的商品bid 是否相同,
如果相同,则不新加订单,在原订单的商品数+1.
for(int i=0;i
注意:实体类给订单总价set方法改为:
public void setSumprice() {
this.sumprice =goods.getBprice()*gnumber;
}
首先接收更改的值,左减右加,再定义函数将修改后的值传给 购物车操作页面do_spcar.jsp:
函数代码如下:
function xg(obj,bid) {
var gnumber=obj.value;
//alert("商品数量:"+gnumber);
//alert("商品编号:"+bid);
location.href="do_spcar.jsp?bid="+bid+"&gnumber="+gnumber;
}
//加
function zj(gnumber,bid) {
gnumber=gnumber+1;
location.href="do_spcar.jsp?bid="+bid+"&gnumber="+gnumber;
}
//减
function js(gnumber,bid) {
if(gnumber>1){
gnumber=gnumber-1;
location.href="do_spcar.jsp?bid="+bid+"&gnumber="+gnumber;
}else{
alert("商品数量不能小于1");
}
}
到达购物车操作页面do_spcar.jsp 后 修改 商品数量赋值 和 订单总价
获取值
//获取商品订单数量
String number=request.getParameter("gnumber");
int count=1;
if(number!=null){
count=Integer.valueOf(number);
}
根据情况修改源代码(是否修改)
boolean b=true;//默认没有相同订单
//遍历集合判断是否有相同订单
for(int i=0;i
删除添加按钮,
添加点击事件——获取bid值传给删除页面:
//删除
function sc(bsumprice,bid) {
location.href="del_car.jsp?bid="+bid+"&gsumprice="+bsumprice;
}
到达删除页面后:
获取bid值,获取订单集合(起新名字),
String id=request.getParameter("bid");
int bid=Integer.valueOf(id);
ArrayList olist2=(ArrayList)session.getAttribute("olist");
遍历集合如果有订单的商品bid 与其相同,则调用remove(i) 删除
将修改后的值放入session
for(int i=0;i
然后返回购物车页面:
新建ArrayList集合,判断是否有删除过
如果有删除,则新集合替代旧集合
//获取session中的原订单集合;
ArrayList olist=(ArrayList)session.getAttribute("olist");
//获取session中的新订单集合
ArrayList olist2=(ArrayList)session.getAttribute("olist2");
//判断是否删除过
if(olist2!=null){//有删除
olist=olist2;
}
效果图:
商品浏览:
购物车:
代码不算多,主要是思路噢!
拜拜┏(^0^)┛