肯德基收款打印小票功能

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

  1. 分析程序可先将程序分为三大类,一个是顾客类,一个是肯德基店类,一个是食物类。
  2. 再次抽象分析,可将肯德基店看为一个工厂,食物产品看为工厂产生的对象,顾客与产品和肯德基点产生联系。
  3. 创建一个抽象类AbstractFood和一个工厂接口Kfcfactory。
  4. 创建具体工厂MykfcFactory和各类食物接口以及各类详细食品类。
  5. 创建顾客类Customer,来得到顾客点餐信息。
  6. 创建菜单类MyMenu,来实现顾客点餐以及是否领取优惠卷。
  7. 创建File类,来实现打印输出。
    设计模式图:
    在这里插入图片描述

测试案例:
在这里插入图片描述
实现效果:
在这里插入图片描述

文本记录:

在这里插入图片描述
源代码实现:

//抽象食品类
public abstract class AbstractFood {
	protected String kind;//类别
	protected int num; //购买数量
	protected double price;//价格
	abstract void display();//展示基本信息
	public double totalPrice() {
		return num*price;
	}
}

//工厂接口类
public interface KfcFactory {	
	public Hamburg createHamburg(int num);//生产汉堡
	public FrenchFries createFrenchFries(int num);//生产薯条
	public ChickenWings createChickenWings(int num);//生产鸡翅
	public Drink createDrink(int num);//生产饮料
	public TodayDiscount createTodayDiscount(int num);//今日折扣
}
//具体工厂类
public class MykfcFactory  implements KfcFactory{

	@Override
	public Hamburg createHamburg(int num) {
		// TODO Auto-generated method stub
		return new MyHamburg(num);
	}

	@Override
	public FrenchFries createFrenchFries(int num) {
		// TODO Auto-generated method stub
		return new MyFrenchFries(num);
	}

	@Override
	public ChickenWings createChickenWings(int num) {
		// TODO Auto-generated method stub
		return new MyChickenWings(num);
	}

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

	@Override
	public TodayDiscount createTodayDiscount(int num) {
		// TODO Auto-generated method stub
		return new MyTodayDiscount(num);
	}
	

}
//具体食品抽象类,因为其余类似,所以只举例这一种
public abstract class Hamburg extends AbstractFood {
	public void display() {
		System.out.println("--"+this.kind+"汉堡,\t单价:"+this.price
				+",\t数量"+this.num+"\t合计:"+this.totalPrice());
	}
}

//食品具体类
public class MyHamburg extends Hamburg {
	public MyHamburg(int num) {
		this.kind="经典";
		this.price=15;
		this.num=num;
	}

}

//顾客类
public class Customer {
	private KfcFactory kf; 
	public Customer(KfcFactory kf) {
		this.kf=kf;
	}
	
