jsp实现购物车结算页面
文章目录
- 一、案例演示
- 二、实现步骤
- 1.建表
- 2.order类
- 3.orderItems类
- 4.OrderDao
- 3.OrderServlet
- 5.order.jsp
一、案例演示
当我们点击info.jsp的结账时,页面跳转到order.jsp结算中心页面,首先在数据库中创建orders表和orderItems表用于存放账单数据,在java中建orders.java和orderItems.java两个java类用于获取和设置数据,建OrderDao.java实现添加数据的方法,建OrderServlet当act=add时添加订单
二、实现步骤
1.建表
orders表和orderItems表
create table orders (id int primary key auto_increment,money double,receiverAddress varchar(255) default null,receiverName varchar(20) default null,receiverPhone varchar(20) default null,paystate int(11) default 0,ordertime varchar(50) default null ,user_id int(11))engine=InnoDb default charset=utf8;create table orderItems (order_id int default null ,book_id int default null ,buynum int default null)engine=InnoDb default charset=utf8;alter table orderItems add foreign key(order_id) references orders(id);
alter table orderItems add foreign key(book_id) references books(id);insert into orders(money) values(200);
insert into orderItems (buynum) values(10);select *from orders;
select *from orderItems;
2.order类
public class Order {//订单表private int id;//订单编号private double money;//订单总价private String receiverAddress; //送货地址private String receiverName;//收货人姓名private String receiverPhone;//收货人电话private int paystate;//订单状态private String ordertime;//下单时间private Users user_id;//订单所属用户private List<OrderItem> orderItems = new ArrayList<OrderItem>();public int getId(){return id;}public void setId(int id) {this.id = id;}public double getMoney() {return money;}public void setMoney(double money) {this.money = money;}public String getReceiverAddress() {return receiverAddress;}public void setReceiverAddress(String receiverAddress) {this.receiverAddress = receiverAddress;}public String getReceiverName() {return receiverName;}public void setReceiverName(String receiverName) {this.receiverName = receiverName;}public String getReceiverPhone() {return receiverPhone;}public void setReceiverPhone(String receiverPhone) {this.receiverPhone = receiverPhone;}public int getPaystate() {return paystate;}public void setPaystate(int paystate) {this.paystate = paystate;}public String getOrdertime() {return ordertime;}public void setOrdertime(String ordertime) {this.ordertime = ordertime;}public Users getUser_id() {return user_id;}public void setUser_id(Users user_id) {this.user_id = user_id;}public List<OrderItem> getOrderItems() {return orderItems;}public void setOrderItems(List<OrderItem> orderItems) {this.orderItems = orderItems;}
}
3.orderItems类
public class OrderItem {//订单项目表private Order order;private Books b;private int buynum;public Order getOrder() {return order;}public void setOrder(Order order) {this.order = order;}public Books getB() {return b;}public void setB(Books b) {this.b = b;}public int getBuynum() {return buynum;}public void setBuynum(int buynum) {this.buynum = buynum;}
}
4.OrderDao
public class OrderDao {//添加订单public boolean add(Order o) {Connection con = null;PreparedStatement pst = null;ResultSet rs = null;try {con = JDBCutils.getConnection();//关闭事物的自动提交con.setAutoCommit(false);//向订单表里添加数据String sql = "insert into orders (money,receiverAddress,receiverName,receiverPhone,ordertime,user_id) values(?,?,?,?,?,?)";pst = con.prepareStatement(sql);pst.setDouble(1, o.getMoney());pst.setString(2, o.getReceiverAddress());pst.setString(3, o.getReceiverName());pst.setString(4, o.getReceiverPhone());pst.setString(5, o.getOrdertime());pst.setInt(6, o.getUser_id().getId());int i = pst.executeUpdate();if (i > 0) {sql = "select id from orders order by id desc limit 1";pst = con.prepareStatement(sql);rs= pst.executeQuery();if (rs.next()) {o.setId(rs.getInt("id"));} else {//如果失败回退事务con.rollback();return false;}String sql2="insert into orderItems(order_id,book_id,buynum) values(?,?,?)";pst=con.prepareStatement(sql2);List<OrderItem> items= o.getOrderItems();for (OrderItem oi:items){pst.setInt(1,o.getId());pst.setInt(2,oi.getB().getId());pst.setInt(3,oi.getBuynum());int i2=pst.executeUpdate();if(i2<=0){con.rollback();break;}}String sql3="update books set num=num-? where id=?";pst=con.prepareStatement(sql3);for (OrderItem oi:items){pst.setInt(1,oi.getBuynum());pst.setInt(2,oi.getB().getId());int i3=pst.executeUpdate();if(i3<0){con.rollback();break;}}}if(i>0){//提交事务con.commit();return true;}else {return false;}} catch (Exception e) {e.printStackTrace();}finally {try {con.setAutoCommit(true);JDBCutils.close(con,pst,rs);}catch (SQLException e){e.printStackTrace();}}return false;}
}
3.OrderServlet
if(act.equals("add")){//得到当前用户HttpSession session=request.getSession();Users user = (Users) session.getAttribute("user");//从购物车里获取商品信息Map<Books,Integer> cart= (Map<Books, Integer>) session.getAttribute("cart");//封装数据到订单对象中Order order =new Order();order.setUser_id(user);order.setReceiverAddress(request.getParameter("receiverAddress"));order.setReceiverName(request.getParameter("receiverName"));order.setReceiverPhone(request.getParameter("receiverPhone"));order.setMoney(Double.parseDouble(request.getParameter("money")));Date date =new Date();SimpleDateFormat sdf=new SimpleDateFormat("yyyy-mm-dd HH:mm:ss");order.setOrdertime(sdf.format(date));for (Books b:cart.keySet()){OrderItem item =new OrderItem();item.setOrder(order);item.setB(b);item.setBuynum(cart.get(b));order.getOrderItems().add(item);}//添加订单的方法OrderDao od=new OrderDao();if(od.add(order)){System.out.println("add success");}else{System.out.println("add error");}}
5.order.jsp
<form id="orderForm" action="${pageContext.request.contextPath}/OrderServlet?act=add" method="post">
jsp实现购物车结算页面相关推荐
- 怎样编写html购物车结算页面,原生JS实现购物车结算功能
原生JS实现购物车结算功能 @charset "utf-8"; *{margin:0;padding:0;list-style-type:none;} a{color:#666;t ...
- 商品结算页面html代码,前端开发jQuery购物车结算页面代码
/p> < 购物车结算 .shop-total, .all-total { height: 50px; line-height: 50px; font-weight: bold; colo ...
- 品优购项目--购物车结算页面
效果图 HTML部分 <!DOCTYPE html> <html lang="en"> <head><meta charset=" ...
- 使用JS实现当当购物车结算页面
实现效果: 1.添加.减少商品数量,总价随之改变: 2.点击删除,删除所选的商品: 3.点击关闭,关闭当前页面. 实现的效果图: 以下就是使用代码: CSS: #imgs {width: 100px; ...
- jq实现购物车结算和数量更改功能
这是个仿碧欧泉官网的购物车结算页面. 这里仅提供思路和我的代码作参考,代码具体需要看自己的html界面. 其中的难点在于数量的更改以及价格的结算.当出现一个商品时的结算是较为简单的.但是若有多个商品, ...
- luffcc项目-11-购物车实现,切换有效期选项、购物车商品的删除操作,结算页面,订单的生成
购物车实现 一.切换有效期选项 1.改变课程有效期 要实现课程有效期的计算,则必须我们要清楚一个课程可以有1到多个有效期选项.默认保存在课程模型中的价格如果有值,则这个值是永久有效的购买价格.如果有别 ...
- css京东购物车静态页面实现
css京东购物车静态页面实现 <!DOCTYPE html> <html><head><meta charset="utf-8">& ...
- html页面判断是否登录,egg(103)--egg之定义公共的中间件判断用户是否登录以及去结算页面制作...
判断用户是否登录 中间件 app/middleware/userauth.js module.exports = (options, app) => { return async functio ...
- python购物车结算_python购物车-基础版本
# 1. 用户先给自己的账户充钱:比如先充3000元. # 2. 页面显示 序号 + 商品名称 + 商品价格,如: # 1 电脑 1999 # 2 鼠标 10 # - # n 购物车结算 # 3. 用 ...
- 简单的购物车和购物车结算
购买部分 HTML部分 <!DOCTYPE html> <html><head><meta charset="UTF-8">< ...
最新文章
- 配置告警系统主脚本main.sh mon.sh load.sh 502.sh disk.sh
- Spring 源码分析(四) ——MVC(一)Web 基础
- python(numpy,pandas12)——pandas plot 画图
- python去掉列表的括号和逗号_在每行之后显示没有逗号,括号等的python 2d...
- 51nod 1126 求递推序列的第N项 思路:递推模拟,求循环节。详细注释
- Erlang的散列数据结构
- python write和writelines的区别,简单了解Python write writelines区别
- c语言多重括号,大佬在吗,我用C写了一个去多重括号的函数,结果。。。
- JavaScript高级之ECMAScript 6 新特性
- Gartner: 2017年11大信息安全技术(解读版)
- Android Sdk 安装配置
- split出现得问题
- SkyWalking加入Apache孵化器
- 转:给.net 程序员的一些建设
- 厦门大学2019年数学分析考研试题参考解答
- NUVOTON新唐单片机使用总结
- 全流程+讲解+避坑指南 第一次使用vulhub搭建漏洞环境
- 在Windows 2008中使用winvnc
- keyberos认证问题导致GSS initiate failed
- 网上书城—登录、书籍管理