Ir ao conteúdo

Posts recomendados

Postado
<Estou tentando criar um controle de estacionamento da minha facul mas está dando erros, alguém pode me ajudar com esses erros?>



#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.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.placa==0;
     carro.modelo==0;
     carro.marca==0;
     carro.cor==0;
     carro.entrada.hora==0;
     carro.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.placa, pla);

      tam_pla=strlen(carro.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.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++)
      {
            teste=isalpha(carro.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.modelo);
   //deixa string em minúsculo
   strlwr(carro.modelo);
   //deixa primeiro caractere maiúsculo
   carro.modelo[0]=toupper(carro.modelo[0]);

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

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

   puts("\nDigite a hora da entrada no formato <horas>:<minutos>:(digitar os :)");
   gets(carro.entrada.hora);
   carro.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.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=1.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.placa)==0){
             printf("\n Placa: %s", carro.placa);
             printf("\n Modelo: %s", carro.modelo);
             printf("\n Marca: %s", carro.marca);
             printf("\n Cor: %s", carro.cor);
             printf("\n Hora de Entrada: %s\n\n", carro.entrada.hora);
             carro.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.status==1)
         {
      printf("Veiculo %d\nPlaca: %s\t Modelo: %s\t Marca: %s\t Cor: %s\n\n", i+1, carro.placa, carro.modelo, carro.marca, carro.cor);
      printf("Entrada: %s\n\n\n\n", carro.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()
{

//dados cadastrais do cliente
    struct cad_cliente{
    char nome[10];
    int idade;
    char CPF_CNPJ[20];
    char CNH[30];
    char Endereco[50];


    printf("Informe o nome do cliente: ");
    gets(info.nome);
    printf("Informe a idade do cliente: ");

    scanf("%d", &info.idade);
    printf("Informe o CPF/CNPJ do cliente: ");
    fflush(stdin);
    gets(info.CPF_CNPJ);
    printf("Informe o número do CNH do cliente: ");
    gets(info.CNH);
    printf("Informe o endereço do cliente: ");
    gets(info.Endereco);
    system("pause");
    return 0;


    int main(void){
    struct cad_cliente info;
    printf("-----------------------------------------\n");
    printf("\tCONTROLE DE ESTACIONAMENTO\n");
    printf("-----------------------------------------\n\n");
    printf("1- Cadastrar Cliente\n");
    printf("\n2- Cadastrar Veiculo\n");
    printf("\n3- Listar veiculos cadastrados\n");
    printf("\n4- Creditos\n");
    printf("\n5- Sair\n");
    printf("\n Opcao: \n");
    int opcao;
    scanf("%d", &opcao);

               switch(opcao)
               {
                    case 1:
                    {
                    system("cls");
                    printf("Cadastrar Cliente\n");
                    break;
                    }
                    case 2:
                    {
                    system("cls");
                    printf("Cadastrar Veiculos\n");
                    break;
                    }
                    case 3:
                    {
                    system("cls");
                    printf("\n3- Listar veiculos cadastrados\n");
                    break;
                    }
                    case 4:
                    {
                    system("cls");
                    printf("-------------------------------------------\n\n");
                    printf("Programa desenvolvido pela equipe:\n\n\n");
                    printf("Álax Ataíde\nGabriel Menino\nPedro Vinícius\nProfessor: André Felix Freitas");
                    break;
                    }
                    case 5: break;

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

      getchar();

    };


 

Postado

Use o botão code lá no menu para postar o código. Assim como fez dá muito trabalho para alguém ler e eventualmente baixar para compilar.

 

Não use variáveis globais. Isso só dá problema e vai sempre cair na sua cabeça. Todos os autores falam isso, os professores ensinam isso, muitas empresas proíbem isso, muitas diretrizes de programação começam por isso. Então não deve ser só minha opinião...

 

Poste algo objetivo sobre o que está havendo com seu programa ou qual dúvida você tem. "Está dando erro" é muito genérico

Postado

Chegou muito longe para ter erros é que existem aqui muita métodos, objetos funções e detalhes até um menu já tem; isso é fase final. É preciso testar as funções uma a uma eliminando o que está de acordo para identificar o que não está.

 

😆

Postado

@arfneto adicionei os códigos na opção code, não especifiquei o erro porque nem mesmo eu sei porque tá dando erro ai eu queria que alguém me ajudasse com isso

Postado
1 hora atrás, Def disse:

nem mesmo eu sei porque tá dando erro ai eu queria que alguém me ajudasse com isso

 

Recomendo NUNCA editar posts anteriores a menos de algum erro de ortografia ou esquecimento...

Ao fazer isso em geral a conversa toda perde o sentido, porque os leitores não vão entendem respostas a perguntas e coisas que não estão mais lá

 

Exemplo

 

Aqui pode ser inofensivo, se apenas colocou o código dentro do "box" code. Mas aí a própria mensagem dizendo para você fazer isso já perde o sentido certo?

 

:) 

 

eu já disse isso, mas repito aqui agora que o código está mais legível: NUNCA use variáveis globais. Não sei se entendeu o que eu disse antes. Nada perguntou então vou imaginar que sim.

 

Seu programa não parece muito bom. Vou dar uma olhada depois do almoço ;) 

 

Um programa com mais de 300 linhas não devia mas ter erros como esse:


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.status = 0;
}

carro é um vetor de 10 estruturas...

Postado

@arfneto Entendi o que disse acima, mas e como era pra ficar? essa parte foi um colega do meu grupo que fez e me mandou com inúmeros erros, eu fiz a parte de cadastrar cliente

Postado
void inicializa()
{
    int i;

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

Se até declarou i variando de 0 a 9 imagino que pretendia zerar o contador de carros, e são 10. Assim como escreveu vai repetir 10 vezes a mesma coisa para a mesma variável. Que nem existe na verdade, já que status é um campo de cad_carro e carro é um vetor de struct...

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

Se a variável só serve como índice é melhor se acostumar a declarar dentro do for...

 

Não use variáveis globais. Use parâmetros. E em C passe endereços.

 

Escreva seus programas em torno dos dados. A partir dos dados. Use constantes e não menus durante o desenvolvimento e vai gastar uma fração do tempo.

 

main() deve ser a primeira função de seu programa. Sempre. E se possível em um arquivo separado. Assim fica mais fácil dividir o trabalho, por exemplo. E entender o programa. E não ter que compilar o programa todo toda hora. E incorporar o que cada um do grupo fez. É a realdidade.

 

Declarações assim:


struct Tempo{ char hora[7]; };

typedef struct
{
    char    cor[10];
    struct Tempo entrada;
    char    modelo[20];
    char    marca[20];
    char    placa[8];
    int     status;
}   Carro;

Carro carro[10];

São mais expressivas e comuns na prática.

Postado
//----------------------------------------------------------
//função verifica placa
int verifica_placa(int n) {

Talvez concorde que esse comentário não é assim muito esclarecedor

 

    if (n == 0) {
        return 0;
    }
    else {
        return 1;
    }

Estaria melhor como

    return (n!=0);

Esse código é curioso: para que zerar todos os campos? 

void excluir(int i)
{
    carro.placa == 0;
    carro.modelo == 0;
    carro.marca == 0;
    carro.cor == 0;
    carro.entrada.hora == 0;
    carro.status == 0;
}

Basta um campo afinal. Quando outro carro entrar na vaga vai redefinir tudo afinal. Escolha um. Note que:

  • se usa assim os carros podem estar em qualquer lugar no vetor de 10. Só está marcando como disponível a vaga.
  • placa é um char[8]. Porque acha que pode escrever placa = 0?
  • é o mesmo erro de antes. carro é um vetor de struct cad_carro. não existe carro.placa
  • o que existe é carro[ i ].placa e mesmo assim não pode atribuir 0 porque são sete letras.
  • está bem ruim. O que você queria fazer era passar o número da vaga e excluir da struct. Só isso. Até acho que tentaram passar o índice da vaga como parâmetro. Mas mesmo isso já era exagero. O simples é escrever no programa: carro[ i ].status = 0 por exemplo, e assumir que as vagas com status 0 estão livres. Muito mais simples.
  • E essa função:
    // Função verifica se o estacionamento esta vazio
    int verifica(int n)
    {
        if (n == 0) {
            return 0;
        }
        else {
            return 1;
        }
    }

    Muito útil o comentário. Ou não. Mas se tem uma variáveis global --- repito: não use variáveis globais --- para isso não seria o caso de usar apenas

return nvei == 0;

Ou simplesmente usar essa variável no programa ao invés de escrever uma função? 

E verifica() não é um nome ingênuo para uma função dessas? Que tal tudo_vazio()

 

//Procedimento para inserir dados dos veículos
void inserir(int i)
{

Mais um comentário importante. Ou não ;) 
 

Procure sempre retornar algo. É um desperdício cada vez que retorna void(). Por outro lado, não escreva esse tipo de rotina assim. Procurem usar sempre

int    inserir(Carro* um);

É mais esperto. Preste atenção a isso. É importante. Vou mostrar um exemplo depois.

 

Escrevam o programa em torno dos dados. Sempre. Pensem antes de tudo nos dados. Um estacionamento tem

  • vagas
  • clientes
  • carros

Porque tem uma estrutura cad_cliente em main? structs devem ser globais. Variáveis não. Porque não tem uma estrutura para as vagas?

 

Considerem os dados: os carros tem donos e os donos tem carros. Os carros ficam em vagas. As vagas podem ter números, os carros podem ter prismas com números, os carros saem e pagam pela estadia. É a realidade. Se você chegar mais perto da realidade seu programa fica mais fácil e não mais difícil.

 

Crie um campo na struct de cliente que vincula ao carro. 

Crie um campo na struct carro que vincula ao cliente.

Crie uma struct para as vagas. Pode ser só um vetor de dez char, para controle.

 

É o simples. Porque permite vincular tudo com tudo. Responder todas as perguntas. Um campo tipo ID

 

Exemplo


Sem intenção de escrever seu programa, apenas para mostrar como pode ser diferente e mais simples entenda:
 

Se declarou assim:

struct Tempo {
    char hora[10]; };

typedef struct
{
    char    cor[10];
    struct Tempo entrada;
    char    modelo[20];
    char    marca[20];
    char    placa[10];
    int     status;
}   Carro;

E considerando que status > 0 indica a vaga onde está o carro, então:

    const Carro carro1 = {
        "prata",
        "12:11:10",
        "DBS",
        "Aston Martin",
        "ABC-4321",
        1
    };

    const Carro carro2 = {
        "azul",
        "12:11:10",
        "DBS",
        "Aston Martin",
        "ABC-4325",
        2
    };

Esse já são dois carros legais para estacionar. Completos. Todos os campos.

 

Imagine uma função assim:

int mostra_um_carro(Carro* c);

Que mostra na tela o óbvio: um carro. Todos os campos.


E um programa sofisticado assim:

int main()
{
    Carro carro[10];
    int no_patio = 0;
    carro[0] = carro1;
    no_patio += 1;
    carro[8] = carro2;
    no_patio += 1;
    // mostra os carros no patio
    for (int v = 0; v < 10; v += 1)
        if (carro[v].status > 0) mostra_um_carro(&carro[v]);
    printf("%d carros no patio\n", no_patio);
};

Ele já mostra os carros que estão no pátio e a vaga de cada um:

Aston Martin DBS Cor: prata Placa: ABC-4321 Entrada: 12:11:10
Aston Martin DBS Cor: azul Placa: ABC-4325 Entrada: 12:11:10
2 carros no patio

Entende a diferença?

 

Eis um programa de teste inteiro, usando recortar e colar de seu programa...

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

struct Tempo {
    char hora[10]; };

typedef struct
{
    char    cor[10];
    struct Tempo entrada;
    char    modelo[20];
    char    marca[20];
    char    placa[10];
    int     status;
}   Carro;

const Carro carro1 = {
    "prata",
    "12:11:10",
    "DBS",
    "Aston Martin",
    "ABC-4321",
    1
};

const Carro carro2 = {
    "azul",
    "12:11:10",
    "DBS",
    "Aston Martin",
    "ABC-4325",
    2
};


int mostra_um_carro(Carro*);

int main()
{
    Carro carro[10];
    int no_patio = 0;
    carro[0] = carro1;
    no_patio += 1;
    carro[8] = carro2;
    no_patio += 1;
    // mostra os carros no patio
    for (int v = 0; v < 10; v += 1)
        if (carro[v].status > 0) mostra_um_carro(&carro[v]);
    printf("%d carros no patio\n", no_patio);
};

int mostra_um_carro(Carro* c)
{
    printf("%s %s Cor: %s Placa: %s Entrada: %s \n",
        c->marca,
        c->modelo,
        c->cor,
        c->placa,
        c->entrada.hora
    );
    return 0;
};
// fim

Eu não fiz nada. Nem pensei no enunciado. Mas já posso testar várias coisas...

  • Curtir 1

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...

LANÇAMENTO!

eletronica2025-popup.jpg


CLIQUE AQUI E BAIXE AGORA MESMO!