KFC订餐系统

题目描述:

请参考肯德基官网的信息模拟肯德基快餐店的收银系统,合理使用Java,结合设计模式(2种以上)至少实现系统的以下功能:

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

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

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

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

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

采用抽象工厂模式;

静态建模如下:

代码模块:

1.抽象食物的建立

1.1食物的抽象类:

package com.demo.factory.model;

import java.util.Scanner;
	
	/**
	 * 食物基类
	 */
	public abstract class AbstractBaseFood {

	    //类别
	    protected String kind;
	    //数量
	    protected int num;
	    //价格
	    protected float price;

	    //合计
	    public float totalPrice(){
	        return this.num * this.price;
	    }
}

1.2.食物接口:


	package com.demo.factory.model;

	/**
	 * 抽象食物接口
	 */
	public interface IFood {

	    /**
	     * 打印输出食物信息
	     */
	    void printMessage();

}

2.不同抽象食物的基类:

2.1:鸡翅基类-ChickenWings

package com.demo.factory.model;

/**
 * 鸡翅基类
 */
public abstract class ChickenWings extends AbstractBaseFood implements IFood{

    public void printMessage(){
        System.out.println("--"+this.kind+"风味鸡翅,\t单价:"+this.price+
                ",\t数量:"+this.num+",\t合计:"+this.totalPrice());
    }

}

2.2:薯条基类-FrenchFries

package com.demo.factory.model;

/**
 * 薯条基类
 */
public abstract class FrenchFries extends AbstractBaseFood implements IFood{

    public void printMessage(){
        System.out.println("--"+this.kind+"风味薯条,\t单价:"+this.price+
                ",\t数量:"+this.num+",\t合计:"+this.totalPrice());
    }

}

2.3:汉堡基类-Hamburg

package com.demo.factory.model;

/**
 *  汉堡基类
 */
public abstract class Hamburg extends AbstractBaseFood implements IFood{

    public void printMessage(){
        System.out.println("--"+this.kind+"风味汉堡,\t单价:"+this.price+
                ",\t数量:"+this.num+",\t合计:"+this.totalPrice());
    }

}

2.4:饮品基类-Juice

package com.demo.factory.model;

/**
 * 饮料基类
 */
public abstract class Juice extends AbstractBaseFood implements IFood{

    public void printMessage(){
        System.out.println("--"+this.kind+"拿铁,\t单价:"+this.price+
                ",\t数量:"+this.num+",\t合计:"+this.totalPrice());
    }

}

3.创建具体的食物:

3.1.具体的汉堡食物

package com.demo.factory.model.kfc;

import com.demo.factory.model.Hamburg;

/**
 * 柚香风味的麻辣鸡腿汉堡
 */
public class ChinaHamburg extends Hamburg{

    /**
     * 构造方法
     * @param num
     */
    public ChinaHamburg(int num) {
        this.kind = "柚香";
        this.price = 14.0f;
        this.num = num;
    }
}

3.2 具体的薯条食物

package com.demo.factory.model.kfc;

import com.demo.factory.model.FrenchFries;

/**
 * 薯条实现类
 */
public class ChinaFrenchFries extends FrenchFries{

    public ChinaFrenchFries(int num) {
        this.kind = "不好吃";
        this.price = 8.0f;
        this.num = num;
    }
}

3.3具体的鸡翅食物

package com.demo.factory.model.kfc;

import com.demo.factory.model.ChickenWings;

/**
 * 鸡翅实现类
 */
public class ChinaChickenWings extends ChickenWings{

    /**
     * 构造方法
     */
    public ChinaChickenWings(int num) {
        this.kind = "麻辣";
        this.price = 2.5f;
        this.num = num;
    }
}

3.4具体的饮品食物

package com.demo.factory.model.kfc;

import com.demo.factory.model.Juice;
/**
 * 饮料实现类
 */
public class ChinaJuice extends Juice{

    public ChinaJuice(int num) {
        this.kind = "香草风味";
        this.price = 7.0f;
        this.num = num;
    }
    
}

4.1.建立抽象的肯德基工厂:

package com.demo.factory.itf;

import com.demo.factory.model.Juice;
import com.demo.factory.model.ChickenWings;
import com.demo.factory.model.FrenchFries;
import com.demo.factory.model.Hamburg;

