- 1、本文档共13页,可阅读全部内容。
- 2、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
- 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多
理发馆排队系统仿真
理发馆排队系统仿真
一.仿真问题
理发馆一天的工作情况如下:
理发馆有n把理发椅,可同时为n位顾客理发。
理发师不分等级,只要有顾客需要服务,就可理发。
当顾客进门时,只要有理发师有空椅,就可坐下理发,否则需排队等候。
一旦有理发师的顾客理发完离去,排在对头的顾客便可开始理发。
若理发馆每天营业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 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=NULL;
}
void outQueue(LinkQueue Q)
文档评论(0)