1.题目
同学们应该都去麦当劳或肯德基吃过快餐吧?请同学们参考肯德基官网的信息模拟肯德基快餐店的收银系统,合理使用C++或Java或Python结合设计模式(2种以上)至少实现系统的以下功能:
1.正常餐品结算和找零。
2.基本套餐结算和找零。
3.使用优惠劵购买餐品结算和找零。
4.可在一定时间段参与店内活动(自行设计或参考官网信息)。
5.模拟打印小票的功能(写到文件中)。
基本要求:
- 程序设计风格良好,控制台界面友好,最多两人一组完成任务。
- 实现功能测试代码,确保程序的健壮性。
- 画出使用的设计模式图。
提高要求:
- 实现可视化界面(使用MFC)。
- 实现会员储值卡功能,完成储值卡消费。
3. 实现当天营业额和餐品销量计算和统计,用数据库记录。
2.类图
3.部分代码
KFCFactory
public interface KFCFactory {
public base_food produce_basefood(int kind1,int num);
public drinks produce_drinks(int kind2,int num);
public smallfood produce_smallfood(int kind3,int num);
public Taocan produce_taocan(int kind4,int num);
}
KFCFactory
public class KFCFactory1 implements KFCFactory {
public base_food produce_basefood(int kind1,int num1){
if(kind1==1)
return new hamburger_1(num1);
if(kind1==2)
return new hamburger_2(num1);
if(kind1==3)
return new rice(num1);
return null;
}
public drinks produce_drinks(int kind2,int num2){
if(kind2==1)
return new Coke(num2);//可乐
if(kind2==2)
return new Coffee(num2);//咖啡
if(kind2==3)
return new Juice(num2);//果汁
return null;
}
public smallfood produce_smallfood(int kind3,int num3){
if(kind3==1)
return new Chips(num3);//薯条
if(kind3==2)
return new Jipai(num3);//鸡排
if(kind3==3)
return new Zhachi(num3);//炸翅
return null;
}
public Taocan produce_taocan(int kind4,int num4) {
if(kind4==1)
return new taocan1(num4);//人气餐香辣鸡腿堡S
if(kind4==2)
return new taocan2(num4);//人气餐奥尔良鸡腿堡S
if(kind4==3)
return new taocan3(num4);//原味鸡餐配烤翅
return null;
}
}
Food
public interface Food {
public String show_food();
}
Food_information
public class Food_information {
public String name;
public int num;
public double price;
public double total_price()
{
return num*price;
}
}
base_food
public class base_food extends Food_information implements Food {
public String show_food() {
return("--" + this.name+ ",单价:" + this.price + ",数量:" + this.num + ",合计:" + this.total_price());
}
}
hamburger_1
public class hamburger_1 extends base_food{
public hamburger_1(int num) {
this.name="香辣鸡腿堡";
this.num=num;
this.price=17.5;
}
}
orderfoods
import java.io.BufferedWriter;
import java.io.FileWriter;
import java.io.IOException;
public class orderfoods {
public KFCFactory factory;
public orderfoods(KFCFactory factory){
this.factory = factory;
}
private String s[] =new String[4];
public int showbill() throws IOException{
//将账单写入文件
BufferedWriter bw=new BufferedWriter(new FileWriter("Bill.txt",true));
bw.write("---------------------账单如下---------------------");
bw.newLine();
for(int i=0;i<4;i++){
bw.write(s[i]+"\r\n");
bw.newLine();
bw.flush();
}
return 0;
}
//购买主食
public double order_basefood(int kind1,int num1) {
base_food food1=factory.produce_basefood(kind1, num1);
System.out.println(food1.show_food());
s[0]=food1.show_food();
return food1.total_price();
}
//购买饮料
public double order_drinks(int kind2,int num2) {
drinks drink1=factory.produce_drinks(kind2, num2);
System.out.println(drink1.show_food());
s[1]=drink1.show_food();
return drink1.total_price();
}
//购买小食
public double order_smallfood(int kind3,int num3){
smallfood small1=factory.produce_smallfood(kind3, num3);
System.out.println(small1.show_food());
s[2]=small1.show_food();
return small1.total_price();
}
//购买套餐
public double order_Taocan(int kind4,int num4) {
Taocan taocan=factory.produce_taocan(kind4, num4);
System.out.println(taocan.show_food());
s[3]=taocan.show_food();
return taocan.total_price();
}
}
Client
import java.util.Scanner;
import java.util.*;
import java.io.*;
public class Client {
public static void main(String[] args) throws IOException {
KFCFactory factory=new KFCFactory1();
orderfoods orderfoods1 = new orderfoods(factory);
double total1=0;
double total2=0;
double total3=0;
double total4=0;
double total5=0;
double total6=0;
double total7=0;
double total8=0;
double total9=0;
double total10=0;
double total11=0;
double total12=0;
int flag=1;
int kind1=0;
int kind2=0;
int kind3=0;
int kind4=0;
int num1=0;
int num2=0;
int num3=0;
int num4=0;
int a=0;
System.out.println("-----------------------菜单-----------------------");
System.out.println("主食类: 1.香辣鸡腿堡 2.香辣牛肉堡 3.脆皮鸡腿饭");
System.out.println("饮料类: 1.可乐 2.咖啡 3.果汁 ");
System.out.println("小食类: 1.薯条 2.鸡排 3.炸鸡翅 ");
System.out.println("套餐类: 1.人气餐香辣鸡腿堡S 2. 人气餐奥尔良鸡腿堡S 3.原味鸡餐配烤翅 ");
while(flag!=0) {
Scanner s=new Scanner(System.in);
System.out.println("请输入要买的种类: 1.主食类 2.饮料 3.小食 4.套餐类");
a=s.nextInt();
switch(a) {
case 1:
System.out.println("请输入要购买的主食:1.香辣鸡腿堡 2.香辣牛肉堡 3.脆皮鸡腿饭 ");
kind1=s.nextInt();
System.out.println("请输入要购买的数量:");
num1=s.nextInt();
switch(kind1) {
case 1:
total1 = orderfoods1.order_basefood(kind1, num1);
break;
case 2:
total2 = orderfoods1.order_basefood(kind1, num1);
break;
case 3:
total3 = orderfoods1.order_basefood(kind1, num1);
break;
}
break;
case 2:
System.out.println("请输入要购买的饮料:1.可乐 2.咖啡 3.果汁 ");
kind2=s.nextInt();
System.out.println("请输入要购买的数量:");
num2=s.nextInt();
switch(kind2) {
case 1:
total4= orderfoods1.order_drinks(kind2, num2);
break;
case 2:
total5= orderfoods1.order_drinks(kind2, num2);
break;
case 3:
total6= orderfoods1.order_drinks(kind2, num2);
break;
}
break;
case 3:
System.out.println("请输入要购买的小食:1.薯条 2.鸡排 3.炸鸡翅");
kind3=s.nextInt();
System.out.println("请输入要购买的数量:");
num3=s.nextInt();
switch(kind3) {
case 1:
total7= orderfoods1.order_smallfood(kind3, num3);
break;
case 2:
total8= orderfoods1.order_smallfood(kind3, num3);
break;
case 3:
total9= orderfoods1.order_smallfood(kind3, num3);
break;
}
break;
case 4:
System.out.println("请输入要购买的套餐:1.人气餐香辣鸡腿堡S 2. 人气餐奥尔良鸡腿堡S 3.原味鸡餐配烤翅");
kind4=s.nextInt();
System.out.println("请输入要购买的数量:");
num4=s.nextInt();
switch(kind4) {
case 1:
total10= orderfoods1.order_Taocan(kind4, num4);
break;
case 2:
total11= orderfoods1.order_Taocan(kind4, num4);
break;
case 3:
total12= orderfoods1.order_Taocan(kind4, num4);
break;
}
break;
}
System.out.println("如需继续点餐,请按1,否则,请按0");
flag=s.nextInt();
}
System.out.println("**************KFC**************");
System.out.println();
if(kind1!=0) {
orderfoods1.order_basefood(kind1, num1);
}
if(kind2!=0) {
orderfoods1.order_drinks(kind2, num2);
}
if(kind3!=0) {
orderfoods1.order_smallfood(kind3, num3);
}
if(kind4!=0) {
orderfoods1.order_Taocan(kind4, num4);
}
System.out.println();
System.out.println("*******************************");
System.out.println();
double total_price=0;//购买食品的总金额
double total_price1=0;//使用优惠券后的金额
double total_price2=0;//打折后需支付的金额
total_price=total1+total2+total3+total4+total5+total6+total7+total8+total9+total10+total11+total12;
//使用优惠券购买餐品结算和找零
Scanner s=new Scanner(System.in);
System.out.println("是否有优惠券: 1:有 2:无");
int b;
b=s.nextInt();
if(b==1){
System.out.println("请输入优惠金额:5元 10元 ");
double c=0;
c=s.nextInt();
total_price1=total_price-c;}
else if(b==2) {
total_price1=total_price;
}
//店内活动,凡是于周末在本店消费的客人,可享受八折优惠
Calendar cal=Calendar.getInstance();
if(cal.get(Calendar.DAY_OF_WEEK)==Calendar.SATURDAY || cal.get(Calendar.DAY_OF_WEEK)==Calendar.SUNDAY){
total_price2=total_price1*0.80;
}
else {
total_price2=total_price1;
}
BufferedWriter bw=new BufferedWriter(new FileWriter("Bill.txt",true));
bw.newLine();
bw.write(orderfoods1.showbill());
System.out.println("");
System.out.println("总金额:"+total_price);
bw.write("总金额:"+total_price);
bw.newLine();
System.out.println("使用优惠券后金额"+total_price1);
bw.write("使用优惠券后金额"+total_price1);
bw.newLine();
System.out.println("打折后金额:"+total_price2);
bw.write("打折后金额:"+total_price2);
System.out.println("实付金额:");//支付给店员的钱
double c;//实付金额
double l;//找零
c=s.nextInt();
l=c-total_price2;
bw.write("实付金额:"+c);
bw.newLine();
System.out.println("找零:"+l);
bw.write("找零:"+l);
bw.newLine();
Date date1=new Date();
System.out.println(" 时间 :"+date1);
bw.write("时间 :"+date1);
System.out.println("请妥善保管好购物凭证!");
System.out.println("多谢惠顾,欢迎下次光临!");
bw.write("欢迎下次光临!");
bw.newLine();
bw.flush();
//关闭流
bw.close();
}
}
4.运行截图
5.总结
通过本次作业,我发现自己并没有熟悉地掌握并运用设计模式,有点儿混淆;
本次作业遇到的最大问题就是刚开始无法将小票完整地打印到文件中,就是一直不能将点的食物在文件中显示,只显示了需付金额及时间;
解决方法:在类orderfoods中添加了以下代码:
本次作业仍存在许多不足,希望自己在今后的学习中加以改进。