理发馆排队系统仿真

上传人:仙*** 文档编号:155321356 上传时间:2022-09-23 格式:DOC 页数:12 大小:128.50KB
收藏 版权申诉 举报 下载
理发馆排队系统仿真_第1页
第1页 / 共12页
理发馆排队系统仿真_第2页
第2页 / 共12页
理发馆排队系统仿真_第3页
第3页 / 共12页
资源描述:

《理发馆排队系统仿真》由会员分享,可在线阅读,更多相关《理发馆排队系统仿真(12页珍藏版)》请在装配图网上搜索。

1、 理发馆排队系统仿真 一仿真问题理发馆一天的工作情况如下:1) 理发馆有n把理发椅,可同时为n位顾客理发。2) 理发师不分等级,只要有顾客需要服务,就可理发。3) 当顾客进门时,只要有理发师有空椅,就可坐下理发,否则需排队等候。4) 一旦有理发师的顾客理发完离去,排在对头的顾客便可开始理发。5) 若理发馆每天营业T分钟,求: 一天内顾客在理发馆内平均逗留的时间;顾客排队等候理发的队列长度平均值;统计每天的营业额。二基本要求1) 模拟理发馆一天的工作过程:必须采用事件驱动的离散模型;2) 每个顾客到达和下个顾客到达的时间间隔是随机的;3) 理发师编号和每天的营业时间由用户输入;4) 某顾客挑选理

2、发师而不得时,选第一个队列排队等候;5) 每个顾客进门时都将生成三个随机数:1durtime:进门顾客理发所需服务时间(简称理发时间)2intertime:下个顾客将到达的时间间隔(简称间隔时间)3select:服务选项4服务收费:包含服务时间;5除了输出统计的数据外,还需要显示理发馆的状态;三测试数据:用户输入椅子数,营业时间,结合随机数进行测试。四实现提示:本题设计两个抽象数据类型,队列抽象数据类型:登录排队等候理发的顾客情况。每个元素应包括顾客进门时刻、理发所需时间。N把椅子对应N个队列。事件链表抽象数据类型:登录顾客进门事件、出门事件。每个事件应包括事件类型(进门事件类型为0,出门事件

3、类型按N把椅子所排队列分为为1、2、.N)和事件发生的时刻occurtime。为便于按事件发生先后顺序逐一处理事件,事件表应按“时刻”有序。对理发椅需要进行编号。五问题讨论:1) 顾客排队前,可以在等待该理发师的各个队列中,选择最短队列。2) 更进一步,顾客可以选择最快队列(设计选最快的策略)。3) 可以发挥创造性,采用更直观漂亮的图形方式显示理发馆的状态。六程序代码:#include stdlib.h #include stdio.h#include conio.h#define MAX 30000 /宏定义#define TRUE 1#define FALSE 0#define R ran

4、d()float wait_length; /等待队列的总长度int totalnum; /总共顾客数float totaltime; /顾客理发所需总时间 int curtime; /当前时间int chairnum; /当前可用的椅子数int addtime; /扫尾工作时间typedef struct customer int NO; /编号 int intime; /进入理发店时间 int durtime; int intertime; int starttime; /开始理发时间 int leavetime; /离开理发店的时间 int serve_flag; /是否在理发custo

