当前位置:   article > 正文

【Java学习笔记】72 - 满汉楼 - 餐饮管理系统

【Java学习笔记】72 - 满汉楼 - 餐饮管理系统

项目代码

https://github.com/yinhai1114/Java_Learning_Code/tree/main/IDEA_Chapter26

目录

项目代码

一、需求说明

1.用户登录

​编辑

2.显示餐桌的状态

3.预定

4.显示菜品

5.点餐

6.查看账单

7.结账

 二、项目设计

三、功能实现

1.显示主菜单、二级菜单和退出系统功能

2.用户登录

3.显示餐桌状态 

4.订座

5.显示菜品

6.点餐

7.查看账单

 8.结账

四、进行代码拓展 

1.多表查询的需求

2.javaBean和表的参数名一致性的问题

3.对于员工多字段的设置

4.完成更多功能 


一、需求说明

满汉楼项目功能多,界面复杂,涉及到复杂的awt和swing技术和事件编程,做如下调整: 

1.去掉界面和事件处理(工作中使用很少),使用控制台界面

2.完成满汉楼项目的登录、订座、点餐和结账、查看账单等功能.

3.在实际工作中,独立完成项目新功能非常重要,这是锻炼编程能力和思想的重要途径

1.用户登录

2.显示餐桌的状态

3.预定

4.显示菜品

5.点餐

6.查看账单

7.结账

 二、项目设计

三、功能实现

1.显示主菜单、二级菜单和退出系统功能

  1. public void mainMenu(){
  2. while (loop){
  3. System.out.println("==============满汉楼===============");
  4. System.out.println("\t\t1.登录满汉楼");
  5. System.out.println("\t\t2.退出满汉楼");
  6. System.out.println("请输入你的选择");
  7. key = Utility.readString(1);
  8. switch (key){
  9. case "1":
  10. System.out.println("输入员工号:");
  11. String id = Utility.readString(50);
  12. System.out.println("输入密 码");
  13. String pwd = Utility.readString(50);
  14. //到数据库去判断
  15. if("123".equals(pwd)){
  16. System.out.println("===========登录成功===========");
  17. while(loop){
  18. System.out.println("=========满汉楼(二级菜单)==========");
  19. System.out.println("\t\t1 显示餐桌状态");
  20. System.out.println("\t\t2 预定餐桌状态");
  21. System.out.println("\t\t3 显示所有菜品");
  22. System.out.println("\t\t4 点餐服务");
  23. System.out.println("\t\t5 查看账单");
  24. System.out.println("\t\t6 结账");
  25. System.out.println("\t\t9 退出满汉楼");
  26. key = Utility.readString(1);
  27. switch (key){
  28. case "1":
  29. System.out.println("显示餐桌状态");
  30. break;
  31. case "2":
  32. System.out.println("预定餐桌");
  33. break;
  34. case "3":
  35. System.out.println("显示所有菜品");
  36. break;
  37. case "4":
  38. System.out.println("点餐服务");
  39. break;
  40. case "5":
  41. System.out.println("查看账单");
  42. break;
  43. case "6":
  44. System.out.println("结账");
  45. break;
  46. case "9":
  47. loop = false;
  48. break;
  49. default:
  50. System.out.println("你的输入有误 请重新输入");
  51. }
  52. }
  53. }else{
  54. System.out.println("===========登录失败===========");
  55. }
  56. break;
  57. case "2":
  58. System.out.println("2.退出满汉楼");
  59. loop = false;
  60. break;
  61. default:
  62. System.out.println("输入错误错误");
  63. }
  64. }
  65. System.out.println("退出满汉楼");
  66. }

