喜迎
春节

KFC点餐系统


写在前面的话:首先撒花✿✿ヽ(°▽°)ノ✿其次代码有些小问题,对于设计模式的掌握不是很好,运用也不是很顺利,在写的过程中出现了一些错误,并且错误还改了好久,总之代码存在些小错误,如有不当,请大神多多指出!!! 

同学们应该都去麦当劳或肯德基吃过快餐吧?请同学们参考肯德基官网的信息模拟肯德基快餐店的收银系统,合理使用C++或Java或Python结合设计模式(2种以上)至少实现系统的以下功能:

1.正常餐品结算和找零。

2.基本套餐结算和找零。

3.使用优惠劵购买餐品结算和找零。

4.可在一定时间段参与店内活动(自行设计或参考官网信息)。

5.模拟打印小票的功能(写到文件中)。

 

设计模式:

  1. 抽象工厂设计模式:抽象工厂提供了一个接口,用于创建相关或者依赖的对象。
  • 抽象食物的建立:AbstracBaseFood
    1. package pers.几个九.KFC;
    2. /**
    3. * 食物基类,基本信息
    4. * @author 商嘉鑫
    5. *
    6. */
    7. public abstract class AbstractBaseFood {
    8. //类别
    9. protected String kind ;
    10. //数量
    11. protected int num ;
    12. //价格
    13. protected float price ;
    14. //合计
    15. public float totalPrice()
    16. {
    17. return this . num * this . price ;
    18. }
    19. }

     

该类设计成抽象类,类内设有事务类别,数量,价格,总计等字段。

  • 食物接口的建立:Ifood
    1. package pers.几个九.KFC;
    2. /**
    3. * 抽象食物接口
    4. * @author 商嘉鑫
    5. *
    6. */
    7. public interface IFood {
    8. /**
    9. * 打印出食物信息
    10. */
    11. void printMessage();
    12. }

     

用于打印食物信息,类内设有printMessage方法

  • 不同食物基类的建立:继承抽象食物,接口食物接口

-----Hamburg(汉堡基类)

  1. package pers.几个九.KFC;
  2. public abstract class Hamburg extends AbstractBaseFood implements IFood {
  3. public void printMessage()
  4. {
  5. System.out.println("--"+this.kind+"风味汉堡,\t单价:"+this.price +",\t数量:"+this.num+",\t合计"+this.totalPrice());
  6. }
  7. }

-----Chicken_Wings(鸡翅类)

  1. package pers.几个九.KFC;
  2. public abstract class Chicken_Wings extends AbstractBaseFood implements IFood{
  3. public void printMessage()
  4. {
  5. System.out.println("--"+this.kind+"五香鸡翅,\t单价:"+this.price +",\t数量:"+this.num+",\t合计"+this.totalPrice());
  6. }
  7. }

-----FrenchFries(薯条类)

  1. package pers.几个九.KFC;
  2. public abstract class FrenchFries extends AbstractBaseFood implements IFood{
  3. public void printMessage()
  4. {
  5. System.out.println("--"+this.kind+"大份鸡翅,\t单价:"+this.price +",\t数量:"+this.num+",\t合计"+this.totalPrice());
  6. }
  7. }

-----Drink(饮品类)

  1. package pers.几个九.KFC;
  2. public abstract class Drink extends AbstractBaseFood implements IFood{
  3. public void printMessage()
  4. {
  5. System.out.println("--"+this.kind+"饮品,\t单价:"+this.price +",\t数量:"+this.num+",\t合计"+this.totalPrice());
  6. }
  7. }
  • 具体食物类的创建:

-----Zinger_Burger(麻辣汉堡)

  1. package pers.几个九.KFC;
  2. /**
  3. * 具体食物
  4. * @author 商嘉鑫
  5. *
  6. */
  7. public class Zinger_Burger extends Hamburg {
  8. /**
  9. * 构造函数为属性赋值
  10. * @param num
  11. */
  12. Zinger_Burger(int num)
  13. {
  14. this.kind="麻辣";
  15. this.price=14.0f;
  16. this.num=num;
  17. }
  18. }

-----Orleams_Wing(奥尔连鸡翅)

  1. package pers.几个九.KFC;
  2. public class Orleams_Wing extends Chicken_Wings {
  3. /**
  4. * 构造函数
  5. */
  6. Orleams_Wing(int num)
  7. {
  8. this.kind="奥尔良鸡翅";
  9. this.price=10.0f;
  10. this.num =num;
  11. }
  12. }

