📄 haircut.cpp
字号:
/************************************************************************************
数据结构期中大作业 20032350 刘伊雯 20032379 杨婧怡
1。本文件为理发馆仿真模拟程序主入口文件
2。该模拟程序利用两种数据结构:
1〉链表:存储进入理发序列的顾客信息,其中Event结构包括OccurTime和NType两个元素
i) 如果顾客已开始理发,OccurTime存储理发时间,NType等于1
ii) 如果未到关门时间,则链表第一个元素(即head.next指向元素)的
OccurTime存储下一个顾客进门时间,NType等于0
2〉队列:如果顾客数大于椅子数,队列存储排队顾客信息,其中QElemType结构包括:
ArrivalTime,表示顾客进门时间
Duration,表示顾客理发时间
3。头文件:
1〉simulation.h 理发仿真实现程序
2〉linklist.h 链表操作集程序
3〉queue.h 队列操作集程序
4〉common.h 定义文件
*************************************************/
#include "common.h"
#include "Linklist.h"
#include "Queue.h"
#include "simulation.h"
void main()
{
int t=0;
char control;
double income;
//初始化链表、队列,读入椅子数及关门时间
OpenForDay();
if(CloseTime==0)
cout<<endl;
else
{ cout<<"随机产生数据请输入0,手动输入请输入1:"<<endl;
cin>>control;
if(control=='0')
{
//随机生成顾客到达情况
//如果用户选择显示顾客到达时刻表,则打印题头
cout<<"4. 想查看顾客到达时刻表吗?(1是2否)";
cin>>ShowTbl;
cout<<endl;
if(ShowTbl==1)
{
cout<<"******************************************************************"<<endl<<endl;
cout<<" 〉 顾客到达时刻一览表 〈"<<endl<<endl;
}
//循环判断如果链表非空,就继续处理(理发),直到关门时间不再有新顾客进入,
//并且完成收尾工作后,链表为空,一天工作结束
while(!ListEmpty(ev))
{
//取出链表第一个元素到en(表示将要纳入相应处理程序的顾客),同时从链表中删除之
DelFirst(ev,en);
if(en.NType==0)
{
//如果NType==0表示顾客en还未开始理发,将其纳入理发程序
CustomerArrived1();
}
else
{
//如果NType==1表示顾客en已理发完毕,将其纳入离店程序,同时检测是否有排队等候顾客
CustomerDeparture();
}
}
}
else
{
//手动输入顾客到达情况
while(!ListEmpty(ev))
{
DelFirst(ev,en);
if(en.NType==0) CustomerArrived2();
else CustomerDeparture();
}
}
income=N*Totaltime;
//如果用户选择显示顾客到达时刻表,则打印题尾
if(ShowTbl==1)
{
cout<<endl<<"说明:"<<endl;
cout<<"Durtime表示当前顾客所需理发时间;"<<endl;
cout<<"Intertime表示下一个顾客到达的时间间隔;"<<endl;
}
//输出模拟结果
cout<<endl<<"******************************************************************"<<endl<<endl;
switch (CustomerNum/5)
{
case 0:
cout<<"唉,生意不好做啊!今天才接待了"<<CustomerNum<<"个顾客……"<<endl;
break;
case 1:
cout<<"嗯,今天还说得过去,接待了"<<CustomerNum<<"个顾客,总算没亏本……";
cout<<"小赚RMB "<<income<<endl;
break;
default:
cout<<"哈,太棒了!今天竟然接待了"<<CustomerNum<<"个顾客,大赚一笔……";
cout<<"竟然赚了RMB "<<income<<endl;
break;
}
cout<<endl<<"好,现在让我来具体算算:"<<endl;
cout<<"1. 每个顾客平均在店里呆了"<<setprecision(3)<<Totaltime/CustomerNum<<"分钟"<<endl;
cout<<"2. 让顾客排队等候理发的队伍长度平均是"<<Totallength/CustomerNum<<endl;
t=(t1>=t2)?t1:t2;
cout<<"3. 到关门时间后,又用了"<<t-CloseTime<<"分钟完成收尾工作"<<endl;
cout<<endl<<"******************************************************************"<<endl<<endl;
}}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -