电话客户服务模拟

来源:互联网 发布:淘宝店铺怎么改支付宝 编辑:程序博客网 时间:2024/05/01 19:42

1、 问题描述

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

2、 要求

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

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

 

 

#include"stdio.h"#include"stdlib.h"#include"time.h"int server[10];int total;int count = 1;float sum = 0;int reachtime;int temp[10];typedef struct quene{    int reach;    struct quene *next;}que;que *head = NULL;que *last = NULL;#if 0time_t t;time(&t);struct tm *t1;#endifvoid create(){    que *p = (que *)malloc(sizeof(que));    if(head == NULL)    {        p->reach = reachtime; head = p; last = p;    }    else    {        p->reach = reachtime; last->next = p; last = p;    }    last->next = NULL;}void deque(){    if(head == NULL)    {        printf("处理剩余的客户完成\n"); printf("共接待%d个客户,平均等待时间为%f分钟/个\n",count-1,sum/(count-1)); printf("欢迎使用本电话客服模拟系统,see you!\n"); exit(-1);    }    else    {        printf("正在接入第%d个客户\n",count);        que *q = head; head = head->next; sum = sum + (reachtime-q->reach); free(q); q = NULL;    }}int main(){    int x;    int i;    char get;    int reach;    int maxtime;    int j;    while(1)    {        printf("请输入 y 开始模拟\n");        scanf(" %c",&get); if( get == 'y') {     printf("开始模拟\n");     break; } else {     printf("输入有误,请重新输入\n"); }    }    printf("本程序服务时间以秒计\n");    printf("请输入有多少个客服1-10个\n");    scanf("%d",&total);    printf("下面开始定义每个客服的平均服务时间\n");    for(i=1;i<=total;i++)    {        printf("请定义第%d个客服平均服务时间:",i); scanf("%d",&server[i]); temp[i] = server[i];    }    printf("定义成功\n");    printf("请定义每分钟来几个电话:\n");    scanf("%d",&reach);    printf("请定义开放本系统时间:");    scanf("%d",&maxtime);    printf("初始化系统完成\n");    for(i = 1;i <= maxtime;i++)    {        reachtime = i;        printf("第%d分钟时刻,来到%d个电话\n",i,reach); x = reach; while(x) {     create();     x--; } printf("正在查询是否有客服空闲\n"); if(i == 1) {     for(j = 1;j <= total;j++)            {         printf("第%d个客服空闲,",j);  if(head == NULL)  {      printf("但队列已空,所以等待用户接入\n");      server[j] = 0 ;  }  else  {      deque();      count++;  }     } } else {     for(j=1;j <= total;j++)     {  if(server[j] == 0 || server[j] == -1)  {      printf("第%d个客服空闲,",j);      if(head == NULL)      {          printf("但队列已空,所以等待用户接入\n");   server[j] = 0;      }      else      {                 deque();          count++;          server[j] = temp[j];      }  }     } } for(j = 1;j <= total;j++) {     server[j]--; }      }    printf("系统关闭,处理队列中剩余的元素\n");    while( head != NULL)    {        reachtime++;        for(j = 1;j<=total;j++) {     if(server[j] == 0)     {         printf("第%d个客服空闲,",j);                deque();  count++;  server[j] = temp[j];     } } for(j =1;j<=total;j++) {     server[j]--; }    }    printf("共接待%d个客户,平均等待时间为%f分钟/个\n",count-1,sum/(count-1));    printf("欢迎使用本电话客服模拟系统,see you!\n");    #if 0    printf("服务开始时间为:");    t1 = localtime(&t);    printf("%d年%d月%d日%d时%d分%d秒\n",t1->tm_year,t1->tm_mon,t1->tm_mday,t1->tm_hour,t1->tm_min,t1->tm_sec);    #endif    return 0;} 


 

原创粉丝点击