电话客户服务模拟

来源:互联网 发布:粉丝福利购 淘宝客 编辑:程序博客网 时间:2024/05/01 14:03

一个模拟时钟提供接听电话服务的时间(以分钟计),然后这个时钟将循环地自增1(分钟),直到到达指定的时间为止。在时钟的每个“时刻”,就会执行一次检查来看看当前电话的服务是否已经完成,如果是,这个电话从电话队列中删除,模拟服务将从队列中取出下一个电话(如果有)继续开始。同时还需要执行一个检查来判断是否有一个新的电话到达,如果有将其到达的时间记录下来,并为其产生一个随机服务时间,这个服务时间也被记录下来,然后将这个电话放入电话队列中,当客户服务人员空闲时,按照先来先服务的方式处理这个队列。当时钟到达指定时间时,不会再接听新电话,但是服务将继续,直到队列中所有电话得到处理为止。

要求:

(1)   程序需要处理的初始数据包括:客户服务人员的人数、时间限制,电话到达的速率,平均服务时间。

(2)   程序产生的结果包括:处理的电话数,每个电话的平均等待时间。

main.c

#include<stdio.h>#include<stdlib.h>#include"que.c"#define SIZE 50

struct ser{    int iswork;    int time;};

void del_que(struct que *q){    int i;    if(q->rear == 0)    {        printf("队列已空!\n");  q->front = q->rear = -1;    }    else    {        for(i = 0;i<q->rear;i++)        {            q->data[i] = q->data[i+1];        }        q->rear--;    }}

int main(){    tel = (struct que *)malloc(sizeof(struct que));    init_queue(tel);    int clock_sum_time;                           ////接听电话的总时间    int serve_num;                                ////客服人数    int enter_rate;                               ////拨入速率    int ever_serve_time;                          ////每个电话平均服务时间    int sum_tel = 0;                                  //处理的电话数    float ever_wait_time;                           //每个电话平均等待时间    int clock_time_now = 1;                       //时钟当前时间,初始化为1    int sum_time = 0;                                 //总等待时间    int i;    struct ser server[SIZE];    printf("接入电话总时间:");    scanf("%d",&clock_sum_time);    printf("电话拨入速率:");    scanf("%d",&enter_rate);    printf("输入客服人数:");    scanf("%d",&serve_num);    printf("输入客服服务时间:");    scanf("%d",&ever_serve_time);    for(i = 0;i<serve_num;i++)    {        server[i].iswork = 0;  server[i].time = ever_serve_time;    }    while(clock_time_now <= clock_sum_time)    {        for(i = 0;i<enter_rate;i++)  {     insert_que(tel,i,clock_time_now);     sum_tel+=1;  }

        for(i = 0;i<serve_num;i++)  {     if(server[i].iswork == 1)     {         server[i].time--;   if(server[i].time == 0)   {      server[i].iswork = 0;      server[i].time = ever_serve_time;   }     }  }        for(i = 0;i<serve_num;i++)  {     if(que_empty(tel) && server[i].iswork==0)     {         sum_time = sum_time+clock_time_now;   sum_time = sum_time - tel->time;         del_que(tel);   server[i].iswork = 1;     }  }        clock_time_now++;        }    while(que_empty(tel))    {                for(i = 0;i<serve_num;i++)  {     if(server[i].iswork == 1)     {         server[i].time--;   if(server[i].time == 0)   {      server[i].iswork = 0;      server[i].time = ever_serve_time;   }     }  }        for(i = 0;i<serve_num;i++)  {     if(que_empty(tel) && server[i].iswork==0)     {         sum_time = sum_time+clock_time_now;   sum_time = sum_time - tel->time;         del_que(tel);     }  }  clock_time_now++;    }    printf("sum_time = %d\n",sum_time);    ever_wait_time = (float)sum_time/sum_tel;    printf("处理的电话数为:%d\n",sum_tel);    printf("平均等待时间为:%f\n",ever_wait_time);    return 0;}que.c

#define SIZE 50

struct que{    int time;    int data[SIZE];    int front,rear;};

struct que *tel;

void init_queue(struct que *q)  //初始化队列{    q->front = q->rear = -1;}

int que_full(struct que *q)     //判断是否队满{    return q->front == (SIZE-1);}

int que_empty(struct que *q){    if(q->rear == -1)    {        printf("队列为空!\n");  return 0;    }    else    {        return 1;    }}

int insert_que(struct que *q,int num,int tm)//入队{    if(q->rear < (SIZE-2))    {        q->time = tm;        q->front = 0;        q->rear++;        q->data[q->rear] = num;        return 1;    }    else    {        return 0;    }}

void print_que(struct que *q){    int i;    for(i = 0;i<=q->rear;i++)    {        printf("%d ",q->data[i]);    }    printf("\n");}

 
	
				
		
原创粉丝点击