一个简单的电话客服模拟器

来源:互联网 发布:单片机学好了前景好吗 编辑:程序博客网 时间:2024/04/27 17:15

#include <stdio.h>
#include <stdlib.h>

#define N 200
#define M 50

typedef struct user
{
    int intime;
    int outtime;
    int endtime;
}USER;

typedef struct server
{
    int flt;
    int servetime;
}SER;

void push(int);
USER pop(int);
void display();

USER str[N];
int front = 0;
int rear = 0;

void push(int time)
{
    str[rear].intime = time;
    rear++;
}
USER pop(int time)
{
    str[front].outtime = time;
    return str[front++];
}

void display()
{
    int t = 0;
    int k,m;
    int servenum,numper;
    USER user[M];
    SER ser[M];
    int servet[M];
    printf("请输入服务器的个数:");
    scanf("%d",&servenum);
    for(k = 0; k < servenum;k++)
    {
        printf("请输入第%d个服务器的服务时间:",k+1);
        scanf("%d",&ser[k].servetime);
        ser[k].flt = 0;
    }
    for(k = 0; k < servenum; k++)
    {
        servet[k] = ser[k].servetime;
    }
    printf("请输入每分钟进入的电话数:");
    scanf("%d",&numper);
    int i = 0;
    int j = 1;
    int tmp = 0;
    int count = 0;
    int totalcount = 0;
    int sercount = 0;
    int waitcount = 0;
    int timer;
    printf("请输入总接入时间:");
    scanf("%d",&timer);
    while(t <= (timer-1))
    {
        system("clear");
        if(tmp++)
        {

        for(k = 0; k < servenum;k++)
 {
        printf("客服%d剩余服务时间:%d\n",k + 1,ser[k].servetime - 1);
 }
 printf("\n");
        }
        if((j--) > 0)
     {
         for(k = 0;k < numper;k++)
         {
             push(t);
             count++;
             totalcount++;
             printf("有人进入等待,当前等待人数:%d:进入等待时间:%d\n",count,str[rear-1].intime);
         }
     }
     else
     {
         for(k = 0;k < numper;k++)
         {
             push(t);
             count++;
             totalcount++;
             printf("有人进入等待,当前等待人数:%d:进入等待时间:%d\n",count,str[rear-1].intime);
         }
     }
     for(k = 0;k < servenum;k++)
     {
         if(ser[k].flt == 1)
         {
             ser[k].servetime--;
             if(ser[k].servetime == 0)
             {
                 user[j].endtime = t;
              printf("客服%d服务结束:结束时间:%d\n",k+1,user[j].endtime);
       sercount++;
              j++;
                 ser[k].servetime = servet[k];
              ser[k].flt = 0;
             }
         }
     }
     for(k = 0;k < servenum; k++)
     {
            if(ser[k].flt == 0)
         {
      if(count != 0)
      {
      count--;
             ser[k].flt = 1;
             user[i] = pop(t);
             printf("客服%d空闲:进入服务时间:%d\n",k+1,user[i].outtime);
             waitcount = waitcount + (t - str[front-1].intime);
             printf("当前等待人数:%d\n",count);
             i++;
      }
      else
      {
          printf("客服%d空闲,无人等待服务!\n",k+1);
      }
         }
     }
     sleep(2);
     t++;
     system("clear");
     //printf("\n");
    }
    printf("接入入口关闭!现在处理等待的人员!\n");
    while(1)
    {

        for(k = 0; k < servenum;k++)
 {
        printf("客服%d剩余服务时间:%d\n",k + 1,ser[k].servetime - 1);
 }
 printf("\n");
        for( k = 0; k < servenum; k++)
        {
         if(ser[k].flt == 1)
         {
             ser[k].servetime--;
             if(ser[k].servetime == 0)
             {
                 user[j].endtime = t;
              printf("客服%d服务结束:结束时间:%d\n",k+1,user[j].endtime);
       sercount++;
                    j++;
                 ser[k].servetime = servet[k];
              ser[k].flt = 0;
             }
         }
        }
        for( k = 0; k< servenum; k++)
        {
            if(ser[k].flt == 0)
         {
             user[i] = pop(t);
             printf("客服%d空闲:进入服务时间:%d\n",k+1,user[i].outtime);
             waitcount = waitcount + (t - str[front-1].intime);
             count--;
             printf("当前等待人数:%d\n",count);
             ser[k].flt = 1;
             i++;
             if(count == 0)
             {
                 goto loop;
             }
         }
        }
     sleep(2);
             system("clear");
     t++;
    }
    if(0)
    {
    loop:
    while(totalcount != sercount)
    {
        system("clear");
                for(k = 0; k < servenum;k++)
 {
        printf("客服%d剩余服务时间:%d\n",k + 1,ser[k].servetime - 1);
 }
 printf("\n");
    t++;
    for(k = 0; k < servenum; k++)
    {
        if(ser[k].flt != 0)
        {
            ser[k].servetime--;
         if(ser[k].servetime == 0)
         {
         user[j].endtime = t;
         printf("客服%d服务结束:结束时间:%d\n",k+1,user[j].endtime);
  sercount++;
  if(sercount == totalcount)
  {
      goto end;
  }
         j++;
         ser[k].servetime = servet[k];
         ser[k].flt = 0;
         }
        }
    }
    sleep(2);
    printf("\n");
    }
    end:
    printf("一个接了%d个电话\n",totalcount);
    printf("平均每分钟处理%f个电话\n",t / (float)totalcount);
    printf("平均等待时间:%f\n",waitcount / (float)totalcount);
    printf("欢迎使用电话模拟系统!\n");
    exit(-1);
    }
}
int main()
{
    display();
    return 0;
}

原创粉丝点击