大侠,帮忙看看吧

No001 2006-07-01 10:14:17
理发店系统仿真
要开设一个理发店,需要若干理发师,
每个理发师的月薪是1000元,顾客理发的收费标准是每个顾客理发收费10元,
顾客以随机的方式到达理发店,假设每个理发师为一个顾客理发所用的时间是固定的,
顾客到达理发店后,如果理发店有空闲的理发师,则空闲理发师(任意一个)为顾客服务(理发),
如果顾客到达理发店后没有理发师空闲,则该顾客排队等待理发;当一个理发师为一个顾客理发结束时,
如果还有排队等待理发的顾客,则该理发师为排在最前面的顾客理发。
假设:
(1) 理发店每天的开业时间是10小时(10*60=600分钟);
(2) 顾客到达的时间间隔服从指数分布(参数为2分钟);
(3) 一个月为30天(30*10*60=18000分钟);
(4) 一个理发师为一个顾客理发需要20分钟。
要求:
建立一个仿真模型,研究理发店分别雇佣1、2、3、4、…10个理发师的情况下,理发店每月的收益

-----------------------------------------------------------------------------------

#include <stdlib.h> /*头文件*/
#include <math.h>
#include <stdio.h>
#define MAX 1000
#define ERROR 0
#define OVERFLOW
#define TRUE 1
#define NULL 0
#define FALSE 0
#define status int
#define R rand()

float wait_length; /*等待总长度*/
float totalnum; /*总共顾客数*/
float totaltime; /*顾客理发所需总时间*/
int start; /*开张时间*/
int curtime; /*当前时间*/
int N_valid; /*可用椅子数*/
int T,N;


typedef struct customer
{
int NO; /*编号*/
int durtime; /*理发所需时间*/
int intime; /*进入理发店时间*/
int starttime; /*开始理发时间*/
int interval; /*他的下一个人到来的时间间隔*/
int wait_flag,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;
}

status Queue_Length(LinkQueue *Q) /*求等待队列的当前长度*/
{
Qnode *p;
int length;
length=0;
p=Q->front->next;
while (p!=NULL)
{
length++;
p=p->next;
}
return length;
}

void EnQueue(LinkQueue *Q,int e) /*入队*/
{
QueuePtr p;
wait_length+=Queue_Length(W)+1;
p=(QueuePtr)malloc(sizeof(Qnode));
p->num=e;
p->next=NULL;
Q->rear->next=p;
Q->rear=p;
}

status DeQueue(LinkQueue *Q) /*出队*/
{
Qnode *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;
}

status QueueEmpty(LinkQueue *Q) /*判断等待队列是否为空*/
{
return(Q->front==Q->rear? TRUE:FALSE);
}


void customer_serve(int n) /*为顾客理发*/
{
cus[n].starttime=curtime;
N_valid--;
cus[n].serve_flag=TRUE;
cus[n].wait_flag=FALSE;
totaltime+=cus[n].durtime;

}

void customer_in() /*顾客进入理发店*/
{
/* srand(time(0)); 每次产生不同的随机数*/
totalnum++;
cus[totalnum].NO=totalnum;
cus[totalnum].intime=curtime; /*记录顾客进入时间*/
cus[totalnum].durtime=15+R%50; /*产生随机数记录顾客理发所需时间*/
cus[totalnum].interval=2+R%10; /*此顾客的下一个顾客来的时间间隔*/
if(QueueEmpty(W)&&N_valid>0)
customer_serve(totalnum); /*有空闲位置并无人参与竞争,调用服务函数*/
else
{
cus[totalnum].wait_flag=TRUE; /*否则入队等待*/
EnQueue(W,cus[totalnum].NO);
}

}

void customer_leave(int n) /*顾客离开理发店*/
{
cus[n].serve_flag=FALSE;
N_valid++;
}

