Jump to content
Palm3

Projecto Call Center - ajuda sff?

Recommended Posts

Palm3

Boas pessoal, tenho este programa para fazer e estou com algumas dificuldades, se me pudessem ajudar agradecia imenso. No fim vou disponibilizar o codigo que ja tenho, contudo nao esta totalmente correcto.

Especificação do Programa

Neste projecto pretende-se desenvolver um programa que permita gerir uma fila de espera num call center. O programa deverá permitir o registo de chamadas, a eliminação de chamadas quando o cliente desiste, e a listagem das próximas chamadas a serem atendidas de acordo com as prioridades definidas. A cada cliente é atribuída uma prioridade com base no pacote de serviços contratados ao operador que contratou o serviço do call center. Os pacotes de serviços são identificados por {A, B, C, D, E} segundo o seu valor, em que o pacote A é o mais caro e o pacote E é o mais barato. Os clientes que pagam mais tem maior prioridade. No caso de existirem vários clientes com um mesmo pacote de serviços, os que estão em espera há mais tempo têm prioridade.

O programa deverá processar um conjunto de linhas que começam com um dos caracteres listados na Tabela 1 e que indicam as operações a executar. Dada uma chamada, o comando a permite registar a mesma no sistema. Dado um cliente, o comando u permite actualizar o pacote contratado e recolocar o cliente em espera tendo em conta o novo contrato, caso em que será colocado no final da fila em relação aos clientes com esse mesmo novo contrato. O comando l lista a próxima chamada a ser atendida. O comando r permite remover um cliente do sistema, por exemplo quando este desiste de esperar. E o comando x termina o programa.

Dados de Entrada

Cada chamada tem a seguinte informação associada: nome do cliente (char *), número de cliente (unsigned long) e pacote contratado (char). O nome do cliente é um identifica dor válido em C. Quer o número do cliente quer o nome são únicos e, portanto, identificam univocamente o cliente.

O programa deverá ler os dados de entrada a partir do standard input. Os comandos da Tabela 1 têm a seguinte sintaxe:

  • a - nome numero pacote, onde os parâmetros são o nome do cliente, o número do
  • cliente, e a identificação do pacote contratado, respectivamente;
  • u - numero pacote, onde os parâmetros são o número de cliente e a identificação do novo pacote contratado, respectivamente;
  • l - lista o próximo cliente a atender tendo em conta a prioridade;
  • p - lista e remove da fila o próximo cliente a atender tendo em conta a prioridade;
  • r - nome, onde o único parâmetro é o nome do cliente;
  • x - não recebe argumentos.
  • Assuma que os dados de entrada para o programa não contêm erros sintácticos, isto é, obedecem
  • sempre ao formato descrito nesta secção.

a- adicionar um cliente à fila de espera

u- actualizar o pacote contratado por um cliente

l- listar o próximo cliente a atender

p- selecciona o próximo cliente a atender

r- remover um cliente da fila de espera

x- terminar programa

Tabela 1: Comandos.

Dados de Saída

O programa deverá escrever no standard output a seguinte informação: quando o comando for l ou p deverá ser listado o próximo cliente a ser atendido, segundo os critérios de prioridade definidos acima, no mesmo formato utilizado na entrada (ver exemplos na secção seguinte), ou deverá escrever NA caso não exista nenhum cliente em espera.

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

//Definicao da estrutura do call center

typedef struct linkedList  {
char* nome;
unsigned long numero;
char pacote[2];
struct linkedList *next;
}linkedList;
linkedList clientes_a;
linkedList clientes_b;
linkedList clientes_c;
linkedList clientes_d;
linkedList clientes_e;

