day02-显示所有菜品&点餐功能
满汉楼02
4.功能实现04
4.6显示所有菜品

4.6.1思路分析
创建一个菜单表menu,在Domain层创建与菜单表对应的Javabean-Menu类,在DAO层创建MenuDAO,完成对menu表的增删改查,在Service层创建一个和menu表相关的service类,service类提供给界面层使用

4.6.2代码实现
1.创建menu表
-- 创建menu表(id,name,type,price)
CREATE TABLE menu(
id INT PRIMARY KEY AUTO_INCREMENT,#自增主键,作为菜谱编号(唯一)
NAME VARCHAR(50) NOT NULL DEFAULT '',#菜品名称
TYPE VARCHAR(50) NOT NULL DEFAULT '',#菜品种类
price DOUBLE NOT NULL DEFAULT 0 #价格
)CHARSET=utf8
-- 添加测试数据
INSERT INTO menu VALUES(NULL,'八宝饭','主食',10);
INSERT INTO menu VALUES(NULL,'叉烧包','主食',20);
INSERT INTO menu VALUES(NULL,'宫保鸡丁','热菜',30);
INSERT INTO menu VALUES(NULL,'山药拨鱼','凉菜',14);
INSERT INTO menu VALUES(NULL,'银丝卷','甜食',9);
INSERT INTO menu VALUES(NULL,'水煮鱼','热菜',26);
INSERT INTO menu VALUES(NULL,'甲鱼汤','汤菜',100);
INSERT INTO menu VALUES(NULL,'鸡蛋汤','汤菜',16);