-----Big_FrenchFries(大薯条)

  1. package pers.几个九.KFC;
  2. public class Big_FrenchFries extends FrenchFries{
  3. /**
  4. * 构造函数
  5. */
  6. Big_FrenchFries(int num)
  7. {
  8. this.kind="大份薯条";
  9. this.price=10.0f;
  10. this.num=num;
  11. }
  12. }

-----CocaCola(可乐)

  1. package pers.几个九.KFC;
  2. public class CocaCola extends Drink{
  3. /**
  4. * 构造函数
  5. */
  6. CocaCola(int num)
  7. {
  8. this.kind="可乐";
  9. this.price=7.0f;
  10. this.num=num;
  11. }
  12. }
  • 抽象肯德基工厂的建立IKFCfactory

用来生产抽象食物

  1. package pers.几个九.KFC;
  2. /**
  3. * KFC抽象工厂,生产抽象食物
  4. * @author 商嘉鑫
  5. *
  6. */
  7. public interface IKFCfactory {
  8. //生产汉堡
  9. public Hamburg make_Hamburger(int num);
  10. //生产饮品
  11. public Drink make_Drink(int num);
  12. //生产薯条
  13. public FrenchFries make_FrenchFries(int num);
  14. //生产鸡翅
  15. public Chicken_Wings make_Wings(int num);
  16. }
  • 具体肯德基工厂的创建Re_food_Factory

用来生产具体食物

  1. package pers.几个九.KFC;
  2. public class Re_food_Factory implements IKFCfactory{
  3. //生产可乐
  4. public Drink make_Drink(int num)
  5. {
  6. return new CocaCola(num);
  7. }
  8. @Override
  9. public Hamburg make_Hamburger(int num) {
  10. // TODO Auto-generated method stub
  11. return new Zinger_Burger(num);
  12. }
  13. //生产麻辣汉堡
  14. public Hamburg make_Hamburg(int num)
  15. {
  16. return new Zinger_Burger(num);
  17. }
  18. //生产大薯条
  19. public FrenchFries make_FrenchFries(int num)
  20. {
  21. return new Big_FrenchFries(num);
  22. }
  23. //生产麻辣鸡翅
  24. public Chicken_Wings make_Wings(int num)
  25. {
  26. return new Orleams_Wing(num);
  27. }
  28. }

     2.策略模式:

  • 策略模式接口的创建;

用来计算打折或使用优惠券后的价格

  1. package pers.几个九.KFC;
  2. /**
  3. * 策略模式
  4. * 1---有优惠券,无活动
  5. * 2---有活动,有优惠券
  6. * 3---无活动,无优惠券
  7. * @author 商嘉鑫
  8. *
  9. */
  10. public interface MemberStrategy {
  11. /**
  12. * 计算餐品价格
  13. */
  14. public float calcPrice(float foodPrice);
  15. }
  • 接口实现类Price的创建
    1. package pers.几个九.KFC;
    2. public class Price {
    3. //实例
    4. private MemberStrategy strategy;
    5. private MemberStrategy srtategy1;
    6. /**
    7. * 构造函数
    8. */
    9. public Price(MemberStrategy strategy) {
    10. this.strategy=strategy;
    11. this.srtategy1=strategy;
    12. }
    13. /**
    14. * 计算餐品价格
    15. */
    16. public float quote(float foodPrice){
    17. return this.strategy.calcPrice(foodPrice);
    18. }
    19. }

     

  • 接口实现类BaseStrategy的创建
    1. package pers.几个九.KFC;
    2. public class BaseStrategy implements MemberStrategy{
    3. @Override
    4. public float calcPrice(float foodPrice) {//重写计算价格方法
    5. // TODO Auto-generated method stub
    6. return foodPrice-10;//10元优惠券
    7. }
    8. }

     

用于实现10元优惠券的价格

  • 接口实现类Activity的创建
    1. package pers.几个九.KFC;
    2. /**
    3. * 85折活动
    4. * @author 商嘉鑫
    5. *
    6. */
    7. public class Activity implements MemberStrategy{
    8. @Override
    9. public float calcPrice(float foodPrice) {//重写
    10. // TODO Auto-generated method stub
    11. return foodPrice*0.85f;//85折
    12. }
    13. }

     

用于实现店内有活动的价格

 很晚了,有点困

 


文章作者: 周周
版权声明: 本博客所有文章除特別声明外,均采用 CC BY 4.0 许可协议。转载请注明来源 周周 !
评 论
  目录