void list() /*打印所有值*/
{
int i;
int JinE=10;
int GongZ=1000;
int ShouY=0;
float aver_serve_time,aver_wait_len; /*顾客平均等待时间,顾客平均等待长度*/
aver_serve_time=totaltime/totalnum;
aver_wait_len=wait_length/totalnum;
printf("\n\n&&&&&&&&&&There are all the information you want :&&&&&&&&&&&&&\n");
printf(" NO(BianH) in(JinRShJ) start(KaiShShJ) durtime(liFaShJ) leave(XiaCJGShJ)");
for(i=1;i<=totalnum;i++)
printf("\n%5d%13d%14d%17d%14d",cus[i].NO,cus[i].intime+start,cus[i].starttime+start,cus[i].durtime,cus[i].starttime+cus[i].durtime+start);
printf("\n***************************************************************");
printf("\n* *");
printf("\n* The total number is : %2d *",i-1);
printf("\n* The average time is: %6.2f *",aver_serve_time);
printf("\n* The average waiting length is : %6.2f *",aver_wait_len);
printf("\n* JinE : %6.2f *",10*totalnum - 1000);
printf("\n* totalnum : %6.2f *",totalnum);
printf("\n* start : %6.2f *",totalnum);
printf("\n***************************************************************\n");
/*printf("\n* totalnum : %6.2f *",totalnum start);*/
return;
}



main()
{
int i;
curtime=0;
totaltime=0,totalnum=0,wait_length=0;
printf("Please input the total number of the chairs(FuWuZongShu) :\n");
scanf("%d",&N);
N_valid=N;
printf("Please input the very clock you want to start to run such as 8 clock(KaiYeShiJian)?:\n");
scanf("%d",&start);
printf("Please input the total running time(DangQianShiJian):\n");
scanf("%d",&T);
InitQueue(W);
customer_in();
while(curtime<T) /*当前时间属于营业时间,允许顾客进入、为顾客服务*/
{
curtime++; /*当前时间*/
for(i=1;i<=totalnum;i++)
{ /*判断有没有人离开*/
if((cus[i].serve_flag==TRUE)&&(cus[i].starttime+cus[i].durtime==curtime))
customer_leave(i);
}
while(N_valid>0&&!QueueEmpty(W)) /*让等待队列中的人去理发*/
customer_serve(DeQueue(W));
/*判断是否有人符合要进的条件*/
if((cus[totalnum].intime+cus[totalnum].interval)==curtime)
customer_in();

}
while(!QueueEmpty(W)) /* 为等待的顾客服务,但 不允许顾客进来了*/
{
curtime++;
for(i=1;i<=totalnum;i++)
{ /*判断有没有人离开*/
if((cus[i].serve_flag==TRUE)&&(cus[i].starttime+cus[i].durtime==curtime))
customer_leave(i);
}
while(N_valid>0&&!QueueEmpty(W)) /*让等待队列中的人去理发*/
customer_serve(DeQueue(W));
}
list();
getch();
}


-----------------------------------------------------------------------------------

上面是C的代码,,哪位大侠帮我改成VC++的代码啊,小弟没有学呢,,帮帮我把 谢谢
...全文
250 3 打赏 收藏 转发到动态 举报
写回复
用AI写文章
3 条回复
切换为时间正序
请发表友善的回复…
发表回复
WecanHuang 2006-07-03
  • 打赏
  • 举报
回复
up
mynamelj 2006-07-02
  • 打赏
  • 举报
回复
或你联系我,帮你搞定! QQ:154828
mynamelj 2006-07-02
  • 打赏
  • 举报
回复
这样的东西用C语言来写?随便用PB三下就搞定!

16,472

社区成员

发帖
与我相关
我的任务
社区描述
VC/MFC相关问题讨论
社区管理员
  • 基础类社区
  • Web++
  • encoderlee
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告

        VC/MFC社区版块或许是CSDN最“古老”的版块了,记忆之中,与CSDN的年龄几乎差不多。随着时间的推移,MFC技术渐渐的偏离了开发主流,若干年之后的今天,当我们面对着微软的这个经典之笔,内心充满着敬意,那些曾经的记忆,可以说代表着二十年前曾经的辉煌……
        向经典致敬,或许是老一代程序员内心里面难以释怀的感受。互联网大行其道的今天,我们期待着MFC技术能够恢复其曾经的辉煌,或许这个期待会永远成为一种“梦想”,或许一切皆有可能……
        我们希望这个版块可以很好的适配Web时代,期待更好的互联网技术能够使得MFC技术框架得以重现活力,……

试试用AI创作助手写篇文章吧