KFC订餐

同学们应该都去麦当劳或肯德基吃过快餐吧?请同学们参考肯德基官网的信息模拟肯德基快餐店的收银系统,合理使用C++/python/Java,结合设计模式(2种以上)
用到抽象工厂模式和建造者模式
功能:(1)顾客单点食品
(2)套餐选择
类图
在这里插入图片描述

public abstract  class BaseFood {

	//定义餐品价格
	protected double price;
	//定义餐品数量
	protected int num;
	//定义物品种类
	protected String kind;
	
	//计算消费总金额
	public double totalPrice(){
		return this.price*this.num;
	}
}

//食物接口
public interface PrintFood {

	//打印出消费信息
	public void printConsumptionMessage();
	
}
//定义汉堡类基类
public abstract class Hamburg extends BaseFood implements PrintFood{
	

	@Override
	public void printConsumptionMessage() {
		
		System.out.println(this.kind+"汉堡:\t单价"+this.price+"  \t数量:"+this.num);
		
	}
	
}
//定义鸡翅类基类
public abstract class ChickenWings extends BaseFood implements PrintFood{

	
	@Override
	public void printConsumptionMessage() {
		
		System.out.println(this.kind+"鸡翅:\t单价"+this.price+"  \t数量:"+this.num);	
	}
}

//定义薯条类基类
public abstract class FrenchFries extends BaseFood implements PrintFood{

	
	@Override
	public void printConsumptionMessage() {
		
		System.out.println(this.kind+"薯条:\t单价"+this.price+"  \t数量:"+this.num);	
	}
}
//饮料基类
public abstract class Drink extends BaseFood implements PrintFood{

	public void printConsumptionMessage() {
		
		System.out.println(this.kind+"饮品:\t单价"+this.price+"  \t数量:"+this.num);
	}
}

//冰淇淋基类
public abstract class IceCream extends BaseFood implements PrintFood{
	public void printConsumptionMessage() {
		System.out.println(this.kind+"冰淇淋:\t单价"+this.price+"  \t数量:"+this.num);
	}
}

/*具体类*/
//芝士蛋汉堡
public class CheeseEagHamburg extends Hamburg{
	
	public CheeseEagHamburg(int num) {
		this.kind = "芝士蛋";
		this.price = 16.0;
		this.num = num;
	}
}

//薯条
public class ChinaChickenFrice extends FrenchFries{

	public ChinaChickenFrice(int num) {
		this.kind = "香辣";
		this.price = 16.0;
		this.num = num;
	}
}
//香辣鸡翅
public class SpicyChickenWings extends ChickenWings{
	public SpicyChickenWings(int num) {
		this.kind = "香辣";
		this.price = 23.0;
		this.num = num;
	}
}
//可乐类
public class CokeDrink extends Drink{
	public CokeDrink(int num) {
		this.kind = "可乐";
		this.price = 8.0;
		this.num = num;
	}
}

//抹茶冰淇淋
public class MatchaIceCream extends IceCream{
	public MatchaIceCream(int num) {
		this.kind ="抹茶";
		this.price = 6.0;
		this.num = num;
	}
}

/抽象工厂基类
public interface AbstractKFCFactory {

	//生产汉堡
	public Hamburg createHamburg(int num); 
	
	//生产鸡翅
	public ChickenWings createChickenWings(int num);
	
	//生产薯条
	public FrenchFries createFrenchFries(int num);
	
	//生产饮品
	public Drink createDrink(int num);
	
	//生产冰淇淋
	public IceCream createIceCream(int num);
}

//具体工厂
public class KFCFactory implements AbstractKFCFactory{
	@Override
	public Hamburg createHamburg(int num) {
		// TODO Auto-generated method stub
		return new CheeseEagHamburg(num);
	}

	@Override
	public ChickenWings createChickenWings(int num) {
		// TODO Auto-generated method stub
		return new SpicyChickenWings(num);
	}

	@Override
	public FrenchFries createFrenchFries(int num) {
		// TODO Auto-generated method stub
		return new ChinaChickenFrice(num);
	}

	@Override
	public Drink createDrink(int num) {
		// TODO Auto-generated method stub
		return new CokeDrink(num);
	}

	@Override
	public IceCream createIceCream(int num) {
		// TODO Auto-generated method stub
		return new MatchaIceCream(num);
	}
}

//顾客类
public class Customer {
	
	private AbstractKFCFactory kfcFactory;
	
