Good, I developed a parking management program, when people to show on the screen all the cars and their characteristics the brand is printed next to the license plate and I do not know why. Can you help me?
CODE:
#include <stdio.h>
#include <stdlib.h>
#include <time.h>
#include <string.h>
struct Tempo{
int hora[8];
};
struct registo_veiculo{
char matricula[6] , marca[10] , modelo[10] , cor[10];
int status;
struct Tempo entrada;
}carro[10];
//Procedimento para limpar o registro do carro que saiu do estacionamento
void excluir(int i)
{
carro[i].matricula==0;
carro[i].modelo==0;
carro[i].marca==0;
carro[i].cor==0;
carro[i].entrada.hora==0;
carro[i].status==0;
}
//Procedimento para inserir dados dos veículos
void inserir(int i)
{
char placa[6];
int tam_pla;
FILE *P;
printf("Digite a matricula:");
fflush(stdin);
scanf("%s",&placa);
strupr(placa);//deixa caracteres da placa com letra maiúsculo
strcpy(carro[i].matricula, placa);//copia a informação escrita no vetor placa e transcreve para a estrutura no parâmetro matricula.
tam_pla=strlen(carro[i].matricula);
// Testa quantos digitos foram inseridos.
if(tam_pla!=6)
{
if(tam_pla<6)
{
printf("\nMatricula invalida\nDigitos insuficientes\n\n");
inserir(i);
}
else//(tam_pla>6)
{
printf("\nMatricula invalida\nMuitos digitos\n\n");
inserir(i);
}
}
printf("\nDigite o modelo:");
fflush(stdin);
scanf("%s",carro[i].modelo);
//deixa string em minúsculo
strlwr(carro[i].modelo);
fflush(stdin);
//deixa primeiro caractere maiúsculo
carro[i].modelo[0]=toupper(carro[i].modelo[0]);
printf("\nDigite a marca:");
fflush(stdin);
scanf("%s",carro[i].marca);
//deixa string em minúsculo
strlwr(carro[i].marca);
//deixa primeiro caractere maiúsculo
carro[i].marca[0]=toupper(carro[i].marca[0]);
printf("\nDigite a cor:");
fflush(stdin);
scanf("%s",carro[i].cor);
//deixa string em minúsculo
strlwr(carro[i].cor);
//deixa primeiro caractere maiúsculo
carro[i].cor[0]=toupper(carro[i].cor[0]);//cor[0] é o 1º caracter que vai ser alterado
printf("\nDigite a hora da entrada no formato <horas>:<minutos>:(digitar os :)");
fflush(stdin);
scanf("%s",carro[i].entrada.hora);
carro[i].status=1;
P=fopen("CARRO.txt", "wb");
if(P==NULL)
{
puts("Erro na abertura do ficheiro.");
exit(0);//termina com sucesso, sem erros
}
else
{
fwrite(&carro, sizeof(carro), 1, P);
fclose(P);
}
}
//Procedimento para registar a entrada de veiculos no estacionamento
void registar_veiculo(){
int i, flag=1;// a flag no inicio tem valor 1, se encontrar um lugar para estacionar, flag=0 senão fla=1;
for(i=0; i<10; i++)
{
if(carro[i].status==0)
{
inserir(i);
printf("\n\nVeiculo registado com sucesso!");
sleep(2);//espera dois segundos até voltar ao menu
flag=0;//controla a lógica da função para a poder controlar o espaço no parque de estacionamento
system("cls");
break;
}
}
if(flag==1)
{
printf("Sem espaco para registar\nEnter voltar ao menu...");
getch();//obtem o caracter da consola mas não mostra no ecrã;
system("cls");
}
}
// Procedimento para registrar a saida.
void saida_veiculo(){
char pesq[6];
FILE *P;
P=fopen("CARRO.txt", "rb");
fread(&carro, sizeof(carro), 1, P);
int i,n=6;
int horaEnt,minEnt,horaSai, minSai,tminEnt,tminSai,T_total;
float precoad=0.05;// preço por minuto adicional acima de 1hora
float preco=0.50;//preço de utilização até 1h
puts("Digite a Matricula:");
fflush(stdin);//limpa o conteudo do buffer
scanf("%s",&pesq);
strupr(pesq);//deixa caracteres da matricula em maiúsculo
for(i=0;i<10;i++){
if(memcmp(pesq,carro[i].matricula,n)==0){// strcmp compara os n primeiros elementos
printf("\n Matricula: %s",carro[i].matricula);
printf("\n Modelo: %s",carro[i].modelo);
printf("\n Marca: %s",carro[i].marca);
printf("\n Cor: %s",carro[i].cor);
printf("\n Hora de Entrada: %s\n\n", carro[i].entrada.hora);
printf("\n\n Digite a hora de entrada no formato <horas>enter<minutos>:\n");
scanf("%d""%d",&horaEnt,&minEnt);
printf("\n\n\n Digite a hora de saida no formato <horas>enter<minutos>:\n");
scanf("%d""%d", &horaSai, &minSai);
tminEnt = (horaEnt*60)+ minEnt;//tempo em minutos de entrada
tminSai = (horaSai*60)+ minSai;//tempo em minutos de saida
T_total = tminSai-tminEnt; //calcula o numero total de minutos que esteve no parque
if(T_total<=60){
printf("O carro do cliente ficou %d minutos no estacionamento, e o valor total a pagar e de: %.2f€ ",T_total, preco);
}
else{
float valorapagar = ((T_total-60)*precoad) + preco;
printf("O carro do cliente ficou %.d minutos no estacionamento, e o valor total a pagar e de: %.2f€\n\n\n",T_total, valorapagar);
}
carro[i].status=0;//declara que o lugar i já não está ocupado
excluir(i);//elimina toda a informação da estrutura na posição i do veiculo que saiu
P=fopen("CARRO.txt", "wb");
fwrite(&carro, sizeof(carro), 1, P);
fclose(P);
}
if (i==10){
printf("Veiculo nao encontrado");
}
}
}
// Procedimento para listar os veículos que estão no estacionamento.
void listar_veiculo()
{
int i, n=1;
FILE *P;
P=fopen("CARRO.txt", "rb");
fread(&carro, sizeof(carro), 1, P);
for(i=0; i<10; i++)
{
if(carro[i].status==1)
{
printf("Veiculo: %d\n", i+1);
printf("Matricula: %s\n",carro[i].matricula);
printf("Modelo: %s\n",carro[i].modelo);
printf("Marca: %s\n",carro[i].marca);
printf("Cor: %s\n",carro[i].cor);
printf("Entrada: %s\n\n\n\n", carro[i].entrada.hora);
n=0;
}
}
if(n==0)// se n==0 então há veiculos no parque
{
printf("\nEnter voltar ao menu...");
getch();//recebe qualquer tecla mas não o mostra no ecrã
system("cls");
}
else// senão não tem veiculos no parque
{
puts("Nenhum veiculo registado\nEnter voltar ao menu...");
getch();
system("cls");
}
}
// Função principal
int main()
{
int opcao;
FILE* P;
P=fopen("CARRO.txt", "rb");
fread(&carro, sizeof(carro), 1, P);
fclose(P);
printf("------------------------------------------------");
do{
printf("\nGESTAO DE ACESSOS AO PARQUE DE ESTACIONAMENTO \n\n");
printf("------------------------------------------------\n\n");
printf("1. Registar entrada do veiculo\n");
printf("2. Informar saida do veiculo \n3. Lista de veiculos\n4. Sair \n\nOpcao: ");
scanf("%d", &opcao);
switch(opcao)
{
case 1:
{
system("cls");
registar_veiculo();
break;
}
case 2:
{
system("cls");
saida_veiculo();
break;
}
case 3:
{
system("cls");
listar_veiculo();
break;
}
case 4: break;
default:
{
system("cls");
getchar();
}
}
}while(opcao!=4);
getchar();
system("cls");
}