餐厅订单结算系统
同学们应该都去麦当劳或肯德基吃过快餐吧?请同学们参考肯德基官网的信息模拟肯德基快餐店的收银系统,合理使用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可以使用,但是太多了也令人头大,设计模式这种理论性的学习本来就是我最头疼的,引入到实践之中就更加困难了,本程序的实现个人认为使用到了工厂方法模式和抽象工厂模式,如果有错误之处,希望提出建议。