欢迎来到天天文库
浏览记录
ID:37508245
大小:128.50 KB
页数:12页
时间:2019-05-24
《理发馆排队系统仿真》由会员上传分享,免费在线阅读,更多相关内容在行业资料-天天文库。
1、理发馆排队系统仿真一.仿真问题理发馆一天的工作情况如下:1)理发馆有n把理发椅,可同时为n位顾客理发。2)理发师不分等级,只要有顾客需要服务,就可理发。3)当顾客进门时,只要有理发师有空椅,就可坐下理发,否则需排队等候。4)一旦有理发师的顾客理发完离去,排在对头的顾客便可开始理发。5)若理发馆每天营业T分钟,求:一天内顾客在理发馆内平均逗留的时间;顾客排队等候理发的队列长度平均值;统计每天的营业额。二.基本要求1)模拟理发馆一天的工作过程:必须采用事件驱动的离散模型;2)每个顾客到达和下个顾客到达的时间间隔是随机的;3)理发师编号和每天的营业时间由用户输入;4)某顾客挑选理发师而不
2、得时,选第一个队列排队等候;5)每个顾客进门时都将生成三个随机数:1>durtime:进门顾客理发所需服务时间(简称理发时间)2>intertime:下个顾客将到达的时间间隔(简称间隔时间)3>select:服务选项4>服务收费:包含服务时间;5>除了输出统计的数据外,还需要显示理发馆的状态;三.测试数据:用户输入椅子数,营业时间,结合随机数进行测试。四.实现提示:本题设计两个抽象数据类型,队列抽象数据类型:登录排队等候理发的顾客情况。每个元素应包括顾客进门时刻、理发所需时间。N把椅子对应N个队列。事件链表抽象数据类型:登录顾客进门事件、出门事件。每个事件应包括事件类型(进门事件类
3、型为0,出门事件类型按N把椅子所排队列分为为1、2、...N)和事件发生的时刻occurtime。为便于按事件发生先后顺序逐一处理事件,事件表应按“时刻”有序。对理发椅需要进行编号。五.问题讨论:1)顾客排队前,可以在等待该理发师的各个队列中,选择最短队列。2)更进一步,顾客可以选择最快队列(设计选最快的策略)。3)可以发挥创造性,采用更直观漂亮的图形方式显示理发馆的状态。六.程序代码:#include"stdlib.h"#include"stdio.h"#include"conio.h"#defineMAX30000//宏定义#defineTRUE1#defineFALSE0#d
4、efineRrand()floatwait_length;//等待队列的总长度inttotalnum;//总共顾客数floattotaltime;//顾客理发所需总时间intcurtime;//当前时间intchairnum;//当前可用的椅子数intaddtime;//扫尾工作时间typedefstructcustomer{intNO;//编号intintime;//进入理发店时间intdurtime;intintertime;intstarttime;//开始理发时间intleavetime;//离开理发店的时间intserve_flag;//是否在理发}customer;cu
5、stomercus[MAX];typedefstructQnode{intnum;//理发者的编号structQnode*next;}Qnode,*QueuePtr;typedefstruct{QueuePtrfront;//队头指针QueuePtrrear;//队头指针}LinkQueue;LinkQueueW;//等待队列voidInitQueue(LinkQueue&Q)//队列初始化{Q.front=Q.rear=(QueuePtr)malloc(sizeof(Qnode));Q.front->next=NULL;}voidoutQueue(LinkQueue&Q)//输出
6、队列中的元素{QueuePtrp;p=Q.front;while(p->next){p=p->next;printf("%d",p->num);}printf("");}intQueue_Length(LinkQueue&Q)//求等待队列的当前长度{intlength=0;QueuePtrp;p=Q.front;while(p->next){p=p->next;++length;}returnlength;}voidEnQueue(LinkQueue&Q,inte)//将编号为e的顾客插入队尾{QueuePtrp;p=(QueuePtr)malloc(sizeof(Qnode))
7、;p->num=e;p->next=NULL;Q.rear->next=p;Q.rear=p;}intDeQueue(LinkQueue&Q)//队头元素出队,并用e返其编号{QueuePtrp;inte;p=Q.front->next;e=p->num;Q.front->next=p->next;if(Q.rear==p)Q.rear=Q.front;free(p);returne;}intQueueEmpty(LinkQueue&Q)//判断等待队列是否为空,若空
此文档下载收益归作者所有