	//订购食物
	public double orderHamburg(int num) {
		kf.createHamburg(num).display();//输出具体信息
		return kf.createHamburg(num).totalPrice();	
	}
	public double orderChickenWings(int num) {
		kf.createChickenWings(num).display();
		return kf.createChickenWings(num).totalPrice();		
	}
	public double orderFrenchFries(int num) {
		kf.createFrenchFries(num).display();
		return kf.createFrenchFries(num).totalPrice();
	}
	public double orderDrink(int num) {
		kf.createDrink(num).display();
		return kf.createDrink(num).totalPrice();
	}
	public double orderTodayDiscount(int num) {
		kf.createTodayDiscount(num).display();
		return kf.createTodayDiscount(num).totalPrice();
	}
}
菜单类
public class MyMenu {
	KfcFactory kf=new MykfcFactory();//创建工厂
	Customer customer=new Customer(kf);//创建客户
	int hn;//汉堡数量
	int cn;//鸡翅数量
	int fn;//薯条数量
	int dn;//饮料数量
	int tn;//特惠数量
	int choice;//选择
	double hamburgMoney,chickenWingMoney,
	frenchFriesMoney,drinkMoney;//各物品价钱
	int discount=0;//优惠劵
	double money;//付款
	double price;//价格
	double charge;//找零
	Scanner in=new Scanner(System.in);
	public void menu() {
		System.out.println("* * * * * 欢迎光临肯德基 * * * * *");
		System.out.println("* 您可以选择:1.单点      2.套餐                   *");
		System.out.print("* 请您选择:");
		switch(choice=in.nextInt()) {
		case 1:
			System.out.println("- - - - - - - - - - - - - - - - - - - - - - - - ");
			System.out.println("1.汉堡类:经典口味:15元");				
			System.out.println("- - - - - - - - - - - - - - - - - - - - - - - - ");
			System.out.println("2.鸡翅类:烧烤口味:6元");
			System.out.println("- - - - - - - - - - - - - - - - - - - - - - - - ");
			System.out.println("3.薯条类:番茄口味:6元");
			System.out.println("- - - - - - - - - - - - - - - - - - - - - - - - ");
			System.out.println("4.饮料类:雪碧:3元");
			System.out.println("- - - - - - - - - - - - - - - - - - - - - - - - ");
			System.out.print("请您选择汉堡数量:");
			hamburgMoney=customer.orderHamburg(hn=in.nextInt());
			System.out.print("请您选择鸡翅数量:");
			chickenWingMoney=customer.orderChickenWings(cn=in.nextInt());
			System.out.print("请您选择薯条数量:");
			frenchFriesMoney=customer.orderFrenchFries(fn=in.nextInt());
			System.out.print("请您选择饮料数量:");
			drinkMoney=customer.orderDrink(dn=in.nextInt());
			price=hamburgMoney+chickenWingMoney+frenchFriesMoney+drinkMoney;
			System.out.println("总计:"+price);
			break;
		case 2:
			System.out.println("- - - - - - - - - - - - - - - - - - - - - - - - ");
			System.out.println("今日特惠:烤堡+2个鸡翅+薯条+雪碧_36元");
			System.out.println("- - - - - - - - - - - - - - - - - - - - - - - - ");
			System.out.print("请选择特惠数量:");
			price=customer.orderTodayDiscount(tn=in.nextInt());
			System.out.println("总计"+price);
			 break;
		default:
			System.out.println("输入错误!");
		}
	}
	public void discount() {
		System.out.println("今日优惠卷:");
		System.out.println("---1、满30减5----2、满50减10---");
		System.out.println("是否领取?(y/n)");
		if("y".equals(in.next())) {
			if(price>30&&price<50) {
				System.out.println("您已领取5元优惠劵");
				price-=5;
				discount=5;
			}else if(price>=50) {
				price-=10;
				discount=10;
				System.out.println("您已领取10元优惠卷");
			}else {
				System.out.println("您的消费金额不能领取优惠卷");
			}
		}
		else {
			System.out.println("感谢你的光顾!");
			System.out.println("您已领取"+discount+"元优惠劵!\n您一共消费;"+price);
		}
		System.out.println("顾客付款:");
		money=in.nextInt();
		charge=money-price;
		System.out.println("实付款:"+price);
		System.out.println("找零:"+charge);
		
	}
}
//打印类:
public class File {
	private MyMenu mm;
	public File(MyMenu mm) {
		this.mm=mm;
	}
	public void print() {
		Scanner in=new Scanner(System.in);
		System.out.print("是否需要打印详细账单(y/n):");
		if("y".equals(in.next())) {
			System.out.println("您的帐单为:");
			switch(mm.choice){
			case 1:
				mm.hamburgMoney=mm.customer.orderHamburg(mm.hn);
				mm.chickenWingMoney = mm.customer.orderChickenWings(mm.cn);
				mm.frenchFriesMoney = mm.customer.orderFrenchFries(mm.fn);
				mm.drinkMoney = mm.customer.orderDrink(mm.dn);
				System.out.println("领取"+mm.discount+"元优惠券");
				System.out.println("总计:"+mm.price);
				System.out.println("顾客付款:"+mm.money);
				System.out.println("实付:"+mm.price);
				System.out.println("找零:"+mm.charge);
				break;
			case 2:
				mm.price =mm.customer.orderTodayDiscount(mm.tn);
				System.out.println("领取"+mm.discount+"元优惠券");
				System.out.println("总计:"+mm.price);
				System.out.println("顾客付款:"+mm.money);
				System.out.println("实付:"+mm.price);
				System.out.println("找零:"+mm.charge);
				break;
				}
			try {
				file();
			}catch(Exception e) {
				e.printStackTrace();
			}
		}
		else {
			System.out.println("欢迎下次光临");
			in.close();
		}
	}

	private void file() throws Exception{
		FileWriter fw=new FileWriter("zhangdan.txt",true);
		BufferedWriter bw = new BufferedWriter(fw);
		try {
			switch(mm.choice) {
			case 1:
				 bw.write("* * * * * * * * *详细账单* * * * * * * *\r\n");
				 bw.write("汉堡      "+"单价:15   数量:"+mm.hn+"合计:"+mm.hamburgMoney+"\r\n");
				 bw.write("鸡翅      "+"单价:6     数量:"+mm.cn+"合计:"+mm.chickenWingMoney+"\r\n");
				 bw.write("薯条      "+"单价:6     数量:"+mm.fn+"合计:"+mm.frenchFriesMoney+"\r\n");
				 bw.write("雪碧      "+"单价:3     数量:"+mm.dn+"合计:"+mm.drinkMoney+"\r\n");
				 bw.write("使用优惠卷:"+mm.discount+"\r\n");
				 bw.write("总计:"+mm.price+"\r\n"); 
				 bw.write("顾客付款:"+mm.money+"\r\n");
				 bw.write("找零:"+mm.charge+"\r\n");
				 bw.flush();
				 bw.close(); 
				 break;
				 case 2:
				 bw.write("* * * * * *  * *详细账单* * * * * * * *\r\n");
				 bw.write("超值套餐1      "+"单价:36     数量:"+mm.tn+"合计:"+mm.price+"\r\n");
				 bw.write("使用优惠卷:"+mm.discount+"\r\n");
				 bw.write("总计:"+mm.price+"\r\n"); 
				 bw.write("顾客付款:"+mm.money+"\r\n");
				 bw.write("找零:"+mm.charge+"\r\n");
				 bw.flush();
				 bw.close(); 
				 break;
			}
		}catch(IOException e) {
			e.printStackTrace();
		}
		System.out.println("打印成功,欢迎下次光临!");
	}
}
//主函数
public class Main {
	public static void main(String[] args) {
		Date date=new Date();
    	DateFormat fullFormat=DateFormat.getDateInstance(DateFormat.FULL);
    	System.out.println("当前日期:"+fullFormat.format(date));
    	MyMenu mm=new MyMenu();
    	File f=new File(mm);
    	mm.menu();
    	mm.discount();
    	f.print();
	}
}

总结:在所学的设计模式中最后使用了工厂模式与抽象工厂模式,因为工厂模式比较适用于生产不同类的产品,就如肯德基店和生产各类食品的关系,而抽象工厂更适合用于套餐结合的形式,因为我只举了一个套餐,可能体会的不太明显。
参考链接:https://blog.csdn.net/weixin_44697475/article/details/90084082?utm_medium=distribute.pc_relevant.none-task-blog-baidujs-3

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值