Ir ao conteúdo
  • Cadastre-se

C++ Sistema de estacionamento em C


Posts recomendados

Alguém poderia me ajudar com esse código?? Toda vez que eu erro a placa ele aparece 4 vezes para colocar  o modelo, cor e marca. Estou em desespero é para entregar amanha e não consigo consertar o erro.



 

#include <stdio.h>
#include <stdlib.h>
#include <time.h>


struct Tempo{
   char hora[7] ;

};

struct cad_carro{
     char placa[8], modelo[20], marca[20], cor[10];
     int status;
     struct Tempo entrada;


}carro[10];


//variavel global
int nvei=0; //contador de veículos cadastrados
char pesq[8];

//Procedimento inicializa
void inicializa()
{
     int i;

     for(i=0; i<10; i++)
     carro[i].status=0;
}

//----------------------------------------------------------
//função verifica placa
int verifica_placa(int n){
    if (n==0){
        return 0;
    }
    else{
        return 1;
    }
}
// Função verifica se o estacionamento esta vazio
int verifica(int n)
{
    if (n==0){
        return 0;
    }
    else{
        return 1;
    }
}


//Procedimento para limpar do registro o carro que saiu do estacionamento
void excluir(int i)
{

     carro[i].placa==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 pla[8];
   int j, teste, tam_pla,r;
   FILE *P;

      puts("Digite a placa: ");
      fflush(stdin);
      gets(pla);

      strupr(pla);//deixa caracteres da placa em maiúsculo


      strcpy(carro[i].placa, pla);

      tam_pla=strlen(carro[i].placa);
      // Testa quantos digitos foram inseridos, o padrão para placas de carros são 7 digitos: 3 letras e 4 numeros.
      if(tam_pla!=7)
      {
        if(tam_pla<7)
        {
        printf("\nPlaca invalida\nDigitos insuficientes\n\n");
        inserir(i);
        }
        else//(tam_pla>7)
        {
        printf("\nPlaca invalida\nMuitos digitos\n\n");
        inserir(i);
        }
      }
       //testa se 3 primeiros digitos são letras
       for(j=0; j<3; j++)
       {
          teste=isalpha(carro[i].placa[j]);//retorna 1 se for letra
          r==verifica_placa(teste);
          if(r==1)
          {
          printf("\nPlaca invalida\nTres primeiros digitos devem ser letras!\n\n");
          inserir(i);
          }
       }

      //testa se 4 últimos digitos não são letras
      for(j=3; j<7; j++)
      {      //isalpha testa se a letra é maiuscula ou minuscula
            teste=isalpha(carro[i].placa[j]);//retorna 1 se for letra
            r==verifica_placa(teste);
            if(teste==1)
            {
            printf("\nPlaca invalida\nQuatro ultimos digitos devem ser numeros!\n\n");
            inserir(i);
            }
      }

   puts("\nDigite o modelo: ");
   fflush(stdin);
   gets(carro[i].modelo);
   //deixa string em minúsculo
   strlwr(carro[i].modelo);
   //deixa primeiro caractere maiúsculo
   carro[i].modelo[0]=toupper(carro[i].modelo[0]);

   puts("\nDigite a marca: ");
   fflush(stdin);
   gets(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]);

   puts("\nDigite a cor: ");
   fflush(stdin);
   gets(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]);

   puts("\nDigite a hora da entrada no formato <horas>:<minutos>:(digitar os :)");
   gets(carro[i].entrada.hora);
   carro[i].status=1;

   P=fopen("CARRO.txt", "w");
   fwrite(&carro, sizeof(carro), 1, P);
   fclose(P);
}
//----------------------------------------------------------

