免费预览已结束,剩余1页可下载查看
下载本文档
版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
理发馆排队系统仿真 一仿真问题理发馆一天的工作情况如下:1) 理发馆有n把理发椅,可同时为n位顾客理发。2) 理发师不分等级,只要有顾客需要服务,就可理发。3) 当顾客进门时,只要有理发师有空椅,就可坐下理发,否则需排队等候。4) 一旦有理发师的顾客理发完离去,排在对头的顾客便可开始理发。5) 若理发馆每天营业T分钟,求: 一天内顾客在理发馆内平均逗留的时间;顾客排队等候理发的队列长度平均值;统计每天的营业额。二基本要求1) 模拟理发馆一天的工作过程:必须采用事件驱动的离散模型;2) 每个顾客到达和下个顾客到达的时间间隔是随机的;3) 理发师编号和每天的营业时间由用户输入;4) 某顾客挑选理发师而不得时,选第一个队列排队等候;5) 每个顾客进门时都将生成三个随机数:1durtime:进门顾客理发所需服务时间(简称理发时间)2intertime:下个顾客将到达的时间间隔(简称间隔时间)3select:服务选项4服务收费:包含服务时间;5除了输出统计的数据外,还需要显示理发馆的状态;三测试数据:用户输入椅子数,营业时间,结合随机数进行测试。四实现提示:本题设计两个抽象数据类型,队列抽象数据类型:登录排队等候理发的顾客情况。每个元素应包括顾客进门时刻、理发所需时间。N把椅子对应N个队列。事件链表抽象数据类型:登录顾客进门事件、出门事件。每个事件应包括事件类型(进门事件类型为0,出门事件类型按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 rand()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; /是否在理发customer;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(LinkQueue &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(sizeof(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 customer_serve(int n) /为顾客理发 cusn.starttime=curtime; cusn.leavetime=cusn.durtime+curtime; chairnum-; /当前可用理发椅数减1 cusn.serve_flag=TRUE; void customer_in() /顾客进入理发店 totalnum+; custotalnum.NO=totalnum; ime=curtime; /记录顾客进入时间 custotalnum.durtime=15+R%50; ertime=2+R%10; if(QueueEmpty(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=ime+totaltime; void list() /输出 float 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);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(ime+ertime)=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.leav
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 基金会档案管理制度
- 电脑安装维修公司副总经理述职报告
- 2026年秋招:甘肃公路航空旅游投资集团面试题及答案
- 2026年秋招:风险控制面试题及答案
- 2026年秋招:电商运营面试题及答案
- 2026年秋招:大模型开发试题及答案
- 财务报表编制流程SOP-含报表模板和编制说明
- 中小学生交通安全教育主题班会课件【文字版】
- T/AIMC 015-2025啤酒数字标签编码与标识规范
- 多角度选材和感受生活用于初中作文
- AI辅助的药物发现与分子设计
- 亚朵酒店卫生管理制度
- 2025年口腔综合考研真题及答案
- 肝硬化临床诊治管理指南2025版解读
- 医院消毒剂知识培训小结课件
- 2025-2026学年泰山版(2024)小学信息科技五年级上册(全册)教学设计(附目录P143)
- 2025年上海市浦东新区社区工作者招聘考试(综合能力测验)历年参考题库含答案详解(5套)
- TCNAS 39─2023成人手术后疼痛评估与护理
- 2025年医药商品储运员职业技能考试题库(含答案)
- JC-T 1099-2023 硫铝酸钙改性硅酸盐水泥
- 临终关怀陪护服务实施方案
评论
0/150
提交评论