	public Customer(AbstractKFCFactory kfcFactory) {
		this.kfcFactory = kfcFactory;
	}
	
	//购买香辣汉堡
	public double orderHamburg(int num) {
		//获得香辣汉堡
		Hamburg hamburg = kfcFactory.createHamburg(num);
		//打印购买信息
		hamburg.printConsumptionMessage();
		//返回总消费
		return hamburg.totalPrice();
	}
	
	
	//购买香辣鸡翅
	public double orderChickenWings(int num) {
		//获得香辣鸡翅
		ChickenWings chicken = kfcFactory.createChickenWings(num);
		//打印购买信息
		chicken.printConsumptionMessage();
		//返回总消费
		return chicken.totalPrice();
	}
	
	//购买薯条
	public double orederFrenchFrices(int num) {
		//获得薯条
		FrenchFries frenchfrice = kfcFactory.createFrenchFries(num);
		//打印购买信息
		frenchfrice.printConsumptionMessage();
		//返回总消费
		return frenchfrice.totalPrice();
	}
	
	//购买饮品
	public double orderDrink(int num) {
		//获得可乐
		Drink drink = kfcFactory.createDrink(num);
		//打印购买信息
		drink.printConsumptionMessage();
		//返回总消费
		return drink.totalPrice();
	}
	
	//购买冰淇淋
	public double orderIceCream(int num) {
		//获得冰淇淋
		IceCream icecream = kfcFactory.createIceCream(num);
		//打印购买信息
		icecream.printConsumptionMessage();
		//返回总消费
		return icecream.totalPrice();
	}
}

/*套餐,用建造者模式*/
public class KfcPackage {

	//定义餐品价格
	protected double price;
	//定义餐品数量
	protected int num;
	//定义套餐种类
	protected String kind;
	
	public double getPrice() {
		return price;
	}
	
	public void setPrice(double price) {
		this.price = price;
	}
	
	public  String getKind() {
		return kind;
	}
	
	public void setKind(String kind) {
		this.kind = kind;
	}
	
	public int getNum() {
		return num;
	}
	
	public void setNum(int num) {
		this.num = num;
	}
	
	public void printFood() {
		System.out.println(kind+"\t 单价:"+price+"\t 数量:"+num);
	}
}

public abstract class KfcBuilder {

	protected final KfcPackage kfcpackage = new KfcPackage();
	
	//套餐的种类
	public void setKind(String kind) {
		this.kfcpackage.setKind(kind);
	}
	
	//套餐的价格
	public void setPrice(double price) {
		this.kfcpackage.setPrice(price);
	}
	
	//套餐的数量
	public void setNum(int num) {
		this.kfcpackage.setNum(num);
	}
	
	//构造一个完整的套餐
	public abstract KfcPackage getKfcPackage();
}

public class TaoCanFactory1 extends KfcBuilder{

	public KfcPackage getKfcPackage() {
		super.kfcpackage.setKind("深海鳕鱼汉堡、香辣鸡翅、薯条、橙汁、原味冰欺凌");
		super.kfcpackage.setNum(1);
		super.kfcpackage.setPrice(99.0);
		return super.kfcpackage;
		
	}
}

public class TaoCanFactory2 extends KfcBuilder{

	@Override
	public KfcPackage getKfcPackage() {
		super.kfcpackage.setKind("七虾汉堡、烧烤鸡翅、原味薯条、可乐、抹茶冰欺凌");
		super.kfcpackage.setNum(1);
		super.kfcpackage.setPrice(109.0);
		return super.kfcpackage;
	}
}
public class Director {

	//套餐1的应用
	private static KfcBuilder taocanFactoey1 = new TaoCanFactory1(); 
	
	//套餐2的应用
	private static KfcBuilder taocanFactory2 = new TaoCanFactory2();
	
	//生产套餐一
	public static KfcPackage getTaoCanFactory1() {
		return taocanFactoey1.getKfcPackage();
	}
	
	//生产套餐二
	public static KfcPackage getTaoCanFactory2() {
		return taocanFactory2.getKfcPackage();
	}
}

