Java 实现简单的KFC点餐结算

一. 题目分析及要求

同学们应该都去麦当劳或肯德基吃过快餐吧?请同学们参考肯德基官网的信息模拟肯德基快餐店的收银系统,合理使用C++或Java或Python结合设计模式(2种以上)至少实现系统的以下功能:
1.正常餐品结算和找零。
2.基本套餐结算和找零。
3.使用优惠劵购买餐品结算和找零。
4.模拟打印小票的功能(写到文件中)。
基本要求:
1.实现功能测试代码,确保程序的健壮性。
2.画出使用的设计模式图。

二. 设计模式

单点食物
采用简单工厂模式,利用Java反射机制来实现食品类的实例化。
工厂类名 : ( SimFoodFactory )

套餐产品
采用抽象工厂模式,实现套餐系列产品的生成(三个)
工厂类名:(ComboOneFactory, ComboSecondFactory ,ComboThirdFactory )

三. 类图设计

在这里插入图片描述

四. 算法实现

1.实体类 Food

public class Food {
   
    public Integer id;
    public String name;
    public Double price;

    public Integer getId(){
   
        return id;

    }
    public String getName(){
   
        return name;
    }

    public Double getPrice(){
   
        return price;
    }

}

2.Drink 类,Eat 类 继承 Food基类

public class Eat extends Food {
   
    public Float quality;

    public Float getQuality(){
   
        return quality;
    }
        @Override
                public String toString(){
   
            return "Eat{"+
                    "quality=" +quality+
                    ", id="+ id +
                    ", name='"+name +'\''+
                    ", price="+price+
        '}'  ;


}}
3.单种食物,单种饮料分别继承Eat 及 Drink
如:①食物单品
public class ChipsItem extends Eat {
   
    public ChipsItem() {
   
        this.id=1006;
        this.name="波纹霸王薯条";
        this.price=12.0;
        this.quality=50f;

    }
}

 ②饮料单品
public class BeerItem extends Drink {
   
    public BeerItem(){
   
        this.id = 1004;
        this.name = "百威啤酒";
        this.price= 15.0;
        this.capacity= 120f;
    }
}

4.简单工厂,通过反射机制加载食物类实例(单点)

import kfc.order.item.Food;

/**
 *
 * 简单工厂,反射加载食物类实例(单点食物)
 */

public class SimFoodFactory {
   
    public Food getFood(Class c){
   
        try{
   
            return (Food) Class.forName(c.getName()).newInstance();
        }catch (InstantiationException | IllegalAccessException| ClassNotFoundException e){
   
            e.printStackTrace();
        }
        return null;
    }


}

5.套餐组合通过CombFactory 接口的实现来加载

mport kfc.order.item.Food;

import java.util.List;

/**
 * 抽象工厂,加载KFC组合套餐
 */
public interface CombFactory {
   
    List<Food> getCombo();
}



具体一号套餐
import kfc.order.item.BeerItem;
import kfc.order.item.ChickenItem;
import kfc.order.item.Food;

import java.util.ArrayList;
import java.util.List;

/**
 * 啤酒炸鸡 (1)号套餐
 */
public class ComboOneFactory implements CombFactory{
   
@Override
public List<Food> getCombo(){
   
        List<Food> foodOneList= new ArrayList<Food>();//存储套餐产品
        Food chick=new ChickenItem();//实例化套餐内的产品
        Food beer =new BeerItem();
        chick.price=chick.price-2;//套餐的优惠,炸鸡价格减2元
        beer.price=beer.price-1;//套餐的优惠,啤酒价格减1元
        foodOneList.add(chick);
        foodOneList.add(beer);
        return foodOneList;//返回套餐集合

        }
}

6.FoodControler 类 通过函数处理具体点餐事务

import kfc.order.item.*;
import kfc.order.service.ComboOneFactory;
import kfc.order.service.ComboSecondFactory;
import kfc.order.service.ComboThirdFactory;
import kfc.order.service.SimFoodFactory;

import java.util.ArrayList;
import java.util.List;
import java.util.Scanner;


public class FoodControler {
   
     static SimFoodFactory simFoodFactory = new SimFoodFactory();//简单工厂实例化
     static List<Food> foodList = new ArrayList<>();

    public  void service(){
   
        Scanner sc = new Scanner(System.in);

        String choose = sc.nextLine();
        switch (choose){
   
            case "7":
                foodList = new ComboOneFactory().getCombo();//抽象工厂产生套餐1
                break;
            case "8":
                foodList = new ComboSecondFactory().getCombo();//抽象工厂产生套餐2
                break;
            case "9":
                foodList = new ComboThirdFactory().getCombo();//抽象工厂产生套餐3
                break;
            case"1":
            //香辣炸鸡
               Food food_1= simFoodFactory.getFood(ChickenItem.class);//反射加载单品食物
                foodList.add(food_1);
                break;
            case"2":
                //香辣鸡腿堡
               Food food_2 = simFoodFactory.getFood(HamburgerItem.class);
                foodList.add(food_2);
                break;
            case"3":
                //薯条
               Food food_3 = simFoodFactory.getFood(ChipsItem.class);
                foodList.add(food_3);
                break;
            case"4":
                //美式
                Food food_4 = simFoodFactory
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值