永和大王门店系统(动态)

  • 背景及要求

       想要实现的功能,实现客户进店后选择购买的套餐,系统生成订单订单包括:是哪家门店,产生订单流水号,并且还有记录订单类型以及用餐人数收银员是谁,以及下单时间结账时间,并且记录订单详情,顾客点了哪些食物,以及支付金额系统中打印成小票,同时,还要在订单下面展示本店的二维码图片。

  1. jsp+css实现票据的动态输出
  2. 获取订单数据--->数据库
  3. 数据库的获取
  4. 数据流转
  5. 页面到浏览器的响应
  • ​​​​​​​数据库信息的动态获取

    ​​​​​​​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;
}

 

你可能感兴趣的:(Javaweb,前端)