KFC点餐系统

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

package KFC;

/*
 * 食物接口
 */
public interface Food {
	//打印食物信息
	void printMessage();
}

(2)抽象食物类

package KFC;

/*
 * 抽象的食物类
 */
public abstract class StractBaseFood {
	//种类
	public String kind;
	//数量
	public int num;
	//价格
	public float price;
	//总价格方法
	public float totalprice(){
		return this.num*this.price;
	}
}

(3)汉堡基类

package KFC;

/*
 * 汉堡基类
 */
public abstract class Hamburg extends StractBaseFood implements Food{
	//打印食物信息
	public void printMessage() {
		System.out.println(this.kind+"\t单价:"+this.price+"\t数量:"+this.num+"\t合计"+this.totalprice());
	}

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

(4)具体的汉堡食物类

package KFC;

/*
 * 具体的汉堡食物
 */
public class KfcHamburg extends Hamburg{
	//构造方法
	public KfcHamburg(int num) {
		//香辣鸡腿堡
		this.kind = "香辣鸡腿堡";
	    this.price = 16.0f;
	    this.num = num;
	}
}

(5)薯条基类

package KFC;

/*
 * 薯条基类
 */
public abstract class FrenchFries extends StractBaseFood implements Food{
	//打印食物信息
    public void printMessage() {
		System.out.println(this.kind+"\t单价:"+this.price+"\t数量:"+this.num+"\t合计"+this.totalprice());
	}

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

(6)具体的薯条食物类

package KFC;

/*
 * 具体的薯条食物
 */
public class KfcFrenchFries extends FrenchFries{
	//构造方法
	public KfcFrenchFries(int num) {
		//薯条
		this.kind = "薯条";
	    this.price = 9.0f;
	    this.num = num;
	}
}

(7)冰激凌基类

package KFC;
/*
 * 冰激凌基类
 */
public abstract class Icecream extends StractBaseFood implements Food{
	//打印食物信息
		public void printMessage() {
			System.out.println(this.kind+"\t单价:"+this.price+"\t数量:"+this.num+"\t合计"+this.totalprice());
		}

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

(8)具体的冰激凌食物类

package KFC;

/*
 * 具体的冰激凌
 */
public class KfcIcecream extends Icecream {
	//构造方法
	public KfcIcecream(int num) {
			//薯条
			this.kind = "冰激凌";
		    this.price = 6.0f;
		    this.num = num;
		}
}

(9)饮品基类

package KFC;

/*
 * 饮品基类
 */
public abstract class Juice extends StractBaseFood implements Food{
	//打印食物信息
	public void printMessage() {
		System.out.println(this.kind+"\t单价:"+this.price+"\t数量:"+this.num+"\t合计"+this.totalprice());
	}

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

(10)具体的饮品类

package KFC;

/*
 * 具体的饮品
 */
public class KfcJuice extends Juice {
	//构造方法
	public KfcJuice(int num) {
	      this.kind = "可乐";
	      this.price = 7.0f;
	      this.num = num;
	}
}

(11)客户对应的抽象工厂

package KFC;

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 orderFrenchFries(int num){
	//获得薯条
	FrenchFries frenchFries = kfcFactory.createFrenchFries(num);
	//输出订购信息
	frenchFries.printMessage();
	//返回总价
	return frenchFries.totalPrice();
	}
	//订购冰激凌
	public float orderIcecream(int num){
	//获得冰激凌
    Icecream icecream = kfcFactory.createIcecream(num);
	//输出订购信息
    icecream.printMessage();
	//返回总价
	return icecream.totalPrice();
	}
	//订购饮品
	public float orderJuice(int num){
	//获得饮品
	Juice juice = kfcFactory.createJuice(num);
	//输出订购信息
	juice.printMessage();
	//返回总价
	return juice.totalPrice();
	}
	}

(12)针对客户的点餐类

package KFC;
import java.util.Date;
import java.util.Scanner;
import java.text.SimpleDateFormat;
import java.text.ParseException; 
public class CustomerOrder {
    public static void main(String[] args) throws ParseException{
    	int diancan=1;
    	double sum=0;
    	double sumt=0;
    	int edu=0;
    	int huodong=3;
    	int num=-1;//用户输入0返回菜单
    	 
    //获取当前时间并与开业时间进行比较确定是否可以参加活动	 
    	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("2019-05-11 1:59:59"); 
     	date3=f.parse("2020-05-11 1:59:59");
     	if(date1.getTime()>date2.getTime()&date1.getTime()<date3.getTime()){//数据比较      
     		    huodong=3;  
     		}
     	else{     
     		huodong=0;
     		}
     	
        /**
         * 定义一个肯德基(IKfcFactory类型)
         */
        IKfcFactory kfcFactory = new IKfcFactory();
 
        /**
         * 创建客户
         */
        Customer customer = new Customer(kfcFactory);
 
        /**
         * 客户开始点餐
         */
        @SuppressWarnings("resource")
		Scanner sc=new Scanner(System.in);
        
        
        System.out.println("\t欢迎使用KFC点餐系统");
        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("**************************************");
            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){
        	@SuppressWarnings("deprecation")
			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 choice=sc.nextInt();
        	System.out.println("数量");
        	int jifen1=sc.nextInt();
        	 if(choice==1){
        	float sum1 = customer.orderHamburg(jifen1);
        	sum +=sum1;
        }	
        	 else if(choice==2){
        		 float sum2 = customer.orderFrenchFries(jifen1);
        		 sum +=sum2;
        	 }
        	 else if(choice==3){
        		 float sum3 = customer.orderIcecream(jifen1);
        		 sum +=sum3;
        	 }
        	
        	 else if(choice==4){
        		 float sum4 = customer.orderJuice(jifen1);
        		 sum +=sum4;
        	 }
        System.out.println("总花费"+sum);
        }	
        		break;
            case 2:
            	System.out.println("1.套餐1:");
            	System.out.println("\t**香辣鸡腿堡 *1**\n\t**薯条 *1**\n\t**冰激凌 *1**\n");
            	System.out.println("2.套餐2:");
            	System.out.println("\t**香辣鸡腿堡 *1\n\t**薯条 *1**\n\t**可乐 *1**\n");
            	System.out.println("3.套餐3:");
            	System.out.println("\t**香辣鸡腿堡 *2**\n\t**薯条 *1**\n\t**冰激凌 *1**\n\t**可乐 *1**\n");
            	while(diancan==1){
        	@SuppressWarnings("deprecation")
			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 choice=sc.nextInt();
        	System.out.println("数量");
        	int jifen1=sc.nextInt();
        	 if(choice==1){
        	float sum1 = customer.orderHamburg(jifen1);
        	float sum2 = customer.orderFrenchFries(jifen1);
        	float sum3 = customer.orderIcecream(jifen1);
        	sum +=(sum1+sum2+sum3);
        	sumt +=sum;      
        }	
        	 else if(choice==2){
        		 float sum1 = customer.orderHamburg(jifen1);
        		 float sum2 = customer.orderFrenchFries(jifen1);
        		 float sum4 = customer.orderJuice(jifen1);
        		 sum +=(sum2+sum4+sum1);
        		 sumt +=sum;
        	 }
        	 else if(choice==3){
        		 float sum1 = customer.orderHamburg(jifen1);
        		 float sum2 = customer.orderFrenchFries(jifen1);
        		 float sum3 = customer.orderIcecream(jifen1);
        		 float sum4 = customer.orderJuice(jifen1);
        		 sum +=(sum1*2+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**薯条 *1**\n\t**冰激凌 *1**\n");
        	System.out.println("2.套餐2:");
        	System.out.println("\t**香辣鸡腿堡 *1\n\t**薯条 *1**\n\t**可乐 *1**\n");
        	System.out.println("3.套餐3:");
        	System.out.println("\t**香辣鸡腿堡 *2**\n\t**薯条 *1**\n\t**冰激凌 *1**\n\\t**可乐 *1**\\n");
        	break;
        case 5:System.out.println("亲,本店正值开业周年庆庆,为答谢广大顾客的支持,"
        		+ "\n本店决定凡在2019-05-11至2020-05-11内在本店消费的顾客"
        		+ "\n可享受满5元减3元的活动!!!!!!!");
        	break;
            }        
            }while(num==0);
    }  
}

四、运行结果
<1>菜单显示
在这里插入图片描述
<2>单品点餐显示(同查看单品菜单显示)
在这里插入图片描述
<3>了解店铺活动显示
在这里插入图片描述
<4>套餐点餐显示(同查看套餐显示)
在这里插入图片描述
<5>完整的流程结果
在这里插入图片描述

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 3
    评论
评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值