KFC点餐系统

题目:

同学们应该都去麦当劳或肯德基吃过快餐吧?请同学们参考肯德基官网的信息模拟肯德基快餐店的收银系统,合理使用C++或Java或Python结合设计模式(2种以上)至少实现系统的以下功能:

1.正常餐品结算和找零。

2.基本套餐结算和找零。

3.使用优惠劵购买餐品结算和找零。

4.可在一定时间段参与店内活动(自行设计或参考官网信息)。

5.模拟打印小票的功能(写到文件中)。

基本要求:

1.程序设计风格良好,控制台界面友好,最多两人一组完成任务。

2.实现功能测试代码,确保程序的健壮性。

3.画出使用的设计模式图。

提高要求:

1.实现可视化界面(使用MFC)。

2.实现会员储值卡功能,完成储值卡消费。

3.实现当天营业额和餐品销量计算和统计,用数据库记录。

算法设计思路:

     使用抽象工厂模式实现套餐、使用简单工厂实现自定义点餐、使用策略模式实现优惠券的获取;将模式可交互的地方完整的交叠在一起。

     具体实现:

       将不同的餐点放入不同放入class中,这些类分别实现不同的接口,包括主食、饮料以及小吃三个接口,还有一个不同的接口用来将三个接口串起来实现整个的套餐,在调用套餐时,仅仅使用综合接口的具体实现类,而在自点餐时,可调用其余三个接口的具体实现类;

       将不同的优惠券放入不同的class类中,用于实现一个接口内的抽象函数,最终另一个类内,调用此函数,并建立接口实现对象,除了接口函数的实现外,还包括自行建立的一个函数;

        主函数主要是菜单功能,用于调用不同的接口实现类,将整个程序串在一起,整体实现运行模式。

UML类图:

1.策略模式实现优惠券功能:

 

2.抽象模式实现套餐功能:

源程序:

package ken;

public class Array {
    private code codeObj;
    public int extract(int num) {
    return codeObj.extract(num);
    }
    public void sextract(code codeObj) {
        this.codeObj=codeObj;
    }
}

package ken;

public class choose {
    public static order getorder(String brand) {
        order order1=null;
        if(brand.equalsIgnoreCase("1")) {
            return new combo1();
        }
        else if(brand.equalsIgnoreCase("2")) {
            return new combo2();
        }
        else if(brand.equalsIgnoreCase("3")) {
            return new combo3();
        }
        return order1;
    }
}

package ken;

public interface code {
      public abstract int extract(int a);
}

package ken;

public class code1 implements code{
    public int extract(int a) {
        System.out.println("5元优惠券");
        return a-5;
    }
}

package ken;

public class code2 implements code{
    public int extract(int a) {
        System.out.println("10元优惠券");
        return a-10;
    }
}

package ken;

public class code3 implements code{
    public int extract(int a) {
        System.out.println("20元优惠券");
        return a-20;
    }
}

package ken;

public class coke implements drink{
    public void making() {
        System.out.println("4.可乐           ¥6.00");
    }
}

package ken;

public class combo1 implements order{
    
    public drink producedrink(){
        return new milk();
    }
    public food producefood() {
        return new Hamburg();
    }
    public snacks producesnacks() {
        return new corn();
    }
    
}

package ken;

public class combo3 implements order{
    public drink producedrink(){
        return new milk();
    }
    public food producefood() {
        return new taco();
    }
    public snacks producesnacks() {
        return new tart();
    }
}

package ken;

public interface drink {
    public void making();
    
}

package ken;

public interface food {
    public void choose();
}

package ken;

public class Hamburg implements food{
    public void choose() {
        System.out.println("1.汉堡           ¥19.00");
    }
}

package ken;

public class milk  implements drink{
    public void making() {
        System.out.println("2.牛奶           ¥8.00");
    }
}

package ken;

public interface order {
    public drink producedrink();
    public food producefood();
    public snacks producesnacks();
}

package ken;
import javax.swing.*;
import java.awt.*;

