理发馆排队系统仿真教学文稿.doc

  1. 1、本文档共8页,可阅读全部内容。
  2. 2、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
  3. 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载
  4. 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多
理发馆排队系统仿真 一.仿真问题 理发馆一天的工作情况如下: 理发馆有n把理发椅,可同时为n位顾客理发。 理发师不分等级,只要有顾客需要服务,就可理发。 当顾客进门时,只要有理发师有空椅,就可坐下理发,否则需排队等候。 一旦有理发师的顾客理发完离去,排在对头的顾客便可开始理发。 若理发馆每天营业T分钟,求: 一天内顾客在理发馆内平均逗留的时间; 顾客排队等候理发的队列长度平均值; 统计每天的营业额。 二.基本要求 1) 模拟理发馆一天的工作过程:必须采用事件驱动的离散模型; 2) 每个顾客到达和下个顾客到达的时间间隔是随机的; 3) 理发师编号和每天的营业时间由用户输入; 4) 某顾客挑选理发师而不得时,选第一个队列排队等候; 5) 每个顾客进门时都将生成三个随机数: 1>durtime:进门顾客理发所需服务时间(简称理发时间) 2>intertime:下个顾客将到达的时间间隔(简称间隔时间) 3>select:服务选项 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 cus[MAX]; typedef struct Qnode { int num; //理发者的编号 struct Qnode *next; }Qnode,*QueuePtr; typedef struct { QueuePtr front; //队头指针 QueuePtr rear; //队头指针 }LinkQueue; LinkQueue W; //等待队列 void InitQueue(LinkQueue &Q) //队列初始化 { Q.front=Q.rear=(QueuePtr)malloc(sizeof(Qnode)); Q.front->next=N

文档评论(0)

158****8111 + 关注
实名认证
内容提供者

该用户很懒,什么也没介绍

1亿VIP精品文档

相关文档