资料来源:https://www.bilibili.com/video/BV1Aq4y1W79E?p=1

1、菜品类:Dish

  1. package cn.tx.demo;
  2. import lombok.AllArgsConstructor;
  3. import lombok.Data;
  4. import lombok.NoArgsConstructor;
  5. /**
  6. * 菜品类
  7. */
  8. @Data
  9. @NoArgsConstructor
  10. @AllArgsConstructor
  11. public class Dish {
  12. // 编号
  13. Integer id;
  14. // 菜名
  15. String name;
  16. // 价格
  17. Double price;
  18. }

2、已点菜品类:PersonDish

  1. package cn.tx.demo;
  2. import lombok.AllArgsConstructor;
  3. import lombok.Data;
  4. import lombok.NoArgsConstructor;
  5. /**
  6. * 已点菜品类
  7. */
  8. @Data
  9. @NoArgsConstructor
  10. @AllArgsConstructor
  11. public class PersonDish extends Dish{
  12. // 数量
  13. Integer num;
  14. }

3、点菜类:DishApp

  1. package cn.tx.demo;
  2. import java.util.ArrayList;
  3. import java.util.List;
  4. import java.util.Scanner;
  5. /**
  6. * 点菜系统
  7. */
  8. public class DishApp {
  9. // 提前准备一些菜品,展示给用户,同时用户可以点菜。
  10. // 定义集合:表示小饭店拥有的菜品
  11. static List<Dish> dishList = new ArrayList<>();
  12. // 用户已点的菜品
  13. static List<PersonDish> personDist = new ArrayList<>();
  14. public static void main(String[] args) {
  15. // 先初始化菜品
  16. init();
  17. // 创建扫描器对象,获取到控制台输入的内容
  18. Scanner scanner = new Scanner(System.in);
  19. while (true){
  20. // 给用户展示主菜单
  21. showMenu();
  22. // 获取输入的内容
  23. int num = scanner.nextInt();
  24. // 判断用户输入的数字
  25. switch (num){
  26. case 1:
  27. while (true){
  28. // 展示菜单给用户
  29. showDishMenu();
  30. // 获取输入的内容
  31. int id = scanner.nextInt();
  32. // 判断。输入0返回上一级
  33. if(id == 0){
  34. break;
  35. }
  36. // 从饭店的集合中获取到菜品
  37. Dish dish = dishList.get(id - 1);
  38. System.out.println("亲,您点了:" + dish.getName() + "菜");
  39. PersonDish personDish = new PersonDish();
  40. personDish.setId(dish.getId());
  41. personDish.setName(dish.getName());
  42. personDish.setPrice(dish.getPrice());
  43. personDish.setNum(1);
  44. int sum = 0;
  45. for (int i = 0; i < personDist.size(); i++) {
  46. if(personDist.get(i).getId().equals(dish.getId())){
  47. personDist.get(i).setNum(personDist.get(i).getNum() + 1);
  48. break;
  49. }
  50. sum += 1;
  51. }
  52. if(sum == personDist.size()){
  53. personDist.add(personDish);
  54. }
  55. }
  56. case 2:
  57. // 展示用户已经点的菜品
  58. showPersonDish();
  59. break; // break:结束switch,继续运行while循环
  60. case 3:
  61. // 买单
  62. buy();
  63. return; // return:结束整个程序
  64. }
  65. }
  66. }
  67. /**
  68. * 买单
  69. */
  70. private static void buy() {
  71. System.out.println("-------请稍等,正在结算-------");
  72. // 定义总金额
  73. double total = 0.0;
  74. for (PersonDish personDish : personDist) {
  75. double price = personDish.getPrice();
  76. Integer num = personDish.getNum();
  77. total += price * num;
  78. }
  79. System.out.println("亲,您本次共消费了:" + total + "元");
  80. }
  81. /***
  82. * 展示客户已点的菜
  83. */
  84. private static void showPersonDish() {
  85. System.out.println("--------您已点的菜品---------");
  86. // personDist.stream().
  87. personDist.forEach(dish -> {
  88. System.out.println(dish.getId() + "\t" + dish.getName() + "\t" + dish.getPrice() + "\t" + dish.getNum());
  89. });
  90. }
  91. /**
  92. * 展示饭店菜单
  93. */
  94. private static void showDishMenu() {
  95. System.out.println("---------请您点菜----------");
  96. dishList.forEach(dish -> {
  97. System.out.println(dish.getId() + "\t" + dish.getName() + "\t" + dish.getPrice());
  98. });
  99. System.out.println("---输入序号点菜,按0返回上一级---");
  100. }
  101. /**
  102. * 展示主菜单
  103. */
  104. public static void showMenu(){
  105. System.out.println("----------主菜单------------");
  106. System.out.println("菜单\t\t\t 1");
  107. System.out.println("已点菜品\t\t\t 2");
  108. System.out.println("买单\t\t\t 3");
  109. System.out.println("----根据编号请选择服务------");
  110. }
  111. /**
  112. * 初始化菜品
  113. */
  114. public static void init(){
  115. Dish dish1 = new Dish(1, "香辣肉丝", 29.0);
  116. Dish dish2 = new Dish(2, "炖王八", 59.0);
  117. Dish dish3 = new Dish(3, "家常凉菜", 21.0);
  118. Dish dish4 = new Dish(4, "地三鲜", 24.0);
  119. Dish dish5 = new Dish(5, "油焖大虾", 55.0);
  120. dishList.add(dish1);
  121. dishList.add(dish2);
  122. dishList.add(dish3);
  123. dishList.add(dish4);
  124. dishList.add(dish5);
  125. }
  126. }