快餐店运行模拟.docx
《快餐店运行模拟.docx》由会员分享,可在线阅读,更多相关《快餐店运行模拟.docx(9页珍藏版)》请在冰点文库上搜索。
快餐店运行模拟
1.(基本分数12分)快餐店运行模拟
某快餐店供应若干种快餐和饮料(5种以上),早晨6:
00开始营业,晚上11:
00打烊。
前一天已经安排了若干工人上班,快餐店的用餐位是固定的,每种食物的成本和销售价格是确定的,每种食物的总量是确定的,储存事先准备好的各种食物的空间是确定的,顾客人数和顾客到达的时间是随机的,每人点餐的时间为一分钟,顾客用餐的时间是随机的。
营业时间里,其中7:
00—9:
00、11:
00—13:
00、17:
00—19:
00是用餐高峰期。
食物可以事先准备好,但是每种食物有不同的保鲜期,超过保鲜期的食物将被丢弃。
顾客到达后排队点餐,可能因为想要的某种食物没有准备好而等待,也可能因为准备好的食物时间较长(未过保鲜期)而等待现做的;可能因为食物售完或要等待而换成其他食物,抑或离开。
如果店里没有空位,顾客可选择等待或离开。
编写一个模拟该快餐店一天运行情况的应用程序,要求:
●设计系统需要的输入数据,并通过文本文件输入这些数据;
●生成一天模拟运行(数据信息)的报告,该报告存储在数据文件中,具体信息包括:
1.每种食物的销售数量、丢弃数量和利润(扣除成本后的收入)以及快餐店一天的总利润;
2.顾客因为食物售完或其他原因离开的人数,因为没有用餐位离开的人数;
3.顾客等待用餐位置的时间;
4.顾客等待食物的时间(每种食物一个数据);
5.每种食物不能满足顾客点餐要求的次数;
6.高峰期和非高峰期餐位的利用率。
●程序测试时应该应用多组参数,并产生不同的结果,从中判断系统结果是否符合实际,如增加用餐位,顾客等待用餐位置的时间会减少,非高峰期餐位的利用率会降低等
1.评分标准
可以运行的小课题程序将获得该题基本分(见题目文件)。
采用面向对象设计完成,加3分,否则不加分;正确性和可靠性加0-3分;界面友好性加0-3分;课题汇报加0-2分;文档和算法加0-2分(教师评分)。
以上各项加分独立给分,(基本分+加分)*4=小组总分。
当时food类里面的私有成员是用了这些标示符cost;price;total;space;make;fresh;amount;birth;
源码引用:
#include
#include
usingnamespacestd;
intgenerate_peak(intk);
intgenerate_low(intk);
intf1(intj);
intf2(intl);
boolchoose_quit();
classFood
{
private:
intcost;
intprice;
inttotal;
intspace;
intmake;
intfresh;
intamount;
intbirth;
public:
Food();
voidsift();
voidproject();
};
Food:
:
Food(intc,intp,intt,ints,intm,intf,inta,intb)
{
cost=c;
price=p;
total=t;
space=s;
make=m;
fresh=f;
amount=a;
birth=b;
}
voidFood:
:
sift()
{
intthr=0;
Foodd[50];
Foodf[j];
if(i==d[1].birth+f[j].fresh)
{
thr++;
f[j].a--;
for(intl=0;l
{
voidswift(d[l],d[l+1]);
}
}
}
voidswift(Foodd[l],Foodd[l+1])
{
intg;
g=d[l];
d[l]=d[l+1];
d[l+1]=d[l];
}
voidFood:
:
project()
{
intd[50];
intk;
if(t==0)
break;
elseif(i%5==0&&a<2s/3)
{
k=2s/3;
d[k].b=i+m;
t--;
a++;
}
}
intgenerate_peak(intm)
{
m=0;
inta=rand()%998;
if(a%3==0)
m=0;
elseif(a%3==1)
m=1;
elseif(a%3==2)
m=2;
returnm;
}
intgenerate_low(intm)
{
m=0;
inta=rand()%1000;
if(a%7==0)
m=0;
if(a%7==1||a%7==2)
m=1;
if(a%7==3||a%7==4||a%7==5||7==6)
m=2;
returnm;
}
intf1(intp)
{
p=1+rand()%5;
returnp;
}
intf2(intq)
{
q=q+rand()%5;
returnq;
}
boolchoose_quit()
{
intq=rand()%1;
if(q==1)
returntrue;
else
returnfalse;
}
classfood
{
intamount,cwait;
public:
food(inta,intw)
{
amount;
cwait=w;
}
};
intmain()
{
for(i=0;i<1020;i++)
{
Foodf[5]{(5,8,300,30,4,30),(3,5,500,50,3,60),(4,7,200,20,3,60),(5,9,400,30,4,60),(4,6,200,20,5,30)};
for(intj=0;j<5;j++)
{
f[j].sift;
f[j].project;
}
intn,Q1,Q2,m,p,q;//i是分钟数,Q1是流失人数,Q2是实际购买人数
intout[6];
for(intn=360;n<=1380;n++)
{
if(n<360||n>1380)
{
cout<<"Error!
";
returnfalse;
}
elseif((n>=420&&i<=540)||(n>=660&&i<=780)||(n>=1020&&i<=1140))
generate_peak(m);
else
generate_low(m);
}
if(m>=1)
intp=f1(p);//j是所点食物种类的数量
for(intP=p;P>=1;P--)
{
out[l]=false;
intt_max=0;
do
{
intl=f2(l);//l是所点食物在食物类中的位置
intT=food[l].order(amount);
if(T==-1)
{
out[l]=true;
if(choose_quit())
{
Q1++;
break;
}
else
{
out[l]=false;
break;
}
}
else
{
intt=food[l].order(amount);
Q2++;
if(t>t_max)
t_max=t;
returnt_max;
out[l]=true;
}
}
while(out[l]==false);
}
}
return0;
}