/**
 * 肯德基抽象工厂
 */
public interface IKfcFactory {

    //生产汉堡
    public Hamburg createHamburg(int num);

    //生产薯条
    public FrenchFries createFrenchFries(int num);

    //生产鸡翅
    public ChickenWings createChickenWings(int num);

    //生产饮料
    public Juice createJuice(int num);

}

4.2.建立具体的肯德基工厂:

package com.demo.factory.itf;

import com.demo.factory.model.Juice;
import com.demo.factory.model.ChickenWings;
import com.demo.factory.model.FrenchFries;
import com.demo.factory.model.Hamburg;
import com.demo.factory.model.kfc.ChinaJuice;
import com.demo.factory.model.kfc.ChinaChickenWings;
import com.demo.factory.model.kfc.ChinaFrenchFries;
import com.demo.factory.model.kfc.ChinaHamburg;

/**
 * 具体工厂
 */
public class ChinaKfcFactory implements IKfcFactory{

    //生产汉堡
    public Hamburg createHamburg(int num) {
        return new ChinaHamburg(num);
    }

    //生产薯条
    public FrenchFries createFrenchFries(int num) {
        return new ChinaFrenchFries(num);
    }

    //生产鸡翅
    public ChickenWings createChickenWings(int num) {
        return new ChinaChickenWings(num);
    }

    //生产饮料
    public Juice createJuice(int num) {
        return new ChinaJuice(num);
    }
    
}

5.1建立客户类:

package com.demo.factory.custom;

import com.demo.factory.itf.IKfcFactory;
import com.demo.factory.model.Juice;
import com.demo.factory.model.ChickenWings;
import com.demo.factory.model.FrenchFries;
import com.demo.factory.model.Hamburg;

public class Customer {

    //抽象工厂
    private IKfcFactory kfcFactory;

    //构造方法将抽象工厂作为参数传入
    public Customer(IKfcFactory kfcFactory){
        this.kfcFactory = kfcFactory;
    }

    /**
     * 订购食物
     */
    //订购汉堡
    public float orderHamburg(int num){
        //获得汉堡
        Hamburg hamburg = kfcFactory.createHamburg(num);
        //输出订购信息
        hamburg.printMessage();
        //返回总价
        return hamburg.totalPrice();
    }

    //订购鸡翅
    public float orderChickenWings(int num){
        //获得烤鸡翅
        ChickenWings chickenWings = kfcFactory.createChickenWings(num);
        //输出订购信息
        chickenWings.printMessage();
        //返回总价
        return chickenWings.totalPrice();
    }

    //订购薯条
    public float orderFrenchFries(int num){
        //获得薯条
        FrenchFries frenchFries = kfcFactory.createFrenchFries(num);
        //输出订购信息
        frenchFries.printMessage();
        //返回总价
        return frenchFries.totalPrice();
    }

    //订购饮品
    public float orderJuice(int num){
        //获得饮品
        Juice juice = kfcFactory.createJuice(num);
    //输出订购信息
        juice.printMessage();
        //返回总价
        return juice.totalPrice();
    }
     

}

5.2 客户点餐:

package com.demo.factory.custom;

import java.text.ParseException;
import java.text.SimpleDateFormat;
import java.util.Date;
import java.util.Scanner;

import com.demo.factory.custom.Customer;
import com.demo.factory.itf.ChinaKfcFactory;
import com.demo.factory.itf.IKfcFactory;


public class MainApp {

