Guest Luckxander Postado Novembro 7, 2006 Denunciar Share Postado Novembro 7, 2006 Pessoal,estou com o programinha abaixo praticamente pronto, rodando beleza, mas com apenas um pequeno erro.Se eu registrar duas placas e depois procurar pela primeira, o programa informa que não achou.Na verdade ele só acha a última placa registrada, ou seja, provavelmente está sobrescrevendo o ponteiro.Alguém sabe o que deve ser mudado para funcionar ?#include <iostream.h>#include <stdio.h>#include <stdlib.h>#include <conio.h>#include <string.h>#include <time.h> //estrutura para cadastrar o carro struct dados{ double hora,hora2,minuto,minuto2; char placa[8]; char data[10]; double valorfracao; };void main(){ int nvagas,contador,opcao; char novaplaca[8]; int i,print,msg,comparador; double tempo1,tempo2,tempototal,valor; dados *p; //declara o ponteiro da estrutura dados p=(dados*)malloc(sizeof(dados));//aloca dinamicamente memoria para o ponteiro cout<<"ESTACIONAMENTO UNATEC"; //relogio para simples ilustraçao - biblioteca time.h time_t timer;//define a estrutura de conversao de tempo struct tm *tblock; //declara a estrutura timer = time(NULL); //obtem a hora do sistema tblock = localtime(&timer);//converte a hora em estrutura (tblock) cout<<"\n"<<asctime(tblock); //exibe a hora cout<<"\nInforme a quantidade de vagas disponiveis: "; cin>>nvagas; //dimensiona o limite maximo de vagas do estacionamento cout<<"\nInforme o preço da fraçao: "; cin>>p->valorfracao; //registra o preço cobrado pela fraçao de hora contador=0; //inicializa as vagas ocupadas msg=0; //aciona o while while (msg==0){ //inicia o loop de exibiçao cout<<"\n\nVagas disponiveis: "<<nvagas; //exibe o numero de vagas disponiveis cout<<"\nVagas ocupadas: "<<contador; //exibe o numero de vagas ocupadas cout<<"\n\nInforme a opcao\n"; //exibe o menu cout<<"0-Fechar \n"; //opçao do menu cout<<"1-Entrada de veiculos \n"; //opçao do menu cout<<"2-Saida de veiculos \n"; //opçao do menu cin>>opcao; //registra a opçao escolhida switch(opcao){ //cria o menu case 0 : {cout<<"\nPrograma encerrado"; //case 0 - processa a primeira opçao do menu msg=1; //sai do loop while free(p); //libera a memoria alocada break;} //encerra a instruçao case 1 : { if (nvagas == 0){ //case 1 - processa a segunda opçao do menu clrscr(); cout<<"\nESTACIONAMENTO LOTADO"; break; //encerra a instruçao } else{ clrscr(); cout<<"\nENTRADA DE VEICULO"; cout<<"\nInforme a placa(sem hifen e sem espaço): "; gets(p->placa); cout<<"\nInforme a Data(xx/xx/xxxx): "; gets(p->data); cout<<"\nInforme a Hora(00 a 24): "; cin>>p->hora; cout<<"\nInforme os Minutos(00 a 59): "; cin>>p->minuto; nvagas=nvagas-1; //atualiza a quantidade de vagas disponiveis contador=contador+1; //atualiza a quantidade de vagas ocupadas clrscr(); cout<<"\nVEICULO CADASTRADO"; break; //exibe a mensagem e encerra a instruçao } } case 2 : { if(contador==0){ //case 2 - processa a terceira opçao do menu clrscr(); cout<<"\nESTACIONAMENTO VAZIO"; break; //exibe a mensagem e encerra a instruçao } else{ clrscr(); comparador=1; cout<<"\nSAIDA DE VEICULO"; cout<<"\nInforme a placa(sem hifen e sem espaço): "; gets(novaplaca); //obtem a placa para verificaçao for(i=0; i<contador; i++){ comparador=strcmpi(novaplaca,p->placa); //compara as strings, se iguais retorna(0) if(comparador==0){ print=0;//registra que encontrou a placa break; //interrompe a busca } else{ print=1; //registra que não achou a placa } p++; //incrementa o ponteiro dentro do for } if(print==1){ for(i=0; i<contador; i++){ p--; //volta as posiçoes do ponteiro para o inicio } cout<<"\nVEICULO não ENCONTRADO"; break; } if(print==0){ cout<<"\nInforme a hora(00 a 24): "; cin>>p->hora2; //recebe a hora de saida cout<<"\nInforme os minutos(00 a 59): "; cin>>p->minuto2; //recebe os minutos de saida clrscr(); cout<<"\nSAIDA DE VEICULO"; cout<<"\nPlaca: "<<p->placa; cout<<"\nData de entrada: "<<p->data; cout<<"\nHora de entrada: "<<p->hora<<":"<<p->minuto; cout<<"\nHora de saida: "<<p->hora2<<":"<<p->minuto2; tempo1=((p->hora2*60)-(p->hora*60)); //convertendo hora em minutos tempo2=((p->minuto2)-(p->minuto)); tempototal=tempo1+tempo2; //calcula o tempo total em minutos cout<<"\nTempo de parmanencia: "<<tempototal<<" minutos"; valor=((tempototal/15)*p->valorfracao); //calcula o preço total cout<<"\nPreço da fraçao: R$"<<p->valorfracao; cout<<"\nTotal a pagar: R$"<<valor; nvagas=nvagas+1; //atualiza a quantidade de vagas disponiveis contador=contador-1; //atualiza a quantidade de vagas ocupadas } } break;} //encerra a instruçao } } getch(); //obtem comandos de exibiçao de tela} Citar Link para o comentário Compartilhar em outros sites More sharing options...
0 kandrade Postado Novembro 8, 2006 Denunciar Share Postado Novembro 8, 2006 algumas saidas que voce tem:criando um vetor de estrutura. Ex: struct tm tblock[20]; //declara a estrutura tome muito cuidado com a indexacão do vetor a desvantagem é o número fixo de estruturas que voce pode armazenar criando um ponteiro para a propria estrutura, fazendo assim uma lista encadeada. Ex: //estrutura para cadastrar o carro struct dados{ double hora,hora2,minuto,minuto2; char placa[8]; char data[10]; double valorfracao; struct dados *prox; }; com isso voce não limita o número de estruturas de seu programa.com essa opcao voce precisa apenas guardar a primeira estrutura que apontará pra segunda que apontará pra terceira e assim por diante. Citar Link para o comentário Compartilhar em outros sites More sharing options...
0 Guest Luckxander Postado Novembro 9, 2006 Denunciar Share Postado Novembro 9, 2006 Vou tentar com a segunda opção Citar Link para o comentário Compartilhar em outros sites More sharing options...
Pergunta
Guest Luckxander
Pessoal,
estou com o programinha abaixo praticamente pronto, rodando beleza, mas com apenas um pequeno erro.
Se eu registrar duas placas e depois procurar pela primeira, o programa informa que não achou.
Na verdade ele só acha a última placa registrada, ou seja, provavelmente está sobrescrevendo o ponteiro.
Alguém sabe o que deve ser mudado para funcionar ?
#include <iostream.h>
#include <stdio.h>
#include <stdlib.h>
#include <conio.h>
#include <string.h>
#include <time.h>
//estrutura para cadastrar o carro
struct dados{
double hora,hora2,minuto,minuto2;
char placa[8];
char data[10];
double valorfracao;
};
void main(){
int nvagas,contador,opcao;
char novaplaca[8];
int i,print,msg,comparador;
double tempo1,tempo2,tempototal,valor;
dados *p; //declara o ponteiro da estrutura dados
p=(dados*)malloc(sizeof(dados));//aloca dinamicamente memoria para o ponteiro
cout<<"ESTACIONAMENTO UNATEC";
//relogio para simples ilustraçao - biblioteca time.h
time_t timer;//define a estrutura de conversao de tempo
struct tm *tblock; //declara a estrutura
timer = time(NULL); //obtem a hora do sistema
tblock = localtime(&timer);//converte a hora em estrutura (tblock)
cout<<"\n"<<asctime(tblock); //exibe a hora
cout<<"\nInforme a quantidade de vagas disponiveis: ";
cin>>nvagas; //dimensiona o limite maximo de vagas do estacionamento
cout<<"\nInforme o preço da fraçao: ";
cin>>p->valorfracao; //registra o preço cobrado pela fraçao de hora
contador=0; //inicializa as vagas ocupadas
msg=0; //aciona o while
while (msg==0){ //inicia o loop de exibiçao
cout<<"\n\nVagas disponiveis: "<<nvagas; //exibe o numero de vagas disponiveis
cout<<"\nVagas ocupadas: "<<contador; //exibe o numero de vagas ocupadas
cout<<"\n\nInforme a opcao\n"; //exibe o menu
cout<<"0-Fechar \n"; //opçao do menu
cout<<"1-Entrada de veiculos \n"; //opçao do menu
cout<<"2-Saida de veiculos \n"; //opçao do menu
cin>>opcao; //registra a opçao escolhida
switch(opcao){ //cria o menu
case 0 : {cout<<"\nPrograma encerrado"; //case 0 - processa a primeira opçao do menu
msg=1; //sai do loop while
free(p); //libera a memoria alocada
break;} //encerra a instruçao
case 1 : { if (nvagas == 0){ //case 1 - processa a segunda opçao do menu
clrscr();
cout<<"\nESTACIONAMENTO LOTADO";
break; //encerra a instruçao
}
else{
clrscr();
cout<<"\nENTRADA DE VEICULO";
cout<<"\nInforme a placa(sem hifen e sem espaço): ";
gets(p->placa);
cout<<"\nInforme a Data(xx/xx/xxxx): ";
gets(p->data);
cout<<"\nInforme a Hora(00 a 24): ";
cin>>p->hora;
cout<<"\nInforme os Minutos(00 a 59): ";
cin>>p->minuto;
nvagas=nvagas-1; //atualiza a quantidade de vagas disponiveis
contador=contador+1; //atualiza a quantidade de vagas ocupadas
clrscr();
cout<<"\nVEICULO CADASTRADO"; break; //exibe a mensagem e encerra a instruçao
}
}
case 2 : { if(contador==0){ //case 2 - processa a terceira opçao do menu
clrscr();
cout<<"\nESTACIONAMENTO VAZIO"; break; //exibe a mensagem e encerra a instruçao
}
else{
clrscr();
comparador=1;
cout<<"\nSAIDA DE VEICULO";
cout<<"\nInforme a placa(sem hifen e sem espaço): ";
gets(novaplaca); //obtem a placa para verificaçao
for(i=0; i<contador; i++){
comparador=strcmpi(novaplaca,p->placa); //compara as strings, se iguais retorna(0)
if(comparador==0){
print=0;//registra que encontrou a placa
break; //interrompe a busca
}
else{
print=1; //registra que não achou a placa
}
p++; //incrementa o ponteiro dentro do for
}
if(print==1){
for(i=0; i<contador; i++){
p--; //volta as posiçoes do ponteiro para o inicio
}
cout<<"\nVEICULO não ENCONTRADO"; break;
}
if(print==0){
cout<<"\nInforme a hora(00 a 24): ";
cin>>p->hora2; //recebe a hora de saida
cout<<"\nInforme os minutos(00 a 59): ";
cin>>p->minuto2; //recebe os minutos de saida
clrscr();
cout<<"\nSAIDA DE VEICULO";
cout<<"\nPlaca: "<<p->placa;
cout<<"\nData de entrada: "<<p->data;
cout<<"\nHora de entrada: "<<p->hora<<":"<<p->minuto;
cout<<"\nHora de saida: "<<p->hora2<<":"<<p->minuto2;
tempo1=((p->hora2*60)-(p->hora*60)); //convertendo hora em minutos
tempo2=((p->minuto2)-(p->minuto));
tempototal=tempo1+tempo2; //calcula o tempo total em minutos
cout<<"\nTempo de parmanencia: "<<tempototal<<" minutos";
valor=((tempototal/15)*p->valorfracao); //calcula o preço total
cout<<"\nPreço da fraçao: R$"<<p->valorfracao;
cout<<"\nTotal a pagar: R$"<<valor;
nvagas=nvagas+1; //atualiza a quantidade de vagas disponiveis
contador=contador-1; //atualiza a quantidade de vagas ocupadas
}
}
break;} //encerra a instruçao
}
}
getch(); //obtem comandos de exibiçao de tela
}
Link para o comentário
Compartilhar em outros sites
2 respostass a esta questão
Posts Recomendados
Participe da discussão
Você pode postar agora e se registrar depois. Se você já tem uma conta, acesse agora para postar com sua conta.