题目:
同学们应该都去麦当劳或肯德基吃过快餐吧?请同学们参考肯德基官网的信息模拟肯德基快餐店的收银系统,合理使用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{@Overridepublic Hamburg createHamburg(int num) {// TODO Auto-generated method stubreturn new MyHamburg(num);}@Overridepublic FrenchFries createFrenchFries(int num) {// TODO Auto-generated method stubreturn new MyFrenchFries(num);}@Overridepublic ChickenWings createChickenWings(int num) {// TODO Auto-generated method stubreturn new MyChickenWings(num);}@Overridepublic Drink createDrink(int num) {// TODO Auto-generated method stubreturn new MyDrink(num);}@Overridepublic TodayDiscount createTodayDiscount(int num) {// TODO Auto-generated method stubreturn 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

肯德基收款打印小票功能相关推荐

  1. vue项目使用LODOP打印小票功能

    毕业后第一份工作是做后台管理系统的,项目中要求有打印小票功能,然而我并不知道,该怎么写,百度了很多.一开始在网上查到很多都在用electron+vue我以为我可以用这个呢,搞了两天,才发现这是做桌面软 ...

  2. Android集成佳博热敏打印机打印小票功能

    一.说明 最近公司项目需要做打印机打印小票功能,首先公司买了一个佳博小票打印机作为测试用机.然后在开发的过程中也遇到一些坑,在此记录一下. 二.集成过程 1. 下载开发文档 首先需要去其官网下载SDK ...

  3. 从实验室到田埂的天堑 :肯德基3D打印鸡肉的现实壁障

    "315晚会"曝光汉堡王之后,网友们纷纷表示不敢再吃汉堡了. 洋快餐品牌的标准化支撑体系,一直是餐食品质的保障,也成为中式餐饮学习的目标.如今标准形同虚设,自然免不了殃及池鱼. 快 ...

  4. Java实现安卓连接商米POS收银机打印小票功能

    在收银系统中经常使用到打印小票的功能.本文将Java如何实现商米POS收银机打印小票的功能.包括""定义管理打印相关方法的类,封装好方法供外部调用"."调用打印 ...

  5. 记一次Electron 桌面应用实现调用打印机打印小票功能

    项目背景 实现一款交互屏桌面应用软件,类似医院那张种给用户操作办理业务的应用程序.操作业务中在充值后可供用户打印小票. 开发框架:electron-vue vue版本:v2.6.14 electron ...

  6. vue热敏打印机_electron + vue项目实现打印小票功能及实现代码

    一 需求: 公司项目需要通过electron调用系统打印机,实现打印小票的功能. 二.分析: electron打印大概有两种: 第一种:通过window的webcontent对象,使用此种方式需要单独 ...

  7. vue热敏打印机_electron + vue项目实现打印小票功能

    前言:该文章需要一定的electron基础同学.如需了解更多相关信息,请移步electron官方文档. 一.需求: 公司项目需要通过electron调用系统打印机,实现打印小票的功能. 二.分析: e ...

  8. 商米设备的集成(打印小票,刷卡功能)

    简言: 公司一直在做使用pos设备有关的项目,选用的是商米的商户,设备主要实现功能就是刷卡功能与打印小票功能,商家提供了一个简单的demo,刚开始就让人蒙圈, 查阅百度,各种博客,发现关于商米设备的很 ...

  9. iOS Bluetooth 打印小票

    效果图如下 非常感谢 Haley_Wong 的帮助 文章 http://www.jianshu.com/p/90cc08d11b5a github 地址 https://github.com/Hale ...

最新文章

  1. MAGIX Photostory Deluxe 2021中文版
  2. PHP中环境变量的设置
  3. Zuul 查看所有路由路径与filter(过滤器)
  4. 解决window.open被拦截问题
  5. 安卓适配器类中怎么调用intent_设计模式:代理模式/中介者模式 / 桥接模式/适配器 - 七星望...
  6. 套壳python_“完全自主设计、开发和实现”的编程语言,被指是Python的套壳产品?...
  7. 做了一款股票复盘工具
  8. 基于Multisim的220v转12v典型开关电源电路仿真
  9. x264中关于编码帧存取lookahead的操作
  10. windows7系统重装的步骤,电脑重装win7
  11. 计算机作业封面,西南交通大学离线作业封面-2016
  12. 图像处理过程中为什么有时需要进行归一化处理 ?
  13. 2019前端开发面试问题及答案整理
  14. 查看邮件导致关联?亚马逊多账号管理必看
  15. 【工具】markdown
  16. 美国留学申请干货--转自 AdmitWrite留学(无图)
  17. EasyRecovery15电脑版数据恢复工具 国内免费的数据恢复软件
  18. 最新VMware 安装Windows10——图文操作,超详细~~~
  19. 死磕Java之Java核心语法
  20. SQL低版本连续多条记录合并,多条记录分组合并

热门文章

  1. 高仿网易云音乐一(可扫描本地音乐播放)
  2. Configure交叉编译
  3. mysql grant produce_ERROR 1045 (28000) Mysql中grant 使用不当导致的生产事故
  4. Ubuntu Linux 安装 QQ音乐打不开的问题
  5. 机器学习算法 01 —— K-近邻算法(数据集划分、归一化、标准化)
  6. Windows Debug 详解
  7. C端产品和B端产品的区别
  8. python判断汉字偏胖_python实现在线分词
  9. 纯js实现选择色卡效果
  10. 【公众号】高级配色“马卡龙调色板”必须码住!