ICode9

精准搜索请尝试: 精确搜索
首页 > 其他分享> 文章详细

## KFC点餐系统

2019-05-12 19:51:14  阅读:437  来源: 互联网

标签:可视化 界面 ## 窗体 KFC 食物 按钮 点餐 设计模式


KFC点餐系统

一、题目要求

1.同学们应该都去麦当劳或肯德基吃过快餐吧?请同学们参考肯德基官网的信息模拟肯德基快餐店的收银系统,合理使用C++或Java或Python结合设计模式(2种以上)至少实现系统的以下功能:
2.正常餐品结算和找零。
3.基本套餐结算和找零。
4.使用优惠劵购买餐品结算和找零。
5.可在一定时间段参与店内活动(自行设计或参考官网信息)。
6.模拟打印小票的功能(写到文件中)。
基本要求:
7.程序设计风格良好,控制台界面友好,最多两人一组完成任务。
8.实现功能测试代码,确保程序的健壮性。
9.画出使用的设计模式图。
提高要求:
10.实现可视化界面(使用MFC)。
11.实现会员储值卡功能,完成储值卡消费。
12.实现当天营业额和餐品销量计算和统计,用数据库记录。
二、题目分析及设计
1.题目分析

第一部分
业务流程图:
在这里插入图片描述类的结构:
在这里插入图片描述
每个食物应当有的属性:食物名字,价格,以及点餐数量,故设计一个抽象食物类AbstractFood与之对应。点餐时,需要控制台输出点餐信息。如果写在抽象食物类中,继承后又得不断的重写。所以设计了Food接口,用于提供打印消息的接口。由此,基本食物的抽象建立已经完成。通过继承AbstractFood类和实现Food接口,得到四类基本食物的抽象类:(1)Chickenleg(2)Drink(3)Chickenwings(4)Frenchfries。通过实现此四种抽象食物,得到四种基本食物。有了食物单品后,就能够进行点餐的设计,点单品的操作通过工厂方法KFCFactory实现,即为工厂方法。套餐使用了产品族,可以设计为一个抽象工厂。程序设计的过程中只涉及了两个工厂:1.ComboFactoryA ,2.ComboFactoryB。通过具体的工厂HD和FD来完成具体套餐的实现。选择单品和套餐的设计由策略类完成。StrategyItem类里边的algorithm为选择单品的算法。StrategyCombo类里边的algorithm算法为选择套餐的算法。

