struct problem

Asked

Viewed 95 times

-2

good, I developed a parking lot management program, when people to show on the screen all the cars and their features the brand is printed next to the license plate and do not know why.Can 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");

}
  • someone can help me?

  • You can put an example of expected input/output ? and how would the wrong output be for the same input ?

  • Input example: 12ff12 plate, model:M8, brand:bmw,color:blue

  • wrong exit would be when the brand appears immediately following the license plate.

1 answer

0

You are forgetting the space needed to finish the strings.

char matricula[7]; // espaço para "12ff12" e terminador

Browser other questions tagged

You are not signed in. Login or sign up in order to post.