    public static void main(String[] args) throws Exception {
    	int diancan=1;
    	double sum=0;
    	double sumt=0;
    	int edu=0;
    	int huodong=3;
    	int num=-1;//用户输入0返回菜单
    	 boolean isExit=false;  //标志用户是否退出系统;true 为退出系统
    	 
    //获取当前时间并与开业时间进行比较确定是否可以参加活动	 
    	 Date date1=new Date();    
     	Date date2=new Date();    
     	Date date3=new Date();    
     	SimpleDateFormat f = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");        
     	date1=f.parse(f.format(new Date())); //这是获取当前时间  
     	date2=f.parse("2018-10-25 1:59:59"); 
     	date3=f.parse("2019-10-27 1:59:59");
     	if(date1.getTime()>date2.getTime()&date1.getTime()<date3.getTime()){//数据比较      
     		    huodong=3;  
     		}
     	else{     
     		huodong=0;
     		}
     	
        /**
         * 定义一个肯德基(IKfcFactory类型)
         */
        IKfcFactory kfcFactory = new ChinaKfcFactory();

        /**
         * 创建客户
         */
        Customer customer = new Customer(kfcFactory);

        /**
         * 客户开始点餐
         */
        Scanner sc=new Scanner(System.in);
        
        
        System.out.println("\t欢迎使用*有点low*点餐系统”");
        do{
            System.out.println("**************************************");
            System.out.println("\t1、单品点餐\t");
            System.out.println("\t2、套餐点餐");
            System.out.println("\t3、查看单品菜单");
            System.out.println("\t4、查看套餐");
            System.out.println("\t5、了解店铺活动");
            System.out.println("\t6、我没啥事,就想点进来看看\t");
            System.out.println("**************************************");
            System.out.println("请选择:");
            int choose = sc.nextInt();
            switch(choose){
            case 1:
            	System.out.println("**************"+"\n"+"1.柚香风味汉堡\n"+"2.麻辣风味鸡翅\n"+"3.不好吃特色薯条\n"+"4.香草味拿铁\n"+"**************");
            	while(diancan==1){
        	String shijian=new Date().toLocaleString();
           	
        	System.out.println("是否继续点餐(y/n)");	
        	String dianbudian=sc.next();
        	if(dianbudian.equals("n")){
        		System.out.println("您的点餐时间为"+shijian);
        		System.out.println("您的总消费为"+sum);
        		System.out.println("请输入付款金额");
        		int fukuan=sc.nextInt();
        		System.out.println("请输入是否有优惠券(1/0)");       		
        		int youhuiquan=sc.nextInt();
        		if(youhuiquan==1){
        			System.out.println("请输入优惠券额度");
        		 edu=sc.nextInt();
        		} 		    
        		double zhaoling=fukuan+edu-sum+huodong;
        		if(huodong==3){
        			System.out.println(" 您的付款额为"+fukuan+"\n 优惠券额度为"+edu+"\n目前您可参与店内满5减3的活动"+ " \n 共收取您"+(sum-edu-huodong)+" \n 您的找零为"+zhaoling);	
        		}
        		else{
        			System.out.println(" 您的付款额为"+fukuan+"\n 优惠券额度为"+edu+"\n目前暂无店内活动参与"+ " \n 共收取您"+(sum-edu-huodong)+" \n 您的找零为"+zhaoling);	
        		}
        		
        		break;
        	}
        	System.out.println("请输入所选食物编号");
        	int chisha=sc.nextInt();
        	System.out.println("数量");
        	int jifen1=sc.nextInt();
        	 if(chisha==1){
        	float sum1 = customer.orderHamburg(jifen1);
        	sum +=sum1;
        //	continue;
        }	
        	 else if(chisha==2){
        		 float sum2 = customer.orderChickenWings(jifen1);
        		 sum +=sum2;
        //		 continue;
        	 }
        	 else if(chisha==3){
        		 float sum3 = customer.orderFrenchFries(jifen1);
        		 sum +=sum3;
        //		 continue;
        	 }
        	 else if(chisha==4){
        		 float sum4 = customer.orderJuice(jifen1);
        		 sum +=sum4;
        //		 continue;
        	 }
        System.out.println("总花费"+sum);
        
			// diancan=0;
       // 	 System.out.println("总计:"+(hamburgMoney+chickenWingsMoney+frenchFriesMoney+beverageMoney));
        }	
        		break;
            case 2:
            	System.out.println("1.套餐1:愤怒的汉堡午餐套餐");
            	System.out.println("\t**柚香汉堡 *1**\n\t**拿铁 *2**\n\t**鸡翅 *3**\n");
            	System.out.println("2.套餐2:柚香鸡腿堡午餐套餐");
            	System.out.println("\t**柚香鸡腿汉堡 *2\n\t**香草风味拿铁1杯 *2**\n\t**不好吃的薯条 *1**\n");
            	System.out.println("3.套餐3:随便什么午餐套餐");
            	System.out.println("\t**反正有肉的汉堡 *2**\n\t**能喝的饮料 *2**\n\t**不知道好吃不好吃的薯条 *2**\n");
            	while(diancan==1){
        	String shijian=new Date().toLocaleString();
        	System.out.println("是否继续点餐(y/n)");	
        	String dianbudian=sc.next();
        	if(dianbudian.equals("n")){
        		System.out.println("您的点餐时间为"+shijian);
        		System.out.println("您的总消费为"+sum);
        		System.out.println("请输入付款金额");
        		int fukuan=sc.nextInt();
        		System.out.println("请输入是否有优惠券(1/0)");       		
        		int youhuiquan=sc.nextInt();
        		if(youhuiquan==1){
        			System.out.println("请输入优惠券额度");
        		 edu=sc.nextInt();
        		} 		    
        		double zhaoling=fukuan+edu-sum+huodong;
        		if(huodong==3){
        			System.out.println(" 您的付款额为"+fukuan+"\n 优惠券额度为"+edu+"\n目前您可参与店内满5减3的活动"+ " \n 共收取您"+(sum-edu-huodong)+" \n 您的找零为"+zhaoling);	
        		}
        		else{
        			System.out.println(" 您的付款额为"+fukuan+"\n 优惠券额度为"+edu+"\n目前暂无店内活动参与"+ " \n 共收取您"+(sum-edu-huodong)+" \n 您的找零为"+zhaoling);	
        		}
        		
        		break;
        	}
        	System.out.println("请输入所选食物编号");
        	int chisha=sc.nextInt();
        	System.out.println("数量");
        	int jifen1=sc.nextInt();
        	 if(chisha==1){
        	float sum1 = customer.orderHamburg(jifen1);
        	float sum2 = customer.orderJuice(jifen1);
        	 float sum3 = customer.orderChickenWings(jifen1);
        	sum +=(sum1+sum2+sum3);
        	sumt +=sum;      
        }	
        	 else if(chisha==2){
        		 float sum3 = customer.orderFrenchFries(jifen1);
        		 float sum1 = customer.orderHamburg(jifen1);
        		 float sum4 = customer.orderJuice(jifen1);
        		 sum +=(sum3+sum4+sum1);
        		 sumt +=sum;
        	 }
        	 else if(chisha==3){
        		 float sum3 = customer.orderFrenchFries(jifen1);
        		 float sum2 = customer.orderFrenchFries(jifen1);
        		 float sum1 = customer.orderHamburg(jifen1);
        		 sum +=(sum1+sum2+sum3);
        		 sumt +=sum;
        	 }
         System.out.println("总花费"+sumt);			
        }	
        		break;
            	
        case 3:    
        	System.out.println("**************"+"\n"+"1.柚香风味汉堡\n"+"2.麻辣风味鸡翅\n"+"3.不好吃特色薯条\n"+"4.香草味拿铁\n"+"**************");
        	break;
        case 4:
        	System.out.println("1.套餐1:愤怒的汉堡午餐套餐");
        	System.out.println("\t**柚香汉堡 *1**\n\t**拿铁 *2**\n\t**鸡翅 *3**\n");
        	System.out.println("2.套餐2:柚香鸡腿堡午餐套餐");
        	System.out.println("\t**柚香鸡腿汉堡 *2\n\t**香草风味拿铁1杯 *2**\n\t**不好吃的薯条 *1**\n");
        	System.out.println("3.套餐3:随便什么午餐套餐");
        	System.out.println("\t**反正有肉的汉堡 *2**\n\t**好吃的鸡翅 *2**\n\t**不知道好吃不好吃的薯条 *2**\n");
        	break;
        case 5:System.out.println("亲,本店正值开业一天庆,为答谢广大顾客的支持,"
        		+ "\n本店决定凡在2018-10-27至2019-10-27内在本店消费的顾客"
        		+ "\n可享受满5元减3元的活动!!!!!!!");
        	break;
        case 6:
        	System.out.println("亲看这系统怎么样?");
        	break;
        default:
            isExit=true;
            break;
    }                	
            if(!isExit){
                System.out.println("输入0返回");
                num=sc.nextInt();
            }          
}while(num==0);
    }  
}

6.结果展示:

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值