第二部分(可视化界面)(注:本次采用java中的GUI编程):
(1)首先进入KFC官网了解产品的相关信息,并从官网获取(部分)食物的图片资料。
(2对收集的产品进行分类,本次共分为汉堡类、鸡翅类、甜品及饮料类和套餐类。
(3)进行可视化界面的框体设计,总体分为6个窗体以及若干个按钮组件,主界面包含四个食物品种的按钮,各个种类各有一个子窗体,包含改种类下的食物以及一个结算窗体。
(4)主窗体与结算窗体同时出现,通过按钮在主窗体与子窗体之间建立联系(点击相应的按钮,弹出相应的窗体),通过按钮在子窗体和结算窗体之间建立联系(选择相应的食物,在结算窗体中记录,就算关闭结算窗体,再选择其他种类的物品时,自动弹出结算窗体,并记录)。
(5)在结算窗体中进行结账、打折以及打印小票功能(未实现打印小票功能,具体原因在测试中说明)
(6)连接MYSQL数据库,实现保存存蓄卡信息,可查询储蓄卡信息、添加新的储蓄卡、使用储蓄卡消费以及向卡中充值功能。在数据库中记录当天销售的食品数量和产品销售额。(未实现)

三、UML类图设计
在这里插入图片描述
四、部分代码
给按钮添加监听器,检测是否按下

//给but1添加监听器
but1.addMouseListener(new MouseAdapter() {
//new MouseListener()必须实现接口中所有方法
//new MouseAdapter()可以仅实现按下方法
	public void mouseClicked(MouseEvent e) {
						\\按下后具执行体代码
	}
});

给按钮添加图片

ImageIcon icon = new ImageIcon("C:\\Users\\新奥尔良烤鸡腿堡.jpg");
		Image img = icon.getImage();
		img = img.getScaledInstance(but.getHeight(), but.getWidth(), Image.SCALE_DEFAULT);
		but.setIcon(icon);
		f.add(but);

第一部分代码,见:https://blog.csdn.net/qq_44002167/article/details/90142723

五、调试和测试

1.使用JUint 5单元测试对代码进行测试,免去了在main方法中创建对象,使用对象调用方法的复杂过程。在创建方法完成后即可进行测试。
1.1在项目中添加JUint 5,在方法上方显式注明@Test
1.2 双击方法名,在Run As 中使用Junit 进行测试。

2.总体测试:
第一部分:
进入主界面,购买套餐并打折,如下:
在这里插入图片描述在这里插入图片描述

购买相同套餐不打折:
在这里插入图片描述
在这里插入图片描述
购买多个单品,如下:在这里插入图片描述
在这里插入图片描述
第二部分:

运行程序,主界面与结算窗体出现,如下:

在这里插入图片描述
进入汉堡界面,购买食物,具体清单显示在结账窗体,如下:在这里插入图片描述
再进入其他界面购买任意商品:

在这里插入图片描述
在这里插入图片描述在这里插入图片描述
单击结账之后对购买的物品数目进行总结,并计算总价钱,单机打折,显示折后价:在这里插入图片描述在这里插入图片描述
六、总结
1.小组总结:
本次作业通过小组形式完成,在小组中可以更好地解决出现的问题,减少知识盲区,但是在本次作业中并未将两部分内容进行联系,第一部分采用了设计模式,而第二部分没用采用设计模式仅实现了部分功能,因而不能实现功能对接。主要原因是小组成员缺乏可视化界面编程的经验。对可视化程序的结构设计不明确。
第一部分部分功能存在缺陷,但是设计模式体现明确,通过本次作业,小组成员对设计模式有了更深刻的理解,同时都对可视化界面有了初步的认识,能够运用可视化解决一些问题。也提高了团队的协作能力,在交流中解决了编程中出现的一些错误,学习到了更多编程思想。

2.个人总结:

在可视化界面的编写的过程中,因为是初次使用GUI编程,遇到了很多问题。首先就是在界面的选择中,我们经过讨论决定使用按钮组件,放弃弹出式菜单。因为弹出式菜单在选择食物的会增加操作,若需要了解食物详细信息,还得添加监听器等操作。

遇到的问题:图片大小和按钮组件不相符
解决方案:①让图片适应按钮的大小②按钮适应图片大小③将JButton组件更换为JPanel组件
最终采用①方法,让图片适应按钮的大小。从网站收集的图片像素大,若让按钮适应图片大小可视化界面太大。个人感觉JPanel组件的美观程度不如JButton组件。

遇到的问题:将结算后的信息从静态文本中获取出来,无法写入文件
具体原因:使用getText()方法获取的String类型的字符串是一个多行字符串,使用write()无法写入。

解决方案:经过百度等一系列操作,未能找到解决方案,因此将此项功能搁置。

在第一部分设计之前和队友对各种设计模式进行了了解,选择了3中来设计本次的程序,在设计中食物类进行了优化,使得能更好的体现设计模式
在本次作业中对设计模式的理解更加深刻,同时可以设计合理的模式去解决问题,自己也对GUI可视化中的各部分有了一定的了解,同时对其他的可视化也有了初步的认识。GUI设计出来的界面并不是十分的好,感觉自己需要学习的东西还有很多,比如了解更多的设计模式并用其来解决实际问题,学习javaWeb等开发出更加好的界面…

标签:可视化,界面,##,窗体,KFC,食物,按钮,点餐,设计模式
来源: https://blog.csdn.net/qq_42302831/article/details/90144194

本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享;
2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关;
3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关;
4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除;
5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。

专注分享技术,共同学习,共同进步。侵权联系[81616952@qq.com]

Copyright (C)ICode9.com, All Rights Reserved.

ICode9版权所有