struct linkedList *head;
struct linkedList *tail;
linkedList *head = NULL
linkedList insere(char nome, unsigned long numero, char pacote){

if (pacote = 'A'){
 clientes_a *novo_cliente;
 novo_cliente = (clientes_a*)malloc(sizeof(clientes_a));
 novo_cliente->nome = nome;
 novo_cliente->numero=numero;
 novo_cliente->pacote = pacote;
 tail->next = novo_cliente;
 tail = tail->next;
 novo_cliente->next=NULL;
}
if (pacote = 'B'){
 clientes_b *novo_cliente;
 novo_cliente = (clientes_b*)malloc(sizeof(clientes_b));
 novo_cliente->nome = nome;
 novo_cliente->numero=numero;
 novo_cliente->pacote = pacote;
 tail->next = novo_cliente;
 tail = tail->next;
 novo_cliente->next=NULL;
}
if (pacote = 'C'){
 clientes_c *novo_cliente;
 novo_cliente = (clientes_c*)malloc(sizeof(clientes_c));
 novo_cliente->nome = nome;
 novo_cliente->numero=numero;
 novo_cliente->pacote = pacote;
 tail->next = novo_cliente;
 tail = tail->next;
 novo_cliente->next=NULL;
}
if (pacote = 'D'){
 clientes_d *novo_cliente;
 novo_cliente = (clientes_d*)malloc(sizeof(clientes_d));
 novo_cliente->nome = nome;
 novo_cliente->numero=numero;
 novo_cliente->pacote = pacote;
 tail->next = novo_cliente;
 tail = tail->next;
 novo_cliente->next=NULL;
}
if (pacote = 'E'){
 clientes_e *novo_cliente;
 novo_cliente = (clientes_e*)malloc(sizeof(clientes_e));
 novo_cliente->nome = nome;
 novo_cliente->numero=numero;
 novo_cliente->pacote = pacote;
 tail->next = novo_cliente;
 tail = tail->next;
 novo_cliente->next=NULL;
}

}
void altera_pacote(unsigned long numero, char pacote){
struct linkedList *aux;
aux=head->next;
while(aux!=NULL)
 if(aux->numero==numero){
  aux->pacote = pacote;
  aux=NULL;
 }
 else
  aux=aux->next;

}
void apaga_cliente(char* nome){
struct linkedList *aux;
struct linkedList *apaga;
aux=head->next;
apaga=head;
while(aux!=NULL)
 if(aux->nome==nome){
  apaga->next = aux->next;
  aux=NULL;
 }
 else
  aux=aux->next;
  apaga=apaga->next;
}
void showClientes(){
if(head == NULL)
 printf("NA\n");
else{
 linkedList *aux = head;
 while(aux != NULL){
  printf("%s %lu %s \n", aux->nome, aux->numero, aux->pacote);

 }
}
}

int main(){
long unsigned numero;
char* nome;
char pacote,comando;
while (1) {
	comando = getchar(); /* le o comando */
	switch (comando)
	{

 case 'a':

 scanf("%s, %lu, %s", nome, &numero, &pacote);
 insere(nome, numero,pacote);
 break;

 case 'u':
 scanf("%lu %s", &numero, &pacote);
 altera_pacote(numero, pacote);
 break;

 case 'l':
  while (clientes_a != NULL)
showClientes();
  struct linkedList *aux;
  aux=head->next;
  while(aux!=NULL)
if(aux->numero==numero){
 aux->pacote = pacote;
 aux=NULL;
}
else
 aux=aux->next;
 break;

 case 'p':
 break;

 case 'r':
 scanf("%s", nome);
 apaga_cliente(nome);
 break;

 case 'x':
 break;
}
return 0;
}

Edited by Rui Carlos
GeSHi

Share this post


Link to post
Share on other sites
Palm3

e a dúvida é ?

Não sei o que fazer mais, queria uma ajuda geral.. Ordenar as estruturas por prioridades (A-E) por exemplo

Edited by Palm3

Share this post


Link to post
Share on other sites
HappyHippyHippo

fica então uma dica : eu fazia uma única lista ligada, diminuía o código para 1/5 do que tens

ps : tenta não usar variáveis globais ...

Edited by HappyHippyHippo

IRC : sim, é algo que ainda existe >> #p@p

Share this post


Link to post
Share on other sites

Create an account or sign in to comment

You need to be a member in order to leave a comment

Create an account

Sign up for a new account in our community. It's easy!

Register a new account

Sign in

Already have an account? Sign in here.

Sign In Now

×
×
  • Create New...

Important Information

By using this site you accept our Terms of Use and Privacy Policy. We have placed cookies on your device to help make this website better. You can adjust your cookie settings, otherwise we'll assume you're okay to continue.