工厂方法模式完成简单KFC点餐

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

public interface Food {
    public int Price = 0;
    public int print();
    public int getPrice();
}

具体食物类:
汉堡:

public class Hanburger implements Food{
    public int Prise=20;
    public int Num;
    public void setNum(int num){
        this.Num=num;
    }
    public int getPrice(){
        return Prise;
    }
    public int print(){
        System.out.println("汉堡总计:"+this.Prise*this.Num);
        return this.Prise*this.Num;
    }
}

薯条:

public class FrenchFires implements Food{
    public int Prise=15;
    public int Num;
    public void setNum(int num){
        this.Num=num;
    }
    public int getPrice(){
        return Prise;
    }
    public int print(){
        System.out.println("薯条总计:"+this.Prise*this.Num);
        return this.Num*this.Prise;
    }
}

炸鸡:

public class Chicken implements Food{
    public int Prise=40;
    public int Num;
    public void setNum(int num){
        this.Num=num;
    }
    public int getPrice(){
        return Prise;
    }
    public int print(){
        System.out.println("炸鸡总计:"+this.Num*this.Prise);
        return this.Num*this.Prise;
    }
}

可乐:

public class Cola implements Food{
    public int Prise=5;
    public int Num;
    public void setNum(int num){
        this.Num=num;
    }
    public int getPrice(){
        return Prise;
    }
    public int print(){
        System.out.println("可乐总计:"+this.Num*this.Prise);
        return this.Num*this.Prise;
    }
}

咖啡:

public class Coffee implements Food{
    public int Prise=10;
    public int Num;
    public void setNum(int num){
        this.Num=num;
    }
    public int getPrice(){
        return Prise;
    }
    public int print(){
        System.out.println("可乐总计:"+this.Num*this.Prise);
        return this.Num*this.Prise;
    }
}

抽象工厂:

public interface Factory {
    public Food Create();
}

具体工厂:
汉堡工厂:

public class HamburgerFactory implements Factory{
    public Food Create(){
        Hanburger hanburger=new Hanburger();
        return hanburger;
    }
}

薯条工厂:

public class FrenchFiresFactory implements Factory{
    public Food Create(){
        return new FrenchFires();
    }
}

炸鸡工厂:

public class ChickenFactory implements Factory{
    public Food Create(){
        return new Chicken();
    }
}

可乐工厂:

public class ColaFactory implements Factory{
    public Food Create(){
        return new Cola();
    }
}

咖啡工厂:

public interface Factory {
    public Food Create();
}

顾客测试类:

import java.io.FileOutputStream;
import java.io.FileWriter;
import java.text.SimpleDateFormat;
import java.util.ArrayList;
import java.util.Date;
import java.util.Scanner;
import java.lang.Exception;

/**
 *
 * 简单KFC点餐系统实现
 *
 */

public class Custom {
    int beforemoney,discount,aftermoney;                         //beforemoney:实付价钱   discount:折扣   aftermoney:折扣后应付价钱

    Scanner sc=new Scanner(System.in);                           //输入

    Date d=new Date();
    SimpleDateFormat day=new SimpleDateFormat();                 //时间函数

    ArrayList<String> menu=new ArrayList<>();                    //单点菜单
    ArrayList<String> taocan=new ArrayList<>();                  //套餐菜单
    ArrayList<Integer> arrayList=new ArrayList<>();              //计算顾客点餐数量

    Food hanburger=new HamburgerFactory().Create();
    Food frenchFires=new FrenchFiresFactory().Create();
    Food chicken=new ChickenFactory().Create();
    Food cola=new ColaFactory().Create();
    Food coffee=new CoffeeFactory().Create();


