package bilibili_project.Meau;
import java.util.ArrayList;
import java.util.List;
import java.util.Scanner;
public class Main {
//为什么存menu.Dish ,因为只让存有id,名字和价格这三个属性的对象,数组也是同样理解的。
//不能放在main函数内,arraylist是一个全局变量,放main里 initdish就无法使用了
static List< menu.Dish> dishList=new ArrayList<>();
static List<menu.Dish> reserve_dishList=new ArrayList<>();
public static void main(String[] args) {
initDish();
//和用户互动Scanner
Scanner s=new Scanner(System.in);
//强制死循环 后面用if 或者switch来判断 break跳出
while(true){
show_menu();
int consequence =s.nextInt();
switch (consequence){
//饭店菜品
case 1:
//******难点
//再来一个while死循环 在里面用Scanner来卡住 不然会出现多次弹出主菜单的情况
while (true){
show_DishMenu();
//获取用户需要点什么菜
int number=s.nextInt();
//0退出
if (number==0){
break;
}
//因为index是从0开始
menu.Dish dish = dishList.get(number - 1);
System.out.println("您点了:\t"+dish.name+"\t菜");
//额外创建一个reserve_dishList 来储存用户已经点了的菜单
//此处储存的dish 已经ctrl alt+v过了
reserve_dishList.add(dish);
}
//这里得加一个break 不然会自动跳到case2
break;
//已点菜品
case 2:
show_difiniteDish();
break;
//退菜
case 3:
remove();
while (true){
int number=s.nextInt();
reserve_dishList.remove(number-1);
break;
}
break;
//买单
case 4:
finish();
// return 和 break的区别 break是跳出循环 而return是彻底结束整个方法
return;
}
}
}
//-------------------------------------------------------------------------
//初始化菜品
public static void initDish(){
menu.Dish dish=new menu.Dish(1,"香辣肉丝",29.0);
dishList.add(dish);
menu.Dish dish2=new menu.Dish(2,"炖王八",59.0);
dishList.add(dish2);
// 比一个个new出来再add添加 速度快一点
dishList.add(new menu.Dish(3,"油焖大虾",55.0));
dishList.add(new menu.Dish(4,"地三鲜",24.0));
dishList.add(new menu.Dish(5,"家常凉菜",21.0));
}
//主页面
public static void show_menu(){
System.out.println("-----主菜单-----");
// \t代表空格的意思
System.out.println("菜单\t\t\t 1");
System.out.println("已点菜品\t\t 2");
System.out.println("退菜\t\t\t 3");
System.out.println("买单\t\t\t 4");
System.out.println("-----请选择你需要的编号-----");
}
//主菜单
public static void show_DishMenu(){
System.out.println("-----请您点菜-----");
for (int i = 0; i < dishList.size(); i++) {
//ctrl +alt +v 快速生成
menu.Dish dish = dishList.get(i);
System.out.println(dish.id+" "+dish.name+" "+dish.price);
//或者用原始方法
//System.out.println(dishList.get(i).id+.............);
}
System.out.println("-----输入序号点菜,按0返回上一级-----");
}
//已点菜单
public static void show_difiniteDish(){
System.out.println("-----您已经下单的菜品有-----");
for (int i = 0; i < reserve_dishList.size(); i++) {
menu.Dish dish = reserve_dishList.get(i);
System.out.println(dish.id+" "+dish.name+" "+dish.price);
}
}
//退菜
public static void remove(){
System.out.println("-----选择需要退款的菜品-----");
for (int i = 0; i < reserve_dishList.size(); i++) {
menu.Dish dish = reserve_dishList.get(i);
System.out.println("菜品顺序号:"+(i+1)+" "+dish.name+" "+dish.price);
}
}
//结账
public static void finish(){
System.out.println("-----结算中-----");
double s=0;
for (int i = 0; i < reserve_dishList.size(); i++) {
menu.Dish dish = reserve_dishList.get(i);
s=dish.price+s;
}
System.out.println("您本次一共消费:"+s+"元");
System.out.println("欢迎再次光临");
}
}