2.创建Menu类
package com.li.mhl.domain;
/**
* @author 李
* @version 1.0
* 该类和menu表对应
*/
public class Menu {
/**
* Field Type Null Key Default Extra
* ------ ----------- ------ ------ ------- ----------------
* id int(11) NO PRI (NULL) auto_increment
* name varchar(50) NO
* type varchar(50) NO
* price double NO 0
*/
private Integer id;
private String name;
private String type;
private Double price;
public Menu() {
}
public Menu(Integer id, String name, String type, Double price) {
this.id = id;
this.name = name;
this.type = type;
this.price = price;
}
public Integer getId() {
return id;
}
public void setId(Integer id) {
this.id = id;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public String getType() {
return type;
}
public void setType(String type) {
this.type = type;
}
public Double getPrice() {
return price;
}
public void setPrice(Double price) {
this.price = price;
}
@Override
public String toString() {
return id + "\t\t\t" + name + "\t\t" + type + "\t\t" + price;
}
}
3.创建MenuDAO类
package com.li.mhl.dao;
import com.li.mhl.domain.Menu;
/**
* @author 李
* @version 1.0
*/
public class MenuDAO extends BasicDAO<Menu>{
}
4.创建MenuService类
package com.li.mhl.service;
import com.li.mhl.dao.MenuDAO;
import com.li.mhl.domain.Menu;
import java.util.List;
/**
* @author 李
* @version 1.0
* 完成对menu表的各种操作(通过调用MenuDAO)
*/
public class MenuService {
//定义MenuDAO属性
private MenuDAO menuDAO = new MenuDAO();
//编写方法,查询所有菜品(返回所有的菜品给界面使用)
public List<Menu> list() {
return menuDAO.queryMulti("select * from menu", Menu.class);
}
}
5.修改MHLView
修改处1:定义属性
//定义MenuService属性
private MenuService menuService = new MenuService();
修改处2:编写方法
//显示所有菜品
public void listMenu() {
List<Menu> list = menuService.list();
System.out.println("\n菜品编号\t\t菜品名\t\t类别\t\t价格");
for (Menu menu: list) {
System.out.println(menu);
}
System.out.println("============显示完毕============");
}
修改处3:在内层循环的二级菜单中调用该方法

4.6.3测试

测试通过
4.7点餐功能
4.7.1功能说明

4.7.2思路分析
功能如上图所示,分析如下:
- 在输入点餐桌号和菜品编号时都需要对其进行合理性校验,如果不合理,给出提示信息
- 当点餐成功之后,餐桌的状态state应该发生变化,由已经预定变为进餐中
- 一旦点餐,就应该生成账单
根据上述的分析,整体的框架应该如下:

4.7.3代码实现
1.创建bill表
-- 创建bill账单表(id,billId,menuId,nums,billDate,money,state,diningTableId)
#账单流水, 考虑可以分开结账, 并考虑将来分别统计各个不同菜品的销售情况
CREATE TABLE bill (
id INT PRIMARY KEY AUTO_INCREMENT, #自增主键
billId VARCHAR(50) NOT NULL DEFAULT '',#账单号可以按照自己规则生成 UUID
menuId INT NOT NULL DEFAULT 0,#菜品的编号, 也可以使用外键
nums SMALLINT NOT NULL DEFAULT 0,#份数
money DOUBLE NOT NULL DEFAULT 0, #金额
diningTableId INT NOT NULL DEFAULT 0, #餐桌
billDate DATETIME NOT NULL ,#订单日期
state VARCHAR(50) NOT NULL DEFAULT '' # 状态 '未结账' , '已经结账-现金/支付宝', '挂单'
)CHARSET=utf8;

2.创建Bill类
package com.li.mhl.domain;
import java.util.Date;
/**
* @author 李
* @version 1.0
* 该类和 bill表对应
*/
public class Bill {
/**
* Field Type Null Key Default Extra
* ------------- ----------- ------ ------ ------- ----------------
* id int(11) NO PRI (NULL) auto_increment
* billId varchar(50) NO
* menuId int(11) NO 0
* nums smallint(6) NO 0
* money double NO 0
* diningTableId int(11) NO 0
* billDate datetime NO (NULL)
* state varchar(50) NO
*/
private Integer id;
private String billId;
private Integer menuId;
private Integer nums;
private Double money;
private Integer diningTableId;
private Date billDate;
private String state;
public Bill() {
}
public Bill(Integer id, String billId, Integer menuId, Integer nums, Double money, Integer diningTableId, Date billDate, String state) {
this.id = id;
this.billId = billId;
this.menuId = menuId;
this.nums = nums;
this.money = money;
this.diningTableId = diningTableId;
this.billDate = billDate;
this.state = state;
}
public Integer getId() {
return id;
}
public void setId(Integer id) {
this.id = id;
}
public String getBillId() {
return billId;
}
public void setBillId(String billId) {
this.billId = billId;
}
public Integer getMenuId() {
return menuId;
}
public void setMenuId(Integer menuId) {
this.menuId = menuId;
}
public Integer getNums() {
return nums;
}
public void setNums(Integer nums) {
this.nums = nums;
}
public Double getMoney() {
return money;
}
public void setMoney(Double money) {
this.money = money;
}
public Integer getDiningTableId() {
return diningTableId;
}
public void setDiningTableId(Integer diningTableId) {
this.diningTableId = diningTableId;
}
public Date getBillDate() {
return billDate;
}
public void setBillDate(Date billDate) {
this.billDate = billDate;
}
public String getState() {
return state;
}
public void setState(String state) {
this.state = state;
}
}
3.创建BillDAO类
package com.li.mhl.dao;
import com.li.mhl.domain.Bill;
/**
* @author 李
* @version 1.0
*/
public class BillDAO extends BasicDAO<Bill>{
}
4.创建BillService类
package com.li.mhl.service;
import com.li.mhl.dao.BillDAO;
import java.util.UUID;
/**
* @author 李
* @version 1.0
* 处理和账单表bill相关的业务逻辑
*/
public class BillService {
//定义BillDAO属性
private BillDAO billDAO = new BillDAO();
//定义MenuService属性
private MenuService menuService = new MenuService();
//定义DiningTableService属性
private DiningTableService diningTableService = new DiningTableService();
//编写点餐的方法
/**
* 1.生成账单
* 2.需要更新对应的餐桌的状态
* 3.如成功返回true,失败返回false
*/
public boolean orderMenu(int menuId, int nums, int diningTableId) {
//使用UUID生成一个账单号
String billID = UUID.randomUUID().toString();
//将账单生成到bill表()
//这里的金额money = 由menuId(菜品编号)查询出来的单价 * nums
//因此,在MenuService类中编写方法getMenuById()查询菜品单价
int update = billDAO.update("insert into bill values(null,?,?,?,?,?,now(),'未结账')",
billID, menuId, nums, menuService.getMenuById(menuId).getPrice() * nums, diningTableId);
if (update <= 0) {
return false;
}
//需要更新对应的餐桌的状态
//在DiningTableService类中编写方法updateDiningTableState()更新对应的餐桌的状态
return diningTableService.updateDiningTableState(diningTableId, "就餐中");
}
}
5.修改MenuService类
在该类中增加方法getMenuById()
//根据菜品id,返回Menu对象
public Menu getMenuById(int id) {
return menuDAO.querySingle("select * from menu where id=?", Menu.class, id);
}
6.修改DiningTableService类
在该类中增加方法updateDiningTableState()
//需要提供一个更新 餐桌状态的方法
public boolean updateDiningTableState(int id, String state) {
int update =
diningTableDAO.update("update diningTable set state=? where id=?", state, id);
return update > 0;
}
7.修改MHLView
修改处1:在该类中定义BillService属性
//定义BillService属性
private BillService billService = new BillService();
修改处2:在该类中增加方法
//完成点餐操作
public void orderMenu() {
System.out.println("============点餐服务============");
System.out.print("请输入点餐的桌号(-1退出): ");
int orderDiningTableId = Utility.readInt();
if (orderDiningTableId == -1) {
System.out.println("============取消点餐============");
return;
}
//验证餐桌号是否存在
DiningTable diningTableById = diningTableService.getDiningTableById(orderDiningTableId);
if (diningTableById == null) {
System.out.println("============餐桌号不存在============");
return;
}
System.out.print("请输入菜品编号(-1退出): ");
int orderMenuId = Utility.readInt();
if (orderMenuId == -1) {
System.out.println("============取消点餐============");
return;
}
//验证菜品编号是否存在
Menu menuById = menuService.getMenuById(orderMenuId);
if (menuById == null) {
System.out.println("============菜品不存在============");
return;
}
System.out.print("请输入菜品数量(0~99)(-1退出): ");
int orderNums = Utility.readInt();
if (orderNums == -1) {
System.out.println("============取消点餐============");
return;
}
if (orderNums <= 0) {
System.out.println("============菜品数量不能小于等于0============");
return;
}
//点餐
if (billService.orderMenu(orderMenuId, orderNums, orderDiningTableId)) {
System.out.println("============点餐成功============");
} else {
System.out.println("============点餐失败============");
}
}
修改处3:在二级菜单中调用该方法

4.7.4测试
- 正常数值输入

- 非法数值判断

测试通过
day02-显示所有菜品&点餐功能的更多相关文章
- ajax“显示弹窗详情”和“删除”功能练习
1.查看详细信息,以弹窗的形式显示,使用ajax 2.批量删除 “查询”功能可以参考前面的文章,这里只讲解ajax“显示弹窗详情”和“删除”功能 第一:在body中的代码 <title>a ...
- 编写Java程序,应用客户端和服务端通过 Eclipse 控制台的输入和显示实现简易的聊天功能
查看本章节 查看作业目录 需求说明: 应用客户端和服务端通过 Eclipse 控制台的输入和显示实现简易的聊天功能 实现思路: 创建 Java 项目,在项目中创建服务端类 ChatServerThre ...
- 如何禁用IE10的明文显示密码和快速清除功能
IE10针对 <input>及<input type="password"> 分别提供了快速清除钮(X图标)以及密码文字显示钮(小眼睛图标)的功能: 快速清 ...
- 微信小程序中,如何实现显示,隐藏密码的功能
最近在搞小程序的开发,遇到隐藏,显示密码的功能的时候,电脑上调试没问题,但是手机上面点击却没有效果,必须要跳转到其他页面再跳回来,才能正常显示. 一时间搞得我很头疼,查找资料后,终于知道了是什么原因. ...
- js中按钮控制显示隐藏以及下拉功能
<script> function show() { var a2=document.getElementById("div2"); if(a2.style.displ ...
- 探秘IntelliJ IDEA 13测试版新功能——调试器显示本地变量
IntelliJ IDEA在业界被公认为最好的Java开发平台之一,JetBrains公司将在12月正式发布IntelliJ IDEA 13版本. 现在,小编将和大家一起探秘密IntelliJ IDE ...
- .net工作流引擎ccflow开发平台属性功能的隐藏显示介绍
关键字: 工作流程管理系统 工作流引擎 asp.net工作流引擎 java工作流引擎. 表单引擎 工作流功能说明 工作流设计 工作流快速开发平台 业务流程管理 bpm工作流系统 java工 ...
- 点餐系统web版功能需求
餐厅到店点餐系统需求分析 (版本v1.0.0) 成文信息 主题词: 需求分析 作 者: 14商软ETC 文档类别: 审 核: 批 准: 文档性 ...
- dr-helper项目设计介绍(一个包括移动端和Web端的点餐管理系统)
一.源代码路径 https://github.com/weiganyi/dr-helper 二.界面 通过浏览器訪问Web服务,能够看到界面例如以下: ADT-Bundle编译project生成dr- ...
- java实现一个点餐系统
转载于blog.csdn.net/weixin_44219955 项目大体框架 菜品类(菜品id,菜品名,菜品类型,上架时间,单价,月销售,总数量) 管理员类(管理员id,账号,密码) 客户类(客户i ...
随机推荐
- 史上最大电池!小米智能家庭屏Pro 8图赏
今天小米智能家庭屏 Pro 8正式开售,集智能家居中控,智能网关以及娱乐教育三大功能为一体,首发749元. 它是一款全新的智能生态产品中控屏,配备了7500mAh大容量电池以及通用性更好的USB Ty ...
- 哈希表(HashMap)与字符串哈希
哈希表 哈希表是一种通过映射来快速查找的数据结构.其通过键值对(key-value)来存储.一个数据通过哈希函数的运算来生成一个属于他自己的键值,尔后将其与键值绑定.当我们想查找这个数据时,就可以直接 ...
- 【幻兽帕鲁】专用服务器攻略来啦!一键部署,5s开服
本文分享自华为云社区<全网最易用.最实用.最好用的[幻兽帕鲁]专用服务器攻略来啦!一键部署,5s开服!>,作者: 云容器大未来. 华为云隆重推出"帕鲁服务器-云耀云容器版&quo ...
- HBase-hbase shell操作
hbase shell操作 一.DDL操作 1.开启hbase shell hbase shell 2.查看hbase状态 Status 3.查看hbase版本 Version 4.创建命名空间 cr ...
- Sunnyui画曲线溢出错误
之前用sunnyui做展示数据库数据曲线的时候.偶然会报溢出错误,也不报错错误在哪,就是直接程序都跑不动了. 后面发现 设置曲线上下限的时候,当上下限一样的时候就会导致溢出错误.sunnyui的曲线也 ...
- CentOS在无网络环境下,用离线源yum安装软件
先说大致步骤: 1.前提假设:当前无网络的目标服务器是A,我们需要先准备一台服务器B: 2.在B上面用yum先把软件安装完成. 3.然后用createrepo将B中的包拷贝出来,并传到A上(用U盘或者 ...
- c# 代码操作ftp服务器文件
好久不见,我又回来了.给大家分享一个最近c#代码操作ftp服务器的代码示例 1 public abstract class FtpOperation 2 { 3 /// <summary> ...
- spring源码学习之设计模式
目录 1.策略模式 2.观察者模式 3.装饰者模式 4.工厂模式 工厂方法模式 抽象工厂模式 工厂方法和抽象工厂的异同 5.单例模式 6.适配器模式与外观模式 适配器模式 外观模式 7.模板方法模式 ...
- rsyslog 系统日志收集上报(可增加自定义项目日志)
Linux 自带应用,没有复杂的依赖关系却有强大的日志采集上报功能 本文以上报阿里云为例 1.基础配置讲解 /etc/rsyslog.conf 为其主配置文件(不用动) /etc/rsyslog.d/ ...
- 压测模式该怎么选?RunnerGo五大压测模式详解
在做性能测试时需要根据性能需求配置不同的压测模式,如:阶梯模式.使用jmeter时我们需要安装插件来配置测试模式,RunnerGo内嵌了压测模式这一选项更方便使用,今天来看看RunnerGo的几种压测 ...