想要实现的功能,实现客户进店后选择购买的套餐,系统生成订单订单包括:是哪家门店,产生订单流水号,并且还有记录订单类型以及用餐人数收银员是谁,以及下单时间结账时间,并且记录订单详情,顾客点了哪些食物,以及支付金额系统中打印成小票,同时,还要在订单下面展示本店的二维码图片。
1. 门店信息数据
门店对象、门店名称、订单电话。
2. 订单信息数据
订单的账单号、订单类型人数、人数、收银员、开单时间、结账时间、支付方式、支付时间 、打印时间 。
3. 订单详情数据
数量 品相 金额
1.封装对象
2.配置属性文件,存放数据(导入jar包)
3.读取数据
4.页面取值
5.测试
编写自动生成二维码代码
package cn.tedu.qr;
import org.junit.Test;
/*
* 这个类用来表示二维码程序
*/
public class QR{
//单元测试方法
@Test
//创建create方法,用来生成二维码图片
public void create(){
//如何生成一张图片,宽、高、信息、存放位置
//设置图片的宽
int width=150;
//设置图片的高
int height=150;
//设置图片的内容
String content="二维码";
//图片的存储位置
String path="G:\\QR.png";
//创建图片,利用工具
CreateQR.create(width, height,content, path);
System.out.println("生成二维码图片");
}
}
创建JDBC进行数据库的操作主要为六个步骤:
* 1.注册驱动 DriverManager
* 2.获取数据库的连接connection
* 3.获取传输器
* 4.执行SQL语句
* 5.遍历结果集
* 6.释放资源
(OrderServlet类)
package cn.tedu.servlet;
import java.io.IOException;
import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.sql.Statement;
import java.sql.Timestamp;
import java.util.ArrayList;
import java.util.List;
import javax.servlet.ServletException;
import javax.servlet.annotation.WebServlet;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import com.mysql.jdbc.Driver;
import cn.tedu.pojo.Door;
import cn.tedu.pojo.Order;
import cn.tedu.pojo.OrderDetail;
/**
* Servlet implementation class OrderServlet
*/
@WebServlet("/order")
public class OrderServlet extends HttpServlet {
public OrderServlet() {
super();
}
protected void doGet(HttpServletRequest request, HttpServletResponse response)
throws ServletException, IOException {
//1.给jsp页面准备数据
try {
//给页面设置门店信息数据
request.setAttribute("door", getDoor(1));
//给页面设置订单数据信息
request.setAttribute("order",getOrder(1));
//给页面设置订单详情数据
request.setAttribute("orderdetail", getOrderDetail(3));//携带者流转给jsp页面
} catch (SQLException e) {
e.printStackTrace();
}
//2.跳转页面
request.getRequestDispatcher("views/order.jsp").forward(request, response);
}
private List getOrderDetail(int orderId) throws SQLException{
DriverManager.registerDriver(new Driver());
Connection conn = DriverManager.getConnection("jdbc:mysql://localhost:3306/jt_yh","root","root");
Statement st = conn.createStatement();
ResultSet re = st.executeQuery("select * from tb_order_detail where id="+orderId);
//通过对象获取//创建对象赋值
//声明一个list用来存放多个orderDetail数据(对象集合)
ListorderDetails=new ArrayList();
while(re.next()){//遍历整个结果集,获取字段值
int id=re.getInt(1);
int orderid=re.getInt(2);
int num=re.getInt(3);
String item = re.getString(4);
Double price=re.getDouble(5);
//通过orderDetails对象来赋值
OrderDetail od=new OrderDetail();//先给orderDetails新建一个值,然后打点赋值
od.setId(id);
od.setItem(item);
od.setNum(num);
od.setOrderId(orderid);
od.setPrice(price);
orderDetails.add(od);//把所存的值放在集合数据中
}
//释放资源
re.close();
st.close();
conn.close();
return orderDetails;//返回orderDetails对象中
}
//此方法用来获取订单表数据
private Order getOrder(int orderId) throws SQLException {
DriverManager.registerDriver(new Driver());
Connection conn =DriverManager.getConnection("jdbc:mysql://localhost:3306/jt_yh","root","root");
Statement st = conn.createStatement();
String sql = "select * from tb_order where id="+orderId;
ResultSet re = st.executeQuery(sql);
//通过对象获取所有数据//创建对象赋值
Order o = new Order();
while(re.next()) {
int id = re.getInt(1);
int doorId = re.getInt(2);
String orderNo = re.getString(3);
String orderType = re.getString(4);
int personNum = re.getInt(5);
String cashier = re.getString(6);
Timestamp createTime = re.getTimestamp(7);
Timestamp endTime = re.getTimestamp(8);
double payMent = re.getDouble(9);
String paymentType = re.getString(10);
Timestamp printTime = re.getTimestamp(11);
//通过Order对象设置其属性的值
o.setId(id);//获取第一列的值
o.setDoorId(doorId);//获取第二列的值
o.setOrderNo(orderNo);//获取第三列的值
o.setOrderType(orderType);//获取第四列的值
o.setPersonNum(personNum);//获取第五列的值
o.setCashier(cashier);//获取第六列的值
o.setCreateTime(createTime);//获取第七列的值
o.setEndTime(endTime);//获取第八列的值
o.setPayMent(payMent);//获取第九列的值
o.setPaymentType(paymentType);;//获取第十列的值
o.setPrintTime(printTime);//获取第十一列的值
}
//返回数据,返回这个对象
//释放资源
re.close();
st.close();
conn.close();
return o;
}
//此方法用来获取门店信息
private Door getDoor(int doorId) throws SQLException {
//1.注册驱动
DriverManager.registerDriver(new Driver());
//2.获取数据库连接
Connection conn = DriverManager.getConnection("jdbc:mysql://localhost:3306/jt_yh", "root","root");
//3.获取传输器
Statement st = conn.createStatement();
//4.执行sql语言
String sql="select * from tb_door where id="+doorId;
ResultSet rs = st.executeQuery(sql);
//System.out.println(sql);
//5.遍历得到的结果集对象
Door d = new Door();//通过对象获取
while(rs.next()) {
int id = rs.getInt(1);
String doorname = rs.getString(2);
String tel = rs.getString(3);
//通过door对象赋值
d.setId(id);
d.setDoorname(doorname);
d.setTel(tel);
}
//6.释放资源
rs.close();
st.close();
conn.close();
return d;
}
}
封装数据库的三个类
门店类(Door类)
package cn.tedu.pojo;
/**
* 这个类是用来封装门店对象的
* 门店名称
* 门店电话
*/
public class Door {
//门店名称
private String doorname;
//门店电话
private String tel;
//id属性
private int id;
//每个
public String getDoorname() {
return doorname;
}
public void setDoorname(String doorname) {
this.doorname = doorname;
}
public String getTel() {
return tel;
}
public void setTel(String tel) {
this.tel = tel;
}
public int getId() {
return id;
}
public void setId(int id) {
this.id = id;
}
}
订单类(Order类)
package cn.tedu.pojo;
import java.sql.Timestamp;
import java.util.List;
/**
* 这个类用来表示订单对象
* 订单id 订单账单号 订单类型 人数 开单时间
* 结账时间 支付方式 支付时间 打印时间
*
*/
public class Order {
//订单账单号
private String orderNo;
//订单类型
private String orderType;
//订单人数
private int personNum;
//收银员
private String cashier;
//开单时间
private Timestamp createTime;
//结账时间
private Timestamp endTime;
//支付方式
private String paymentType;
//支付金额
private double payMent;
//打印时间
private Timestamp printTime;
//id属性
private int id;
//通过门店id获取订单数据
private int doorId;
//门店和订单之间有一对一的对象关系
private Door door;
//订单和订单详情有一对多的对象关系
private List orderDetails;
public int getDoorId() {
return doorId;
}
public void setDoorId(int doorId) {
this.doorId = doorId;
}
//每个参数定义了set和get方法
public String getOrderNo() {
return orderNo;
}
public void setOrderNo(String orderNo) {
this.orderNo = orderNo;
}
public String getOrderType() {
return orderType;
}
public void setOrderType(String orderType) {
this.orderType = orderType;
}
public int getPersonNum() {
return personNum;
}
public void setPersonNum(int personNum) {
this.personNum = personNum;
}
public String getCashier() {
return cashier;
}
public void setCashier(String cashier) {
this.cashier = cashier;
}
public Timestamp getCreateTime() {
return createTime;
}
public void setCreateTime(Timestamp createTime) {
this.createTime = createTime;
}
public Timestamp getEndTime() {
return endTime;
}
public void setEndTime(Timestamp endTime) {
this.endTime = endTime;
}
public String getPaymentType() {
return paymentType;
}
public void setPaymentType(String paymentType) {
this.paymentType = paymentType;
}
public double getPayMent() {
return payMent;
}
public void setPayMent(double payMent) {
this.payMent = payMent;
}
public Timestamp getPrintTime() {
return printTime;
}
public void setPrintTime(Timestamp printTime) {
this.printTime = printTime;
}
public int getId() {
return id;
}
public void setId(int id) {
this.id = id;
}
public Door getDoor() {
return door;
}
public void setDoor(Door door) {
this.door = door;
}
}
订单详情类(OrderDetail类)
package cn.tedu.pojo;
/**
* 这类用来表示订单详情对象
* 数量 品相 金额
*/
public class OrderDetail {
//数量
private int num;
//品相
private String item;
//金额
private Double price;
//id属性
private int id;
//注意:根据订单id获取订单详情数据
private int orderId;
public int getNum() {
return num;
}
public void setNum(int num) {
this.num = num;
}
public String getItem() {
return item;
}
public void setItem(String item) {
this.item = item;
}
public Double getPrice() {
return price;
}
public void setPrice(Double price) {
this.price = price;
}
public int getId() {
return id;
}
public void setId(int id) {
this.id = id;
}
public int getOrderId() {
return orderId;
}
public void setOrderId(int orderId) {
this.orderId = orderId;
}
}
前端代码:jsp+css
jsp代码(order.jsp)
<%@ page language="java" contentType="text/html; charset=utf-8"
pageEncoding="utf-8"%>
<%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core"%>
用户订单
顾客联
请您留意取餐单号
--自取顾客联--
${door.doorname}
${door.tel}
--结账单--
账单号:${order.orderNo }
账单类型:${order.orderType }
人数:${order.personNum }
收银员:${order.cashier }
开单时间:${order.createTime }
结账时间:${order.endTime }
数量
品相
金额
${o.num }
${o.item}
${o.price}
合计
${order.payMent }
${order.paymentType }
${order.payMent }
打印时间:${order.printTime}
根据相关的税法规定,电子发票时间的开票日期同网上
申请电子发票日期,如您需要当日的电子发票请务必在消费
当日遇过扫描下方二维码,根据指引步骤开具您的增值税电
子普通发票,此二维码30天有效,扫码时请保持小需平整
官网:www.yonghe.com
加盟热线:86-21-4651161或86-21-4843548
css代码(order.css)
@CHARSET "UTF-8";
/*设置统一的网页*/
body{
/*设置网页宽度*/
width:370px;
/*统一字体大小*/
font-size:15px;
}
.please{
/*统一相同的两句内容的字体大小*/
font-size:30px;
}
.me{
/*将选择的内容居中*/
padding-left: 60px;
}
hr{
/*分割样式设置*/
border:1px dashed;
}
table{
/*表格宽度*/
width:80%;
}
#note{
/*设置首行缩进*/
text-indent:30px;
/*设置上下内边距位置*/
padding:20px 0;
}
.qrimg{
text-align:center;
}