同学们应该都去麦当劳或肯德基吃过快餐吧?请同学们参考肯德基官网的信息模拟肯德基快餐店的收银系统,合理使用C++/python/Java,结合设计模式(2种以上)至少实现系统的以下功能:
1.正常餐品结算和找零。
2.基本套餐结算和找零。
3.使用优惠劵购买餐品结算和找零。
4.可在一定时间段参与店内活动(自行设计或参考官网信息)。
5.模拟打印小票的功能(写到文件中)。
类图:
运行代码:
import java.io.File;
import java.io.FileOutputStream;
import java.io.PrintStream;
import java.text.SimpleDateFormat;
import java.util.Date;
import java.util.Scanner;
public class test1 {
public static void main(String[] args) {
// TODO Auto-generated method stub
System.out.println("您好,欢迎光临!\n");
//获取当前系统时间
SimpleDateFormat df=new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
//调用优惠日
String strday=df.format(new Date());
System.out.println("请选择1.单点 2.生成套餐:");
Scanner scanner=new Scanner(System.in);
int num=scanner.nextInt();
//选择生成套餐
if (num==2) {
//director dir=new director();
System.out.println("正在为您生成套餐,请稍等...\n");
//延时1.5秒
try {
Thread.currentThread().sleep(1500);
} catch (Exception e) {
// TODO: handle exception
}
Director director1=new Director();
System.out.println("本店提供的套餐如下:");
FoodPackage taocanFactory1 = director1.getfoodfactory1();
System.out.println("套餐一:");
System.out.println(taocanFactory1.getkind());
System.out.println("价格:"+taocanFactory1.getPrice());
//生产套餐二
FoodPackage taocanFactory2 = director1.getfoodfactory2();
System.out.println("套餐二:");
System.out.println(taocanFactory2.getkind());
System.out.println("价格:"+taocanFactory2.getPrice());
System.out.println("请您选择套餐:1:套餐一 2:套餐二");
int number = scanner.nextInt();
if( number == 1) {
System.out.println("------------------账单------------------");
interfaceKFCfactory akfcFoctory = new KFCfactory();
//创建顾客对象
customer customer1 = new customer(akfcFoctory);
//顾客点餐
//汉堡
double hamburgCost = customer1.orderhamburg(1,1);
//饮品
double drinkCost=customer1.orderdrink(1, 1);
//甜品
double dessertCost=customer1.orderdessert(2,1);
//配餐
double food_matchingCost=customer1.orderFood_matching(1, 1);
System.out.println(taocanFactory1.getkind());
System.out.println("价格:"+taocanFactory1.getPrice()+"\t 数量:"+taocanFactory1.getnumber());
System.out.println("累计消费:"+(hamburgCost+drinkCost+dessertCost+food_matchingCost+taocanFactory1.getPrice())+"元");
System.out.println("----------------------------------------");
System.out.println("用户支付金额:");
int money = scanner.nextInt();
System.out.println("找零钱"+(money-(hamburgCost+drinkCost+dessertCost+food_matchingCost+taocanFactory1.getPrice()))+"元");
try {
//写文件
File file=new File("e://3.txt");
if (file.exists()==false) {
file.getParentFile().mkdirs();
}
// 创建基于文件的输出流
PrintStream ps = new PrintStream(new FileOutputStream(file));
// 把数据写入到输出流
ps.println(" 账单 ");
ps.print(" 餐品:"+taocanFactory1.getkind());
ps.println(" 累计消费:"+taocanFactory1.getPrice()+"元");
ps.println();
ps.println(" 用户支付金额:"+money+"元");
ps.println(" 找零钱:"+(money-(hamburgCost+drinkCost+dessertCost+food_matchingCost+taocanFactory1.getPrice()))+"元");
ps.println();
ps.println(" 祝您用餐愉快,欢迎下次光临!");
ps.println("-----------------------");
ps.println();
// 关闭输出流
ps.close();
} catch (Exception e) {
// TODO: handle exception
e.printStackTrace();
}
}
else {
System.out.println("------------------账单------------------");
interfaceKFCfactory akfcFoctory = new KFCfactory();
//创建顾客对象
customer customer1 = new customer(akfcFoctory);
//顾客点餐
//汉堡
double hamburgCost = customer1.orderhamburg(2,1);
//饮品
double drinkCost=customer1.orderdrink(3, 1);
//甜品
double dessertCost=customer1.orderdessert(3,1);
//配餐
double food_matchingCost=customer1.orderFood_matching(2, 1);
System.out.println(taocanFactory2.getkind());
System.out.println("价格:"+taocanFactory2.getPrice()+"\t 数量:"+taocanFactory2.getnumber());
System.out.println("累计消费:"+(hamburgCost+drinkCost+dessertCost+food_matchingCost+taocanFactory2.getPrice())+"元");
System.out.println("----------------------------------------");
System.out.println("用户支付金额:");
int money = scanner.nextInt();
System.out.println("找零钱"+(money-(hamburgCost+drinkCost+dessertCost+food_matchingCost+taocanFactory2.getPrice()))+"元");
try {
//写文件
File file=new File("e://3.txt");
if (file.exists()==false) {
file.getParentFile().mkdirs();
}
// 创建基于文件的输出流
PrintStream ps = new PrintStream(new FileOutputStream(file));
// 把数据写入到输出流
ps.println(" 账单 ");
ps.print(" 餐品:"+taocanFactory2.getkind());
ps.println(" 累计消费:"+taocanFactory2.getPrice()+"元");
ps.println();
ps.println(" 用户支付金额:"+money+"元");
ps.println(" 找零钱:"+(money-(hamburgCost+drinkCost+dessertCost+food_matchingCost+taocanFactory2.getPrice()))+"元");
ps.println();
ps.println(" 祝您用餐愉快,欢迎下次光临!");
ps.println("-----------------------");
ps.println();
// 关闭输出流
ps.close();
} catch (Exception e) {
// TODO: handle exception
e.printStackTrace();
}
}
}
else {
//生成
choose choose1=new choose();
}
}
}
//定义餐品基类
abstract class abstractFood{
//定义餐品价格
protected double price;
//定义餐品数量
protected int number;
//定义餐品种类
protected String kind;
//计算消费金额
public double Price() {
return this.price*this.number;
}
}
//定义餐品接口
interface interfaceFood{
//打印消费信息
public void printConsumptionMassage();
}
//定义各餐品基类
//定义汉堡基类
abstract class hamburg extends abstractFood implements interfaceFood{
public void printConsumptionMassage() {
System.out.println(this.kind+"汉堡:\n"+"单价:"+this.price+"\n"+"数量:"+this.number+"\n");
}
}
//定义配餐基类
abstract class Food_matching extends abstractFood implements interfaceFood{
public void printConsumptionMassage() {
System.out.println(this.kind+"配餐:\n"+"单价:"+this.price+"\n"+"数量:"+this.number+"\n");
}
}
//定义饮品基类
abstract class drink extends abstractFood implements interfaceFood{
public void printConsumptionMassage() {
System.out.println(this.kind+"饮品:\n"+"单价:"+this.price+"\n"+"数量:"+this.number+"\n");
}
}
//定义甜品基类
abstract class dessert extends abstractFood implements interfaceFood{
public void printConsumptionMassage() {
System.out.println(this.kind+"甜品:\n"+"单价:"+this.price+"\n"+"数量:"+this.number+"\n");
}
}
//定义具体餐品类
//汉堡类
//香辣鸡腿堡
class Zinger_burger extends hamburg{
public Zinger_burger(int number) {
this.kind="香辣鸡腿堡";
this.price=29.0;
this.number=number;
}
}
//奥尔良烤堡
class Orlean_roast_Castle extends hamburg{
public Orlean_roast_Castle(int number) {
this.kind="奥尔良烤堡";
this.price=35.0;
this.number=number;
}
}
//劲脆鸡腿堡
class Extra_Tasty_Crispy_Burger extends hamburg{
public Extra_Tasty_Crispy_Burger(int number) {
this.kind="劲脆鸡腿堡";
this.price=32.0;
this.number=number;
}
}
//饮品类
//百事可乐
class Pepsi_Cola extends drink{
public Pepsi_Cola(int number) {
this.kind="百事可乐";
this.price=12.0;
this.number=number;
}
}
//热柠檬红茶
class Hot_lemon_black_tea extends drink{
public Hot_lemon_black_tea(int number) {
this.kind="热柠檬红茶";
this.price=11.0;
this.number=number;
}
}
//经典咖啡
class Classic_coffee extends drink{
public Classic_coffee(int number) {
this.kind="经典咖啡";
this.price=10.0;
this.number=number;
}
}
//甜品类
//草莓圣代
class Strawberry_sundae extends dessert{
public Strawberry_sundae(int number) {
this.kind="草莓圣代";
this.price=11.0;
this.number=number;
}
}
//葡式蛋挞
class Portuguese_Egg_Tart extends dessert{
public Portuguese_Egg_Tart(int number) {
this.kind="葡式蛋挞(1只)";
this.price=7.0;
this.number=number;
}
}
//红豆派
class Red_bean_pie extends dessert{
public Red_bean_pie(int number) {
this.kind="红豆派";
this.price=6.0;
this.number=number;
}
}
//配餐类
//劲爆鸡米花
class Popcorn_Chicken extends Food_matching{
public Popcorn_Chicken(int number) {
this.kind="劲爆鸡米花";
this.price=13.0;
this.number=number;
}
}
//黄金鸡块
class Golden_Chicken_block extends Food_matching{
public Golden_Chicken_block(int number) {
this.kind="黄金鸡块";
this.price=18.0;
this.number=number;
}
}
//奥尔良烤翅
class Orlean_roasted_wings extends Food_matching{
public Orlean_roasted_wings(int number) {
this.kind="奥尔良烤翅";
this.price=11.0;
this.number=number;
}
}
//抽象工厂基类
interface interfaceKFCfactory{
//生产汉堡
public Zinger_burger createZinger_burgee(int number);
public Orlean_roast_Castle createOrlean_roast_Castle(int number);
public Extra_Tasty_Crispy_Burger createExtra_Tasty_Crispy_Burger(int number);
//生产饮品
public Pepsi_Cola createPepsi_Cola(int number);
public Hot_lemon_black_tea createHot_lemon_black_tea(int number);
public Classic_coffee createClassic_coffee(int number);
//生产甜品
public Strawberry_sundae createStrawberry_sundae(int number);
public Portuguese_Egg_Tart createPortuguese_Egg_Tart(int number);
public Red_bean_pie createRed_bean_pie(int number);
//生产配餐
public Popcorn_Chicken createPopcorn_Chicken(int number);
public Golden_Chicken_block createGolden_Chicken_block(int number);
public Orlean_roasted_wings createOrlean_roasted_wings(int number);
}
//生产工厂
class KFCfactory implements interfaceKFCfactory{
//生产汉堡
public Zinger_burger createZinger_burgee(int number){
return new Zinger_burger(number);
}
public Orlean_roast_Castle createOrlean_roast_Castle(int number) {
return new Orlean_roast_Castle(number);
}
public Extra_Tasty_Crispy_Burger createExtra_Tasty_Crispy_Burger(int number) {
return new Extra_Tasty_Crispy_Burger(number);
}
//生产饮品
public Pepsi_Cola createPepsi_Cola(int number) {
return new Pepsi_Cola(number);
}
public Hot_lemon_black_tea createHot_lemon_black_tea(int number) {
return new Hot_lemon_black_tea(number);
}
public Classic_coffee createClassic_coffee(int number) {
return new Classic_coffee(number);
}
//生产甜品
public Strawberry_sundae createStrawberry_sundae(int number) {
return new Strawberry_sundae(number);
}
public Portuguese_Egg_Tart createPortuguese_Egg_Tart(int number) {
return new Portuguese_Egg_Tart(number);
}
public Red_bean_pie createRed_bean_pie(int number) {
return new Red_bean_pie(number);
}
//生产配餐
public Popcorn_Chicken createPopcorn_Chicken(int number) {
return new Popcorn_Chicken(number);
}
public Golden_Chicken_block createGolden_Chicken_block(int number) {
return new Golden_Chicken_block(number);
}
public Orlean_roasted_wings createOrlean_roasted_wings(int number) {
return new Orlean_roasted_wings(number);
}
}
//顾客类
class customer {
//定义抽象工厂变量
private interfaceKFCfactory kfcfactory;
//定义顾客类构造函数
public customer(interfaceKFCfactory kfCfactory) {
//一个顾客对应一个抽象工厂
this.kfcfactory=kfCfactory;
}
//选购餐品
//购买汉堡
public double orderhamburg(int hamburgkind,int number) {
hamburg hamburge1;
//获得汉堡种类
switch (hamburgkind) {
case 1:hamburge1=kfcfactory.createZinger_burgee(number);
break;
case 2:hamburge1=kfcfactory.createOrlean_roast_Castle(number);
break;
default:hamburge1=kfcfactory.createExtra_Tasty_Crispy_Burger(number);
break;
}
//打印购买信息
hamburge1.printConsumptionMassage();
//返回消费情况
return hamburge1.Price();
}
//购买饮品
public double orderdrink(int dringkkind,int number) {
drink drink1;
//获得饮品种类
switch (dringkkind) {
case 1:drink1=kfcfactory.createPepsi_Cola(number);
break;
case 2:drink1=kfcfactory.createHot_lemon_black_tea(number);
break;
default:drink1=kfcfactory.createClassic_coffee(number);
break;
}
//打印购买信息
drink1.printConsumptionMassage();
//返回消费信息
return drink1.Price();
}
//购买甜品
public double orderdessert(int dessertkind,int number) {
dessert dessert1;
//获得饮品种类
switch (dessertkind) {
case 1:dessert1=kfcfactory.createStrawberry_sundae(number);
break;
case 2:dessert1=kfcfactory.createPortuguese_Egg_Tart(number);
break;
default:dessert1=kfcfactory.createRed_bean_pie(number);
break;
}
//打印购买信息
dessert1.printConsumptionMassage();
//返回消费信息
return dessert1.Price();
}
//购买配餐
public double orderFood_matching(int Food_matchingkind,int number) {
Food_matching food_matching;
//获得配餐种类
switch (Food_matchingkind) {
case 1:food_matching=kfcfactory.createPopcorn_Chicken(number);
break;
case 2:food_matching=kfcfactory.createGolden_Chicken_block(number);
break;
default:food_matching=kfcfactory.createOrlean_roasted_wings(number);
break;
}
//打印购买信息
food_matching.printConsumptionMassage();
//返回消费信息
return food_matching.Price();
}
}
//工厂模式
//套餐
class FoodPackage{
//定义餐品数量
protected int number;
//定义餐品价格
protected double price;
//定义餐品种类
protected String kind;
//获得数量
public int getnumber() {
return number;
}
//获得价格
public double getPrice(){
return price;
}
//获得种类
public String getkind() {
return kind;
}
//制定数量
public void setnumber(int number) {
this.number=number;
}
//制定价格
public void setprice(double price) {
this.price=price;
}
//制定种类
public void setkind(String kind) {
this.kind=kind;
}
//打印信息
public void printfood() {
System.out.println(kind+"\n单价"+price+"\n数量"+number);
}
}
//套餐基类
abstract class kfcbuilder {
//定义套餐对象
protected final FoodPackage foodPackage = new FoodPackage();
//制定套餐种类
public void setkind(String kind) {
this.foodPackage.setkind(kind);
}
//制定套餐数量
public void setnumber(int number) {
this.foodPackage.setnumber(number);
}
//制定套餐价格
public void setprice(double price) {
this.foodPackage.setprice(price);
}
//制定套餐
public abstract FoodPackage setFoodpackage();
}
//随机生成套餐
//public class randomFoodpackage extends kfcbuilder{
// //存储生成的餐品的名称
// String name;
// //存储生成的餐品的价格
// double price;
// //生成餐品
// public FoodPackage setFoodpackage() {
// //生成随机数
// Random random=new Random();
// //选择汉堡类
// switch(random.nextInt(3)) {
// case 0:{
// name="香辣鸡腿堡";
// price=29.0;
// }
// break;
// case 1:{
// name="奥尔良烤堡";
// price=35.0;
// }
// break;
// default:{
// name="劲脆鸡腿堡";
// price=32.0;
// }
// }
// //选择饮品类
// switch (random.nextInt(3)) {
// case 0:{
// name=name+"、"+"百事可乐";
// price+=12.0;
// }
// break;
// case 1:{
// name=name+"、"+"热柠檬红茶";
// price+=11.0;
// }
// break;
// default:{
// name=name+"、"+"经典咖啡";
// price+=10.0;
// }
// break;
// }
// //选择甜品类
// switch (random.nextInt(3)) {
// case 0:{
// name=name+"、"+"草莓圣代";
// price+=11.0;
// }
// break;
// case 1:{
// name=name+"、"+"葡式蛋挞";
// price+=7.0;
// }
// break;
// default:{
// name=name+"、"+"红豆派";
// price+=6.0;
// }
// break;
// }
// //选择配餐类
// switch (random.nextInt(3)) {
// case 0:{
// name=name+"、"+"劲爆鸡米花";
// price+=13.0;
// }
// break;
// case 1:{
// name=name+"、"+"黄金鸡块";
// price+=18.0;
// }
// break;
// default:{
// name=name+"、"+"奥尔良烤翅";
// price+=11.0;
// }
// break;
// }
// //重载
// super.foodPackage.setkind(name);
// super.foodPackage.setnumber(1);
// super.foodPackage.setprice(price);
// return super.foodPackage;
// }
//}
//生成套餐
//套餐一
class Set_meal1 extends kfcbuilder{
//生成餐品
@Override
public FoodPackage setFoodpackage() {
//重载
super.foodPackage.setkind("香辣鸡腿堡、百事可乐、葡式蛋挞、劲爆鸡米花");
super.foodPackage.setnumber(1);
super.foodPackage.setprice(61.0);
return super.foodPackage;
}
}
//套餐二
class Set_meal2 extends kfcbuilder{
//生成餐品
@Override
public FoodPackage setFoodpackage() {
//重载
super.foodPackage.setkind("奥尔良烤堡、经典咖啡、红豆派、黄金鸡块");
super.foodPackage.setnumber(1);
super.foodPackage.setprice(69.0);
return super.foodPackage;
}
}
//生产套餐
class Director{
//生成随机套餐
//private static kfcbuilder randompackage=
//生成套餐1
private kfcbuilder set_meal1=new Set_meal1();
//生产套餐1
public FoodPackage getfoodfactory1() {
return set_meal1.setFoodpackage();
}
//生成套餐2
private kfcbuilder set_meal2=new Set_meal2();
//生产套餐2
public FoodPackage getfoodfactory2() {
return set_meal2.setFoodpackage();
}
}
//点餐
class choose {
interfaceKFCfactory akfcFoctory = new KFCfactory();
//创建顾客对象
customer customer1 = new customer(akfcFoctory);
//顾客点餐
//汉堡
double[] hamburgCost=new double[3];
//饮品
double[] drinkCost=new double[3] ;
//甜品
double[] dessertCost=new double[3];
//配餐
double[] food_matchingCost=new double[3];
//消费
double sum;
//餐品名称
String string="";
public choose() {
// TODO Auto-generated constructor stub
menu1();
fun();
}
private void menu1() {
System.out.println(" 汉堡 ");
System.out.println(" 1.香辣鸡腿堡 ");
System.out.println(" 2.奥尔良烤堡 ");
System.out.println(" 3.劲脆鸡腿堡 ");
System.out.println(" 饮品 ");
System.out.println(" 4.百事可乐 ");
System.out.println(" 5.热柠檬红茶 ");
System.out.println(" 6.经典咖啡 ");
System.out.println(" 甜品 ");
System.out.println(" 7.草莓圣代 ");
System.out.println(" 8.葡式蛋挞 ");
System.out.println(" 9.红豆派 ");
System.out.println(" 配餐 ");
System.out.println(" 10.劲爆鸡米花 ");
System.out.println(" 11.黄金鸡块 ");
System.out.println(" 12.奥尔良烤翅 ");
System.out.println(" 13.点餐完成 ");
}
//点餐
public void fun() {
System.out.println("请点餐:");
Scanner scanner=new Scanner(System.in);
int kind=scanner.nextInt();
switch (kind) {
case 1:{
System.out.println("请输入数量:");
int num=scanner.nextInt();
hamburgCost[0]=customer1.orderhamburg(1, num);
string+="香辣鸡腿堡 ";
sum+=29.0;
fun();
}
break;
case 2:{
System.out.println("请输入数量:");
int num=scanner.nextInt();
hamburgCost[1]=customer1.orderhamburg(2, num);
string+="奥尔良烤堡 ";
sum+=35.0;
fun();
}
break;
case 3:{
System.out.println("请输入数量:");
int num=scanner.nextInt();
hamburgCost[2]=customer1.orderhamburg(3, num);
string+="劲脆鸡腿堡 ";
sum+=32.0;
fun();
}
break;
case 4:{
System.out.println("请输入数量:");
int num=scanner.nextInt();
drinkCost[0]=customer1.orderdessert(1, num);
string+="百事可乐 ";
sum+=12.0;
fun();
}
break;
case 5:{
System.out.println("请输入数量:");
int num=scanner.nextInt();
drinkCost[1]=customer1.orderdessert(2, num);
string+="热柠檬红茶 ";
sum+=11.0;
fun();
}
break;
case 6:{
System.out.println("请输入数量:");
int num=scanner.nextInt();
drinkCost[2]=customer1.orderdessert(3, num);
string+="经典咖啡 ";
sum+=10.0;
fun();
}
break;
case 7:{
System.out.println("请输入数量:");
int num=scanner.nextInt();
dessertCost[0]=customer1.orderdessert(1, num);
string+="草莓圣代 ";
sum+=11.0;
fun();
}
break;
case 8:{
System.out.println("请输入数量:");
int num=scanner.nextInt();
dessertCost[1]=customer1.orderdessert(2, num);
string+="葡式蛋挞 ";
sum+=7.0;
fun();
}
break;
case 9:{
System.out.println("请输入数量:");
int num=scanner.nextInt();
dessertCost[2]=customer1.orderdessert(3, num);
string+="红豆派 ";
sum+=6.0;
fun();
}
break;
case 10:{
System.out.println("请输入数量:");
int num=scanner.nextInt();
food_matchingCost[0]=customer1.orderFood_matching(1, num);
string+="劲爆鸡米花 ";
sum+=13.0;
fun();
}
break;
case 11:{
System.out.println("请输入数量:");
int num=scanner.nextInt();
food_matchingCost[1]=customer1.orderFood_matching(2, num);
string+="黄金鸡块 ";
sum+=18.0;
fun();
}
break;
case 12:{
System.out.println("请输入数量:");
int num=scanner.nextInt();
food_matchingCost[2]=customer1.orderFood_matching(3, num);
string+="奥尔良烤翅 ";
sum+=11.0;
fun();
}
break;
default:break;
}
System.out.println("累计消费:"+sum+"元");
System.out.println("----------------------------------------");
System.out.println("用户支付金额:");
int money = scanner.nextInt();
System.out.println("找零钱"+(money-sum)+"元");
try {
//写文件
File file=new File("e://3.txt");
if (file.exists()==false) {
file.getParentFile().mkdirs();
}
// 创建基于文件的输出流
PrintStream ps = new PrintStream(new FileOutputStream(file));
// 把数据写入到输出流
ps.println(" 账单 ");
ps.println(" 餐品:"+string);
ps.println(" 累计消费:"+sum+"元");
ps.println();
ps.println(" 用户支付金额:"+money+"元");
ps.println(" 找零钱:"+(money-sum)+"元");
ps.println();
ps.println(" 祝您用餐愉快,欢迎下次光临!");
ps.println("-----------------------");
ps.println();
// 关闭输出流
ps.close();
} catch (Exception e) {
// TODO: handle exception
e.printStackTrace();
}
}
}