public class view {
    public  void view(){
        JFrame f=new JFrame("KFC点餐系统");
        f.setSize(500,600);
        f.setLocation(580,200);
        f.setLayout(null);
        JButton b=new JButton("合计");
        
        b.setBounds(350,500,100,30);
        f.add(b);
        JButton b1=new JButton("自点餐");
        JButton b2=new JButton("套餐");
        JButton b3=new JButton("优惠券");
        b1.setBounds(10,10,100,30);
        f.add(b1);
        b2.setBounds(10,50,100,30);
        f.add(b2);
        b3.setBounds(10,90,100,30);
        f.add(b3);
        JCheckBox bCheckBox=new JCheckBox("汉堡");
        bCheckBox.setSelected(true);
        bCheckBox.setBounds(150,10,80,60);
        JCheckBox bCheckBox1=new JCheckBox("玉米");
        bCheckBox1.setBounds(250,10,80,60);
        JCheckBox bCheckBox2=new JCheckBox("塔可");
        bCheckBox2.setBounds(350,10,80,60);
        JCheckBox bCheckBox3=new JCheckBox("可乐");
        bCheckBox3.setBounds(150,80,80,50);
        JCheckBox bCheckBox4=new JCheckBox("牛奶");
        bCheckBox4.setBounds(250,80,80,50);
        JCheckBox bCheckBox5=new JCheckBox("蛋挞");
        bCheckBox5.setBounds(350,80,80,50);
        System.out.println(bCheckBox1.isSelected());
System.out.println(bCheckBox2.isSelected());
System.out.println(bCheckBox3.isSelected());
System.out.println(bCheckBox4.isSelected());
System.out.println(bCheckBox4.isSelected());
        f.add(bCheckBox);
        f.add(bCheckBox1);
        f.add(bCheckBox2);
        f.add(bCheckBox3);
        f.add(bCheckBox4);
        f.add(bCheckBox5);
        f.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
        f.setVisible(true);
        int option=JOptionPane.showConfirmDialog(f, "KFC点餐小票打印");
    }
}

package ken;

import java.io.BufferedWriter;
import java.io.File;
import java.io.FileWriter;
import java.io.IOException;

public class Write{
    public void write(String s,int num){
    try {
        String content="This is the content to write into file";
        File file =new File("C://Program Files/Java/eclipse-java-2018-12-R-win32-x86_64/eclipse/ken/test.txt");
        if(!file.exists()){
          file.createNewFile();

        }
    FileWriter  fw =new FileWriter(file.getAbsoluteFile());
    BufferedWriter bw =new BufferedWriter(fw);
    bw.write("KFC点餐小票");
    bw.write("-----------");
    bw.write(s);
    bw.write("合计金额:"+num);
    bw.close();
    System.out.println("Done");

        }
    catch (IOException e ){
    e.printStackTrace();
    }
    }
}

程序运行结果截图:

1.自点餐的实现:(由于最低钱数有限制,无优惠券)

 

2.套餐(包括优惠券等):

3.提高要求的实现界面:

总结:

本次程序在做的过程中融汇了两种设计模式,两种设计模式所要承担的任务不同,所以实现效果也不同;

开始时,在融合套餐和单点餐时,我将整体的区分开来,而实际上,我们可以直接使用抽象模式中的一部分,调用所要使用的接口,将整个程序串起来,这样就简化了整个程序的代码量;

在制作提高要求部分时,我将界面实现之后仅仅只能实现将界面展示出来,以及将整体的最基础部分实现,所以整个的界面框已经实现,但由于本次本身的知识不足,所以实现的功能并不全面;

在实现的过程中,开始时,不太清楚整个程序系统的实现顺序,以及在实现过程中所需要链接的东西,所以在后期整体需要串连起来的时候改动量较大,也在看的过程中不能清晰明了的将整体或缺的部分清楚的指出来;

套餐的实现过程,显示界面由于出现的一定的差别,在点餐的时候,并没有出现相应的效果,最终加上了进一步的输入值,将整体的程序运行,以及在程序写入文件的过程起到了作用,在调用类的过程中,我们第一次输入的数值是为了调用抽象函数中的套餐分组,而第二次输入,主要在于实现文件的写入,将套餐和优惠券也联系起来,在钱数到达一定值的时候会自动生成一个优惠券,给顾客优惠,也体现了整个的人性化,但同时如果在点餐后并没有领取优惠券,也不会实现相应的功能。

  • 0
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值