精华内容
下载资源
问答
  • 请同学们参考肯德基官网的信息模拟肯德基快餐店的收银系统,合理使用C++或Java或Python结合设计模式(2种以上)至少实现系统的以下功能: 1.正常餐品结算和找零。 2.基本套餐结算和找零。 3.使用优惠劵购买餐品结算...

    一. 题目分析及要求

    同学们应该都去麦当劳或肯德基吃过快餐吧?请同学们参考肯德基官网的信息模拟肯德基快餐店的收银系统,合理使用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.getFood(CafeItem.class);
                    foodList.add(food_4);
                    break;
                case"5":
                    //可乐
                   Food food_5 = simFoodFactory.getFood(CokeItem.class);
                    foodList.add(food_5);
                    break;
                case"6":
                    //百威啤酒
                   Food  food_6 = simFoodFactory.getFood(BeerItem.class);
                    foodList.add(food_6);
                    break;
    
    
              default:
                  System.out.println("您所输入的点餐序号不存在");
                  foodList = new ArrayList();
            }
    
    }}
    

    7.MainApp 类处理结算及顾客选择

    其功能实现为其他类实例化对象当做方法参数使用
    

    五. 测试截图

    点餐界面截图

    在这里插入图片描述

    小票截图

    在这里插入图片描述

    六. 个人总结

    Java Swing 可视化还未能掌握,因此此次程序设计只完成了基本要求。在程序编写中,对Java面向对象的思想有了更深的理解,也提升了编程中解决问题的能力。
    在食物的实例化过程中,对建造者设计模式有了进一步的认识。同时对Java的反射机制有了一定的理解。

    附 : 源码

    package kfc.order.item;
    
    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;
        }
    
    }
    
    
    package kfc.order.item;
    
    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+
            '}'  ;
    
    
        }
    }
    
    
    package kfc.order.item;
    
    public class Drink  extends Food{
        public Float capacity;
    
        public Float getCapacity(){
            return capacity;
    
        }
        @Override
        public String toString(){
            return "Drink{"+
                    "capacity=" +capacity+
                    ", id="+ id +
                    ", name='"+name +'\''+
                    ", price="+price+
                    '}';
    
        }
    }
    
    
    package kfc.order.item;
    
    public class HamburgerItem  extends Eat {
        public HamburgerItem(){
            this.id = 1001;
            this.name = "香辣大虾堡";
            this.price = 22.0;
            this.quality = 10f;
        }
    }
    
    
    package kfc.order.item;
    
    public class CokeItem extends Drink {
        public CokeItem(){
            this.id = 1003;
            this.name ="可口可乐";
            this.price = 11.0;
            this.capacity = 200f;
    
        }
    
    }
    
    
    package kfc.order.item;
    
    public class ChipsItem extends Eat {
        public ChipsItem() {
            this.id=1006;
            this.name="波纹霸王薯条";
            this.price=12.0;
            this.quality=50f;
    
        }
    }
    
    
    package kfc.order.item;
    
    public class ChickenItem extends Eat{
        public ChickenItem(){
            this.id = 1002;
            this.name = "香辣鸡翅";
            this.price = 48.0;
            this.quality = 100f;
    
        }
    
    }
    
    
    package kfc.order.item;
    
    public class CafeItem extends Drink {
         public CafeItem(){
             this.id = 1005;
             this.name ="美式咖啡";
             this.price = 17.0;
             this.capacity =100f;
         }
    }
    
    
    package kfc.order.item;
    
    public class BeerItem extends Drink {
        public BeerItem(){
            this.id = 1004;
            this.name = "百威啤酒";
            this.price= 15.0;
            this.capacity= 120f;
        }
    }
    
    
    package kfc.order.service;
    
    import kfc.order.item.Food;
    
    import java.util.List;
    
    /**
     * 抽象工厂,加载KFC组合套餐
     */
    public interface CombFactory {
        List<Food> getCombo();
    }
    
    
    package kfc.order.service;
    
    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;//返回套餐集合
    
            }
    }
    
    
    package kfc.order.service;
    
    import kfc.order.item.CafeItem;
    import kfc.order.item.Food;
    import kfc.order.item.HamburgerItem;
    
    import java.util.ArrayList;
    import java.util.List;
    
    /**
     * 咖啡和汉堡 (2)号套餐
     */
    
    public class ComboSecondFactory implements CombFactory {
        public List<Food> getCombo(){
            List<Food> foodSecondList= new ArrayList<Food>();
            Food ham = new HamburgerItem();
            Food  cafe= new CafeItem();
            ham.price = ham.price-1;//套餐组合的优惠 汉堡减一元
            cafe.price = cafe.price-0.5;//套餐组合的优惠 咖啡减0.5元
            foodSecondList.add(cafe);
            foodSecondList.add(ham);
            return foodSecondList;
    
        }
    }
    
    
    package kfc.order.service;
    
    import kfc.order.item.ChipsItem;
    import kfc.order.item.CokeItem;
    import kfc.order.item.Food;
    
    import java.util.ArrayList;
    import java.util.List;
    
    /**
     * 可乐和薯条 (3)号套餐
     */
    public class ComboThirdFactory implements CombFactory {
        @Override
        public List<Food> getCombo() {
            List<Food> foodThreeList = new ArrayList<Food>();
            Food chips = new ChipsItem();
            Food cola = new CokeItem();
            cola.price = cola.price - 1;//套餐组合的优惠
            chips.price = chips.price - 0.5;
            foodThreeList.add(chips);
            foodThreeList.add(cola);
            return foodThreeList;
        }
    }
    
    
    package kfc.order.service;
    
    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;
        }
    
    
    }
    
    
    package kfc.order.control;
    
    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.getFood(CafeItem.class);
                    foodList.add(food_4);
                    break;
                case"5":
                    //可乐
                   Food food_5 = simFoodFactory.getFood(CokeItem.class);
                    foodList.add(food_5);
                    break;
                case"6":
                    //百威啤酒
                   Food  food_6 = simFoodFactory.getFood(BeerItem.class);
                    foodList.add(food_6);
                    break;
    
    
              default:
                  System.out.println("您所输入的点餐序号不存在");
                  foodList = new ArrayList();
            }
    
    
    
    }}
    
    
    package kfc.order.control;
    
    import kfc.order.item.Food;
    
    import java.io.BufferedWriter;
    import java.io.File;
    import java.io.FileWriter;
    import java.io.IOException;
    import java.util.Date;
    import java.util.List;
    
    
    public class  MoneyAnalyze {
        public   Double getMoneyCount(List<Food> list ){//,Double disCount,Double tickets){
            Double moneyCount = 0.0; //顾客应付钱数
            for (Food food:list){
                moneyCount += food.price;
    
            }//return moneyCount*disCount-tickets;  //计算折扣后应付钱数
            return moneyCount;
        }
    
        /**
         * 找零
         * @param inMoney 收入的钱数
         * @param  count 应收钱数
         */
        public  Double getChange( Double inMoney,Double count){
            return inMoney-count;
        }
        /**
         * 打印小票
         *
         */
        public  void receipt(List<Food>list ,Double disCount,Double tickets) throws IOException{
    
              Date currentTime = new Date();
    
              FileWriter fileWriter= new FileWriter("receipt.txt");
              BufferedWriter bw = new BufferedWriter(fileWriter);
              bw.write("————————————————————欢迎光临  **有点LOW**  KFC————————————————"+"\r\n");
              bw.write("\n\n");
              bw.write("订单时间:"+currentTime+"\r\n\n");
              bw.write("您本次消费清单如下"+"\r\n");
              for (Food food:list){
                  bw.write("ID:"+food.id+"\r\n");
                  bw.write("食物:"+food.name+"\r\n");
                  bw.write("金额:"+food.price+"\r\n");
              }
              bw.write("折扣"+disCount*10 +"折"+"\r\n");
              bw.write("优惠"+tickets+"元"+"\r\n");
              bw.write("总金额"+((getMoneyCount(list)*disCount)-tickets)+ "\u5143");
              bw.flush();
              bw.close();
    
        }
    
    
    }
    
    
    package kfc.order.control;
    
    import java.io.IOException;
    import java.util.Scanner;
    
    public class MainApp {
        public static  Double tickets=0.0 ;
        public static Double disCount=1.0;
        MoneyAnalyze moneyAnalyze = new MoneyAnalyze();
        static FoodControler foodControler = new FoodControler();
    
    
        public void interFace()throws IOException{
            System.out.println("============================================================");
            System.out.println("************************************************************\n");
            System.out.println("--------------------欢迎光临KFC------------------------------");
            System.out.println("**************     1.点餐                                    \n");
            System.out.println("**************     2.领取优惠卷 (请在购买商品之后查看领取哦)   \n");
            System.out.println("**************     3.结算                                    \n");
            System.out.println("*************************************************************\n");
            System.out.println("=============================================================");
            System.out.println("请选择服务类型:");
            chooseServe();
        }
        public void chooseServe() throws IOException {
            Scanner sc = new Scanner(System.in);
            String inter =sc.nextLine();
            while (true){
            if(inter.equals("1")){
                orderMeal();
    
                break;
            }
            else if(inter.equals("2")){
                System.out.println("满50减3.6元");
                System.out.println("满80减5.0元");
                System.out.println("请选择服务类型:");
                chooseServe();
                break;
            }
            else if(inter.equals("3")){
                if(foodControler.foodList!=null){
                settlement();
                break;}
                else {
                    System.out.println("您当前还未点餐,结算系统锁定,请点餐后选择");
                    chooseServe();
                }
            }else {
                System.out.println("服务类型不存在,我们正在完善中,请您重新选择 ");
                chooseServe();
                break;
            }}
        }
        public void orderMeal() throws IOException {
            System.out.println("\n");
            System.out.println("----------------  本店推出以下菜品:--------------------------");
            System.out.println("①  自选单品");
            System.out.println("1. 香辣鸡翅:48元/份             2. 香辣大虾堡:22元/个");
            System.out.println("3. 波纹霸王薯条: 12元/份        4. 美式咖啡:17元/杯  ");
            System.out.println("5. 可口可乐:11元/杯             6. 百威啤酒:15元/杯    " );
            System.out.println("②  人气套餐——有优惠哦");
            System.out.println("7. 套餐一:啤酒+炸鸡:60元/份");
            System.out.println("8. 套餐二:汉堡+咖啡:37.5元/份");
            System.out.println("9. 套餐三:可乐+薯条:21.5元/份");
            System.out.println("--------------------------------------------------------------");
            System.out.println("请选择餐品序号");
    
    //调用FoodControler 函数Server()
    // FoodControler foodControler =new FoodControler();
            while(true){
    
                foodControler.service();
    
                System.out.println("您所点的商品如下 :");
                System.out.println(foodControler.foodList);
                System.out.println("您当前订单金额为:"+moneyAnalyze.getMoneyCount(foodControler.foodList)+"元");
    //            System.out.println(foodControler.foodList.isEmpty());//测试列表空否
                chooseQuit();
                break;
    
    
            }
    
        }
        public void chooseQuit() throws IOException {//点餐界面离开选项
            System.out.println("继续:【Y】  结算:【S】  返回【A】");
            System.out.println("请输入服务类型:");
            Scanner sc = new Scanner(System.in);
            String item =sc.nextLine();
            while (true) {
                if (item.equals("A") || item.equals("a")) {
                    interFace();
                    break;
                } else if (item.equals("Y") || item.equals("y")) {
    
                    System.out.println(foodControler.foodList);
    //                System.out.println("您当前订单金额为:"+moneyAnalyze.getMoneyCount(foodControler.foodList));
    
                    orderMeal();
                    break;
                } else if (item.equals("S") || item.equals("s")) {
                    settlement();
                    break;
    
    
                } else {
                    System.out.println("您所选择的服务不存在,请重新输入:");
                    chooseQuit();
                    break;
                }
            }
        }
        public void getTickets(){
    
            if(moneyAnalyze.getMoneyCount(foodControler.foodList)<50){
                System.out.println("您的订单无法领取优惠券");
            }
            if(moneyAnalyze.getMoneyCount(foodControler.foodList)>50&&moneyAnalyze.getMoneyCount(foodControler.foodList)<80){
                tickets=3.6;
                System.out.println("您的订单可以领取3.6元优惠券");
            }else if(moneyAnalyze.getMoneyCount(foodControler.foodList)>80){
                tickets=5.0;
                System.out.println("您的订单可以领取5元优惠券");
            }
    
        }
    
        /**
         * 通过消费判定折扣
         */
        public void settlement() throws IOException {
    
            System.out.println("您的付款金额:");
            Scanner sc = new Scanner(System.in);
            Double inMoney = sc.nextDouble();
    
            if(moneyAnalyze.getMoneyCount(foodControler.foodList)>50){
                //tickets= 3.6;
                disCount=0.86;
            }else if(moneyAnalyze.getMoneyCount(foodControler.foodList)>80){
                //tickets=5;
                disCount=0.75;
            }
    
            System.out.println("您本次消费如下:");
            getTickets();
            System.out.println("您本次消费:"+moneyAnalyze.getMoneyCount(foodControler.foodList));
    
            System.out.println("优惠:"+tickets+" 元");
            System.out.println("折扣:"+disCount*10+" 折");
            System.out.println("折后消费:"+(moneyAnalyze.getMoneyCount(foodControler.foodList)*disCount));
            System.out.println("收您:"+inMoney+" 元");
    
            System.out.println("找零:"+(moneyAnalyze.getChange(inMoney,moneyAnalyze.getMoneyCount(foodControler.foodList)*disCount-tickets))+" 元");
    
            moneyAnalyze.receipt(foodControler.foodList,disCount,tickets);//调用函数打印小票
    
        }
    
    
    
    }
    
    
    package kfc.order.control;
    import java.io.IOException;
    
    
    
    public class StartKFC  {
    
        public static void main(String[] args) throws IOException {
            MainApp mainApp = new MainApp();
    
            mainApp.interFace();
    
    
    
    
        }
    }
    //工厂模式算法源自CSDN 博客
    
    
    展开全文
  • 这篇文章主要为大家详细介绍了java实现KFC点餐系统,模拟肯德基快餐店的收银系统,具有一定的参考价值,感兴趣的小伙伴们可以参考一下同学们应该都去麦当劳或肯德基吃过快餐吧?请同学们参考肯德基官网的信息模拟...

    这篇文章主要为大家详细介绍了java实现KFC点餐系统,模拟肯德基快餐店的收银系统,具有一定的参考价值,感兴趣的小伙伴们可以参考一下

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

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

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

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

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

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

    类图:

    aa427df14f8df383829fc2ed1773a7d7.png

    建立IFood接口实现各类食物信息的打印:

    抽象类AbstractBaseFood

    各类果汁的基类Baverage:

    建立Baverage的具体实现类ChinaBaverage:

    以此类推分别建立 ChickenWing,FrenchFries,Hamburg抽象类和它们的实现类ChinaChickenWing,FrenchFries,Hamburg

    建立抽象工厂IKfcFactory:

    建立IKfcFactory的实现类ChinaFactory:

    建立Customer类实现食物的选择和文件存储:

    MainApp:

    运行结果展示:

    546ab3524f87308b8a01d09a1b8cd844.png

    文件存储:

    189d91eda28c7151f43fd4f06e4debc0.png

    展开全文
  • 这篇文章主要为大家详细介绍了java实现KFC点餐系统,模拟肯德基快餐店的收银系统,具有一定的参考价值,感兴趣的小伙伴们可以参考一下同学们应该都去麦当劳或肯德基吃过快餐吧?请同学们参考肯德基官网的信息模拟...

    这篇文章主要为大家详细介绍了java实现KFC点餐系统,模拟肯德基快餐店的收银系统,具有一定的参考价值,感兴趣的小伙伴们可以参考一下

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

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

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

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

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

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

    类图:

    31791b4ab739c7f1c5b29409470627f2.png

    建立IFood接口实现各类食物信息的打印:

    public interface IFood {

    /**

    * 打印输出食物信息

    * @return

    */

    String printMesage();

    }

    抽象类AbstractBaseFood

    public class AbstractBaseFood {

    // 类别

    protected String kind;

    // 数量

    protected int num;

    // 价格

    protected float price;

    //找零

    // 合计

    public float totalPrice()

    {

    return this.num * this.price;

    }

    }

    各类果汁的基类Baverage:

    public abstract class Beverage extends AbstractBaseFood implements IFood

    {

    public String printMesage()

    {

    return ("--" + this.kind + "饮料,\t单价:" + this.price + ",\t数量:" + this.num + ",\t合计:" + this.totalPrice());

    }

    }

    建立Baverage的具体实现类ChinaBaverage:

    public class ChinaBeverage extends Beverage

    {

    public ChinaBeverage(int num)

    {

    this.kind = "可乐";

    this.price = 6.0f;

    this.num = num;

    }

    }

    以此类推分别建立 ChickenWing,FrenchFries,Hamburg抽象类和它们的实现类ChinaChickenWing,FrenchFries,Hamburg

    建立抽象工厂IKfcFactory:

    public interface IKfcFactory

    {

    // 生产汉堡

    public ChinaHamburg createHamburg(int num);

    // 生产薯条

    public xtx.FrenchFries createFrenchFries(int num);

    // 生产鸡翅

    public ChinaChickenWings createChickenWings(int num);

    // 生产饮料

    public ChinaBeverage createBeverage(int num);

    }

    建立IKfcFactory的实现类ChinaFactory:

    public class ChinaKfcFactory implements IKfcFactory

    {

    // 生产可乐

    public ChinaBeverage createBeverage(int num)

    {

    return new ChinaBeverage(num);

    }

    // 生产奥尔良烤鸡翅

    public ChinaChickenWings createChickenWings(int num)

    {

    return new ChinaChickenWings(num);

    }

    // 生产薯条

    public ChinaFrenchFries createFrenchFries(int num)

    {

    return new ChinaFrenchFries(num);

    }

    // 生产麻辣风味鸡腿汉堡

    public ChinaHamburg createHamburg(int num)

    {

    return new ChinaHamburg(num);

    }

    }

    建立Customer类实现食物的选择和文件存储:

    package xtx.factory.custom;

    import java.io.BufferedWriter;

    import java.io.FileWriter;

    import java.io.IOException;

    import xtx.ChinaBeverage;

    import xtx.ChinaChickenWings;

    import xtx.ChinaFrenchFries;

    import xtx.IKfcFactory;

    import xtx.ChinaHamburg;

    public class Customer

    {

    // 抽象工厂

    private IKfcFactory kfcFactory;

    // 构造方法将抽象工厂作为参数传入

    public Customer(IKfcFactory kfcFactory2)

    {

    this.kfcFactory = kfcFactory2;

    }

    /**

    * 订购食物

    * @throws IOException

    */

    private String s[] =new String[5];

    public void showbill() throws IOException{

    BufferedWriter bw=new BufferedWriter(new FileWriter("D://workspace2Eclipse//xtx//src//xtx//factory//custom//show.txt",true));

    bw.write("---------------------账单如下---------------------");

    bw.newLine();

    for(int i=0;i<5;i++){

    bw.write(s[i]);

    bw.newLine();

    bw.flush();

    }

    }

    // 订购麻辣鸡腿汉堡

    public float orderHamburg(int num) throws IOException

    {

    // 获得麻辣鸡腿汉堡

    ChinaHamburg hamburg = kfcFactory.createHamburg(num);

    // 输出订购信息

    System.out.print(hamburg.printMesage());

    s[0]=hamburg.printMesage();

    System.out.print("\n");

    // 返回总价

    return hamburg.totalPrice();

    }

    // 订购奥尔良烤鸡翅

    public float orderChickenWings(int num)

    {

    // 获得奥尔良烤鸡翅

    ChinaChickenWings chickenWings = kfcFactory.createChickenWings(num);

    // 输出订购信息

    System.out.print(chickenWings.printMesage());

    s[1]=chickenWings.printMesage();

    System.out.print("\n");

    // 返回总价

    return chickenWings.totalPrice();

    }

    // 订购薯条

    public float orderFrenchFries(int num)

    {

    // 获得薯条

    ChinaFrenchFries frenchFries = (ChinaFrenchFries) ((IKfcFactory) kfcFactory).createFrenchFries(num);

    // 输出订购信息

    System.out.print(frenchFries.printMesage());

    s[2]=frenchFries.printMesage();

    System.out.print("\n");

    // 返回总价

    return frenchFries.totalPrice();

    }

    // 订购可乐

    public float orderBeverage(int num)

    {

    // 获得可乐

    ChinaBeverage beverage = kfcFactory.createBeverage(num);

    // 输出订购信息

    System.out.print(beverage.printMesage());

    s[3]=beverage.printMesage();

    System.out.print("\n");

    return beverage.totalPrice();

    }

    //订购套餐一

    public float ordercombo1(int num)

    {

    // 获得可乐

    ChinaBeverage beverage = kfcFactory.createBeverage(num);

    // 获得麻辣鸡腿汉堡

    ChinaHamburg hamburg = kfcFactory.createHamburg(num);

    s[4]=("--套餐一,\t单价:21,\t数量:"+num+"\t\t合计:"+(beverage.totalPrice()+hamburg.totalPrice())+"\n");

    System.out.print("--套餐一,\t单价:21,\t数量:"+num+"\t\t合计:"+(beverage.totalPrice()+hamburg.totalPrice())+"\n");

    return beverage.totalPrice()+hamburg.totalPrice();

    }

    }

    MainApp:

    package xtx.factory.itf;

    import java.io.BufferedWriter;

    import java.io.FileWriter;

    import java.io.IOException;

    import java.util.Scanner;

    import xtx.IKfcFactory;

    import xtx.factory.custom.Customer;

    public class MainApp

    {

    /**

    * 主应用程序方法

    *

    * @param args

    * @throws IOException

    */

    public static void main(String[] args) throws IOException

    {

    /**

    * 定义一个肯德基(IKfcFactory类型)

    */

    IKfcFactory kfcFactory = (IKfcFactory) new ChinaKfcFactory();

    Customer customer = new Customer(kfcFactory);

    /**

    * 开始点餐

    */

    // 一个麻辣鸡腿汉堡

    Scanner in =new Scanner(System.in);

    //System.out.print("请输入付款金额");

    System.out.print("-----现有如下产品-----\n");

    System.out.print("--麻辣风味汉堡\t单价:15.0.\n--奥尔良风味鸡翅\t单价:3.0\n--普通风味薯条\t单价:8.0\n--可乐饮料\t单价:6.0\n--套餐一(麻辣风味汉堡+可乐饮料)\t单价:21\n");

    System.out.print("\n-----------------------");

    System.out.print("\n请点餐:\n");

    System.out.print("请输入麻辣风味汉堡数量---:");

    int a1=in.nextInt();

    System.out.print("请输入奥尔良风味鸡翅数量-:");

    int a2=in.nextInt();

    System.out.print("普通入风味薯条数量------:");

    int a3=in.nextInt();

    System.out.print("请输入可乐饮料数量------:");

    int a4=in.nextInt();

    System.out.print("请输入套餐份数---------:");

    int a5=in.nextInt();

    System.out.print("\n------账单如下-----\n");

    float hamhurgMoney = customer.orderHamburg(a1);

    // 四个奥尔良烤鸡翅

    float chickenWingsMoney = customer.orderChickenWings(a2);

    // 一包薯条

    float frenchFriesMoney = customer.orderFrenchFries(a3);

    // 两杯可乐

    float beverageMoney = customer.orderBeverage(a4);

    float combo1=customer.ordercombo1(a5);

    //

    float sum=hamhurgMoney + chickenWingsMoney + frenchFriesMoney + beverageMoney+combo1;

    customer.showbill();

    System.out.println("总计:" + (sum));

    System.out.print("请输入付款金额:");

    int a=in.nextInt();

    System.out.print("找零:"+(a-sum));

    customer.showbill();

    BufferedWriter bw=new BufferedWriter(new FileWriter("D://workspace2Eclipse//xtx//src//xtx//factory//custom//show.txt",true));

    bw.write("总计: "+sum);

    bw.newLine();

    bw.write("付款:"+a);

    bw.newLine();

    float y=a-sum;

    bw.write("找零:"+y);

    bw.newLine();

    bw.flush();

    bw.close();

    }

    }

    运行结果展示:

    cf3714ca420636919df9a1b4f3f9b067.png

    文件存储:

    45c143e6b91344976b0179e7c62b4d8a.png

    以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持脚本之家。

    展开全文
  • KFC 点餐 java

    2018-10-28 12:45:25
    请同学们参考肯德基官网的信息模拟肯德基快餐店的收银系统,合理使用C++/python/Java,结合设计模式(2种以上)至少实现系统的以下功能: 1.正常餐品结算和找零。 2.基本套餐结算和找零。 3.使用优惠劵购买餐品...

    同学们应该都去麦当劳或肯德基吃过快餐吧?请同学们参考肯德基官网的信息模拟肯德基快餐店的收银系统,合理使用C++/python/Java,结合设计模式(2种以上)至少实现系统的以下功能:
    1.正常餐品结算和找零。
    2.基本套餐结算和找零。
    3.使用优惠劵购买餐品结算和找零。
    4.可在一定时间段参与店内活动(自行设计或参考官网信息)。
    5.模拟打印小票的功能(写到文件中)。
    用时2周。
    基本要求:
    1.程序设计风格良好,控制台界面友好,最多两人一组完成任务。
    2.实现功能测试代码,确保程序的健壮性。
    3.画出使用的设计模式图。

    抽象工厂模式:是所有形态的工厂模式中最为抽象和最具一般性的一种形态。抽象工厂模式是指当有多个抽象角色时,使用的一种工厂模式。抽象工厂模式可以向客户端提供一个接口,使客户端在不必指定产品的具体的情况下,创建多个产品族中的产品对象。根据里氏替换原则,任何接受父类型的地方,都应当能够接受子类型。因此,实际上系统所需要的,仅仅是类型与这些抽象产品角色相同的一些实例,而不是这些抽象产品的实例。换言之,也就是这些抽象产品的具体子类的实例。工厂类负责创建抽象产品的具体子类的实例。
    在这里插入图片描述

    代码:
    package wnn;

    import java.io.BufferedWriter;
    import java.io.FileWriter;
    import java.io.IOException;

    public class Customer {
    // 抽象工厂
    private IKfcFactory kfcFactory;
    // 构造方法将抽象工厂作为参数传入
    public Customer(IKfcFactory kfcFactory2)
    {
    this.kfcFactory = kfcFactory2;
    }
    /**
    * 订购食物
    * @throws IOException
    */
    private String s[] =new String[5];
    public void showbill() throws IOException{
    BufferedWriter bw=new BufferedWriter(new FileWriter(“E:/workplace//show.txt”,true));
    bw.write("---------------------账单如下---------------------");
    bw.newLine();
    for(int i=0;i<5;i++){
    bw.write(s[i]);
    bw.newLine();
    bw.flush();
    }
    }
    // 订购麻辣鸡腿汉堡
    public float orderHamburg(int num) throws IOException
    {
    // 获得麻辣鸡腿汉堡
    MyHamburg hamburg = kfcFactory.createHamburg(num);
    // 输出订购信息
    System.out.println(hamburg.printMesage());
    //hamburg.printMesage();
    s[0]=hamburg.printMesage();
    System.out.print("\n");
    // 返回总价
    return hamburg.totalPrice();
    }
    // 订购奥尔良烤鸡翅
    public float orderChickenWings(int num)
    {
    // 获得奥尔良烤鸡翅
    MyChickenWings chickenWings = kfcFactory.createChickenWings(num);
    // 输出订购信息
    System.out.print(chickenWings.printMesage());
    //chickenWings.printMesage();
    s[1]=chickenWings.printMesage();
    System.out.print("\n");
    // 返回总价
    return chickenWings.totalPrice();
    }
    // 订购薯条
    public float orderFrenchFries(int num)
    {
    // 获得薯条
    MyFrenchFries frenchFries = (MyFrenchFries) ((IKfcFactory) kfcFactory).createFrenchFries(num);
    // 输出订购信息
    System.out.print(frenchFries.printMesage());
    //frenchFries.printMesage();
    s[2]=frenchFries.printMesage();
    System.out.print("\n");
    // 返回总价
    return frenchFries.totalPrice();
    }
    // 订购可乐
    public float orderBeverage(int num)
    {
    // 获得可乐
    MyBeverage beverage = kfcFactory.createBeverage(num);
    // 输出订购信息
    System.out.print(beverage.printMesage());
    //beverage.printMesage();
    s[3]=beverage.printMesage();
    System.out.print("\n");
    return beverage.totalPrice();
    }
    //订购套餐一
    public float ordercombo1(int num)
    {
    // 获得可乐
    MyBeverage beverage = kfcFactory.createBeverage(num);
    // 获得麻辣鸡腿汉堡
    MyHamburg hamburg = kfcFactory.createHamburg(num);
    s[4]=("–套餐一,\t单价:21,\t数量:"+num+"\t\t合计:"+(beverage.totalPrice()+hamburg.totalPrice())+"\n");
    System.out.print("–套餐一,\t单价:21,\t数量:"+num+"\t\t合计:"+(beverage.totalPrice()+hamburg.totalPrice())+"\n");
    return beverage.totalPrice()+hamburg.totalPrice();
    }
    }

    展开全文
  • Java实现KFC点餐系统

    2020-06-07 23:04:51
    题目:参考肯德基官网的信息模拟肯德基快餐店的收银系统,合理使用C++或Java或Python结合设计模式(2种以上)至少实现系统的以下功能: 1.正常餐品结算和找零。 2.基本套餐结算和找零。 3.使用优惠劵购买餐品结算和...
  • Java实现的在线点餐、基于SSM+mysql的Web餐厅点餐系统实现 前台实现:用户浏览菜单、菜品分类筛选、查看菜单详情、添加购物车、情况购物车、选择餐桌结算等。 后台实现:餐系管理、菜品管理、订单管理、餐桌管理、桌...
  • 请同学们参考肯德基官网的信息模拟肯德基快餐店的收银系统,合理使用C++或Java或Python结合设计模式(2种以上)至少实现系统的以下功能: 1.正常餐品结算和找零。 2.基本套餐结算和找零。 3.使用优惠劵购买餐品...

空空如也

空空如也

1 2 3 4 5
收藏数 98
精华内容 39
关键字:

java点餐结算

java 订阅