KFC收银系统(Java)

  • 题目要求:

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

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

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

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

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

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

基本要求:

  1. 程序设计风格良好,控制台界面友好,最多两人一组完成任务。
  2. 实现功能测试代码,确保程序的健壮性。
  3. 画出使用的设计模式图。
  • 模式分析:

    抽象工厂方法模式分析:

肯德基实体店:生产产品的工厂;各种食物:工厂生产的产品;职员:负责点餐;用户:购买食物。

抽象工厂:工厂方法的核心,定义生产各类食物的方法

具体工厂:实现抽象工厂接口的具体工厂,实现每一类食物的具体食品

抽象食物:产品对象共同拥有的接口,创建一个食物接口

食物父类:实现了抽象产品角色所定义的接口,抽象类,定义食物的种类,数量和价格

食物子类:继承食物父类,重写printMessage()方法

具体食物:继承各个食物子类,定义种类,价格和数量

顾客:点餐,将抽象工厂作为职员类的一个实例变量,需要任何食物,只需向工厂请求

工厂方法模式分析:

在抽象工厂模式中,定义了一个抽象接口,之后具体工厂又通过实现抽象工厂的各种接口方法创建实例对象,在抽象工厂模式中使用了工厂方法模式的实现方式。    

  • 类图设计:

  • 调试、运行结果:

调试:

运行结果:

使用会员卡打折:

存储到文件中:

没有会员卡:

存储到文件中:

  • 总结归纳:

在本次作业完成中,更加深入的了解了工厂方法模式和抽象工厂模式的用法,以及对Java语言的编程有了进一步的掌握。

工厂方法使用场景:

①当一个类不知道它所需要的对象的类时
在工厂方法模式中,客户端不需要知道具体产品类的类名,只需要知道所对应的工厂即可;
    ②当一个类希望通过其子类来指定创建对象时
在工厂方法模式中,对于抽象工厂类只需要提供一个创建产品的接口,而由其子类来确定具体要创建的对象,利用面向对象的多态性和里氏代换原则,在程序运行时,子类对象将覆盖父类对象,从而使得系统更容易扩展。
    ③将创建对象的任务委托给多个工厂子类中的某一个,客户端在使用时可以无须关心是哪一个工厂子类创建产品子类,需要时再动态指定,可将具体工厂类的类名存储在配置文件或数据库中。
    抽象工厂模式使用场合:

①当需要创建产品家族,或者需要想让创建的产品集合起来时使用。
②当系列产品不固定,在以后可能会增加整个系列产品时使用。

心得:

这次设计的模拟肯德基点餐系统的代码,通过参考网上的一些相关代码,可以实现正常餐品的结算和找零,基本套餐结算和找零,会员打折购买餐品结算和找零以及模拟打印小票的功能,但提高要求还是实现不了。

对于会员卡储值这部分,使用if语句通过输入打折多少,与总金额相乘,简单的实现了会员卡打折。

在实现汉堡薯条等类中使用switch语句,可选择多种口味,对于一个汉堡类,只需要建立一个实现汉堡类就可实现用户选择不同口味汉堡。

对于可视化界面,当初学VC的时候对MFC没有太掌握,后期将继续熟悉MFC,并自学GUI,继续完善此系统,进行可视化设计。

  • 部分代码如下:

主函数:

package KFC收银系统;

