肯德基收银系统
一.题目分析
同学们应该都去麦当劳或肯德基吃过快餐吧?请同学们参考肯德基官网的信息模拟肯德基快餐店的收银系统,合理使用C++或Java或Python结合设计模式(2种以上)至少实现系统的以下功能:
1.正常餐品结算和找零。
2.基本套餐结算和找零。
3.使用优惠劵购买餐品结算和找零。
4.可在一定时间段参与店内活动(自行设计或参考官网信息)。
5.模拟打印小票的功能(写到文件中)。
基本要求:
1.程序设计风格良好,控制台界面友好,最多两人一组完成任务。
2.实现功能测试代码,确保程序的健壮性。
3.画出使用的设计模式图。
二.类图设计
三.源程序
collect类:
DOS类:
Demo类(main):
KFC(抽象工厂):
factory工厂:
鸡翅类:
可乐类:
薯条:
汉堡包类:
套餐1类:
套餐2类:
所有的类、包名:
四.程序调试、测试截图
- 程序调试截图:
点餐时选择鸡翅:
选择鸡翅后通过工厂创建鸡翅对象:
鸡翅对象创建后,将其添加到add中:
继续选择套餐1后创建一个套餐1的对象:
实现结账功能是跳转其中的优惠券功能:
打印本次消费记录时获取食品的价格:
2.程序测试截图:
点餐步骤:
领取优惠券:
打印小票:
五.感悟心得
本次作业,首先需要想清楚要用到的模式,构想出需要建造的类之间的关系。肯德基点餐系统主要由两个模式构成,简单工厂模式和建造者模式。简单工厂模式用于factory、KFC以及各种小吃类,各类小吃继承KFC的getter and setter方法,factory用于生产具体对象。建造者模式用于collect类和DOS类,collect类中的打印小票,返回支付现金,返回优惠券等功能被DOS类主界面的3种方法所调用。其次,是具体实现功能中遇到的问题。
1.点餐功能 用户每次点餐完后系统应该提供可以继续选择食物或退出点餐界面进行其他操作的功能,这个在实现时,首先想到的是用循环或设计一个标志,标志为0时继续点餐,标志为1时退出系统的方法。后来发现直接调用其他函数进行下一步操作更直接和方便些。
2.结账 主要是找零的代码实现。这个涉及到了用户是否使用优惠券,因此需要一个判断,消费金额可使用优惠券后找零金额,不能使用优惠券的找零金额。即找零方法中还会调用另一个判断方法求出最终结果。
3.打印小票 用户点餐内容,食物金额,找零等内容均要用bufferwritter写入文件,创建一个bufferwritter的对象br,以br.write()写入txt文件中,注意最后的文件关闭。
虽有了思路但是要将整个程序完整地实现,我们还遇到了很多问题,例如,如何完善菜单栏、如何将见内容打印到文件中还有如何实现优惠券的代码部分(此处借鉴了博客名为:入云龙9342,地址为:https://blog.csdn.net/weixin_40933866/article/details/83448381)。