//Procedimento para cadastrar a entrada de veiculos no estacionamento
void cadastrar_veiculo(){
     int i, flag=1;

     for(i=0; i<10; i++)
     {
        if(carro[i].status==0)
        {
        inserir(i);
        printf("\n\nVeiculo cadastrado com sucesso!");
        _sleep(5000);
        flag=0;
        system("cls");
        break;
        }
     }

     if(flag==1)
     {
     printf("Sem espaco para cadastrar\nEnter voltar ao menu...");
     getch();
     system("cls");
     }
}
// Procedimento para registrar a saida e calcular o valor a ser pago
void saida_veiculo(){
    FILE *P;
    P=fopen("CARRO.txt", "r");
    fread(&carro, sizeof(carro), 1, P);
     int i;
     int horaEnt,minEnt,horaSai, minSai,tminEnt,tminSai,T_total;
     float precoad=0.05;// preço por minuto adicional acima de 1hora
     float preco=10.00;//preço por utilização de até 1h

    puts("Digite a placa: ");
      fflush(stdin);
      gets(pesq);
    strupr(pesq);//deixa caracteres da placa em maiúsculo
            for(i=0;i<10;i++){
                 if(strcmp(pesq,carro[i].placa)==0){
             printf("\n Placa: %s", carro[i].placa);
             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);
             carro[i].status=0;
             excluir(i);

            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;
            tminSai = (horaSai*60)+ minSai;
            T_total = tminSai-tminEnt; //calcula o tempo total
            //Informa o valor para estacionar até a duração de 1h.Valor RS1,00 pela primeira hora
            if(T_total<=60){
                printf("O carro do cliente ficou %d minutos no estacionamento, e o valor total a pagar e de: R$%.2f ",T_total, preco);
            }
            else{
                   float valorapagar = ((T_total-60)*precoad) + preco;// Calcula o valor da primeira hora mais o valor dos minutos adicionais. depois de 1h cada minuto adicional custa R$ 0.05

                printf("O carro do cliente ficou %.d minutos no estacionamento, e o valor total a pagar é de: R$%.2f\n\n\n",T_total, valorapagar);

            }


            P=fopen("CARRO.txt", "w");
            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,j, n=1, r;

    FILE *P;
    P=fopen("CARRO.txt", "r");
    fread(&carro, sizeof(carro), 1, P);

    for(i=0; i<10; i++)
    {
       if(carro[i].status==1)
         {
      printf("Veiculo %d\nPlaca: %s\t Modelo: %s\t Marca: %s\t Cor: %s\n\n", i+1, carro[i].placa, carro[i].modelo, carro[i].marca, carro[i].cor);
      printf("Entrada: %s\n\n\n\n", carro[i].entrada.hora);
      n=0;
      }
    }
    r=verifica(n);
    if(r==0)
    {
    printf("\nEnter voltar ao menu...");
    getch();
    system("cls");
    }
    else
    {
       puts("Nenhum veiculo cadastrado\nEnter voltar ao menu...");
       getch();
       system("cls");
    }
}
//-----------------------------------------------------------------------------


// Função principal
int main()
{
    int opcao;
      FILE* P;

      inicializa();

      //abre o arquivo para o fopen "w" não substituir o que já existe
      P=fopen("CARRO.txt", "r");
      fread(&carro, sizeof(carro), 1, P);
      fclose(P);
        printf("-------------------------------------------");

      do{

      printf("\nCONTROLE DE ESTACIONAMENTO\n\n");
      printf("-------------------------------------------\n\n");
      printf("1. Cadastrar entrada de veiculo\n");
      printf("2. Informar saida do veiculo \n3. Listar veiculos\n4. Creditos\n5. Sair\n\nOpcao: ");
      scanf("%d", &opcao);

               switch(opcao)
               {
                    case 1:
                    {
                    system("cls");
                    cadastrar_veiculo();
                    break;
                    }
                    case 2:
                    {
                    system("cls");
                    saida_veiculo();

                    break;
                    }
                    case 3:
                    {
                    system("cls");
                    listar_veiculo();
                    break;
                    }
                    case 4:
                    {
                    system("cls");
                    printf("-------------------------------------------\n\n");
                    printf("Programa desenvolvido pela: ");
                    
                    break;
                    }
                    case 5: break;

                    default:
                    {
                    system("cls");
                    printf("Opcao invalida!\nEnter para voltar ao menu");
                    getch();
                    system("cls");
                    }
               }
        }while(opcao!=5);

      getchar();

}

 

  • Obrigado 1
Link para o comentário
Compartilhar em outros sites

@Bruna Bueno Ferreira     seu código está bom ,  fiz alguns ajustes e ele ficou assim  :

#include <stdio.h>
#include <stdlib.h>
#include <time.h>
#include <ctype.h>
#include <string.h>
#include <conio.h>
#include <windows.h>
struct Tempo{
   char hora[7] ;
};

struct cad_carro{
     char placa[8], modelo[20], marca[20], cor[10];
     int  status;
     struct Tempo entrada;
}/*carro[10]*/;
struct cad_carro carro[10];

//variavel global
int nvei=0; //contador de veículos cadastrados
char pesq[8];

//Procedimento inicializa
void inicializa()
{
     int i;

     for(i=0; i<10; i++)
     carro[i].status=0;
}

//----------------------------------------------------------
//função verifica placa
int verifica_placa(int n){
    if (n==0){
        return 0;
    }
    else{
        return 1;
    }
}
// Função verifica se o estacionamento esta vazio
int verifica(int n)
{
    if (n==0){
        return 0;
    }
    else{
        return 1;
    }
}
//Procedimento para limpar do registro o carro que saiu do estacionamento
void excluir(int i)
{
     strcpy(carro[i].placa       ,"0");
     strcpy(carro[i].modelo      ,"0");
     strcpy(carro[i].marca       ,"0");
     strcpy(carro[i].cor         ,"0");
     strcpy(carro[i].entrada.hora,"0");
     strcpy(carro[i].status      ,"0");
}
//Procedimento para inserir dados dos veículos
void inserir(int i){
    char pla[8];
    int j, teste, tam_pla,r,flag;
    FILE *P;
    do{
        flag=0;
        puts("Digite a placa: ");
        fflush(stdin);
        gets(pla);

        strupr(pla);//deixa caracteres da placa em maiúsculo


        strcpy(carro[i].placa, pla);

        tam_pla=strlen(carro[i].placa);
        // Testa quantos digitos foram inseridos, o padrão para placas de carros são 7 digitos: 3 letras e 4 numeros.
        if(tam_pla!=7){
            if(tam_pla<7){
                printf("\nPlaca invalida\nDigitos insuficientes\n\n");
                /*inserir(i);/*não pode chamar a pr[opria função*/
                flag=1;
            }
            else{//(tam_pla>7){
                printf("\nPlaca invalida\nMuitos digitos\n\n");
                flag=1;/*inserir(i);*/
            }
        }
        //testa se 3 primeiros digitos são letras
        for(j=0; j<3; j++){
            teste=isalpha(carro[i].placa[j]);//retorna 1 se for letra
            r==verifica_placa(teste);
            if(r==1){
                printf("\nPlaca invalida\nTres primeiros digitos devem ser letras!\n\n");
                flag=1;/*inserir(i);*/
                break;
            }
        }

        //testa se 4 últimos digitos não são letras
        for(j=3; j<7; j++){      //isalpha testa se a letra é maiuscula ou minuscula
            teste=isalpha(carro[i].placa[j]);//retorna 1 se for letra
            r==verifica_placa(teste);
            if(teste==1){
                printf("\nPlaca invalida\nQuatro ultimos digitos devem ser numeros!\n\n");
                flag=1;/*inserir(i);*/
                break;
            }
        }
    }while(flag);
    puts("\nDigite o modelo: ");
    fflush(stdin);
    gets(carro[i].modelo);
    //deixa string em minúsculo
    strlwr(carro[i].modelo);
    //deixa primeiro caractere maiúsculo
    carro[i].modelo[0]=toupper(carro[i].modelo[0]);
    puts("\nDigite a marca: ");
    fflush(stdin);
    gets(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]);
    puts("\nDigite a cor: ");
    fflush(stdin);
    gets(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]);

    puts("\nDigite a hora da entrada no formato <horas>:<minutos>:(digitar os :)");
    gets(carro[i].entrada.hora);
    carro[i].status=1;

    P=fopen("CARRO.txt", "w");
    fwrite(&carro, sizeof(carro), 1, P);
    fclose(P);
}
//----------------------------------------------------------

