同学们应该都去麦当劳或肯德基吃过快餐吧?请同学们参考肯德基官网的信息模拟肯德基快餐店的收银系统,合理使用C++/python/Java,结合设计模式(2种以上)至少实现系统的以下功能:
1.正常餐品结算和找零。
2.基本套餐结算和找零。
3.使用优惠劵购买餐品结算和找零。
4.可在一定时间段参与店内活动(自行设计或参考官网信息)。
5.模拟打印小票的功能(写到文件中)。
用时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))+"元");
}
}
}