/*
餐厅点菜。顾客到一家餐馆去吃饭,他可以点餐厅菜单中有的菜。
设计:(在上次实验基础上改造)
(1)将菜品类作为抽象的父类:属性包括菜品名称、配料列表两个属性,包括构造方法和属性的getXxx()/setXxx()方法,包括烹饪过程的抽象方法。
(2)定义至少两种菜品的子类,如川菜、东北菜等,并定义该类自己的独有特性,实现抽象方法。
(3)厨师类:包含姓名属性和对应的getXxx()/setXxx()方法、构造方法。包含菜品准备方法,接收菜品作为参数,能够输出哪位厨师正在准备哪些材料。包含烹饪方法,接收菜品作为参数,能够输出哪位厨师正在烹饪什么菜品,输出烹饪过程。
(4)餐厅类:包含餐厅名称、厨师、菜单三个属性及构造方法和getXxx()/setXxx()方法,厨师可以有若干个(数组),菜单应包含很多菜品(数组)。包含欢迎方法,输出欢迎信息。包含点餐方法,该方法可以接收菜品名称,并指定一个厨师去烹饪。
(5)主类:初始化若干不同的菜品对象和厨师对象,初始化餐厅对象,模拟点菜过程。
*/
1,Canteen类
package restaurant;
import restaurant.*;
public class Canteen {
private String name;
private Cooker[] chef;
private Menu[] menu;
public Canteen() {
}
public String getName() {
return name;
}
public void setName(String name) {
this.name=name;
}
public Cooker[] getChef() {
return chef;
}
public void setChef(Cooker[] chef) {
this.chef=chef;
}
public Menu[] getMenu() {
return menu;
}
public void setMenu(Menu[] menu) {
this.menu=menu;
}
public void welcome() {
System.out.println("欢迎你来到"+name+"餐厅!");
}
public void byeBye() {
System.out.println("欢迎下次光临");
}
public void order(String dishName) {
Menu orderName=null;
for(Menu dish:menu) {
if(dish.getName().equals(dishName)) {
orderName=dish;
break;
}
}
if(orderName!=null) {
orderName.printFood(dishName);
Random random = new Random();
Cooker assignedChef = chef[random.nextInt(chef.length)];
assignedChef.prepareMenu(orderName);
assignedChef.cookMenu(orderName);
}
else {
System.out.println("不好意思,我们没有找到这道菜品。");
}
}
}
2,Cooker类
package restaurant;
import restaurant.*;
public class Cooker {
private String name;
public Cooker(){
}
public void setName(String name) {
this.name=name;
}
public String getName() {
return name;
}
public void prepareMenu(Menu dishName) {
System.out.println("此时是厨师"+name+",正在准备:"+Arrays.toString(dishName.getIngredient()));
}
public void cookMenu(Menu dishname) {
System.out.println("此时是厨师"+name+",正在用:"+dishname.getCookMethod()+"烹饪方法,"+"烹饪菜品是:"+dishname.getName());
}
}
3,Main类
package restaurant;
import java.util.Scanner;
public class Main {
public static void main(String[] args) {
Scanner sc=new Scanner(System.in);
boolean flag=true;
Menu menu1 = new Menu();
menu1.setName("宫保鸡丁");
menu1.setIngredient(new String[]{"鸡肉", "花生", "辣椒"});
menu1.setCookMethod("炒");
Menu menu2 = new Menu();
menu2.setName("鱼香肉丝");
menu2.setIngredient(new String[]{"鱼肉", "胡萝卜", "木耳"});
menu2.setCookMethod("炒");
Menu menu3 = new Menu();
menu3.setName("油焖大虾");
menu3.setIngredient(new String[]{"大虾", "番茄酱", "辣椒"});
menu3.setCookMethod("油焖");
Menu[] menu = {menu1,menu2,menu3};
Cooker cooker1=new Cooker();
cooker1.setName("詹妮");
Cooker cooker2=new Cooker();
cooker2.setName("丹尼");
Cooker cooker3=new Cooker();
cooker3.setName("李明");
Cooker[] cookers= {cooker1,cooker2,cooker3};
Canteen canteen=new Canteen();
canteen.setChef(cookers);
canteen.setMenu(menu);
canteen.setName("奇妙之旅");
canteen.welcome();
while(flag) {
System.out.println("请输入你想点的菜:");
String orderName=sc.next();
canteen.order(orderName);
System.out.println("你是否想继续点餐?(1为是,2为否)");
int choice=sc.nextInt();
if(choice==1) continue;
else {
canteen.byeBye();
break;
}
}
}
}
4,Menu类
package restaurant;
import java.util.Arrays;
public class Menu {
private String name;
private String[] ingredients;
private String cookMethod;
public String getName() {
return name;
}
public void setName(String name) {
this.name=name;
}
public String[] getIngredient() {
return ingredients;
}
public void setIngredient(String[] ingredients) {
this.ingredients=ingredients;
}
public String getCookMethod() {
return cookMethod;
}
public void setCookMethod(String cookMethod) {
this.cookMethod=cookMethod;
}
public void printFood(String name) {
System.out.println("您所点的菜品为"+name+','+"所涉及到的配料列表为:"+Arrays.toString(ingredients));
}
}