5、mer;customer cusMAX;typedef struct Qnode int num; /理发者的编号 struct Qnode *next;Qnode,*QueuePtr;typedef structQueuePtr front; /队头指针 QueuePtr rear; /队头指针LinkQueue;LinkQueue W; /等待队列void InitQueue(LinkQueue &Q) /队列初始化 Q.front=Q.rear=(QueuePtr)malloc(sizeof(Qnode); Q.front-next=NULL;void outQueue(LinkQueu

6、e &Q) /输出队列中的元素 QueuePtr p; p=Q.front; while(p-next) p=p-next; printf(%d,p-num); printf( );int Queue_Length(LinkQueue &Q) /求等待队列的当前长度 int length=0; QueuePtr p; p=Q.front; while(p-next) p=p-next; +length; return length;void EnQueue(LinkQueue &Q,int e) /将编号为e的顾客插入队尾 QueuePtr p; p=(QueuePtr)malloc(size

7、of(Qnode); p-num=e; p-next=NULL; Q.rear-next=p; Q.rear=p;int DeQueue(LinkQueue &Q) /队头元素出队,并用e返其编号 QueuePtr p; int e; p=Q.front-next; e=p-num; Q.front-next=p-next; if(Q.rear=p) Q.rear=Q.front; free(p); return e;int QueueEmpty(LinkQueue &Q)/判断等待队列是否为空,若空返回1 return(Q.front=Q.rear? TRUE:FALSE);void cus

8、tomer_serve(int n) /为顾客理发 cusn.starttime=curtime; cusn.leavetime=cusn.durtime+curtime; chairnum-; /当前可用理发椅数减1 cusn.serve_flag=TRUE; void customer_in() /顾客进入理发店 totalnum+; custotalnum.NO=totalnum; custotalnum.intime=curtime; /记录顾客进入时间 custotalnum.durtime=15+R%50; custotalnum.intertime=2+R%10; if(Queu

9、eEmpty(W) & chairnum0) customer_serve(totalnum); /有空闲位置并无人参与竞争,调用服务函数 else custotalnum.serve_flag=FALSE; /否则入队等待 EnQueue(W,totalnum); wait_length+=Queue_Length(W); /累计队长 void customer_leave(int n) /顾客离开理发店 cusn.serve_flag=FALSE; chairnum+; totaltime=curtime-cusn.intime+totaltime; void list() /输出 flo

10、at aver_serve_time,aver_wait_len; /顾客平均等待时间,顾客平均等待长度 aver_serve_time=totaltime/totalnum; aver_wait_len=wait_length/totalnum; printf(一天内顾客在理发馆内的平均逗留时间: %f n,aver_serve_time); printf(顾客排队等候理发的队列长度平均值: %f n,aver_wait_len); printf(营业时间到点后仍需完成服务的收尾工作时间: %d n,addtime); printf(一天内的营业额为: %d n,totalnum+300);

11、void main() int i,N,T,max; curtime=0,totaltime=0,totalnum=0,wait_length=0; printf(理发店的椅子数: ); scanf(%d,&N); chairnum=N; printf(请输入营业时间(分钟): ); scanf(%d,&T); InitQueue(W); customer_in(); while(curtime+T) /当前时间属于营业时间,允许顾客进入 for(i=1;i0 & !QueueEmpty(W) /让等待队列中的人去理发 customer_serve(DeQueue(W); if(custota

12、lnum.intime+custotalnum.intertime)=curtime) customer_in(); /判断是否有人符合要进的条件 while(!QueueEmpty(W) curtime+; for(i=1;i0 & !QueueEmpty(W) /让等待队列中的人去理发 customer_serve(DeQueue(W); max=cus1.leavetime; /求出最后离开的顾客的离开时间 for(i=2;i=totalnum;i+) max = max cusi.leavetime ? cusi.leavetime : max; while(curtime+max) /队列为空,继续为正在理发的顾客服务 for(i=1;i=totalnum;i+) if(cusi.serve_flag=TRUE)&(cusi.starttime+cusi.durtime=curtime) customer_leave(i); addtime=max-T; list(); getch();

展开阅读全文
温馨提示:
1: 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
2: 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
3.本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
5. 装配图网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
关于我们 - 网站声明 - 网站地图 - 资源地图 - 友情链接 - 网站客服 - 联系我们

copyright@ 2023-2025  zhuangpeitu.com 装配图网版权所有   联系电话:18123376007

备案号:ICP2024067431-1 川公网安备51140202000466号


本站为文档C2C交易模式,即用户上传的文档直接被用户下载,本站只是中间服务平台,本站所有文档下载所得的收益归上传人(含作者)所有。装配图网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。若文档所含内容侵犯了您的版权或隐私,请立即通知装配图网,我们立即给予删除!