友友们又见面了,购物车是日常中常见的,今天来了解一下它的基本框架:完成一个初级版的购物车:

一、思维导图:

首先了解需要用到的

表:   用户表 商品表 订单表 购物车表(可无)
浏览页面: 用户登录页面 商品浏览页面 购物车页面
操作页面: 登录操作页面 购物车操作页面 购物车删除页面

下图是浏览页面间的基本关系与它们的作用


二、步骤(今天只了解商品表【连接数据库】与订单表【用页面缓存】)

在此之前下了解一下,自己写页面可能会不怎么美观。所以可以用别人写好的CSS样式,JS样式来美化:

现将美化包导入项目,然后在页面导包如下:

<!-- 引用jQuery库 -->
<script type="text/javascript" src="js/jquery-3.3.1.js"></script>
<script type="text/javascript" src="js/bootstrap.js"></script>
<link rel="stylesheet" type="text/css" href="css/bootstrap.min.css"/>

再来了解每个页面:

注意哦:这里给的是有效果后的完整代码,里面的一些小难点在最后在分区详细讲解

1.商品页面 index.jsp:

a.首先创建商品表(goods),它的实体类以及dao类(当然包括帮助类),

b.然后创建表格,实例化商品对象调用dao类 查询商品信息赋值给表格。

c.跳转页面到  购物车操作页面,并且传递商品编号(bid)

代码如下:

<html>
<head>
<meta charset="UTF-8">
<!-- 引用jQuery库 -->
<script type="text/javascript" src="js/jquery-3.3.1.js"></script>
<script type="text/javascript" src="js/bootstrap.js"></script>
<link rel="stylesheet" type="text/css" href="css/bootstrap.min.css"/>
<script type="text/javascript">function gm(bid) {//跳转页面,传递编号location.href="do_spcar.jsp?bid="+bid;}
</script>
</head>
<body><table class="table table-hover"><tr><td>商品编号</td><td>商品名称</td><td>商品单价</td><td>商品介绍</td><td>商品图片</td><td>操作</td></tr><%GoodsDao gd=new GoodsDao();ArrayList<Goods> glist=gd.getAll();for(Goods g:glist){%><tr><td><%=g.getBid() %></td><td><%=g.getBname() %></td><td><%=g.getBprice() %></td><td><%=g.getBinfo() %></td><td><img alt="" src="<%=g.getBface()%>"></td><td><button onclick="gm(<%=g.getBid() %>)" class="btn btn-success">添加购物车        </button></td></tr><%} %></table>
</body>
</html>

2.购物车操作页面(连接商品页面与购物车页面)do_spcar.jsp:

新创建一个订单表(OrderItem

接收商品数据,将单项商品对象当成一个字段放入订单表,

订单表放入ArrayList集合,然后将集合放入session对象中

代码如下:

<%//获取商品编号//获取商品订单数量String number=request.getParameter("gnumber");int count=1;if(number!=null){count=Integer.valueOf(number);}//接收商品idString 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<OrderItem> olist= (ArrayList<OrderItem>)session.getAttribute("olist");if(olist==null){//创建订单集合olist = new ArrayList<OrderItem>();}boolean b=true;//默认没有相同订单//遍历集合判断是否有相同订单for(int i=0;i<olist.size();i++){if(bid==olist.get(i).getGoods().getBid()){//判断number是否为null,及是从index页面是null,从sp_car过来不是;if(number==null){//index页面//修改数量:+1olist.get(i).setGnumber(olist.get(i).getGnumber()+1);//修改总价olist.get(i).setSumprice();}else{//sp_car//修改数量;原来数量修改为count;olist.get(i).setGnumber(count);//修改总价olist.get(i).setSumprice();}//有相同b=false;}    }if(b){//把订单放到ArrayList 集合中 olist.add(oi);}double sumprice=0;//把集合放到session中session.setAttribute("olist", olist);response.sendRedirect("sp_car.jsp");
%>

3.购物车页面 sp_car.jsp:

创建表格

获取session对象,用for循环遍历获取订单对象,在表格中浏览

对订单中商品数量可更改,单类订单总额随之更改,修改的数据传回购物车操作页面,

计算商品总价钱

<html>
<head>
<meta charset="UTF-8">
<title>Insert title here</title>
<!-- 引用jQuery库 -->
<script type="text/javascript" src="js/jquery-3.3.1.js"></script>
<script type="text/javascript" src="js/bootstrap.js"></script>
<link rel="stylesheet" type="text/css" href="css/bootstrap.min.css"/>
<script type="text/javascript">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");}}//删除function sc(bid) {location.href="del_car.jsp?bid="+bid;}//跳转回商品浏览页面function go() {//跳转页面,传递编号location.href="index.jsp";}//文本框规范 function zz() {var n = $("num").value;   if(n.length==0){alert("用户名不能为空");return false;} }
</script>
</head>
<body><table class="table table-hover"><tr><td>商品图片</td><td>商品名称</td><td>商品单价</td><td>商品介绍</td><td>商品数量</td><td>订单总价</td><td>操作 <button onclick="go()" class="btn btn-success">返回</button></td></tr><%//获取session中的原订单集合;ArrayList<OrderItem> olist=(ArrayList<OrderItem>)session.getAttribute("olist");//获取session中的新订单集合ArrayList<OrderItem> olist2=(ArrayList<OrderItem>)session.getAttribute("olist2");//判断是否删除过if(olist2!=null){//有删除olist=olist2;}//订单绑定到页面:for(OrderItem oi:olist){%><tr><td><img alt="" src="<%=oi.getGoods().getBface()%>"></td><td><%=oi.getGoods().getBname() %></td><td><%=oi.getGoods().getBprice() %></td><td><%=oi.getGoods().getBinfo() %></td><td><button class="btn" onclick="js(<%=oi.getGnumber() %>,<%=oi.getGoods().getBid() %>)">-</button><input id="1" readonly="readonly" name="num" onblur="xg(this,<%=oi.getGoods().getBid() %>)" style="width:40px; text-align: center;" type="text" value="<%=oi.getGnumber() %>"><button class="btn" onclick="zj(<%=oi.getGnumber() %>,<%=oi.getGoods().getBid() %>)">+</button></td><td><%=oi.getSumprice() %></td><td><button class="btn" onclick="sc(<%=oi.getSumprice() %>,<%=oi.getGoods().getBid() %>)">删除</button></td></tr><% }%><%int sum=0;for(int i=0;i<olist.size();i++){sum+=olist.get(i).getSumprice();}%></table><span align="right" style="margin-right: 50px" class="btn btn-success">支付:<%=sum %></span></body>
</html>

4.删除订单

<%String id=request.getParameter("bid");int bid=Integer.valueOf(id);ArrayList<OrderItem> olist2=(ArrayList<OrderItem>)session.getAttribute("olist");for(int i=0;i<olist2.size();i++){if(bid==olist2.get(i).getGoods().getBid()){olist2.remove(i);break;}}session.setAttribute("olist2", olist2);response.sendRedirect("sp_car.jsp");%>

三、重点与难点

1.在购物车页面订单不重复:

定义ArrayList集合,

再定义一个boolean值为true

ArrayList<OrderItem> olist= (ArrayList<OrderItem>)session.getAttribute("olist");if(olist==null){//创建订单集合olist = new ArrayList<OrderItem>();}
boolean b=true;//默认没有相同订单

在将订单放入ArrayList集合时,判断新加订单的商品bid  与集合中订单中的商品bid 是否相同,

如果相同,则不新加订单,在原订单的商品数+1.

for(int i=0;i<olist.size();i++){if(bid==olist.get(i).getGoods().getBid()){//修改数量:+1olist.get(i).setGnumber(olist.get(i).getGnumber()+1);//修改总价olist.get(i).setSumprice();}//有相同b=false;}if(b){//把订单放到ArrayList 集合中 olist.add(oi);}

注意:实体类给订单总价set方法改为:

public void setSumprice() {this.sumprice =goods.getBprice()*gnumber;}

2.对订单中商品数量可更改,单类订单总额随之更改,修改的数据传回购物车操作页面,

首先接收更改的值,左减右加,再定义函数将修改后的值传给  购物车操作页面do_spcar.jsp

<button class="btn" onclick="js(<%=oi.getGnumber() %>,<%=oi.getGoods().getBid() %>)">-</button><input id="1" readonly="readonly" name="num" onblur="xg(this,<%=oi.getGoods().getBid() %>)" style="width:40px; text-align: center;" type="text" value="<%=oi.getGnumber() %>"><button class="btn" onclick="zj(<%=oi.getGnumber() %>,<%=oi.getGoods().getBid() %>)">+</button>

函数代码如下:

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<olist.size();i++){if(bid==olist.get(i).getGoods().getBid()){//判断number是否为null,及是从index页面是null,从sp_car过来不是;if(number==null){//index页面//修改数量:+1olist.get(i).setGnumber(olist.get(i).getGnumber()+1);//修改总价olist.get(i).setSumprice();}else{//sp_car//修改数量;原来数量修改为count;olist.get(i).setGnumber(count);//修改总价olist.get(i).setSumprice();}//有相同b=false;}}if(b){//把订单放到ArrayList 集合中  olist.add(oi);}

3.删除订单

删除添加按钮,

<button class="btn" onclick="sc(<%=oi.getSumprice() %>,<%=oi.getGoods().getBid() %>)">删除</button>

添加点击事件——获取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<OrderItem> olist2=(ArrayList<OrderItem>)session.getAttribute("olist");

遍历集合如果有订单的商品bid 与其相同,则调用remove(i)  删除

将修改后的值放入session

for(int i=0;i<olist2.size();i++){if(bid==olist2.get(i).getGoods().getBid()){olist2.remove(i);break;}}session.setAttribute("olist2", olist2);response.sendRedirect("sp_car.jsp");

然后返回购物车页面:

新建ArrayList集合,判断是否有删除过

如果有删除,则新集合替代旧集合

//获取session中的原订单集合;ArrayList<OrderItem> olist=(ArrayList<OrderItem>)session.getAttribute("olist");//获取session中的新订单集合ArrayList<OrderItem> olist2=(ArrayList<OrderItem>)session.getAttribute("olist2");//判断是否删除过if(olist2!=null){//有删除olist=olist2;}

效果图:

商品浏览:

购物车:

​​​​​​​

代码不算多,主要是思路噢!

拜拜┏(^0^)┛

Jsp 购物车(oracle数据库)之初级版相关推荐

  1. oracle建表权限问题和JSP连接oracle数据库基本操作

    JSP连接oracle数据库相关操作 1.创建表 打开Enterprise Manager Console,为用户添加权限CREATE ANY TABLE和分配一定的表空间USERS限额1024k. ...

  2. jsp连接oracle数据库

    jsp连接oracle数据库 首先下载classes12.jar,放入tomcat\lib中,如下图所示: 由于本人是使用jspstudy的,使用会把jsp文件放入www目录下另建一个文档放入我的js ...

  3. 【JSP】JSP与oracle数据库交互案例

    ************************************************************************ ****原文:blog.csdn.net/clark_ ...

  4. jsp源码oracle数据库,JSP与oracle数据库交互案例

    本案例为咖啡销售情况录入查询系统 一.数据输入系统: 1. 设计输入信息页面 代码如下: 咖啡管理系统--录入系统 欢迎来到录入系统 vcm0gYWN0aW9uPQ=="inputactio ...

  5. jsp连接oracle数据库并实现简单登录功能,来自网络,部分修改。(亚信联创实习)

    共三个页面:login.jsp.loginconf.jsp.loginsucess.jsp 用户首先打开login.jsp输入用户名及密码,此时login.jsp会将输入的用户名及密码提交到login ...

  6. Oracle数据库入门——初级系列教程

    转载于:https://www.cnblogs.com/kscnchina/p/4570865.html

  7. 跳坑成功,手摸手带你使用PHP连接Oracle数据库

    文章目录 1. Linux版 1.1 安装oracle客户端 1.2 安装oci8扩展 1.3 安装pdo_oci扩展 1.4 测试PHP连接Oracle数据库 2. Windows版 2.1 安装O ...

  8. tomcat 连接oracle重连,JSP+Tomcat连接Oracle数据库

    1.   首先安裝JDK   1.4.2_01   ,http://java.sun.com/j2se/2.   接著安裝Oracle9i,   安裝完成之後先更改XML   Database的參數 ...

  9. 下载oracle修复补丁下载,Oracle数据库修复工具下载_FROMBYTE Reconstructor for Oracle官方版下载[修复软件]-下载之家...

          FROMBYTE Reconstructor for Oracle(Oracle数据库修复工具)官方版是一款专为Oracle的数据库进行修复软件,可以通过Oracle数据库修复工具软件创建 ...

  10. Oracle 免费的数据库--Database 快捷版 11g 安装使用与SOD框架对Oracle的CodeFirst支持...

    一.Oracle XE 数据库与连接工具安装使用 Oracle数据库历来以价格昂贵出名,当然贵有贵的道理,成为一个Oracle DBA也是令人羡慕的事情,如果程序员熟悉Oracle使用也有机会接触到大 ...

最新文章

  1. 业余无线电通信_登山与业余无线电的完美结合,便携式电台参加VHF比赛心得体会...
  2. linux c指定相对路径,linux c编程,选用popen()得到一个相对路径的绝对路径
  3. 昌平房价已降至6500元每一平米
  4. 广西2021各校高考成绩查询入口,2021年广西高考成绩排名查询系统,广西高考位次排名查询...
  5. double free or corruption的原因
  6. Java学习---流与文件
  7. .NetCore SkyWalking APM实现服务器监控环境安装及基础使用
  8. linuxsed替换字符串后保存_Numpy运用-文件读写、存储及字符串处理
  9. Httpd 使用ip可以访问,localhost和127.0.0.1不能访问
  10. MAC下MySQL初始密码忘记怎么办
  11. js制作带有遮罩弹出层实现登录小窗口
  12. 多智能体深度强化学习值分解方法总结(1)——VDN/QMIX/QTRAN/Qatten
  13. 4K TEST SEQUENCES 测试视频片段下载
  14. Web应用程序安全原理(Web服务面临的威胁)
  15. 利用modem发传真
  16. python -- 计算 平方、乘方、平方根_Python中math模块进行数学运算的示例
  17. Cloudera Manager集群报警,堆转储目录/tmp 或日志目录/var/log 可用空间小于 5.0 吉字节
  18. 出租司机微软上MBA课 精辟理论让其月入1万6
  19. 蓝牙运动手环app开发方案
  20. java数组初始化 new_java 数组初始化

热门文章

  1. 反编译OD工具OllyDBG 2.0.1下载
  2. 软件设计方案说明书的编写
  3. 邮箱管理系统 -- 【课程设计】 idea; MVC; mysql;jsp
  4. android框架揭秘之android中c++写的服务笔记
  5. 性能测试之LoadRunner11脚本录制方法
  6. ios开发之商城类软件 - 框架构思
  7. python连接阿里云数据库_Python连接MySQL数据库教程演示
  8. 利用VBB仿真——实现数码管色子
  9. DDS原理以及MATLAB实现
  10. 尚品汇Vue项目 前台+后台完成品源码(含在线演示)