O programa abaixo funciona normalmente, mas no void retirada(), quando se busca a placa registrada, a mesma não é encontrada. Mas quando executa o void mostrar() a placa está lá.
Alguém sabe me dizer por que a pesquisa não funciona ???
#include <iostream.h>
#include <stdio.h>
#include <stdlib.h>
#include <conio.h>
#include <string.h>
struct carro {
char placa[7];
int DiaEntrada ,MesEntrada ,AnoEntrada ,HoraEntrada ,MinutoEntrada;
int DiaRetirada,MesRetirada,AnoRetirada,HoraRetirada,MinutoRetirada;
int excluido;
};
/*
excluido = 0 -> Registro ativo
excluido = 1 -> Registro excluido
*/
void entrada (FILE *p){
carro ca;
cout<<"ENTRADA";
cout<<"\nInforme a placa do veiculo(xxxyyyy): ";
gets (ca.placa); //registra a placa
cout<<"\nDigite o dia: ";
cin>>ca.DiaEntrada;
cout<<"\nDigite o mês: ";
cin>>ca.MesEntrada;
ca.AnoEntrada= 2006;
cout<<"\nDigite a hora(0 a 23): ";
cin>>ca.HoraEntrada;
cout<<"\nDigite os minutos(0 a 59): ";
cin>>ca.MinutoEntrada;
ca.excluido = 0; //registro ativo
fseek( p, 0, SEEK_END ); //Posiciona o ponteiro no final do arquivo
fwrite(&ca,sizeof(ca),1,p); //escreve o registro no arquivo
clrscr();
}
void mostrar(FILE *p){
carro ca;
clrscr();
//Retorna o ponteiro ao inicio do arquivo
fseek(p,0,SEEK_SET);
// percorre todo o arquivo exibindo somente os registros ativos
while(!feof(p)){
fread(&ca,sizeof(ca),1,p);
if( ca.excluido==0){
cout<<"\nPlaca: "<<ca.placa;
}
}
cout << "\nTecle enter: ";
}
void retirada(FILE *p,int contavaga,int vlivres){
carro ca;
int dia,hora,minuto;
long mês;
float total;
int t;
char placa2[7];
int compara;
cout<<"\nSAIDA DE VEICULO";
cout<<"\nInforme a placa: ";
gets (placa2);
clrscr();
fseek(p,0,SEEK_SET ); //volta o ponteiro ao inicio do arquivo
//pesquisa para procurar a placa desejada
while(!feof(p)){
fread(&ca,sizeof(ca),1,p);
if(ca.excluido==0){
compara=strcmp(ca.placa,placa2);
if (compara==0){
t=0;
break;
}
else {
t=1;
}
}
}
if (t == 1){
cout<<"\nPLACA não ENCONTRADA - tecle enter\n";
}
else{
clrscr();
cout<<"SAIDA";
cout <<"\nPlaca: "<<ca.placa;
cout<< "\n"<<"Data de Entrada do veiculo: "<<ca.DiaEntrada<<"/" << ca.MesEntrada<<"/"<<ca.AnoEntrada;
cout<<"\n"<< "hora de Entrada: "<<ca.HoraEntrada<< ":"<<ca.MinutoEntrada ;
cout<<"\n\nDados de saida do veiculo";
cout<<"\nDigite o dia: ";
cin>>ca.DiaRetirada;
cout<<"Digite o mês: ";
cin>>ca.MesRetirada;
ca.AnoRetirada=2006;
cout<<"Digite a hora: ";
cin>>ca.HoraRetirada;
cout<<"digite os minutos: ";
cin>>ca.MinutoRetirada;
clrscr();
cout<<"\nPlaca:"<<ca.placa;
cout<<"\nData de Entrada do veiculo: "<<ca.DiaEntrada<<"/" << ca.MesEntrada<<"/"<<ca.AnoEntrada;
cout<<"\nHora de Entrada: "<<ca.HoraEntrada<< ":"<<ca.MinutoEntrada ;
cout<<"\nData de Saida do veiculo: "<<ca.DiaRetirada<<"/" << ca.MesRetirada<<"/"<<ca.AnoRetirada;
cout<<"\nHora de Saida: "<<ca.HoraRetirada<< ":"<<ca.MinutoRetirada ;
dia=ca.DiaRetirada-ca.DiaEntrada;
if (dia < 0){
dia=(dia * -1);
dia = ca.DiaEntrada - dia;
mês= ca.MesRetirada-ca.MesEntrada;
mês=0;
hora= ca.HoraRetirada-ca.HoraEntrada;
minuto=ca.MinutoRetirada-ca.MinutoEntrada;
mês=(mês * 43200);
dia= (dia * 1440);
hora =(hora * 60);
total=(mês+dia+hora+minuto);
if (total<0){
total =(total * -1);
cout<<"\nTempo no estacionamento: "<<total<<" minutos.";
total=(mês+dia+hora+minuto);
total=total/15;
cout<<"\nTotal a pagar: R$"<<total;
ca.excluido = 1; //torna o registro inativo
// posiciona o ponteiro no final do arquivo
fseek(p,0,SEEK_END);
//escreve o registro modificado.
fwrite(&ca,sizeof(ca),1,p);
}
else{
cout<<"\nTempo no estacionamento: "<<total<<" minutos.";
total=(mês+dia+hora+minuto);
total=total/15;
cout<<"\nTotal a pagar: R$"<<total;
ca.excluido = 1; //torna o registro inativo
// posiciona o ponteiro no final do arquivo
fseek(p,0,SEEK_END);
//escreve o registro modificado.
fwrite(&ca,sizeof(ca),1,p);
}
}
else{
mês= ca.MesRetirada-ca.MesEntrada;
hora= ca.HoraRetirada-ca.HoraEntrada;
minuto=ca.MinutoRetirada-ca.MinutoEntrada;
mês=(mês * 43200);
dia= (dia * 1440);
hora =(hora * 60);
total=(mês+dia+hora+minuto);
if (total < 0){
total =(total * -1);
cout<<"\nTempo no estacionamento: "<<total<<" minutos.";
total=(mês+dia+hora+minuto);
total=total / 15;
cout<<"\nTotal a pagar: R$"<<total;
ca.excluido = 1; //torna o registro inativo
// posiciona o ponteiro no final do arquivo
fseek(p,0,SEEK_END);
//escreve o registro modificado.
fwrite(&ca,sizeof(ca),1,p);
}
else {
cout<<"\nTempo no estacionamento: "<<total<<" minutos.";
total=(mês+dia+hora+minuto);
total=total/15;
cout<<"\nTotal a pagar: R$"<<total;
ca.excluido = 1; //torna o registro inativo
// posiciona o ponteiro no final do arquivo
fseek(p,0,SEEK_END);
//escreve o registro modificado.
fwrite(&ca,sizeof(ca),1,p);
}
contavaga--;
vlivres++;
cout << "\n\nVAGA LIBERADA - tecle enter\n";
}
}
}
void main (){
FILE *p;
int num_vaga,x=1;
int recebe=0;
int contavaga;
int vlivres;
cout<<"ESTACIONAMENTO";
cout<<"\nDigite o numero de vagas existentes: ";
cin>>num_vaga;
p=fopen("c:\\texto.txt","ab+");
if(p==NULL){
cout << "\nArquivo invalido!!!";
return;
}
contavaga=0;
vlivres=num_vaga;
while (x!=0){
clrscr();
cout<<"ESTACIONAMENTO";
cout<<"\nVagas disponiveis: "<<vlivres;
cout<<"\nVagas ocupadas: "<<contavaga;
cout<<"\n\n0 - Encerrar";
cout<<"\n1 - Entrada de vêículos";
cout<<"\n2 - Saida de vêículos";
cout<<"\n3 - Placas cadastradas";
cout<<"\n\nDigite uma opçao: ";
cin>>recebe;
if (recebe==0){
x=0;
fclose(p);
break;
}
if((recebe==1) && (contavaga<num_vaga)) {
clrscr();
entrada(p);
contavaga++;
vlivres--;
}
else if ((recebe==1) && (contavaga==num_vaga)){
clrscr();
cout << "\nESTACIONAMENTO LOTADO - tecle enter ";
getch();
}
if ((recebe==2) && (contavaga>0)){
clrscr();
retirada(p,contavaga,vlivres);
getch();
}
else if((recebe==2) && (contavaga==0)){
clrscr();
cout<<"\nESTACIONAMENTO VAZIO - tecle enter ";
getch();
}
if ((recebe==3)&&(contavaga>0)){
clrscr();
mostrar(p);
getch();
}
else if((recebe==3) && (contavaga==0)){
clrscr();
cout<<"\nESTACIONAMENTO VAZIO - tecle enter ";
getch();
}
}
}
Pergunta
Guest Luckxander
O programa abaixo funciona normalmente, mas no void retirada(), quando se busca a placa registrada, a mesma não é encontrada. Mas quando executa o void mostrar() a placa está lá.
Alguém sabe me dizer por que a pesquisa não funciona ???
Link para o comentário
Compartilhar em outros sites
1 resposta 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.