资料来源:https://www.bilibili.com/video/BV1Aq4y1W79E?p=1
1、菜品类:Dish
package cn.tx.demo;
import lombok.AllArgsConstructor;
import lombok.Data;
import lombok.NoArgsConstructor;
/**
* 菜品类
*/
@Data
@NoArgsConstructor
@AllArgsConstructor
public class Dish {
// 编号
Integer id;
// 菜名
String name;
// 价格
Double price;
}
2、已点菜品类:PersonDish
package cn.tx.demo;
import lombok.AllArgsConstructor;
import lombok.Data;
import lombok.NoArgsConstructor;
/**
* 已点菜品类
*/
@Data
@NoArgsConstructor
@AllArgsConstructor
public class PersonDish extends Dish{
// 数量
Integer num;
}
3、点菜类:DishApp
package cn.tx.demo;
import java.util.ArrayList;
import java.util.List;
import java.util.Scanner;
/**
* 点菜系统
*/
public class DishApp {
// 提前准备一些菜品,展示给用户,同时用户可以点菜。
// 定义集合:表示小饭店拥有的菜品
static List<Dish> dishList = new ArrayList<>();
// 用户已点的菜品
static List<PersonDish> personDist = new ArrayList<>();
public static void main(String[] args) {
// 先初始化菜品
init();
// 创建扫描器对象,获取到控制台输入的内容
Scanner scanner = new Scanner(System.in);
while (true){
// 给用户展示主菜单
showMenu();
// 获取输入的内容
int num = scanner.nextInt();
// 判断用户输入的数字
switch (num){
case 1:
while (true){
// 展示菜单给用户
showDishMenu();
// 获取输入的内容
int id = scanner.nextInt();
// 判断。输入0返回上一级
if(id == 0){
break;
}
// 从饭店的集合中获取到菜品
Dish dish = dishList.get(id - 1);
System.out.println("亲,您点了:" + dish.getName() + "菜");
PersonDish personDish = new PersonDish();
personDish.setId(dish.getId());
personDish.setName(dish.getName());
personDish.setPrice(dish.getPrice());
personDish.setNum(1);
int sum = 0;
for (int i = 0; i < personDist.size(); i++) {
if(personDist.get(i).getId().equals(dish.getId())){
personDist.get(i).setNum(personDist.get(i).getNum() + 1);
break;
}
sum += 1;
}
if(sum == personDist.size()){
personDist.add(personDish);
}
}
case 2:
// 展示用户已经点的菜品
showPersonDish();
break; // break:结束switch,继续运行while循环
case 3:
// 买单
buy();
return; // return:结束整个程序
}
}
}
/**
* 买单
*/
private static void buy() {
System.out.println("-------请稍等,正在结算-------");
// 定义总金额
double total = 0.0;
for (PersonDish personDish : personDist) {
double price = personDish.getPrice();
Integer num = personDish.getNum();
total += price * num;
}
System.out.println("亲,您本次共消费了:" + total + "元");
}
/***
* 展示客户已点的菜
*/
private static void showPersonDish() {
System.out.println("--------您已点的菜品---------");
// personDist.stream().
personDist.forEach(dish -> {
System.out.println(dish.getId() + "\t" + dish.getName() + "\t" + dish.getPrice() + "\t" + dish.getNum());
});
}
/**
* 展示饭店菜单
*/
private static void showDishMenu() {
System.out.println("---------请您点菜----------");
dishList.forEach(dish -> {
System.out.println(dish.getId() + "\t" + dish.getName() + "\t" + dish.getPrice());
});
System.out.println("---输入序号点菜,按0返回上一级---");
}
/**
* 展示主菜单
*/
public static void showMenu(){
System.out.println("----------主菜单------------");
System.out.println("菜单\t\t\t 1");
System.out.println("已点菜品\t\t\t 2");
System.out.println("买单\t\t\t 3");
System.out.println("----根据编号请选择服务------");
}
/**
* 初始化菜品
*/
public static void init(){
Dish dish1 = new Dish(1, "香辣肉丝", 29.0);
Dish dish2 = new Dish(2, "炖王八", 59.0);
Dish dish3 = new Dish(3, "家常凉菜", 21.0);
Dish dish4 = new Dish(4, "地三鲜", 24.0);
Dish dish5 = new Dish(5, "油焖大虾", 55.0);
dishList.add(dish1);
dishList.add(dish2);
dishList.add(dish3);
dishList.add(dish4);
dishList.add(dish5);
}
}