day03-1-查看账单&结账功能
满汉楼03
4.功能实现05
4.8查看账单功能

按照之间搭建起来的框架,在BillService编写方法
4.8.1代码实现
1.修改Bill类
重写Bill类中的toString方法
@Override
public String toString() {
return id +
"\t\t" + menuId +
"\t\t\t" + nums +
"\t\t\t" + money +
"\t" + diningTableId +
"\t\t" + billDate +
"\t\t" + state;
}
2.修改BillService类
在该类中增加方法,用来获取所有订单记录
//返回所有的账单,提供给View使用
public List<Bill> list(){
return billDAO.queryMulti("select * from bill",Bill.class);
}
这里也可以按照桌号查询账单,并且将查询到的所有金额相加,返回一个总金额
3.修改MHLView
修改处1:在该类中增加方法listBill(),用来显示账单
//显示账单信息
public void listBill() {
List<Bill> bills = billService.list();
System.out.println("\n编号\t\t菜品号\t\t菜品量\t\t金额\t\t桌号\t\t日期\t\t\t\t\t\t\t状态");
for (Bill bill : bills) {
System.out.println(bill);
}
System.out.println("============显示完毕============");
}
修改处2:在二级菜单处调用listBill方法

4.8.2测试

测试通过
4.9结账功能

4.9.1功能分析
对餐桌编号进行校验
a. 餐桌编号否存在
b. 餐桌编号是否有账单需要结账
通过上面的校验后,需要修改bill表的state(账单的状态修改)
结账完毕后,需要修改餐桌的状态为“空”,同时置空餐桌的预定人信息
4.9.2代码实现
1.修改BillService类
在该类中分别增加三个方法
- hasPayBillByDiningTable():查看某个餐桌是否有未结账的账单
- allOfMoney():查看某张餐桌是否有未结账的账单
- payBill():完成结账
//查看某个餐桌是否有未结账的账单
public boolean hasPayBillByDiningTable(int diningTableId) {
Bill bill = billDAO.querySingle("select * from bill where diningTableId=? and state='未结账' limit 0,1", Bill.class, diningTableId);
return bill != null;//bill非空,就代表有未结账的账单
}
/**
* 查看某张餐桌是否有未结账的账单
* @param diningTableId 结账的餐桌编号
* @return 返回的某餐桌需要支付的总金额
*/
public Double allOfMoney(int diningTableId) {
//计算该餐桌需要支付的总金额
Double countMoney = Double.valueOf("0");
List<Bill> bills = billDAO.queryMulti("select * from bill where diningTableId=? and state='未结账'", Bill.class, diningTableId);
for (Bill bill1 : bills) {
countMoney += bill1.getMoney();
}
//返回总金额
return countMoney;
}
//完成结账 [前提:1.餐桌编号存在 2.该餐桌有未结账的账单]
public boolean payBill(int diningTableId, String payMode) {
//这里其实应该开启事务--防止上面成功,下面失败的情况
//如果使用事务的话,需要使用ThreadLocal来解决,框架中比如 mybatis就提供了事务支持
//1.修改bill表的state
int update = billDAO.update("update bill set state=? where diningTableId=? and state='未结账'", payMode, diningTableId);
if (update <= 0) {//如果更新没有成功,则表示失败
return false;
}
//2.修改diningTable的state
if (!diningTableService.updateDiningTableToFree(diningTableId, "空")) {
return false;
}
return true;
}
2.修改DiningTableService类
在该类中增加方法updateDiningTableToFree()
//提供方法,将指定餐桌修改为空闲状态
public boolean updateDiningTableToFree(int id, String state) {
int update = diningTableDAO.update("update diningTable set state=?,orderName='',orderTel='' where id=?", state, id);
return update > 0;
}
3.修改MHLView类
修改处1:在该类中增加方法 payBill() 完成结账功能
//完成结账
public void payBill() {
System.out.println("============结账服务============");
System.out.print("请输入要结账的餐桌编号(-1退出): ");
int diningTableId = Utility.readInt();
if (diningTableId == -1) {
System.out.println("============取消结账============");
return;
}
//验证餐桌是否存在
DiningTable diningTable = diningTableService.getDiningTableById(diningTableId);
if (diningTable == null) {
System.out.println("==========餐桌号不存在===========");
return;
}
//验证餐桌是否有需要结账的账单
if (!billService.hasPayBillByDiningTable(diningTableId)) {
System.out.println("==========该餐桌不存在未结账账单===========");
return;
}
System.out.print("请输入结账的方式(现金/支付宝/微信)回车表示退出: ");
String payMode = Utility.readString(3, "");//如果回车,返回的就是空串""
if ("".equals(payMode)) {
System.out.println("============取消结账============");
return;
}
if (!(payMode.equals("现金") || payMode.equals("支付宝") || payMode.equals("微信"))) {
System.out.println("============输入有误============");
return;
}
char key = Utility.readConfirmSelection();
if (key == 'Y') {
//计算总金额
System.out.println("==========" + diningTableId + "号餐桌消费总金额为: " + billService.allOfMoney(diningTableId) + " 元===========");
//调用结账方法
if (billService.payBill(diningTableId, payMode)) {
System.out.println("==========结账完成===========");
} else {
System.out.println("==========结账失败===========");
}
} else {
System.out.println("============取消结账============");
}
}
修改处2:在二级菜单调用该方法

4.9.3测试
未结账前餐桌和账单状态


