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

public interface Food {public int Price = 0;public int print();public int getPrice();
}

具体食物类:
汉堡:

public class Hanburger implements Food{public int Prise=20;public int Num;public void setNum(int num){this.Num=num;}public int getPrice(){return Prise;}public int print(){System.out.println("汉堡总计:"+this.Prise*this.Num);return this.Prise*this.Num;}
}

薯条:

public class FrenchFires implements Food{public int Prise=15;public int Num;public void setNum(int num){this.Num=num;}public int getPrice(){return Prise;}public int print(){System.out.println("薯条总计:"+this.Prise*this.Num);return this.Num*this.Prise;}
}

炸鸡:

public class Chicken implements Food{public int Prise=40;public int Num;public void setNum(int num){this.Num=num;}public int getPrice(){return Prise;}public int print(){System.out.println("炸鸡总计:"+this.Num*this.Prise);return this.Num*this.Prise;}
}

可乐:

public class Cola implements Food{public int Prise=5;public int Num;public void setNum(int num){this.Num=num;}public int getPrice(){return Prise;}public int print(){System.out.println("可乐总计:"+this.Num*this.Prise);return this.Num*this.Prise;}
}

咖啡:

public class Coffee implements Food{public int Prise=10;public int Num;public void setNum(int num){this.Num=num;}public int getPrice(){return Prise;}public int print(){System.out.println("可乐总计:"+this.Num*this.Prise);return this.Num*this.Prise;}
}

抽象工厂:

public interface Factory {public Food Create();
}

具体工厂:
汉堡工厂:

public class HamburgerFactory implements Factory{public Food Create(){Hanburger hanburger=new Hanburger();return hanburger;}
}

薯条工厂:

public class FrenchFiresFactory implements Factory{public Food Create(){return new FrenchFires();}
}

炸鸡工厂:

public class ChickenFactory implements Factory{public Food Create(){return new Chicken();}
}

可乐工厂:

public class ColaFactory implements Factory{public Food Create(){return new Cola();}
}

咖啡工厂:

public interface Factory {public Food Create();
}

顾客测试类:

