餐厅订单结算系统

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

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

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

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

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

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

 

问题分析

    这个题目主要是考察设计模式的掌握情况。作为一个肯德基快餐店的收银系统,首先实现的就是它的订单功能,这里使用了工厂方法模式和抽象工厂模式,由用户选定自己需要的餐品,然后交由相应的“工厂”进行“生产”。在一定时间段内参与店内活动这一项,可以通过Java的api直接获取当前时间,从而确定是否在活动时间内。而打印小票写入文件中,则使用数组记录下用户的所有餐品选择,然后利用bufferedWriter写入文件就可以了。

 

设计模式图

1.建立Single接口输出餐品信息

package KFC;

public interface Single {
    void printInfo();
}
 

2.抽象类:餐品基本信息

    package KFC;
    
    public abstract class AbstractBaseInfo {
        public static String type;    //种类
        public int num;    //数量
        public double price;    //价格
        
        public double total() {
            return num*price;    //总价    
        }
    }

 

3.不同种类的餐品基类

package Type;

import KFC.AbstractBaseInfo;
import KFC.Single;

public class Hamburger extends AbstractBaseInfo implements Single {

    @Override
    public void printInfo() {
        System.out.println("--" + this.type + "\t数量:" + this.num + "\t单价:" + this.price + "\t合计:" + this.total());
    }
}

4.不同种类餐品实现类

package KFC;

import Type.Hamburger;

public class Hamburgerbeef extends Hamburger{
    public Hamburgerbeef(int num) {
        this.type = "汉堡";
        this.price = 10.0d;
        this.num = num;
    }
}

5.抽象工厂接口

package KFC;

import Type.Dessert;
import Type.Drink;
import Type.Hamburger;
import Type.SetMeal;
import Type.Snack;

public interface KFCFactory {
    public Hamburger produceHamburger(int category,int num);
    public Drink produceDrink(int category,int num);
    public Dessert produceDessert(int category,int num);
    public Snack produceSnack(int category,int num);
    public SetMeal produceSetMeal(int setmeal,int num);
}

 

6.工厂实现类

列举Hamburger作为参考

class KFCRealFactory implements KFCFactory {

    @Override
    public Hamburger produceHamburger(int category, int num) {
        if(category==1) {
            return new Hamburgerbeef(num);
        }else if(category==2) {
            return new Hamburgerchicken(num);
        }else if(category==3) {
            return new Hamburgerother(num);
        }else {
            return null;
        }
    }

}

7.餐品订购

public class Customer {
    private KFCFactory factory;
    
    public Customer(KFCFactory factory) {
        this.factory = factory;
    }
    
    public double orderHamburger(int category,int num) {
        Hamburger hamburger = factory.produceHamburger(category, num);
        hamburger.printInfo();
        return hamburger.total();
    }

8.文件存储

BufferedWriter w=new BufferedWriter(new FileWriter("C:\\订餐\\src\\Client\\bill.txt",true));
        w.write("--------------------------账单-------------------------");
        w.newLine();
        for(int i=0;i<count;i++) {
            w.write(bill[i]);
            w.newLine();
            w.flush();
        }
        w.write("-------------------------------------------------------");
        w.newLine();
        if(t1==1) {
            w.write("--满减:-10元");
            w.newLine();
        }
        if(t2==1) {
            w.write("周日会员日特惠88折");
            w.newLine();
        }
        w.write("--总计:"+df.format(total));
        w.newLine();
        w.write("--付款:"+pay);
        w.newLine();
        w.write("--找零:"+df.format(change));
        w.newLine();
        w.write("--"+dateFormat.format(date));
        w.newLine();
        w.flush();
        w.close();

 

运行结果

总结

水平有限,目前还没有制作可视化的界面,正在努力学习中了,JavaFx真的好难。这个题目可以说是我真正的第一次使用Java进行程序设计,之前一直沉醉在之前所学的那一点点C语言之中。Java的使用有很多api可以使用,但是太多了也令人头大,设计模式这种理论性的学习本来就是我最头疼的,引入到实践之中就更加困难了,本程序的实现个人认为使用到了工厂方法模式和抽象工厂模式,如果有错误之处,希望提出建议。

 

  • 1
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值