- 非法数据输入

- 正确数据

- 此时的餐桌状态和账单状态

day03-1-查看账单&结账功能的更多相关文章
- HoverTree项目添加了查看留言列表功能
HoverTree项目添加了查看留言列表功能 页面:HoverTreeWeb项目下hvtpanel/usermessage/messagelist.aspx 添加留言页面:addmessage.asx ...
- 运行所有sdk目录下的示例,查看它们的功能,方便以后查寻
运行所有sdk目录下的示例,查看它们的功能,方便以后查寻
- Android Camera开发系列(下)——自定义Camera实现拍照查看图片等功能
Android Camera开发系列(下)--自定义Camera实现拍照查看图片等功能 Android Camera开发系列(上)--Camera的基本调用与实现拍照功能以及获取拍照图片加载大图片 上 ...
- VB.net版机房收费系统——结账功能实现(调错与优化)
调错部分 上一篇博客<VB.net版机房收费系统--结账功能实现(代码部分>说的是结账功能的实现,亮出了代码.是在为这篇博客做铺垫.尽管结账功能代码是借鉴的巨人的博客.可是自己比着葫芦画瓢 ...
- IDEA 查看类图功能(分析源码的利器)
引言 做过项目开发的童靴,应该会有这样的经历,就是刚进公司领导二话不说直接丢个项目,而且没有任何文档,让熟悉一下,一两周就让上手写代码.打开项目后就看到一堆类源码,完全不知道从何处入手,应该如何分析项 ...
- iOS中"查看更多/收起"功能实现
实现效果如图: 查看更多功能在很多app种都有应用,在这里简单的实现,介绍实现流程: 一个tableViewCell中包含一个collectionView,"查看更多"按钮是tab ...
- eclipse(STS)安装jd-eclipse插件实现查看API源代码功能
emmm,IDEA确实是比STS智能很多,不过适当的转化也是需要的,这里介绍一下eclipse(STS)实现查看class反编译的源文件的功能 去Java Decompiler官网下一下eclipse ...
- 使用微软提供的Office Online实现Office文档的在线查看,编辑等功能
使用微软提供的Office Online平台只需要一个网址即可在线查看Xls,doc,PPT等文档 http://view.officeapps.live.com/op/view.aspx?src=要 ...
- 【Android】Android开发启动app弹出一张广告图片,Dialog可以查看大图,查看某个图片功能
作者:程序员小冰,GitHub主页:https://github.com/QQ986945193 新浪微博:http://weibo.com/mcxiaobing 首先给大家看一下我们今天这个最终实现 ...
- 查看文章strncpy()功能更好的文章
strncpy()功能 原型:extern char *strncpy(char *dest, char *src, int n); 使用方法:#include <string.h> ...
随机推荐
- Cygwin,在windows中使用linux命令
习惯了 linux 命令的快捷操作,使用 winodws 的 shell 感觉效率非常低下,于是开始搜寻工具支持. 刚开始搜到的是 GnuWin32,但是它已经停止更新维护了,于是找到了 Cygwin ...
- Golang中make和new的区别
1. 相同点 都是内建函数,都是在堆上分配内存,都需要传递类型参数 2. 不同点 传递的参数不一样,new函数只接收一个参数,make函数可以接收一个以上的参数 package main import ...
- ElasticSearch7.3学习(一)----采用restful风格 基本的增删查改语句
1 .新建图书索引 首先建立图书索引 book 语法:put /index PUT /book 结果 2.新增图书 :新增文档 语法:PUT /index/type/id PUT /book/_doc ...
- 零基础入门学习Java课堂笔记 ——day02
流程控制 1.Scanner对象 来源:java.util.Scanner 我们可以通过Scanner类来获取用户的输入输出 用户交互Scanner 通过new关键词创建Scanner对象 Scann ...
- [pwn之路]patchelf之后,加载符号表!
# 前言 当你在进行二进制漏洞学习和利用时,经常需要使用调试工具来分析和理解程序的内部工作.在之前的交流中,我们提到了如何使用patchelf来修改二进制文件[Pwn之路]根据所给库,获得远程同环境- ...
- JS leetcode 找到所有数组中消失的数字 题解分析
壹 ❀ 引 十天前做的一道题了,一直没整理,今天才花时间去读了官方题解思路,这道题也凸显出了算法思路的重要性,执行耗时差的真不是一点半点.题目来自448. 找到所有数组中消失的数字,题目描述如下: 给 ...
- 【Unity3D】UI Toolkit元素
1 前言 UI Toolkit简介 中介绍了 UI Builder.样式属性.UQuery.Debugger,UI Toolkit容器 中介绍了 VisualElement.ScrollView. ...
- numpy数组初始化方法总结
1 使用list初始化 a=np.array([[1,2,3],[4,5,6]],dtype='float32') #a=[[1. 2. 3.],[4. 5. 6.]] 2 赋值与复制 (1)赋值 a ...
- CSS实现图形效果
CSS实现图形效果 CSS实现正方形.长方形.圆形.半圆.椭圆.三角形.平行四边形.菱形.梯形.六角星.五角星.心形.消息框. 正方形 <section> <div id=" ...
- 微信小程序云开发项目-个人待办事项-03【主页】模块开发
上一篇: 微信小程序云开发项目-个人待办事项-02今日模块开发 https://blog.csdn.net/IndexMan/article/details/124497893 模块开发步骤 本篇介绍 ...