import java.io.FileOutputStream;
import java.io.FileWriter;
import java.text.SimpleDateFormat;
import java.util.ArrayList;
import java.util.Date;
import java.util.Scanner;
import java.lang.Exception;/**** 简单KFC点餐系统实现**/public class Custom {int beforemoney,discount,aftermoney;                         //beforemoney:实付价钱   discount:折扣   aftermoney:折扣后应付价钱Scanner sc=new Scanner(System.in);                           //输入Date d=new Date();SimpleDateFormat day=new SimpleDateFormat();                 //时间函数ArrayList<String> menu=new ArrayList<>();                    //单点菜单ArrayList<String> taocan=new ArrayList<>();                  //套餐菜单ArrayList<Integer> arrayList=new ArrayList<>();              //计算顾客点餐数量Food hanburger=new HamburgerFactory().Create();Food frenchFires=new FrenchFiresFactory().Create();Food chicken=new ChickenFactory().Create();Food cola=new ColaFactory().Create();Food coffee=new CoffeeFactory().Create();public int Discount(int sum){                          //优惠券折扣System.out.println("请选择您的优惠券折扣!(1~10)");discount=sc.nextInt();System.out.println("您本次应付价钱为:"+discount*sum/10);System.out.println("您实付价钱为:");beforemoney=sc.nextInt();System.out.println("给您找零:"+(beforemoney-discount*sum/10));aftermoney=discount*sum/10;return discount*sum;}public void Taocan(){                                  //套餐列表System.out.println("请选择您的套餐:  1套餐一!2套餐二!3套餐三!");arrayList.add(0);arrayList.add(0);arrayList.add(0);arrayList.add(0);arrayList.add(0);int c2=sc.nextInt();switch (c2){case 1: {Discount(hanburger.getPrice()*1+frenchFires.getPrice()*1+cola.getPrice()*1);arrayList.set(0,1);arrayList.set(1,1);arrayList.set(2,0);arrayList.set(3,1);arrayList.set(4,0);System.out.println("谢谢光临!");break;}case 2:{Discount(chicken.getPrice()*1+cola.getPrice()*1);arrayList.set(0,0);arrayList.set(1,0);arrayList.set(2,1);arrayList.set(3,1);arrayList.set(4,0);System.out.println("谢谢光临!");break;}case 3:{Discount(hanburger.getPrice()*1+frenchFires.getPrice()*1+coffee.getPrice()*1);arrayList.set(0,1);arrayList.set(1,0);arrayList.set(2,0);arrayList.set(3,0);arrayList.set(4,1);System.out.println("谢谢光临!");break;}}}public void Single(){                                  //单点for (String n:menu) {System.out.println(n);}arrayList.add(0);arrayList.add(0);arrayList.add(0);arrayList.add(0);arrayList.add(0);System.out.println("请选择您的食物!");System.out.println("1汉堡!2薯条!3炸鸡!4可乐!5咖啡!(退出点餐请输入0)");int c4=sc.nextInt();for(int i=0;i<5;i++) {if (c4 == 1) {System.out.println("请选择您想要的汉堡数量(不需要请选0个)!");arrayList.set(0,sc.nextInt());System.out.println("请输入您想要的食物编号!(退出请按0)");c4=sc.nextInt();continue;}if (c4 == 2) {System.out.println("请选择您想要的薯条数量不需要请选0个)!");arrayList.set(1,sc.nextInt());System.out.println("请输入您想要的食物编号!(退出请按0)");c4=sc.nextInt();continue;}if (c4 == 3) {System.out.println("请选择您想要的炸鸡数量不需要请选0个)!");arrayList.set(2,sc.nextInt());System.out.println("请输入您想要的食物编号!(退出请按0)");c4=sc.nextInt();continue;}if (c4 == 4) {System.out.println("请选择您想要的可乐数量不需要请选0个)!");arrayList.set(3,sc.nextInt());System.out.println("请输入您想要的食物编号!(退出请按0)");c4=sc.nextInt();continue;}if (c4 == 5) {System.out.println("请选择您想要的咖啡数量不需要请选0个)!");arrayList.set(4,sc.nextInt());System.out.println("请输入您想要的食物编号!(退出请按0)");c4=sc.nextInt();continue;}if (c4 == 0) {break;}}int c5 = hanburger.getPrice() * arrayList.get(0);int c6 = frenchFires.getPrice() * arrayList.get(1);int c7 = chicken.getPrice() * arrayList.get(2);int c8 = cola.getPrice() * arrayList.get(3);int c9 = coffee.getPrice() * arrayList.get(4);Discount(c5 + c6 + c7 + c8 + c9);}public void Menu(){                                    //菜单列表menu.add("汉堡                       单价:20");menu.add("薯条                       单价:15");menu.add("炸鸡                       单价:40");menu.add("可乐                       单价:5");menu.add("咖啡                       单价:10");taocan.add("套餐一!(汉堡+薯条+可乐       总计:40");taocan.add("套餐二!(炸鸡+可乐)          总计:45");taocan.add("套餐三!(汉堡+薯条+咖啡)      总计:45");}public void Select(){                                  //顾客选择Menu();System.out.println("欢迎光临!");System.out.println("我们菜单有:");for (String n:menu) {System.out.println(n);}System.out.println("我们的套餐有:");for(String n:taocan){System.out.println(n);}System.out.println("请开始您的点单!");System.out.println("1套餐!2单点!");int c1=sc.nextInt();if(c1==1){Taocan();}if(c1==2){ Single();}try {Printing();} catch (Exception e) {e.printStackTrace();}}public void Printing()throws Exception{int a1=arrayList.get(0)*20;int a2=arrayList.get(1)*15;int a3=arrayList.get(2)*40;int a4=arrayList.get(3)*5;int a5=arrayList.get(4)*10;int a6=a1+a2+a3+a4+a5;FileWriter fw=new FileWriter("小票.txt");fw.write("欢迎光临肯德基:"+"\r\n");fw.write("------------------------------"+"\r\n");fw.write("当前订单产生时间为:"+day.format(d)+"\r\n");fw.write("您共点汉堡:"+arrayList.get(0)+"个"+"\t"+"应付"+(a1)+"元"+"\r\n");fw.write("您共点薯条:"+arrayList.get(1)+"个"+"\t"+"应付"+(a2)+"元"+"\r\n");fw.write("您共点炸鸡:"+arrayList.get(2)+"个"+"\t"+"应付"+(a3)+"元"+"\r\n");fw.write("您共点可乐:"+arrayList.get(3)+"瓶"+"\t"+"应付"+(a4)+"元"+"\r\n");fw.write("您共点咖啡:"+arrayList.get(4)+"瓶"+"\t"+"应付"+(a5)+"元"+"\r\n");fw.write("您拥有:"+discount+"折优惠券"+"\r\n");fw.write("折扣后应付价钱:"+aftermoney+"\r\n");fw.write("实付价钱:"+beforemoney+"\r\n");fw.write("找零:"+(beforemoney-aftermoney)+"\r\n");fw.write("------------------------------"+"\r\n");fw.write("谢谢惠顾!期待您的再次光临!"+"\r\n");fw.close();}public static void main(String[] args) {Custom custom=new Custom();custom.Select();}
}

以上。