import java.io.BufferedWriter;
import java.io.FileWriter;
import java.io.IOException;
import java.util.Scanner;
import KFC收银系统.KfcFactory;
import KFC收银系统.Customer;
public class MainApp {
	public static void main(String[] args) throws IOException {
		KfcFactory kfcFactory=(KfcFactory)new SpecificFactory();
		Customer customer= new Customer(kfcFactory);	
		 Scanner in =new Scanner(System.in);
		 System.out.print("----------------欢迎光临肯德基--------------\n");
		 System.out.print("---------------本店现有如下产品--------------\n\n");
		 System.out.print("汉堡类-------------------------------------\n");
		 System.out.print("1.香辣鸡腿堡\t单价:19.0.\n2.新奥尔良鸡腿堡\t单价:19.5.\n3.牛肉风味汉堡\t单价:20.0.\n\n");
		 System.out.print("鸡翅类-------------------------------------\n");
		 System.out.print("1.香辣鸡翅\t单价:11.5.\n2.新奥尔良烤鸡翅\t单价:12.5.\n3.热辣香骨鸡翅\t单价:11.5.\n\n");
		 System.out.print("薯条类-------------------------------------\n");
		 System.out.print("1.波纹霸王薯条\t单价:12.0.\n2.原味薯条\t单价:10.0.\n3.番茄味薯条\t单价:11.0.\n\n");
		 System.out.print("饮料类-------------------------------------\n");
		 System.out.print("1.可乐\t\t单价:6.0.\n2.橙汁\t\t单价:6.0.\n3.乌龙茶\t\t单价:10.0.\n\n");
		 System.out.print("套餐类-------------------------------------\n");
		 System.out.print("1.香辣鸡腿堡+番茄味薯条+可乐\t价格:33.0.\n2.新奥尔良鸡腿堡+橙汁\t\t价格:24.0.\n3.牛肉风味汉堡+热辣香骨鸡翅+可乐\t价格:35.0.\n\n");
		 System.out.print("-------------------------------------------");	
		 System.out.print("\n请点餐:\n");
		 System.out.print("请输入汉堡的种类和数量:");
		 int kind=in.nextInt();
		 int num=in.nextInt();
		 System.out.print("请输入鸡翅的种类和数量:");
		 int kind1=in.nextInt();
		 int num1=in.nextInt();
		 System.out.print("请输入薯条的种类和数量:");
		 int kind2=in.nextInt();
		 int num2=in.nextInt();
		 System.out.print("请输入饮料的种类和数量:");
		 int kind3=in.nextInt();
		 int num3=in.nextInt();
		 System.out.print("请输入套餐的种类和数量:");
		 int kind4=in.nextInt();
		 int num4=in.nextInt();
		 System.out.print("\n----------------------账单如下---------------------\n");
		 float hamhurgerMoney = customer.orderHamburger(kind,num);
		 float chickenWingsMoney = customer.orderChickenWing(kind1,num1);
		 float frenchFriesMoney = customer.orderFrenchFries(kind2,num2);
		 float beverageMoney = customer.orderBeverage(kind3,num3);
		 float comboMoney=customer.orderCombo(kind4,num4);
		 float sum=hamhurgerMoney + chickenWingsMoney + frenchFriesMoney + beverageMoney+comboMoney;
		 customer.showbill();
		 System.out.println("总计:" + (sum));
		 System.out.println("请问是否有会员卡?(是---1,否---2)");
		 int x=in.nextInt();
		 if(x==1) {
			 System.out.println("请输入折扣:");
			 float y=in.nextFloat();
			 int sum1;
			 sum1=(int) (sum*y);
			 System.out.println("打折后总计:"+sum1);
			 
			 System.out.print("请输入付款金额:");
			 int a=in.nextInt();
			 System.out.print("找零:"+(a-sum1));
			 BufferedWriter bw=new BufferedWriter(new FileWriter("KFC收银系统.txt",true));
			 bw.write("总计: "+sum);
			 bw.newLine();
			 bw.write("打折后总计:"+sum1);
			 bw.newLine();
			 bw.write("实付款:"+a);
			 bw.newLine();
			 bw.write("找零:"+(a-sum1));
			 bw.newLine();
			 bw.flush();
			 bw.close();
		 }
		 else {
			 System.out.print("请输入付款金额:");
			 int a=in.nextInt();
			 System.out.print("找零:"+(a-sum));
			 BufferedWriter bw=new BufferedWriter(new FileWriter("KFC收银系统.txt",true));
			 bw.write("总计: "+sum);
			 bw.newLine();
			 bw.write("付款:"+a);
			 bw.newLine();
			 bw.write("找零:"+(a-sum));
			 bw.newLine();
			 bw.flush();
			 bw.close();
		 }
	}
	}

实现汉堡类:

package KFC收银系统;

public class SpecificHamburger extends Hamburger{
	public SpecificHamburger(int kind,int num) {
		switch(kind) {
		case 1:this.Kind="香辣鸡腿堡";
		       this.price=19f;
		       break;
		case 2:this.Kind="新奥尔良鸡腿堡";
		       this.price=19.5f;
		       break;
		case 3:this.Kind="牛肉风味";
		       this.price=20f;
		       break;
	}
		this.num=num;
	}
}

代码参考:java实现KFC点餐系统 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值