文章目录

  • 一、案例演示
  • 二、实现步骤
    • 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实现购物车结算页面相关推荐

  1. 怎样编写html购物车结算页面,原生JS实现购物车结算功能

    原生JS实现购物车结算功能 @charset "utf-8"; *{margin:0;padding:0;list-style-type:none;} a{color:#666;t ...

  2. 商品结算页面html代码,前端开发jQuery购物车结算页面代码

    /p> < 购物车结算 .shop-total, .all-total { height: 50px; line-height: 50px; font-weight: bold; colo ...

  3. 品优购项目--购物车结算页面

    效果图 HTML部分 <!DOCTYPE html> <html lang="en"> <head><meta charset=" ...

  4. 使用JS实现当当购物车结算页面

    实现效果: 1.添加.减少商品数量,总价随之改变: 2.点击删除,删除所选的商品: 3.点击关闭,关闭当前页面. 实现的效果图: 以下就是使用代码: CSS: #imgs {width: 100px; ...

  5. jq实现购物车结算和数量更改功能

    这是个仿碧欧泉官网的购物车结算页面. 这里仅提供思路和我的代码作参考,代码具体需要看自己的html界面. 其中的难点在于数量的更改以及价格的结算.当出现一个商品时的结算是较为简单的.但是若有多个商品, ...

  6. luffcc项目-11-购物车实现,切换有效期选项、购物车商品的删除操作,结算页面,订单的生成

    购物车实现 一.切换有效期选项 1.改变课程有效期 要实现课程有效期的计算,则必须我们要清楚一个课程可以有1到多个有效期选项.默认保存在课程模型中的价格如果有值,则这个值是永久有效的购买价格.如果有别 ...

  7. css京东购物车静态页面实现

    css京东购物车静态页面实现 <!DOCTYPE html> <html><head><meta charset="utf-8">& ...

  8. html页面判断是否登录,egg(103)--egg之定义公共的中间件判断用户是否登录以及去结算页面制作...

    判断用户是否登录 中间件 app/middleware/userauth.js module.exports = (options, app) => { return async functio ...

  9. python购物车结算_python购物车-基础版本

    # 1. 用户先给自己的账户充钱:比如先充3000元. # 2. 页面显示 序号 + 商品名称 + 商品价格,如: # 1 电脑 1999 # 2 鼠标 10 # - # n 购物车结算 # 3. 用 ...

  10. 简单的购物车和购物车结算

    购买部分 HTML部分 <!DOCTYPE html> <html><head><meta charset="UTF-8">< ...

最新文章

  1. 配置告警系统主脚本main.sh mon.sh load.sh 502.sh disk.sh
  2. Spring 源码分析(四) ——MVC(一)Web 基础
  3. python(numpy,pandas12)——pandas plot 画图
  4. python去掉列表的括号和逗号_在每行之后显示没有逗号,括号等的python 2d...
  5. 51nod 1126 求递推序列的第N项 思路:递推模拟,求循环节。详细注释
  6. Erlang的散列数据结构
  7. python write和writelines的区别,简单了解Python write writelines区别
  8. c语言多重括号,大佬在吗,我用C写了一个去多重括号的函数,结果。。。
  9. JavaScript高级之ECMAScript 6 新特性
  10. Gartner: 2017年11大信息安全技术(解读版)
  11. Android Sdk 安装配置
  12. split出现得问题
  13. SkyWalking加入Apache孵化器
  14. 转:给.net 程序员的一些建设
  15. 厦门大学2019年数学分析考研试题参考解答
  16. NUVOTON新唐单片机使用总结
  17. 全流程+讲解+避坑指南 第一次使用vulhub搭建漏洞环境
  18. 在Windows 2008中使用winvnc
  19. keyberos认证问题导致GSS initiate failed
  20. 网上书城—登录、书籍管理

热门文章

  1. visio 2013安装使用
  2. 安防与消防融合发展的现状与机遇分析
  3. 微信小程序----评价系统中的评星
  4. 如何在windows下把硬盘格式化成EXT3格式?
  5. 2017年编程语言排名
  6. android 扫雷小游戏
  7. 计算机作曲常用软件,计算机作曲——软件与音源的选择
  8. 屏幕演示讲解必备工具:虚拟教棒、屏幕画笔、ZoomIt放大屏幕、鼠标探照灯(图)
  9. 廖雪峰git学习(3)分支管理【待续】
  10. 华容道6×6图解_华容道(带图解)