一、问题描述:
1、题目内容:使用队列模拟理发馆的排队现象,通过仿真手法评估其营业状况。
设某理发馆设有N把理发椅,可同时为N位顾客进行理发。当顾客进门时,若有空闲理发椅,则立即入座理发,否则依次排队候理,一旦有顾客理完发离去时,排在队头的顾客便开始理发。假若理发馆每天连续营业T小时(只要有顾客等待,理发椅就不空),求一天内顾客在理发馆内的平均逗留时间(包括理发所需时间和排队等候的时间)与顾客排队等候理发的人数的平均值(排队长度的平均值)。
2、基本要求
(1)当给定理发椅数及营业时间后,由随机数确定顾客理发时间及进门间隔时间,求出一天内顾客在理发馆平均逗留时间、平均队长及关门后收尾工作的时间。
(2)由用户读入的数据仅为理发椅数及营业时间。营业的时间以分钟计,理发椅数及关门时间均为整型,且均大于等于1。
3、测试数据
理发椅数目N及关门时间由用户读入,第一个顾客进门的时刻为0,之后每个顾客的进门时刻在前一个顾客进门时设定。即在进门事件发生时随即产生两个随机数(DU,IN),DU为进门顾客理发所需的服务时间(简称理发时间);IN为下一个顾客到达的时间间隔(简称间隔时间)。
二、实现提示:
R为由随机数发生器的随机数,顾客理发时间和顾客之间的间隔时间不妨假设与R有关,可以由下式确定:
DU=15+R%50 IN=2+R%10
确定的方法与实际越吻合,模拟的结果越接近现实的情况。
//2013-5-25
//panda
//定义客户类
//Guest.h
#pragma once
#ifndef _GUEST
#define _GUEST
class Guest
{
public:
int id; //客户id
int swtime; //记录客户进店的时间
int servertime; //服务时间
int ncgtime; //下个客户到达时间
public:
Guest(); //默认构造函数
Guest(int id,int swtime,int stime,int ncgtime);
Guest(const Guest& g); //复制构造函数
Guest& operator=(const Guest& g); //重载=运算符
};
#endif
//panda
//2013-5-21
//Queue.h
#pragma once
#ifndef _QUEUE
#define _QUEUE
#include"Guest.h"
#ifndef _LNODE
#define _LNODE
//节点结构
struct LNode{
Guest data; //值域
LNode* next; //连接指针域
};
#endif
class Queue{
private: //数据定义
LNo