    public int Discount(int sum){                          //优惠券折扣
        System.out.println("请选择您的优惠券折扣!(1~10)");
        discount=sc.nextInt();
        System.out.println("您本次应付价钱为:"+discount*sum/10);
        System.out.println("您实付价钱为:");
        beforemoney=sc.nextInt();
        System.out.println("给您找零:"+(beforemoney-discount*sum/10));
        aftermoney=discount*sum/10;
        return discount*sum;
    }
    public void Taocan(){                                  //套餐列表
        System.out.println("请选择您的套餐:  1套餐一!2套餐二!3套餐三!");

        arrayList.add(0);
        arrayList.add(0);
        arrayList.add(0);
        arrayList.add(0);
        arrayList.add(0);

        int c2=sc.nextInt();
        switch (c2){
            case 1: {
                Discount(hanburger.getPrice()*1+frenchFires.getPrice()*1+cola.getPrice()*1);
                arrayList.set(0,1);
                arrayList.set(1,1);
                arrayList.set(2,0);
                arrayList.set(3,1);
                arrayList.set(4,0);
                System.out.println("谢谢光临!");break;
            }
            case 2:{
                Discount(chicken.getPrice()*1+cola.getPrice()*1);
                arrayList.set(0,0);
                arrayList.set(1,0);
                arrayList.set(2,1);
                arrayList.set(3,1);
                arrayList.set(4,0);
                System.out.println("谢谢光临!");break;
            }
            case 3:{
                Discount(hanburger.getPrice()*1+frenchFires.getPrice()*1+coffee.getPrice()*1);
                arrayList.set(0,1);
                arrayList.set(1,0);
                arrayList.set(2,0);
                arrayList.set(3,0);
                arrayList.set(4,1);
                System.out.println("谢谢光临!");break;}
        }
    }
    public void Single(){                                  //单点
        for (String n:menu) {
            System.out.println(n);
        }

        arrayList.add(0);
        arrayList.add(0);
        arrayList.add(0);
        arrayList.add(0);
        arrayList.add(0);

        System.out.println("请选择您的食物!");
        System.out.println("1汉堡!2薯条!3炸鸡!4可乐!5咖啡!(退出点餐请输入0)");
        int c4=sc.nextInt();
        for(int i=0;i<5;i++) {
            if (c4 == 1) {
                System.out.println("请选择您想要的汉堡数量(不需要请选0个)!");
                arrayList.set(0,sc.nextInt());
                System.out.println("请输入您想要的食物编号!(退出请按0)");
                c4=sc.nextInt();
                continue;
            }

            if (c4 == 2) {
                System.out.println("请选择您想要的薯条数量不需要请选0个)!");
                arrayList.set(1,sc.nextInt());
                System.out.println("请输入您想要的食物编号!(退出请按0)");
                c4=sc.nextInt();
                continue;
            }

            if (c4 == 3) {
                System.out.println("请选择您想要的炸鸡数量不需要请选0个)!");
                arrayList.set(2,sc.nextInt());
                System.out.println("请输入您想要的食物编号!(退出请按0)");
                c4=sc.nextInt();
                continue;
            }

            if (c4 == 4) {
                System.out.println("请选择您想要的可乐数量不需要请选0个)!");
                arrayList.set(3,sc.nextInt());
                System.out.println("请输入您想要的食物编号!(退出请按0)");
                c4=sc.nextInt();
                continue;
            }

            if (c4 == 5) {
                System.out.println("请选择您想要的咖啡数量不需要请选0个)!");
                arrayList.set(4,sc.nextInt());
                System.out.println("请输入您想要的食物编号!(退出请按0)");
                c4=sc.nextInt();
                continue;
            }
            if (c4 == 0) {
                break;
            }
        }
           int c5 = hanburger.getPrice() * arrayList.get(0);
           int c6 = frenchFires.getPrice() * arrayList.get(1);
           int c7 = chicken.getPrice() * arrayList.get(2);
           int c8 = cola.getPrice() * arrayList.get(3);
           int c9 = coffee.getPrice() * arrayList.get(4);
           Discount(c5 + c6 + c7 + c8 + c9);
    }
    public void Menu(){                                    //菜单列表

        menu.add("汉堡                       单价:20");
        menu.add("薯条                       单价:15");
        menu.add("炸鸡                       单价:40");
        menu.add("可乐                       单价:5");
        menu.add("咖啡                       单价:10");

        taocan.add("套餐一!(汉堡+薯条+可乐       总计:40");
        taocan.add("套餐二!(炸鸡+可乐)          总计:45");
        taocan.add("套餐三!(汉堡+薯条+咖啡)      总计:45");
    }
    public void Select(){                                  //顾客选择
        Menu();
        System.out.println("欢迎光临!");
        System.out.println("我们菜单有:");
        for (String n:menu) {
            System.out.println(n);
        }

        System.out.println("我们的套餐有:");
        for(String n:taocan){
            System.out.println(n);
        }
        System.out.println("请开始您的点单!");
        System.out.println("1套餐!2单点!");
        int c1=sc.nextInt();
        if(c1==1){Taocan();}
        if(c1==2){ Single();}
        try {
            Printing();
        } catch (Exception e) {
            e.printStackTrace();
        }
    }

    public void Printing()throws Exception{
        int a1=arrayList.get(0)*20;
        int a2=arrayList.get(1)*15;
        int a3=arrayList.get(2)*40;
        int a4=arrayList.get(3)*5;
        int a5=arrayList.get(4)*10;
        int a6=a1+a2+a3+a4+a5;
        FileWriter fw=new FileWriter("小票.txt");
        fw.write("欢迎光临肯德基:"+"\r\n");
        fw.write("------------------------------"+"\r\n");
        fw.write("当前订单产生时间为:"+day.format(d)+"\r\n");
        fw.write("您共点汉堡:"+arrayList.get(0)+"个"+"\t"+"应付"+(a1)+"元"+"\r\n");
        fw.write("您共点薯条:"+arrayList.get(1)+"个"+"\t"+"应付"+(a2)+"元"+"\r\n");
        fw.write("您共点炸鸡:"+arrayList.get(2)+"个"+"\t"+"应付"+(a3)+"元"+"\r\n");
        fw.write("您共点可乐:"+arrayList.get(3)+"瓶"+"\t"+"应付"+(a4)+"元"+"\r\n");
        fw.write("您共点咖啡:"+arrayList.get(4)+"瓶"+"\t"+"应付"+(a5)+"元"+"\r\n");
        fw.write("您拥有:"+discount+"折优惠券"+"\r\n");
        fw.write("折扣后应付价钱:"+aftermoney+"\r\n");
        fw.write("实付价钱:"+beforemoney+"\r\n");
        fw.write("找零:"+(beforemoney-aftermoney)+"\r\n");
        fw.write("------------------------------"+"\r\n");
        fw.write("谢谢惠顾!期待您的再次光临!"+"\r\n");
        fw.close();
    }
    public static void main(String[] args) {
        Custom custom=new Custom();
        custom.Select();
    }
}

以上。

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值