KFC快餐店的收银系统

程序实现系统的以下功能:

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

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

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

4..模拟打印小票的功能。

设计模式主要采用了抽象工厂模式和建造者模式。

设计抽象基类AbstractFood,供生成食物。

public abstract class AbstractFood {
    
    protected String foodname;
    protected int num;
    protected float price;
    public Float money() {
           return num * price;
       }
}

设计饮料类、汉堡类、薯条类,供顾客选择。

public abstract class Drink extends AbstractFood implements FoodMessage {
    public String getMessage() {
        return (this.foodname + " " + this.num + " " + this.price + " ");
    }
}


public class AppleJuice extends Drink {
    protected double money;
    public  AppleJuice(){
        this.money=6.00f;
    }
    public AppleJuice(int num) {
        this.foodname = "鲜榨苹果汁";
        this.num = num;
        this.price = 6.00f;
    }
    public double getMoney(double money){
        return money;
    }
}
其余两类类似食物类。

食物是工厂的成员,在食物工厂中创建。

//创建具体的KFC工厂,生成具体事物
public class FoodFatory implements Fctory {

    @Override
    public Drink createAppleJuice(int num) {
        // TODO Auto-generated method stub
        return new AppleJuice(num);
    }

    @Override
    public BeefHamburger createBeefHamburger(int num) {
        // TODO Auto-generated method stub
        return new BeefHamburger(num);
    }

    @Override
    public PotatoChips createPotatoChips(int num) {
        // TODO Auto-generated method stub
        return new PotatoChips(num);
    }

}

建造者模式将KfcBuilder设为Director的成员。
public class Director {
        //套餐1的应用
        private static KfcBuilder firstSetmeal = new FirstSetmeal(); 
        
        //套餐2的应用
        private static KfcBuilder secondSetmeal = new SecondSetmeal();
        
        //生产套餐一
        public static Setmeal getFirstSetmeal() {
            return firstSetmeal.getSetmeal();
        }
        
        //生产套餐二
        public static Setmeal getSecondSetmeal() {
            return secondSetmeal.getSetmeal();
        }
    
}

public abstract class KfcBuilder {
    protected final Setmeal kfcpackage = new Setmeal();
    
    //套餐的种类
    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 Setmeal getSetmeal();


}


public class FirstSetmeal extends KfcBuilder {
    public Setmeal getSetmeal() {
        super.kfcpackage.setKind("深海鳕鱼汉堡、香辣鸡翅、薯条、橙汁、原味冰欺凌");
        super.kfcpackage.setNum(1);
        super.kfcpackage.setPrice(99.0);
        return super.kfcpackage;
        
    }

    

}

Discount类实现优惠券的设置

import java.util.Scanner;

public class Discount {
    protected double discount;
    //Scanner in = new Scanner(System.in);
    
    public double getDiscount(){
        System.out.println("活动一:1,活动二 :2,活动三:3");
        Scanner in = new Scanner(System.in);
        int num = in.nextInt();
        switch(num){
        case 1:
            discount=0.9;
            return discount;
        case 2:
            discount=0.8;
            return discount;
        case 3:
            discount=0.75;
            return discount;
        }
        return discount;
    }

}
主函数在顾客类中,主要实现三种方式金额的结算和找零。

import java.util.Scanner;

public class Costom {
    private FoodFatory kfcFactory;
    
    public Costom(FoodFatory kfcFactory) {
        this.kfcFactory = kfcFactory;
    }
    public Costom(){}
    public void getBill(){
        System.out.println("订购套餐1,参与优惠活动2,以上都没有3");
        Scanner bill = new Scanner(System.in);
        int number = bill.nextInt();
        switch(number){
        case 1:
            System.out.println("本店提供的套餐如下:");
            Setmeal firstSetmeal = Director.getFirstSetmeal();
            System.out.println("套餐一:");
            System.out.println(firstSetmeal.getKind());
            System.out.println("价格:"+firstSetmeal.getPrice());
            
            //生产套餐二
            Setmeal secondSetmeal = Director.getSecondSetmeal();
            System.out.println("套餐二:");
            System.out.println(secondSetmeal.getKind());
            System.out.println("价格:"+secondSetmeal.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 number1 = scan.nextInt();
            if( number == 1) {
                System.out.println("------------------账单------------------");
                System.out.println(firstSetmeal.getKind());
                System.out.println("价格:"+firstSetmeal.getPrice()+"\t 数量:"+firstSetmeal.getNum());
                //System.out.println("累计消费:"+(salesclerk.orderAppleJuice(1)+salesclerk.orderBeefHamburger(1))+"元");
                System.out.println("----------------------------------------");
                System.out.println("用户支付金额:");
                int money = scan.nextInt();
                System.out.println("找零钱"+(money-firstSetmeal.getPrice())+"元");
        
            }
            else{
                System.out.println("------------------账单------------------");
                System.out.println(secondSetmeal.getKind());
                System.out.println("价格:"+secondSetmeal.getPrice()+"\t 数量:"+secondSetmeal.getNum());
                System.out.println("累计消费:"+(secondSetmeal.getPrice())+"元");
                System.out.println("----------------------------------------");
                System.out.println("用户支付金额:");
                int money = scan.nextInt();
                System.out.println("找零钱"+(money-(secondSetmeal.getPrice()))+"元");
                
            }
       }
            break;
        case 2:
            System.out.println("请选择是否参与优惠活动:是输入8,否输入0");
            Scanner numer = new Scanner(System.in);
            int s = numer.nextInt();
                if(s==8){
                    
                    System.out.println("------------------账单------------------");
                    Discount dis = new Discount();
                    dis.getDiscount();
                    

                    Fctory factory = new FoodFatory();
                    Salesclerk salesclerk = new Salesclerk(factory);
                    salesclerk.orderPotatoChips(3);
                    salesclerk.orderAppleJuice(2);
                    salesclerk.orderBeefHamburger(1);
                    System.out.println(salesclerk.getMessage());
                    
                    System.out.println("累计消费:"+((salesclerk.orderPotatoChips(3)+salesclerk.orderAppleJuice(2)+salesclerk.orderPotatoChips(3)))*dis.discount+"元");
                    System.out.println("----------------------------------------");
                    System.out.println("用户支付金额:");
                    int money = numer.nextInt();
                    System.out.println("找零钱"+(int)(money-((salesclerk.orderPotatoChips(3)+salesclerk.orderAppleJuice(2)+salesclerk.orderPotatoChips(3)))*dis.discount)+"元");
                    
                
            }
                break;
        case 3:
           System.out.println("------------------账单------------------");
            

            Fctory factory = new FoodFatory();
            Salesclerk salesclerk = new Salesclerk(factory);
            salesclerk.orderPotatoChips(3);
            System.out.println(salesclerk.getMessage());
            
            System.out.println("累计消费:"+(salesclerk.orderPotatoChips(3))+"元");
            System.out.println("----------------------------------------");
            System.out.println("用户支付金额:");
            Scanner in =new Scanner(System.in);
            int money = in.nextInt();
            System.out.println("找零钱"+(money-(salesclerk.orderPotatoChips(3)))+"元");
        }
    }
    public static void main(String[] args) {
        Costom costom = new Costom();
        costom.getBill();
    }
}

 

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值