Segundo Trabalho Prático

CI056 - 2010/2

Controle de atendimento telefônico

Uma pequena empresa tem seu serviço de atendimento ao cliente feito através de uma unidade de resposta audível (URA) e uma única telefonista. A URA serve para os clientes digitarem seu tipo de atendimento. A URA também pode ser utilizada para controlar a prioridade das ligações e a fila de espera. Como o numero de clientes tem crescido muito é preciso ajudar a URA a controlar esta prioridade.

As regras são as seguintes:

Entrada:

A entrada deve ser feita pela entrada padrão (stdin). O arquivo é formado por uma sequência de linhas, onde cada linha representa um ligação chegando. Cada linha tem 3 campos: o primeiro é o tempo em que a ligação chega (em minutos), o segundo é o tipo (uma string de no máximo 3 caracteres), e o terceiro é o identificador do ligação (uma string de no máximo 3 caracteres). Estas linhas estão ordenadas pelo primeiro campo (tempos menores no início).

Exemplo:

  2 REC A
  5 REC B
  10 COM C
  11 INF D
  13 REC E
  17 INF F
  24 REC G

Saída:

A saída deve ser feita pela saída padrão (stdout). O arquivo será composto por uma sequência de linhas. Uma linha para cada evento (ura, atendido ou urgencia). O evento 'ura' significa que o telefonema foi recebido pela Ura. O evento 'atendido' significa que o telefonema foi recebido pela telefonista. O evento 'urgencia' significa que o telefonema foi tratado pela telefonista assim que possivel. Cada linha tem 3 campos separados por espaço (um único espaço entre cada par de campos). O primeiro campo é o tipo do evento. O segundo campo é o tempo final de atendimento (em minutos). E o terceiro é o identificador da ligação.

Por exemplo um conteúdo do arquivo de saída válido seria:

  ura 2 A
  ura 5 B
  atendido 7 A
  ura 10 C
  ura 11 D
  atendido 12 B
  ura 13 E
  atendido 14 D
  ura 17 F
  atendido 21 C
  ura 24 G
  urgencia 26 E
  urgencia 28 F
  atendido 32 G
Para calcular o tempo final de atendimento, considere o tempo de entrada + tempo de ligação (segundo o tipo) + espera (se tiver).

Exemplo 1: "2 REC A", seria 2+5 , entao "atendido 7 A".

Exemplo 2: "5 REC B", seria 5+5+2 , entao "atendido 12 B".

Requisitos mínimos:

O trabalho deve ser feito de forma que possa ser compilado e executado nas servidoras de computação do Departamento de Informática.

O nome do executável deve ser ura.

Não devem ter nenhuma opção de linha comando.

O que deve ser entregue:

Além dos arquivos fonte, deve acompanhar um makefile e um relatório com no máximo 2 páginas contendo os nomes dos alunos, uma descrição das estruturas de dados e das soluções encontradas e uma documentação sintetizada do sistema implementado. Qualquer particularidade deve estar descrita neste texto.

Para compilar será usado o comando make (sem nenhum parâmetro).

Para testar será executado um script como o abaixo.

     ura < teste.in > teste.out
     diff teste.sol teste.out

Onde teste.in é o arquivo de entrada do teste e teste.sol é o esperado como saída.

Caso o teste seja positivo (não imprime nada) será analisado o código fonte.

Forma de entrega:

O trabalho deve ser empacotado em um arquivo login1-login2.tar.gz, onde login1-login2 é uma string com os logins dos integrantes da equipe nas servidoras do DInf. Ao descompactar este arquivo deverá ser criado um diretório de nome login1-login2 que conterá todos os demais arquivos. O make e o script acima deverão funcionar dentro deste diretório (não em subdiretórios).

Este arquivo deve ser enviado por e-mail ao endereço do professor com o assunto "CI056-trab2" (exatamente).

Equipe:

O trabalho DEVE ser feito em equipes de 2 (dois) ou 3 (três) alunos.