Sector c
(usa Outra)
Enviado em 19/04/2012 - 08:11h
Pretendo criar uma lista com vários elementos, mas estou tendo problemas por causa das condições que coloquei de acordo como está mencionado no trabalho:
typedef struct Tcliente
{
char operadora[10];
char nome[20];
char morada[50];
char tarifa[10];
int numero_telemovel;
float saldo;
struct Tcliente*prox;
}Cliente;
Cliente*servico=NULL;
Com esta lista, pretendo fazer contrato telefónico semelhante a de um contrato cabo-verdiano:
Comecei por reservar espaço de memória na lista, e depois preparar para preencher:
Cliente*novocontrato(char operadora[],char nome[],char morada[],int numero,float saldo)
{
Cliente*aux=servico;
if((aux=(Cliente*)malloc(sizeof(Cliente)))==NULL)
printf("Não rezervou espaco de memoria");
else
{
strcpy(aux->operadora,operadora);
strcpy(aux->nome,nome);
strcpy(aux->morada,morada);
numero=aux->numero_telemovel;
aux->saldo=saldo;
aux->prox=NULL;
}
return aux;
}
void registo_cliente(char operadora[],char nome[20],char morada[],int numero,float saldo)
{
Cliente*aux=novocontrato(operadora,nome,morada,numero,saldo);
if(aux!=NULL)
{
aux->prox=servico;
servico=aux;
}
}
Pretendo que ao invocar no ”main()” siga essas condições:
Começo a preencher , escolhendo operadora (entre “cvkovel” e ” tmenos”) , escreve o nome , a morada , numero e a tarifa. Cada contrato preenche o saldo com 200. A tarifa é escolhida de acordo com a operadora, se escolher “cvkovel”, tem que escolher entre: grilo, Segundo,powa;
Se escolher ” tmenos”, tem de escolher entre: clássico, Gold, jovem.
Por alguma razão , não posso guardar tarifa na mesma função de antes, por reservei outro espaço de memoria :
Cliente*degitetarifa(char tarifa[])
{
Cliente*aux=servico;
if((aux=(Cliente*)malloc(sizeof(Cliente)))==NULL)
printf("Não rezervou espaco de memoria");
else
{
strcpy(aux->tarifa,tarifa);
aux->prox=NULL;
}
}
void escolheTarifa(char tarifa[])
{
Cliente*aux=degitetarifa(tarifa);
if(aux!=NULL)
{
aux->prox=servico;
servico=aux;
}
}
Antes que me esqueça coloquei uma função para não fazer um contrato com mesmo numero:
int pesquisa(int num)
{
if(servico==NULL)
return 0;
else
{
Cliente*aux=servico;
while(aux!=NULL && aux->numero_telemovel!= num)
aux=aux->prox;
if(aux!=NULL)
return 1;
else
return 0;
}
}
Está é a função que coloquei no main(), e está me dando muitos problemas :
int numero;
int ops,tf,tf2;
char nome[20],morada[50],tarifa[10],operadora[10];
float saldo;
printf("\nOperadoara:");
printf("\n\n1.cvkovel\t2.tmenos\n");
scanf("%d",&ops);
if(ops==1)
strcpy(operadora,"cvkovel");
else if(ops==2)
strcpy(operadora,"tmenos");
printf("\nNome:");
scanf("%s",nome);
printf("\nMorada:");
scanf("%s",morada);
printf("\nNumero:");
scanf("%d",&numero);
saldo=200;
if(pesquisa(numero)==1)
{
printf("\nNumero ja registado\tInssira outro\n");
return 1;
}
else
{
if(strcmp(operadora,"tmenos")==0)
{
printf("\nTarifa:");
printf("\n\n1.classico\t2.gold\t3.jovem\n");
scanf("%d",&tf2);
if(tf2==1)
strcpy(tarifa,"classico");
else if(tf2==2)
strcpy(tarifa,"gold");
else if(tf2==3)
strcpy(tarifa,"jovem");
escolheTarifa(tarifa);
}
else if(strcmp(operadora,"cvkovel")==0)
{
printf("\nTarifa:");
printf("\n\n1.grilo\t2.segundo\t3.powa\n");
scanf("%d",&tf);
if(tf==1)
strcpy(tarifa,"grilo");
else if(tf==2)
strcpy(tarifa,"segundo");
else if(tf==3)
strcpy(tarifa,"powa");
}
}
registo_cliente(operadora,nome,morada,numero,saldo);
escolheTarifa(tarifa);