题目
同学们应该都去麦当劳或肯德基吃过快餐吧?请同学们参考肯德基官网的信息模拟肯德基快餐店的收银系统,合理使用C++或Java或Python结合设计模式(2种以上)至少实现系统的以下功能:
1.正常餐品结算和找零。
2.基本套餐结算和找零。
3.使用优惠劵购买餐品结算和找零。
4.可在一定时间段参与店内活动(自行设计或参考官网信息)。
5.模拟打印小票的功能(写到文件中)。
算法构造
算法构造
- AFactory (抽象工厂类)
/*
* 抽象工厂类
* 被ChickenFactory,ChipsFactory,CokeFactory,FiveFactory,
* HamFactory,JiliuFactory,TwoFactory继承
*/
public abstract class AFactory {
abstract Food create(int num);
}
- ChickenFactory
public class ChickenFactory extends AFactory{
public Chicken create(int num) {
Chicken ch=new Chicken();
ch.setPrice();
ch.setNum(num);
return ch;
}
}
- ChipsFactory
public class ChipsFactory {
public Chips create(int num) {
Chips ch=new Chips();
ch.setPrice();
ch.setNum(num);
return ch;
}
}
- CokeFactory
public class CokeFactory {
public Coke create(int num) {
Coke ch=new Coke();
ch.setPrice();
ch.setNum(num);
return ch;
}
}
- FiveFactory
public class FiveFactory {
public Five create(int num) {
Five ch=new Five();
ch.setPrice();
ch.setNum(num);
return ch;
}
}
- HamFactory
public class HamFactory extends AFactory{
public Ham create(int numHam) {
Ham ch=new Ham ();
ch.setPrice();
ch.setNum(numHam);
return ch;
}
}
- JiliuFactory
public class JiliuFactory {
public Jiliu create(int num) {
Jiliu ch=new Jiliu ();
ch.setPrice();
ch.setNum(num);
return ch;
}
}
- TwoFactory
public class TwoFactory {
public Two create(int num) {
Two ch=new Two ();
ch.setPrice();
ch.setNum(num);
return ch;
}
}
上边是抽象工厂类及其具体子工厂类,具体子工厂类有方法调用生成 食物对象
下边是食物类
- Food(抽象父类)
/*
* 抽象食物类
* 被Chicken,Chips,Coke,Five,Ham,Jiliu,Two,继承
*/
public abstract class Food{
public String name;
public int num=0; //食物数量
public float price; //食物价格
void display()
{
System.out.println(this.name+" : "+this.num+"份"+ " 单价:"+this.price+"元/份");
}
public float total()
{
String s=String.format("%.1f", (num*price));
float f=Float.parseFloat(s);
return f;
}
}
- Chicken
public class Chicken extends Food{
public int getNum() {
return num;
}
public void setNum(int num) {
this.num = num;
}
public float getPrice() {
return price;
}
public void setPrice() {
this.price = 4.8f;
}
public float total()
{
String s=String.format("%.1f", (num*price));
float f=Float.parseFloat(s);
return f;
}
public Chicken(int i)
{
this.num=i;
}
public Chicken()
{
this.num=0;
}
}
- Chips
public class Chips extends Food{
public int getNum() {
return num;
}
public void setNum(int num) {
this.num = num;
}
public float getPrice() {
return price;
}
public void setPrice() {
this.price = (float) 9.9;
}
Chips(int i)
{
this.num=i;
}
public Chips()
{this.num=0;}
public float total()
{
String s=String.format("%.1f", (num*price));
float f=Float.parseFloat(s);
return f;
}
}
- Coke
public class Coke extends Food{
public int getNum() {
return num;
}
public void setNum(int num) {
this.num = num;
}
public float getPrice() {
return price;
}
public void setPrice() {
this.price = (float) 9.5;
}
Coke(int i)
{
this.num=i;
}
public Coke()
{
this.num=0;
}
public float total()
{
String s=String.format("%.1f", (num*price));
float f=Float.parseFloat(s);
return f;
}
}
- Five
public class Five extends Food{
public int getNum() {
return num;
}
public void setNum(int num) {
this.num = num;
}
public float getPrice() {
return price;
}
public void setPrice() {
this.price = 80f;
}
Five(int i)
{
this.num=i;
}
public Five()
{
this.num=0;
}
public float total()
{
String s=String.format("%.1f", (num*price));
float f=Float.parseFloat(s);
return f;
}
}
- Ham
public class Ham extends Food{
public int getNum() {
return num;
}
public void setNum(int num) {
this.num = num;
}
public float getPrice() {
return price;
}
public void setPrice() {
this.price = 19;
}
Ham(int i)
{
this.num=i;
}
public Ham()
{
this.num=0;
}
public float total()
{
String s=String.format("%.1f", (num*price));
float f=Float.parseFloat(s);
return f;
}
}
- Jiliu
public class Jiliu extends Food{
public int getNum() {
return num;
}
public void setNum(int num) {
this.num = num;
}
public float getPrice() {
return price;
}
public void setPrice() {
this.price = 15;
}
Jiliu(int i)
{
this.num=i;
}
public Jiliu()
{
this.num=0;
}
public float total()
{
String s=String.format("%.1f", (num*price));
float f=Float.parseFloat(s);
return f;
}
}
- Two
/*
* 双人套餐类
* 将双人套餐和其他基础食物一样处理
*/
public class Two extends Food{
public int getNum() {
return num;
}
public void setNum(int num) {
this.num = num;
}
public float getPrice() {
return price;
}
public void setPrice() {
this.price = 40f;
}
Two(int i)
{
this.num=i;
}
public Two()
{
this.num=0;
}
public float total()
{
String s=String.format("%.1f", (num*price));
float f=Float.parseFloat(s);
return f;
}
}
上边是使用了工厂方法设计模式,设计出来
还有三个图形界面类没有列举出来,利用java的swing和awt包实现了图形化界面。
… … … … … … … … … … … … … … … … …
调用时只需使用生产工厂中的方法new出实现类:
ham=new HamFactory().create(numHam)
c=new ChickenFactory().create(numChic)
co=new CokeFactory().create(numCoke)
… … … … … … … … … … … … … …
结果
界面一选择食物:
选择好之后点击结账进入界面2和3,(左为界面2,右为界面3)
折扣输入错误:
界面3: