满汉楼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. delphi调试 字符串 栈的地址,和栈中存的值

  2. CF1886

    A 分类讨论. B 二分. C 题意:给定一个字符串 \(s\).记 \(s_i\) 为将 \(s\) 删去 \(i\) 个字符,使得剩余字符串字典序最小得到的字符串.令 \(S=s_0+s_1+\d ...

  3. CF1853

    你谷的加题速度实在太慢了 被 CF 的题目薄纱 A 可以选任意次 \(i\in [1,n]\),使 \(a[1\sim i]++,a[i+1\sim n]--\).求最少操作次数使得原数列变成非从小到 ...

  4. springboot项目使用外置tomcat7部署项目

    Springboot使用外置tomcat7部署运行 1.pom修改 2.tomcat底下config下catalina.properties 3.在tomcat的lib文件夹下添加 javax.el- ...

  5. 解决Springboot发起https请求报错:sun.sec urity.validator.ValidatorException: PKIX path building failed

    问题描述 最近开发项目中在springboot接口中调用第三方https接口,后台日志报错: sun.sec urity.validator.ValidatorException: PKIX path ...

  6. Modbus协议入门

    1.Modbus协议是不是开源的,免费的? 标准.开放,用户可以免费.放心地使用Modbus协议,不需要交纳许可证费,也不会侵犯知识产权. 2.怎么传输,有线还是无线? 既可以有线传输如双绞线.光纤, ...

  7. centos7 搭建snmpv3靶场

    安装文件 yum install net-snmp net-snmp-utils -y 关闭服务创建用户 systemctl stop snmpd # 添加一个用户 如 root net-snmp-c ...

  8. 如何创建自己的Spring Boot Starter并为其编写单元测试

    当我们想要封装一些自定义功能给别人使用的时候,创建Spring Boot Starter的形式是最好的实现方式.如果您还不会构建自己的Spring Boot Starter的话,本文将带你一起创建一个 ...

  9. 记录一个错误:Unable to find a match: python-dev

    今天尝试在Linux下运行一个Python项目,在安装requirements.txt时报错 执行命令如下: [root@VM-16-8-centos cve-search]# pip3 instal ...

  10. 名校 AI 课程|斯坦福 CS25:Transformers United 专题讲座

    自 2017 年提出后,Transformer 名声大噪,不仅颠覆了自然语言处理(NLP)领域,而且在计算机视觉(CV).强化学习(RL).生成对抗网络(GANs).语音甚至是生物学等领域也大显锋芒, ...