//Procedimento para cadastrar a entrada de veiculos no estacionamento
void cadastrar_veiculo(){
    int i,flag=1;
    for(i=0; i<10; i++){
        if(carro[i].status==0){
            inserir(i);
            printf("\n\nVeiculo cadastrado com sucesso!");
            Sleep(1000);
            flag=0;
            system("cls");
            break;
        }
    }
    if(flag==1){
        printf("Sem espaco para cadastrar\nEnter voltar ao menu...");
        getch();
        system("cls");
    }
}
// Procedimento para registrar a saida e calcular o valor a ser pago
void saida_veiculo(){
    FILE *P;
    P=fopen("CARRO.txt", "r");
    fread(&carro, sizeof(carro), 1, P);
    int i;
    int horaEnt,minEnt,horaSai, minSai,tminEnt,tminSai,T_total;
    float precoad=0.05;// preço por minuto adicional acima de 1hora
    float preco=10.00;//preço por utilização de até 1h

    puts("Digite a placa : ");
    fflush(stdin);
    gets(pesq);
    strupr(pesq);//deixa caracteres da placa em maiúsculo
    for(i=0;i<1;i++){
        if(strcmp(pesq,carro[i].placa)==0){
            printf("\n Placa -----------: %s", carro[i].placa );
            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);
            carro[i].status=0;
            /*excluir(i);*/

            printf("\n\nHora de entrada no formato <horas>enter<minutos>:\n");
            scanf("%d""%d",&horaEnt,&minEnt);
            printf("\n\n\nHora de saida no formato <horas>enter<minutos>:\n");
            scanf("%d""%d", &horaSai, &minSai);
            tminEnt = (horaEnt*60)+ minEnt;
            tminSai = (horaSai*60)+ minSai;
            T_total = tminSai-tminEnt; //calcula o tempo total
            //Informa o valor para estacionar até a duração de 1h.Valor RS1,00 pela primeira hora
            if(T_total<=60){
                printf("O carro do cliente ficou %d minutos no estacionamento, e o valor total a pagar e de: R$%.2f ",T_total, preco);
            }
            else{
                   float valorapagar = ((T_total-60)*precoad) + preco;// Calcula o valor da primeira hora mais o valor dos minutos adicionais. depois de 1h cada minuto adicional custa R$ 0.05

                printf("O carro do cliente ficou %.d minutos no estacionamento, e o valor total a pagar é de: R$%.2f\n\n\n",T_total, valorapagar);

            }


            P=fopen("CARRO.txt", "w");
            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,j, n=1, r;

    FILE *P;
    P=fopen("CARRO.txt", "r");
    fread(&carro, sizeof(carro), 1, P);

    for(i=0; i<10; i++)
    {
       if(carro[i].status==1)
         {
      printf("Veiculo %d\nPlaca: %s\t Modelo: %s\t Marca: %s\t Cor: %s\n\n", i+1, carro[i].placa, carro[i].modelo, carro[i].marca, carro[i].cor);
      printf("Entrada: %s\n\n\n\n", carro[i].entrada.hora);
      n=0;
      }
    }
    r=verifica(n);
    if(r==0)
    {
    printf("\nEnter voltar ao menu...");
    getch();
    system("cls");
    }
    else
    {
       puts("Nenhum veiculo cadastrado\nEnter voltar ao menu...");
       getch();
       system("cls");
    }
}
//-----------------------------------------------------------------------------


// Função principal
int main()
{
    int opcao;
      FILE* P;

      inicializa();

      //abre o arquivo para o fopen "w" não substituir o que já existe
      P=fopen("CARRO.txt", "r");
      if(P==NULL)P=fopen("CARRO.txt","w");
      fread(&carro, sizeof(carro), 1, P);
      fclose(P);
        printf("-------------------------------------------");
    do{
        printf("\nCONTROLE DE ESTACIONAMENTO\n\n");
        printf("-------------------------------------------\n\n");
        printf("1. Cadastrar entrada de veiculo\n");
        printf("2. Informar saida do veiculo \n");
        printf("3. Listar veiculos\n");
        printf("4. Creditos\n");
        printf("5. Sair\n\nOpcao: ");
        scanf("%d", &opcao);
        system("cls");
        switch(opcao){
        case 1:
            cadastrar_veiculo();
            break;
        case 2:
            saida_veiculo();
            break;
        case 3:
            listar_veiculo();
            break;
        case 4:
            printf("-------------------------------------------\n\n");
            printf("Programa desenvolvido pela: ");
            break;
        case 5: break;
        default:
            printf("Opcao invalida!\nEnter para voltar ao menu");
            getch();
            system("cls");
        }
    }while(opcao!=5);
    getchar();
    return 0;
}

 

Link para o comentário
Compartilhar em outros sites

Crie uma conta ou entre para comentar

Você precisa ser um usuário para fazer um comentário

Criar uma conta

Crie uma nova conta em nossa comunidade. É fácil!

Crie uma nova conta

Entrar

Já tem uma conta? Faça o login.

Entrar agora

Sobre o Clube do Hardware

No ar desde 1996, o Clube do Hardware é uma das maiores, mais antigas e mais respeitadas comunidades sobre tecnologia do Brasil. Leia mais

Direitos autorais

Não permitimos a cópia ou reprodução do conteúdo do nosso site, fórum, newsletters e redes sociais, mesmo citando-se a fonte. Leia mais

×
×
  • Criar novo...

Ebook grátis: Aprenda a ler resistores e capacitores!

EBOOK GRÁTIS!

CLIQUE AQUI E BAIXE AGORA MESMO!