工厂方法模式完成简单KFC点餐相关推荐

  1. 设计模式---3(工厂方法模式的概念,工厂方法模式的实现,工厂方法模式和简单工厂模式比较)

    工厂方法模式 概念 工厂方法模式同样属于类的创建型模式又被称为多态工厂模式 . 工厂方法模式的意义 定义一个创建产品对象的工厂接口,将实际创建工作推迟到子类当中. 核心工厂类不再负责产品的创建,这样核 ...

  2. 工厂方法模式和简单工厂模式的区别

    简单工厂模式 就我们的计算器例子来说,简单工厂模式的思想就是,创建一个运算类,创建一个简单工厂类. 运算类派生加法类.减法类.乘法类...... 简单工厂类主要是根据传入的符号字符串,做相应的条件判断 ...

  3. 工厂方法模式、简单工厂模式、抽象工程模式

    1.概述 工厂设计模式是一种创建型模式,它提供了一种创建对象的最佳方式.在工厂模式中,我们创建对象时不会对客户端暴露创建逻辑,并且是通过使用一个共同的接口来指向新创建的对象. 1.1. 针对的问题 在 ...

  4. 工厂方法模式VS简单工厂模式

    转发请注明出处:http://blog.csdn.net/qq_28055429/article/details/51628921 One----简单工厂模式: 一,基本知识: (1)定义:简单工厂模 ...

  5. 设计模式之工厂类模式总结对比、简单工厂模式、工厂方法模式、抽象工厂模式、带反射的工厂模式、例子代码分析、最详细

    1. 题目 假设某公司同时用SqlServer.MySql数据库,即会切换两数据库(不同数据库的sql语句有些许差异),同时,两数据库里均有对Users.Departments表的操作(sql代码不一 ...

  6. 简单工厂模式与工厂方法模式

    在OO设计领域,我们知道前人总结了不少的经验,许多的经验在现代软件工程过程中已经被认为是原则来遵守.下面笔者摘抄几项下文涉及到的OO原则的定义. OCP(开闭原则,Open-Closed Princi ...

  7. 最简单java设计模式:工厂方法模式

    前言 在前一篇文章讲解了一下简单工厂模式,在上篇文章中,我们也讲到了简单工厂模式的缺点,就是不满足开闭原则,这对于软件的设计来说,是不太好的,而下面讲解的工厂方法模式,正是为了弥补简单工厂模式的缺点, ...

  8. python工厂模式 取代__init___浅析Python 简单工厂模式和工厂方法模式的优缺点

    前言 在<设计模式>一书中工厂模式提到了: 工厂方法模式(Factory Method) 抽象工厂模式 (Abstract Factory) 但是在实际过程中还有一种工厂模式经常被使用,那 ...

  9. 简单工厂模式、工厂方法模式、抽象工厂模式

    2019-11-12 参考大话数据结构 假设我们要解决一个问题:编程实现一个计算器 用面向过程的思想,很容易想到,首先输入两个操作数,再判断运算符进行运算,输出结果即可,但是这样的代码很难维护,我们需 ...

最新文章

  1. 详细解剖大型H5单页面应用的核心技术点
  2. VC6中工具条的新特色
  3. 分类VS标签,一文带你看懂数据中台为什么要建标签体系?
  4. Linux什么是文件IO,linux中文件IO
  5. python实现http协议_python使用socket实现TCP支持HTTP协议的静态网页服务器
  6. 【caffe-matlab】权重以及特征图的可视化
  7. java 创建web项目_java – Eclipse:以编程方式创建动态Web项目
  8. 挨批评了!Chrome 对用户隐私保护还不如 IE?
  9. Kubernetes1.7 新特性:日志审计变化
  10. python实时监控_python实时监控cpu小工具
  11. Android RootTrustManager 证书校验简单分析
  12. Mybatis如何给某个包中类起别名,以及起别名报错的解决方案
  13. 软件测试过程中主要涉及的文档及其内容
  14. Linux下安装hbase
  15. ECCV 2018 论文下载及分析(774篇全)
  16. 取消百度SiteApp转码
  17. 多个地点按距离远近进行排序
  18. 解压缩命令tar zip rar
  19. 股权和更高的薪资应该选那个呢?
  20. mel表达式_MEL语法

热门文章

  1. 如何设计可靠性UDP传输协议?
  2. OLE excel
  3. 【mysql升级步骤】windows mysql版本升级 ,mysql 5.6 升级到5.7.27
  4. 华为鲲鹏HCIA考试-练习05
  5. 【Linux入门指北】Linux实验综合训练
  6. 利用python制作一个名片_教你做一张能运行 Python 的名片,成本只要20元!
  7. leetcode 714. 买卖股票的最佳时机含手续费(java)
  8. mysql 计算近30天总金额_计算月嫂每天工资,应该用总工资除以30天还是26天?-免费法律咨询...
  9. vivado2019.2的安装
  10. 【Playwright】关于无痕模式与无头模式