满汉楼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功能分析

  1. 对餐桌编号进行校验

    a. 餐桌编号否存在

    b. 餐桌编号是否有账单需要结账

  2. 通过上面的校验后,需要修改bill表的state(账单的状态修改)

  3. 结账完毕后,需要修改餐桌的状态为“空”,同时置空餐桌的预定人信息

4.9.2代码实现

1.修改BillService类

在该类中分别增加三个方法

  1. hasPayBillByDiningTable():查看某个餐桌是否有未结账的账单
  2. allOfMoney():查看某张餐桌是否有未结账的账单
  3. 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-查看账单&结账功能的更多相关文章

  1. HoverTree项目添加了查看留言列表功能

    HoverTree项目添加了查看留言列表功能 页面:HoverTreeWeb项目下hvtpanel/usermessage/messagelist.aspx 添加留言页面:addmessage.asx ...

  2. 运行所有sdk目录下的示例,查看它们的功能,方便以后查寻

    运行所有sdk目录下的示例,查看它们的功能,方便以后查寻

  3. Android Camera开发系列(下)——自定义Camera实现拍照查看图片等功能

    Android Camera开发系列(下)--自定义Camera实现拍照查看图片等功能 Android Camera开发系列(上)--Camera的基本调用与实现拍照功能以及获取拍照图片加载大图片 上 ...

  4. VB.net版机房收费系统——结账功能实现(调错与优化)

    调错部分 上一篇博客<VB.net版机房收费系统--结账功能实现(代码部分>说的是结账功能的实现,亮出了代码.是在为这篇博客做铺垫.尽管结账功能代码是借鉴的巨人的博客.可是自己比着葫芦画瓢 ...

  5. IDEA 查看类图功能(分析源码的利器)

    引言 做过项目开发的童靴,应该会有这样的经历,就是刚进公司领导二话不说直接丢个项目,而且没有任何文档,让熟悉一下,一两周就让上手写代码.打开项目后就看到一堆类源码,完全不知道从何处入手,应该如何分析项 ...

  6. iOS中"查看更多/收起"功能实现

    实现效果如图: 查看更多功能在很多app种都有应用,在这里简单的实现,介绍实现流程: 一个tableViewCell中包含一个collectionView,"查看更多"按钮是tab ...

  7. eclipse(STS)安装jd-eclipse插件实现查看API源代码功能

    emmm,IDEA确实是比STS智能很多,不过适当的转化也是需要的,这里介绍一下eclipse(STS)实现查看class反编译的源文件的功能 去Java Decompiler官网下一下eclipse ...

  8. 使用微软提供的Office Online实现Office文档的在线查看,编辑等功能

    使用微软提供的Office Online平台只需要一个网址即可在线查看Xls,doc,PPT等文档 http://view.officeapps.live.com/op/view.aspx?src=要 ...

  9. 【Android】Android开发启动app弹出一张广告图片,Dialog可以查看大图,查看某个图片功能

    作者:程序员小冰,GitHub主页:https://github.com/QQ986945193 新浪微博:http://weibo.com/mcxiaobing 首先给大家看一下我们今天这个最终实现 ...

  10. 查看文章strncpy()功能更好的文章

    strncpy()功能 原型:extern char *strncpy(char *dest, char *src, int n);    使用方法:#include <string.h> ...

随机推荐

  1. AOF

    AOF 基础概念 以日志的形式记录了每个写操作 在redis重新运行时,会将这些操作重新执行一遍 文件形式:appendonly.aof 开启AOF需要更改配置文件:appendonly:yes AO ...

  2. jetson nano ssh远程连接控制

    jetson orin nano ssh远程连接 准备:好用的网线一根,jetson orin nano一台,将网线两端连接nano的网口以及当作主机的笔记本的网口 PS:确保双方网线连接成功,网线设 ...

  3. .NET 云原生架构师训练营(模块二 基础巩固 日志)--学习笔记

    2.2.2 核心模块--日志 ILogger 的使用 日志的 ID 日志的分类 日志的级别 LoggerProvider 日志的最佳实践 .NET Core 和 ASP.NET Core 中的日志记录 ...

  4. [Spring]Junit单元测试时取不到本地文件问题

    Junit单元测试时取不到本地文件问题 问题 当使用Junit进行单元测试时,遇到了以下问题: 2022-10-24 16:13:19.902 [main] ERROR zonetop.gisboot ...

  5. ABC 326

    E 题意: 给定一个 \(n\) 面骰,长度 \(n\) 的数组 \(a\) 和一个初始为 \(0\) 的变量 \(x\). 每次投掷骰子,等概率获得 \(1 \sim n\) 中的一个数 \(p\) ...

  6. updatedb命令

    updatedb命令 updatedb创建或更新locate命令使用的数据库,如果数据库已经存在,则重用其数据以避免重新读取未更改的目录,updatedb通常由cron每天运行以更新默认数据库. 语法 ...

  7. Delphi 实现刘谦春晚魔术

    看了博友的C# 实现刘谦春晚魔术很好,改成了delphi版的. 1 program Project1; 2 3 {$APPTYPE CONSOLE} 4 {$R *.res} 5 6 uses 7 S ...

  8. acm数学总结

    1.给定两个质数,m, n, 大于n * m - n - m的数都可以被整数个n和m唯一组成. 相关习题:[Coins] (https://ac.nowcoder.com/acm/contest/34 ...

  9. win32 - 使用Desktop Duplication API复制桌面图像

    该代码来源于codeproject,经过测试发现,在屏幕处于旋转的情况下捕获的图像是黑色的.暂时没有找到原因. 代码开箱即用, #define WIN32_LEAN_AND_MEAN #include ...

  10. [Android 逆向]frida 破解 切水果大战原版.apk

    1. 手机安装该apk,运行,点击右上角礼物 提示 支付失败,请稍后重试 2. apk拖入到jadx中,待加载完毕后,搜素失败,找到疑似目标类MymmPay的关键方法payResultFalse 4. ...