2.用户登录

  1. CREATE DATABASE mhl
  2. #用户表
  3. CREATE TABLE employee (
  4. id INT PRIMARY KEY AUTO_INCREMENT, #自增
  5. empId VARCHAR(50) UNIQUE NOT NULL DEFAULT '',#员工号
  6. pwd CHAR(32) NOT NULL DEFAULT '',#密码md5
  7. NAME VARCHAR(50) NOT NULL DEFAULT '',#姓名
  8. job VARCHAR(50) NOT NULL DEFAULT '' #岗位
  9. )CHARSET=utf8;
  10. DROP TABLE employee
  11. #添加测试数据
  12. INSERT INTO employee VALUES(NULL, '6668612', MD5('123456'), '张三丰', '经理');
  13. INSERT INTO employee VALUES(NULL, '6668622', MD5('123456'),'小龙女', '服务员');
  14. INSERT INTO employee VALUES(NULL, '6668633', MD5('123456'), '张无忌', '收银员');
  15. INSERT INTO employee VALUES(NULL, '666666', MD5('123456'), '老韩', '经理');
  16. SELECT * FROM employee

  1. /**
  2. * @author 银小海
  3. * @version 1.0
  4. * @email yinhai14@qq.com
  5. * 该类调用EmployeeDAO对象完成对表的各种操作
  6. */
  7. public class EmployeeService {
  8. //定义一个EmployeeDAO属性
  9. private EmployeeDAO employeeDAO = new EmployeeDAO();
  10. //方法 根据empId和pwd返回一个Employee对象
  11. public Employee getEmployeeByIdAndPwd(String empId,String pwd){
  12. return employeeDAO.querySingle("select * from employee where empId=? and pwd=md5(?)", Employee.class, empId, pwd);
  13. }
  14. }

 该服务并不直接修改数据库,而是通过DAO调用JDBCDruid修改数据库

  1. if(employee != null){
  2. System.out.println("===========登录成功(" + employee.getName() + ")===========");
  3. while(loop){

3.显示餐桌状态 

1.创建新的餐位表

2.domain里设计一个类对应该表

3.DAO类对表crud

4.service调用DAO修改

  1. -- 创建diningTable 表(id, state , orderName, orderTel ....)
  2. CREATE TABLE diningTable (
  3. id INT PRIMARY KEY AUTO_INCREMENT, #自增, 表示餐桌编号
  4. state VARCHAR(20) NOT NULL DEFAULT '',#餐桌的状态
  5. orderName VARCHAR(50) NOT NULL DEFAULT '',#预订人的名字
  6. orderTel VARCHAR(20) NOT NULL DEFAULT ''
  7. )CHARSET=utf8;
  8. #测试数据
  9. INSERT INTO diningTable VALUES(NULL, '空','','');
  10. INSERT INTO diningTable VALUES(NULL, '空','','');
  11. INSERT INTO diningTable VALUES(NULL, '空','','');
  12. SELECT * FROM diningTable

2.设计一个类对应 该表 

  1. /**
  2. * @author 银小海
  3. * @version 1.0
  4. * @email yinhai14@qq.com
  5. * 一个javabean 和diningTable表对应
  6. * id INT PRIMARY KEY AUTO_INCREMENT, #自增, 表示餐桌编号
  7. * state VARCHAR(20) NOT NULL DEFAULT '',#餐桌的状态
  8. * orderName VARCHAR(50) NOT NULL DEFAULT '',#预订人的名字
  9. * orderTel VARCHAR(20) NOT NULL DEFAULT ''
  10. */
  11. public class DiningTable {
  12. private Integer id;
  13. private String state;
  14. private String orderName;
  15. private String orderTel;
  16. public DiningTable() {
  17. }
  18. public DiningTable(Integer id, String state, String orderName, String orderTel) {
  19. this.id = id;
  20. this.state = state;
  21. this.orderName = orderName;
  22. this.orderTel = orderTel;
  23. }
  24. public Integer getId() {
  25. return id;
  26. }
  27. public void setId(Integer id) {
  28. this.id = id;
  29. }
  30. public String getState() {
  31. return state;
  32. }
  33. public void setState(String state) {
  34. this.state = state;
  35. }
  36. public String getOrderName() {
  37. return orderName;
  38. }
  39. public void setOrderName(String orderName) {
  40. this.orderName = orderName;
  41. }
  42. public String getOrderTel() {
  43. return orderTel;
  44. }
  45. public void setOrderTel(String orderTel) {
  46. this.orderTel = orderTel;
  47. }
  48. @Override
  49. public String toString() {
  50. return id + "\t\t\t" + state;
  51. }
  52. }

4.

  1. public class DiningTableService {
  2. //定义一个DiningTableDAO对象
  3. private DiningTableDAO diningTableDAO = new DiningTableDAO();
  4. //返回所有餐桌的信息
  5. public List<DiningTable> list(){
  6. return diningTableDAO.queryMulti("select id,state from diningTable", DiningTable.class);
  7. }
  8. }

4.订座

功能说明如果该餐桌处于已经预定或者就餐状态,给出提示

1.在DiningTableService内添加对应方法

  1. //根据id 查询对应的DiningTable对象 如果返回null 表示id编号对应餐桌不存在
  2. public DiningTable getDiningTableById(int id){
  3. //把sql语句放到查询分析器去测试一下
  4. return diningTableDAO.querySingle("select * from diningTable where id = ?",DiningTable.class,id);
  5. }
  6. //如果餐桌可以预定 调用方法对其状态进行更新
  7. public boolean orderDiningTable(int id,String orderName,String orderTel) {
  8. int dml =
  9. diningTableDAO.dml("update diningTable set state = '已经" +
  10. "预定',orderName = ?,orderTel=? where id = ?", orderName, orderTel, id);
  11. return dml > 0;
  12. }

 2.在view内添加判断用户输入方法,并在对应阶段调用该方法即可

  1. //预定餐桌
  2. public void orderDiningTable(){
  3. System.out.println("=========预定餐桌==========");
  4. System.out.println("请选择要预定的餐桌的编号(-1退出)");
  5. int orderId = Utility.readInt();
  6. if(orderId == -1){
  7. return;
  8. }
  9. DiningTable diningTable = diningTableService.getDiningTableById(orderId);
  10. if(diningTable == null){ //说明不存在
  11. System.out.println("==========该餐桌不存在=========");
  12. return;
  13. }
  14. char key = Utility.readConfirmSelection();//输入Y/N
  15. if (key == 'Y'){
  16. //要预定就调用方法 如果为null该对象不存在
  17. if(!("空".equals(diningTable.getState()))){
  18. System.out.println("==========该餐桌已被预定或就餐中=========");
  19. return;
  20. }
  21. System.out.println("预订人的名字:");
  22. String orderName = Utility.readString(50);
  23. System.out.println("预订人的电话:");
  24. String orderTel = Utility.readString(50);
  25. if(diningTableService.orderDiningTable(orderId,orderName,orderTel)){
  26. System.out.println("预定餐桌成功");
  27. }else{
  28. System.out.println("预定餐桌失败");
  29. }
  30. //过关斩将
  31. }else{
  32. System.out.println("=========取消预定餐桌==========");
  33. }
  34. }

5.显示菜品

1.需要创建一个新的菜单表

2.需要在java内建立domain类

3.需要创建菜单的DAO类

4.需要service组织sql并调用DAO

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

2.在java内创建domain的Menu类 对应表的对象

  1. /**
  2. * @author 银小海
  3. * @version 1.0
  4. * @email yinhai14@qq.com
  5. * 该javabean和 menu 表对应
  6. * id INT PRIMARY KEY AUTO_INCREMENT, #自增, 表示餐桌编号
  7. * state VARCHAR(20) NOT NULL DEFAULT '',#餐桌的状态
  8. * orderName VARCHAR(50) NOT NULL DEFAULT '',#预订人的名字
  9. * orderTel VARCHAR(20) NOT NULL DEFAULT ''
  10. */
  11. public class Menu {
  12. private Integer id;
  13. private String name;
  14. private String type;
  15. private Double price;
  16. public Menu(){//无参构造器
  17. }
  18. public Integer getId() {
  19. return id;
  20. }
  21. public void setId(Integer id) {
  22. this.id = id;
  23. }
  24. public String getName() {
  25. return name;
  26. }
  27. public void setName(String name) {
  28. this.name = name;
  29. }
  30. public String getType() {
  31. return type;
  32. }
  33. public void setType(String type) {
  34. this.type = type;
  35. }
  36. public Double getPrice() {
  37. return price;
  38. }
  39. public void setPrice(Double price) {
  40. this.price = price;
  41. }
  42. public Menu(Integer id, String name, String type, Double price) {
  43. this.id = id;
  44. this.name = name;
  45. this.type = type;
  46. this.price = price;
  47. }
  48. }

3.DAO继承BasicDAO

4.service类 组织sql调用DAO

  1. public class MenuService {
  2. private MenuDAO menuDAO = new MenuDAO();
  3. //返回所有的菜品
  4. public List<Menu> list(){
  5. return menuDAO.queryMulti("select * from menu",Menu.class);
  6. }
  7. }

在view内编写方法调用service类的方法

  1. public void listMenu(){
  2. List<Menu> list = menuService.list();
  3. System.out.println("\n菜品编号\t\t菜品名\t\t类别\t\t价格");
  4. for (Menu menu : list) {
  5. System.out.println(menu);
  6. }
  7. System.out.println("=========显示完毕==========");
  8. }

6.点餐

功能说明要求对餐桌号,菜品编号,做合理性校验,如果不合理,给出提示信息

餐桌号 菜品号 检验是否合理,点餐成功,需要修改餐桌状态,生成账单

1.需要创建一个新的账单表

2.需要在java内建立domain类

3.需要创建菜单的DAO类

4.需要service组织sql并调用DAO

1.新建账单表

  1. #增加表 bill 账单表(id, billId, menuId, nums, billDate, money, state, diningTableId )
  2. #账单流水, 考虑可以分开结账, 并考虑将来分别统计各个不同菜品的销售情况
  3. CREATE TABLE bill (
  4. id INT PRIMARY KEY AUTO_INCREMENT, #自增主键
  5. billId VARCHAR(50) NOT NULL DEFAULT '',#账单号可以按照自己规则生成 UUID
  6. menuId INT NOT NULL DEFAULT 0,#菜品的编号, 也可以使用外键
  7. nums INT NOT NULL DEFAULT 0,#份数
  8. money DOUBLE NOT NULL DEFAULT 0, #金额
  9. diningTableId INT NOT NULL DEFAULT 0, #餐桌
  10. billDate DATETIME NOT NULL ,#订单日期
  11. state VARCHAR(50) NOT NULL DEFAULT '' # 状态 '未结账' , '已经结账', '挂单','现金','支付宝','坏账'
  12. )CHARSET=utf8;
  13. SELECT * FROM bill;

2.创建domain类 javabean

  1. /**
  2. * @author 银小海
  3. * @version 1.0
  4. * @email yinhai14@qq.com
  5. * id INT PRIMARY KEY AUTO_INCREMENT, #自增主键
  6. * billId VARCHAR(50) NOT NULL DEFAULT '',#账单号可以按照自己规则生成 UUID
  7. * menuId INT NOT NULL DEFAULT 0,#菜品的编号, 也可以使用外键
  8. * nums INT NOT NULL DEFAULT 0,#份数
  9. * money DOUBLE NOT NULL DEFAULT 0, #金额
  10. * diningTableId INT NOT NULL DEFAULT 0, #餐桌
  11. * billDate DATETIME NOT NULL ,#订单日期
  12. * state VARCHAR(50) NOT NULL DEFAULT '' # 状态 '未结账' , '已经结账', '挂单','现
  13. */
  14. public class Bill {
  15. private Integer id;
  16. private String billId;
  17. private Integer menuId;
  18. private Integer nums;
  19. private Double money;
  20. private Integer diningTableId;
  21. private Date billDate;
  22. private String state;
  23. public Bill() {
  24. }
  25. public Bill(Integer id, String billId, Integer menuId, Integer nums, Double money, Integer diningTableId, Date billDate, String state) {
  26. this.id = id;
  27. this.billId = billId;
  28. this.menuId = menuId;
  29. this.nums = nums;
  30. this.money = money;
  31. this.diningTableId = diningTableId;
  32. this.billDate = billDate;
  33. this.state = state;
  34. }
  35. public Integer getId() {
  36. return id;
  37. }
  38. public void setId(Integer id) {
  39. this.id = id;
  40. }
  41. public String getBillId() {
  42. return billId;
  43. }
  44. public void setBillId(String billId) {
  45. this.billId = billId;
  46. }
  47. public Integer getMenuId() {
  48. return menuId;
  49. }
  50. public void setMenuId(Integer menuId) {
  51. this.menuId = menuId;
  52. }
  53. public Integer getNums() {
  54. return nums;
  55. }
  56. public void setNums(Integer nums) {
  57. this.nums = nums;
  58. }
  59. public Double getMoney() {
  60. return money;
  61. }
  62. public void setMoney(Double money) {
  63. this.money = money;
  64. }
  65. public Integer getDiningTableId() {
  66. return diningTableId;
  67. }
  68. public void setDiningTableId(Integer diningTableId) {
  69. this.diningTableId = diningTableId;
  70. }
  71. public Date getBillDate() {
  72. return billDate;
  73. }
  74. public void setBillDate(Date billDate) {
  75. this.billDate = billDate;
  76. }
  77. public String getState() {
  78. return state;
  79. }
  80. public void setState(String state) {
  81. this.state = state;
  82. }
  83. @Override
  84. public String toString() {
  85. return id +
  86. "\t\t" + menuId +
  87. "\t\t\t" + nums +
  88. "\t\t\t" + money +
  89. "\t" + diningTableId +
  90. "\t\t" + billDate +
  91. "\t\t" + state ;
  92. }
  93. }

3.编写账单服务类 该方法还需要其他服务类辅助 因此也需要再其他服务类内增加方法

  1. public class BillService {
  2. //定义BillDAO属性
  3. private BillDAO billDAO = new BillDAO();
  4. //需要定义另一个service获得菜单用来计算金额
  5. private MenuService menuService = new MenuService();
  6. //需要定义另一个service更改餐桌的状态
  7. private DiningTableService diningTableService = new DiningTableService();
  8. //编写点餐的方法
  9. //1.生成账单 2. 需要更新对应餐桌状态 3.如果成功返回true 否则返回false
  10. public boolean orderMenu(int menuId,int nums,int diningTableId){
  11. //生成一个账单号UUID
  12. String billUUID = UUID.randomUUID().toString();
  13. //将这个账单生成到bill表 要直接计算账单的金额 也就是获得menu对象
  14. int dml = billDAO.dml("insert into bill values" +
  15. "(null,?,?,?,?,?,now(),'未结账')", billUUID, menuId, nums, menuService.getMenuId(menuId).getPrice() * nums, diningTableId);
  16. if(dml <= 0){
  17. return false;
  18. }
  19. //需要更新餐桌状态
  20. return diningTableService.updateDiningTableState(diningTableId,"就餐中");
  21. }
  22. }

4.在view调用该服务类

  1. //完成点餐
  2. public void orderMenu() {
  3. System.out.println("==============点餐服务============");
  4. System.out.print("请输入点餐的桌号(-1退出): ");
  5. int orderDiningTableId = Utility.readInt();
  6. if (orderDiningTableId == -1) {
  7. System.out.println("==============取消点餐============");
  8. return;
  9. }
  10. System.out.print("请输入点餐的菜品号(-1退出): ");
  11. int orderMenuId = Utility.readInt();
  12. if (orderMenuId == -1) {
  13. System.out.println("==============取消点餐============");
  14. return;
  15. }
  16. System.out.print("请输入点餐的菜品量(-1退出): ");
  17. int orderNums = Utility.readInt();
  18. if (orderNums == -1) {
  19. System.out.println("==============取消点餐============");
  20. return;
  21. }
  22. //验证餐桌号是否存在.
  23. DiningTable diningTable = diningTableService.getDiningTableById(orderDiningTableId);
  24. if (diningTable == null) {
  25. System.out.println("==============餐桌号不存在============");
  26. return;
  27. }
  28. //验证菜品编号
  29. Menu menu = menuService.getMenuId(orderMenuId);
  30. if (menu == null) {
  31. System.out.println("==============菜品号不存在============");
  32. return;
  33. }
  34. //点餐
  35. if (billService.orderMenu(orderMenuId, orderNums, orderDiningTableId)) {
  36. System.out.println("==============点餐成功============");
  37. } else {
  38. System.out.println("==============点餐失败============");
  39. }
  40. }

7.查看账单

1.billDao获得bill对象

2.service编写方法调用billDAO获得bill对象

3.view调用该service方法

2.service调用DAO获得list数组

  1. public List<Bill> list(){
  2. return billDAO.queryMulti("select * from bill",Bill.class);
  3. }

3.view显示账单

  1. public void listBill() {
  2. List<Bill> bills = billService.list();
  3. System.out.println("\n编号\t\t菜品号\t\t菜品量\t\t金额\t\t桌号\t\t日期\t\t\t\t\t\t\t状态");
  4. for (Bill bill : bills) {
  5. System.out.println(bill);
  6. }
  7. System.out.println("==============显示完毕============");
  8. }

 8.结账

(1)对餐桌号进行校验        (2)修改bill表的state        (3)修改diningTable信息        (4)不需要增加表和类

1.在 service类内查看是否有未结账 或者餐桌是否存在 (校验)

  1. //查看某个产值是否有未结账的账单
  2. public boolean hasPayBillByDiningTableId(int diningTableId) {
  3. Bill bill =
  4. billDAO.querySingle("SELECT * FROM bill WHERE diningTableId=? AND state = '未结账' LIMIT 0, 1", Bill.class, diningTableId);
  5. return bill != null;
  6. }
  7. //完成结账[如果餐桌存在,并且该餐桌有未结账的账单]
  8. //如果成功,返回true, 失败返回 false
  9. public boolean payBill(int diningTableId, String payMode) {
  10. //如果这里使用事务的话,需要用ThreadLocal来解决 , 框架中比如mybatis 提供了事务支持
  11. //1. 修改bill表
  12. int update = billDAO.dml("update bill set state=? where diningTableId=? and state='未结账'", payMode, diningTableId);
  13. if(update <= 0) { //如果更新没有成功,则表示失败...
  14. return false;
  15. }
  16. //2. 修改diningTable表
  17. //注意:不要直接在这里操作,而应该调用DiningTableService 方法,完成更新,体现各司其职
  18. if(!diningTableService.updateDiningTableToFree(diningTableId, "空")) {
  19. return false;
  20. }
  21. return true;
  22. }

2.修改diningTable为空闲

  1. //需要提供一个更新餐桌状态为空闲的方法
  2. public boolean updateDiningTableToFree(int id,String state){
  3. int dml = diningTableDAO.dml("update diningTable set state=?,orderName = '',orderTel = '' where id=?", state, id);
  4. return dml > 0;
  5. }

 3.在view内定义方法调用service方法

  1. //完成结账
  2. public void payBill() {
  3. System.out.println("==============结账服务============");
  4. System.out.print("请选择要结账的餐桌编号(-1退出): ");
  5. int diningTableId = Utility.readInt();
  6. if (diningTableId == -1) {
  7. System.out.println("=============取消结账============");
  8. return;
  9. }
  10. //验证餐桌是否存在
  11. DiningTable diningTable = diningTableService.getDiningTableById(diningTableId);
  12. if (diningTable == null) {
  13. System.out.println("=============结账的餐桌不存在============");
  14. return;
  15. }
  16. //验证餐桌是否有需要结账的账单
  17. if (!billService.hasPayBillByDiningTableId(diningTableId)) {
  18. System.out.println("=============该餐位没有未结账账单============");
  19. return;
  20. }
  21. System.out.print("结账方式(现金/支付宝/微信)回车表示退出: ");
  22. String payMode = Utility.readString(20, "");//说明如果回车,就是返回 ""
  23. if ("".equals(payMode)) {
  24. System.out.println("=============取消结账============");
  25. return;
  26. }
  27. char key = Utility.readConfirmSelection();
  28. if (key == 'Y') { //结账
  29. //调用我们写的方法
  30. if (billService.payBill(diningTableId, payMode)) {
  31. System.out.println("=============完成结账============");
  32. } else {
  33. System.out.println("=============结账失败============");
  34. }
  35. } else {
  36. System.out.println("=============取消结账============");
  37. }
  38. }

四、进行代码拓展 

1.多表查询的需求

我们可以再增加一个MultableBean,跟多张表进行映射,所以要有一个MultableBeanDAO,然后调用该DAO

另一个方案

DBUtils数据库连接池多表连接查询_利用数据池连接数据库多个表-CSDN博客

1.创建bean表

  1. public class MultiTableBean {
  2. private Integer id;
  3. private String billId;
  4. private Integer menuId;
  5. private Integer nums;
  6. private Double money;
  7. private Integer diningTableId;
  8. private Date billDate;
  9. private String state;
  10. //增加一个来自menu表的列 name
  11. //思考 这里的属性名是否一定要和表的列名保持一致.
  12. //答: 可以不一致,但是需要sql做相应的修改, 规范需要保持一致.
  13. private String name;
  14. //增加来自menu表的列 price
  15. private Double price;//默认值 nulll
  16. public MultiTableBean() {
  17. System.out.println("反射调用....");
  18. }
  19. // public MultiTableBean(Integer id, String billId, Integer menuId, Integer nums, Double money, Integer diningTableId, Date billDate, String state, String name, Double price) {
  20. // this.id = id;
  21. // this.billId = billId;
  22. // this.menuId = menuId;
  23. // this.nums = nums;
  24. // this.money = money;
  25. // this.diningTableId = diningTableId;
  26. // this.billDate = billDate;
  27. // this.state = state;
  28. // this.name = name;
  29. // this.price = price;
  30. // }
  31. //给price生成setter 和 getter
  32. public Double getPrice() {
  33. return price;
  34. }
  35. public void setPrice(Double price) {
  36. this.price = price;
  37. }
  38. //给name生成setter 和 getter
  39. public String getName() {
  40. return name;
  41. }
  42. public void setName(String name) {
  43. this.name = name;
  44. }
  45. public Integer getId() {
  46. return id;
  47. }
  48. public void setId(Integer id) {
  49. this.id = id;
  50. }
  51. public String getBillId() {
  52. return billId;
  53. }
  54. public void setBillId(String billId) {
  55. this.billId = billId;
  56. }
  57. public Integer getMenuId() {
  58. return menuId;
  59. }
  60. public void setMenuId(Integer menuId) {
  61. this.menuId = menuId;
  62. }
  63. public Integer getNums() {
  64. return nums;
  65. }
  66. public void setNums(Integer nums) {
  67. this.nums = nums;
  68. }
  69. public Double getMoney() {
  70. return money;
  71. }
  72. public void setMoney(Double money) {
  73. this.money = money;
  74. }
  75. public Integer getDiningTableId() {
  76. return diningTableId;
  77. }
  78. public void setDiningTableId(Integer diningTableId) {
  79. this.diningTableId = diningTableId;
  80. }
  81. public Date getBillDate() {
  82. return billDate;
  83. }
  84. public void setBillDate(Date billDate) {
  85. this.billDate = billDate;
  86. }
  87. public String getState() {
  88. return state;
  89. }
  90. public void setState(String state) {
  91. this.state = state;
  92. }
  93. @Override
  94. public String toString() {
  95. return id +
  96. "\t\t" + menuId +
  97. "\t\t\t" + nums +
  98. "\t\t\t" + money +
  99. "\t" + diningTableId +
  100. "\t\t" + billDate +
  101. "\t\t" + state +
  102. "\t\t" + name +
  103. "\t\t" + price;
  104. }
  105. }

2.创建dao类

3. view中调用

  1. public void listBill() {
  2. /*//单表查询
  3. List<Bill> bills = billService.list();
  4. System.out.println("\n编号\t\t菜品号\t\t菜品量\t\t金额\t\t桌号\t\t日期\t\t\t\t\t\t\t状态");
  5. for (Bill bill : bills) {
  6. System.out.println(bill);
  7. }
  8. System.out.println("==============显示完毕============");
  9. */
  10. //多表查询
  11. List<MultiTableBean> multiTableBeans = billService.list2();
  12. System.out.println("\n编号\t\t菜品号\t\t菜品量\t\t金额\t\t桌号\t\t日期\t\t\t\t\t\t\t状态\t\t菜品名\t\t价格");
  13. for (MultiTableBean bill : multiTableBeans) {
  14. System.out.println(bill);
  15. }
  16. System.out.println("==============显示完毕============");
  17. }

 根据需要增加需要的字段

当将来的多表查询次数越来越多可以考虑拆分

2.javaBean和表的参数名一致性的问题

//增加一个来自menu表的列 name

//思考 这里的属性名是否一定要和表的列名保持一致.

//答: 可以不一致,但是需要sql做相应的修改(例如 name as name2), 规范需要保持一致.

3.对于员工多字段的设置

4.完成更多功能 

可以完成登录管理和人事管理

 

声明:本文内容由网友自发贡献,转载请注明出处:【wpsshop博客】
推荐阅读
相关标签
  

闽ICP备14008679号