//主方法
import java.util.Scanner;
public class mainClass {
		public static void main(String[] args) {
			System.out.println("本店提供的套餐如下:");
			KfcPackage taocanFactory1 = Director.getTaoCanFactory1();
			System.out.println("套餐一:");
			System.out.println(taocanFactory1.getKind());
			System.out.println("价格:"+taocanFactory1.getPrice());
			
			//生产套餐二
			KfcPackage taocanFatory2 = Director.getTaoCanFactory2();
			System.out.println("套餐二:");
			System.out.println(taocanFatory2.getKind());
			System.out.println("价格:"+taocanFatory2.getPrice());
			Scanner scan = new Scanner(System.in);
			
			
			

			System.out.println("请选择是否订购套餐,是请输入9,否则输入0");
			int num = scan.nextInt();
			if(num == 9) {
			System.out.println("请选择你选则的套餐:1:套餐一      2:套餐二");
			int number = scan.nextInt();
			if( number == 1) {
				System.out.println("------------------账单------------------");
				
				AbstractKFCFactory akfcFoctory = new KFCFactory();
				
				//创建顾客对象
				Customer customer = new Customer(akfcFoctory);
				
				//顾客点餐
				//3个汉堡
				double hamburgCost = customer.orderHamburg(3);
				
				
				//5个鸡翅
				double chickenWingsCost = customer.orderChickenWings(5);
				
				//1份薯条
				double frenchFriesCost = customer.orederFrenchFrices(1);
				
				//2杯饮料
				double drinkCost = customer.orderDrink(2);
				
				//1份冰淇淋
				double iceCreamCost = customer.orderIceCream(1);
				
				System.out.println(taocanFactory1.getKind());
				System.out.println("价格:"+taocanFactory1.getPrice()+"\t 数量:"+taocanFactory1.getNum());
				System.out.println("累计消费:"+(hamburgCost+chickenWingsCost+frenchFriesCost+drinkCost+iceCreamCost+taocanFactory1.getPrice())+"元");
				System.out.println("----------------------------------------");
				System.out.println("用户支付金额:");
				int money = scan.nextInt();
				System.out.println("找零钱"+(money-(hamburgCost+chickenWingsCost+frenchFriesCost+drinkCost+iceCreamCost+taocanFactory1.getPrice()))+"元");
		
			}
			else{
                System.out.println("------------------账单------------------");
				
				AbstractKFCFactory akfcFoctory = new KFCFactory();
				
				//创建顾客对象
				Customer customer = new Customer(akfcFoctory);
				
				//顾客点餐
				//3个汉堡
				double hamburgCost = customer.orderHamburg(3);
				
				
				//5个鸡翅
				double chickenWingsCost = customer.orderChickenWings(5);
				
				//1份薯条
				double frenchFriesCost = customer.orederFrenchFrices(1);
				
				//2杯饮料
				double drinkCost = customer.orderDrink(2);
				
				//1份冰淇淋
				double iceCreamCost = customer.orderIceCream(1);
				
				System.out.println(taocanFatory2.getKind());
				System.out.println("价格:"+taocanFatory2.getPrice()+"\t 数量:"+taocanFatory2.getNum());
				System.out.println("累计消费:"+(hamburgCost+chickenWingsCost+frenchFriesCost+drinkCost+iceCreamCost+taocanFatory2.getPrice())+"元");
				System.out.println("----------------------------------------");
				System.out.println("用户支付金额:");
				int money = scan.nextInt();
				System.out.println("找零钱"+(money-(hamburgCost+chickenWingsCost+frenchFriesCost+drinkCost+iceCreamCost+taocanFatory2.getPrice()))+"元");
		
				
			}
	   }
			else {
				System.out.println("------------------账单------------------");
				
				AbstractKFCFactory akfcFoctory = new KFCFactory();
				
				//创建顾客对象
				Customer customer = new Customer(akfcFoctory);
				
				//顾客点餐
				//3个汉堡
				double hamburgCost = customer.orderHamburg(3);
				
				
				//5个鸡翅
				double chickenWingsCost = customer.orderChickenWings(5);
				
				//1份薯条
				double frenchFriesCost = customer.orederFrenchFrices(1);
				
				//2杯饮料
				double drinkCost = customer.orderDrink(2);
				
				//1份冰淇淋
				double iceCreamCost = customer.orderIceCream(1);
				System.out.println("累计消费:"+(hamburgCost+chickenWingsCost+frenchFriesCost+drinkCost+iceCreamCost)+"元");
				System.out.println("----------------------------------------");
				System.out.println("用户支付金额:");
				int money = scan.nextInt();
				System.out.println("找零钱"+(money-(hamburgCost+chickenWingsCost+frenchFriesCost+drinkCost+iceCreamCost))+"元");
			}
		}
}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值