Ir ao conteúdo
  • Cadastre-se

C projeto estacionamento rotativo em c


Titi_supera

Posts recomendados

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

#define LOGIN_MAX	64
#define SENHA_MAX	32

struct usuario_t {
	char login[64];
	char senha[32];
};

struct tempo {
	char hora[22];
};

struct c_veiculos{
	char placa[8], pequeno[25], medio[25], grande[25], modelo[100], moto[25];
	int status;
	struct tempo entrada;
}veiculo[100];

int nvei = 0; //NUMERO DE VEICULOS CADASTRADO
char pesq[8];

void iniciar(){
	int i;
	for(i = 0; i < 100; i++){
		veiculo[i].status = 0;
	}
}

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

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

void excluir(int i){
	
	veiculo[i].placa == 0;
	veiculo[i].pequeno == 0;
	veiculo[i].medio == 0;
	veiculo[i].grande == 0;
	veiculo[i].modelo == 0;
	veiculo[i].moto == 0;
	veiculo[i].status == 0;
}

void inserir(int i){
	
	char plac[8];
	int j, teste, tam_pla, r;
	FILE *P;
	
	puts("Digite a placa: ");
	fflush(stdin);
	gets(plac);
	strupr(plac);
	strcpy(veiculo[i].placa, plac);
	tam_pla = strlen(veiculo[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);
		}
	}
	//testa se 3 primeiros digitos são letras
	for(j = 0; j < 3; j++){
		teste= isalpha(veiculo[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++) {
	  	  teste=isalpha(veiculo[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(veiculo[i].modelo);
   //deixa string em minúsculo
   strlwr(veiculo[i].modelo);
   //deixa primeiro caractere maiúsculo
   veiculo[i].modelo[0]=toupper(veiculo[i].modelo[0]);
      
	puts("\nDigite a hora da entrada no formato <horas>:<minutos>:(digitar os :)");
	gets(veiculo[i].entrada.hora);
	veiculo[i].status=1;
	
	puts("\nPorte Pequeno? ");
   fflush(stdin);
   gets(veiculo[i].pequeno);
   //deixa string em minúsculo
   strlwr(veiculo[i].pequeno);
   //deixa primeiro caractere maiúsculo
   veiculo[i].pequeno[0]=toupper(veiculo[i].pequeno[0]);
   
   puts("\nPorte Medio? ");
   fflush(stdin);
   gets(veiculo[i].medio);
   //deixa string em minúsculo
   strlwr(veiculo[i].pequeno);
   //deixa primeiro caractere maiúsculo
   veiculo[i].medio[0]=toupper(veiculo[i].medio[0]);
   
   puts("\nPorte Grande? ");
   fflush(stdin);
   gets(veiculo[i].grande);
   //deixa string em minúsculo
   strlwr(veiculo[i].grande);
   //deixa primeiro caractere maiúsculo
   veiculo[i].grande[0]=toupper(veiculo[i].grande[0]);
   
   puts("\nPorte Moto? ");
   fflush(stdin);
   gets(veiculo[i].moto);
   //deixa string em minúsculo
   strlwr(veiculo[i].moto);
   //deixa primeiro caractere maiúsculo
   veiculo[i].moto[0]=toupper(veiculo[i].moto[0]);
	
	P=fopen("CARRO.txt", "w");
	fwrite(&veiculo, sizeof(veiculo), 1, P);
	fclose(P);
}

void cadastrar_veiculo(){
	int i, flag = 1;
	
	for(i=0; i<10; i++){
		if(veiculo[i].status == 0){
			inserir(i);
			printf("\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");
     }
}

void listar_veiculo()
{
    int i,j, n=1, r;

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

    for(i=0; i<10; i++)
    {
   	if(veiculo[i].status==1){
      printf("Veiculo %d\nPlaca: %s\t Modelo: %s\t Pequeno: %s\t Medio: %s\t Grande: %s\t Moto: %s\n\n"), i+1, veiculo[i].placa, veiculo[i].modelo, veiculo[i].pequeno, veiculo[i].medio, veiculo[i].grande, veiculo[i].moto;
      printf("Entrada: %s\n\n\n\n", veiculo[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");
	}
}

void saida_veiculo(){
	FILE *P;
	P=fopen("CARRO.txt", "r");
    fread(&veiculo, sizeof(veiculo), 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_pequeno = 5.00;//preço por utilização de até 1h
	 float preco_medio = 7.00;
	 float preco_grande = 10.00;
	 float preco_moto = 8.00;
	 
    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,veiculo[i].placa)==0){
				 	 printf("\n Placa: %s", veiculo[i].placa);
					  printf("\n Modelo: %s", veiculo[i].modelo);
					  printf("\n Pequeno porte? %s", veiculo[i].pequeno);
					  printf("\n Medio porte? %s", veiculo[i].medio);
					  printf("\n Grande porte? %s", veiculo[i].grande);
					  printf("\n Moto? %s", veiculo[i].moto);
					  printf("\n Hora de Entrada: %s\n\n", veiculo[i].entrada.hora);
					  veiculo[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){
            	if(veiculo[i].pequeno == (int)1){
					printf("O carro do cliente ficou %d minutos no estacionamento, e o valor total a pagar e de: R$%.2f ",T_total, preco_pequeno);
						return 0;
				}else{
			       float valorapagar = ((T_total-60)*precoad) + preco_pequeno;// 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);
				}}else if(veiculo[i].medio == (int)1){
				   printf("O carro do cliente ficou %d minutos no estacionamento, e o valor total a pagar e de: R$%.2f ",T_total, preco_medio);	   
			   }else{
			       float valorapagar = ((T_total-60)*precoad) + preco_medio;
			       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);
			       
			   }}else if(veiculo[i].grande == (int)1){
				   printf("O carro do cliente ficou %d minutos no estacionamento, e o valor total a pagar e de: R$%.2f ",T_total, preco_grande);
				   				   
			   }else{
			       float valorapagar = ((T_total-60)*precoad) + preco_grande;
			       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);
			       
			   }if(veiculo[i].moto == (int)1){
				   	   printf("O carro do cliente ficou %d minutos no estacionamento, e o valor total a pagar e de: R$%.2f ",T_total, preco_grande);
				   			   
			   }else{
			       float valorapagar = ((T_total-60)*precoad) + preco_moto;
			       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(&veiculo, sizeof(veiculo), 1, P);
            fclose(P);
             if (i==10){
                     printf("Veiculo não encontrado");
				}
		}
}


void Cadastrar(){
	
	FILE *fp;
	struct usuario_t usu;
	memset(&usu, 0, sizeof(struct usuario_t));
	
	printf("Cadastro de Usuario: \n\n");
	printf("Login: ");
	scanf("%s", &usu.login);
	
	printf("Senha: ");
	scanf("%s", &usu.senha);
	
	fp = fopen("login", "wb");
	if(!fp){
		printf("Não foi criar o arquivo de login");
		return;
	}
	fwrite(&usu, sizeof(struct usuario_t), 1, fp);
	fclose(fp);
}

int Login(){
	FILE *fp;
	struct usuario_t usu;
	fp = fopen("login", "rb");
	if(!fp){
		Cadastrar();
		fp = fopen("login", "rb");
		if(!fp){
			printf("Não foi possível encontrar o arquivo de login\n");
		    return 0;
		}
	}
	memset(&usu, 0, sizeof(struct usuario_t));
	
	fread(&usu, sizeof(struct usuario_t), 1, fp);
	fclose(fp);
	if(!strcmp("", usu.login)){
		printf("Nenhum usuario encontrado, abrindo cadastro!\n\n");
		Cadastrar();
	}else{
		int tentativas = 0;
		do{
			char login[LOGIN_MAX];
			char senha[SENHA_MAX];
			printf("Login: ");
			scanf("%s", &login);
			printf("Senha: ");
			scanf("%s", &senha);
			if(!strcmp(login, usu.login) && !strcmp(senha, usu.senha)){
				printf("Bem vindo %s\n", usu.login);
				return 1;
			}else {
				printf("Usuario ou senha invalidos!\n\n");
				tentativas++;
			}
		} while (tentativas < 3);
		printf("Numero maximo de tentativas alcancado, abrindo cadastro!\n\n");
        Cadastrar();
		return 0;
	}
	return 0;
}


int main() {

	int opcao;
	FILE* P;

	Login();

	iniciar();

      //abre o arquivo para o fopen "w" não substituir o que já existe
      P=fopen("CARRO.txt", "r");
      fread(&veiculo, sizeof(veiculo), 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. 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: break;

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

      getchar();
}
	

Boa Noite! Estou com dificuldades com o meu código da faculdade, eu não estou conseguindo identificar o problema, eu adicionei nos preços o portes do carro, mas eu não estou conseguindo fazer ele calcular o valor de acordo com o porte do carro, poderiam me ajudar a entender qual é o problema? 

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

 

@Math.Pi boa note, então um problema que estou vendo e na hora de listar o veiculo o programa não mostra nada e quando eu coloco pra saída de veículos o programa entra em loop, e bem provavelmente é por causa do porte do veiculo e eu não estou tendo uma ideia de como eu posso colocar os porte do veiculo, se é pequeno, médio ou grande e se é moto, se resolver esse problema basicamente o código vai estar pronto. image.png.723255d1dd5eaa0054f05577b88c8e28.png

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

Seu programa tem muitos problemas. E sequer compila direito ainda.

 

Que ambiente usa para programar? Usa um IDE? Habilite as mensagens de erro de aviso do compilador. E se está vendo alguma resolva.

 

Esse código, por exemplo:

 

void excluir(int i)
{
    veiculo[i].placa == 0;
    veiculo[i].pequeno == 0;
    veiculo[i].medio == 0;
    veiculo[i].grande == 0;
    veiculo[i].modelo == 0;
    veiculo[i].moto == 0;
    veiculo[i].status == 0;
}

 

equivale a uma sequência de 7 valores 0 ou 1 e que serão descartados.

Supondo que 'i' seja 0 e veiculo[0] esteja zerado sua função vai virar 

 

void excluir(int i)
{
    1;
    1;
    1;
    1;
    1;
    1;
    1;
}

 

Porque isso? porque você usou '==' ao invés de '=' . O primeiro é um operador de comparação e o segundo é o de atribuição.

 

Você tem um livro? Seu curso adota um livro? Já viu uma tabela de operadores? 

 

E isso compila ok. Só não faz sentido.

 

Eis o que meu compilador disse sobre essas linhas:
 

(51): warning C4553: '==': result of expression not used; did you intend '='?
(52): warning C4553: '==': result of expression not used; did you intend '='?
(53): warning C4553: '==': result of expression not used; did you intend '='?
(54): warning C4553: '==': result of expression not used; did you intend '='?
(55): warning C4553: '==': result of expression not used; did you intend '='?
(56): warning C4553: '==': result of expression not used; did you intend '='?
(57): warning C4553: '==': result of expression not used; did you intend '='?

 

ou o seu compilador disse algo assim e você não leu ou não disse e você configurou errado, errado para quem está aprendendo e errado para um profissional.

 

Em C qualquer expressão vale 0 ou 1. E 0 é falso. Só zero é falso. Todo outro valor é verdadeiro. Teve alguma aula que explicou isso?
 

    veiculo[i].placa == 0;

 

Isso quer dizer que a expressão acima vale 0 se veiculo[i] não for zero e 1 se for 0.

 

E não era isso que você queria.

 

Outros problemas em seu código:

 

Seu programa tem muitos, talvez todos os problemas comuns que a gente vê aqui nesse forum, Eu tenho uma lista de '19 de onde eu copio essas coisas. Acho que isso vem da maneira como ensinam isso hoje em dia. Ou nem ensinam. E do material de apoio pobre, apostilas, aulas, exercícios e provavelmente instrutores. Não pode ser coincidência.

 

  • Não use acentos em nomes de variáveis ou comentários. Evite em strings  a menos que o enunciado exija. Não vai aprender nada e só vai ter problemas
     
  • Não use system() para nada. Não estará fazendo nada. Não há praticamente nada que possa fazer com system() que não possa fazer em C ou C++. system() foi escrita em C e o sistema quase todo também. E em geral é proibido em empresas e escolas afinal: é um risco grande de segurança. E se tem algo que você não possa inicialmente fazer em C ou C++ talvez não deva mesmo fazer.
     
  • main() deve ser a primeira função de seu programa. Se possível em um arquivo separado. Há muitas razões para isso, mas em especial vai gostar de começar a ler seus programas e os de outros a partir de main() E a partir do início do texto. Ao mesmo tempo. E ao usar protótipos fica trivial passar as declarações todas para um arquivo .h que é o mais prático afinal.
     

  • main() deve ser a primeira função de seu programa. Se possível em um arquivo separado. Há muitas razões para isso, mas em especial vai gostar de começar a ler seus programas e os de outros a partir de main() E a partir do início do texto. Ao mesmo tempo. E ao usar protótipos fica trivial passar as declarações todas para um arquivo .h que é o mais prático afinal.
     

  • evite retornar void de funções: em geral é um desperdício. E muitas vezes um erro. Use argumentos nas funções, e retorne algo delas. É mais esperto e expressivo
     

  • não use gets(). Nunca. Não há nenhuma razão. fgets() é muito mais prática e segura e você não precisa se preocupar em seu programa cancelar porque o cara digitou além do que cabia no campo. E em geral o uso de gets()  é proibido mesmo, pela empresa ou pela escola. Foi marcada como obsoleta há décadas e alguns compiladores nem aceitam mais.
     

  • Use alguma ordem em suas funções, como a ordem alfabética por exemplo. Vai gostar disso quando seu programa tiver 50 funções ao invés de umas poucas. Muitos IDE mostram uma lista das funções, em geral na ordem em que foram declaradas, de modo que você pode clicar no nome e o editor vai direto para o código, mas se estiverem em ordem é claro que você só ganha.
     

  • Nunca use variáveis globais. Isso é um pesadelo e sempre vai cair na sua cabeça. Em geral é proibido em empresas e escolas. Não declare NADA que use memória  fora de main().
     

  • Não declare mais que uma variável por linha. Não acrescenta nada e só dificulta a leitura. Inicialize todas as variáveis.
     

  • Nunca leia valores do teclado para alimentar seu programa antes dele estar rodando. Só vai te atrasar e não acrescenta absolutamente nada. Use constantes, use funções que retornam a estrutura preenchida. Leia de arquivos: é trivial em C. Ao terminar os  testes aí sim incorpore a leitura. Um programa interativo é chato para testar. Durante o desenvolvimento ninguém quer interagir com o programa. Nunca escreva um programa interativo, mesmo que seja o objetivo final.
     

  • Use nomes significativos para as variáveis e fuja de coisas como aux, aux1 e aux2. E não use nomes de variáveis enormes porque em uma expressão fica muito difícil de ler.
     

  • Se seu programa tem um menu, entenda que o menu() deve mostrar as opções e ler e retornar a opção. Um void menu() é um desperdício.
     

  • scanf() foi escrita para ler entrada formatada. Não use para ler do teclado, que claramente não é entrada formatada. Só vai dar mais trabalho. Muito mais trabalho.

 

  • Ao usar scanf() ou alguma função da família, como fscanf() entenda que ela retorna um valor. E teste. É ingênuo deixar o programa seguir sem testar. TESTE sempre. Exemplo: para 5 especificadores --- aquelas coisas com % na frente e que não tem um asterisco nem outro '%' --- como "%d %d %f %f %d" scanf() pode ler de 0 a 5 itens ou dar erro e retornar -1. Então teste o retorno que vai estar entre -1 e 5
     
  • não use fflush(): isso só está definido para fluxos de saída. Em alguns compiladores pode até funcionar, mas é um sinal de fez algo errado e não sabe como consumir os dados.
     
  • Não existe "lixo de teclado": necessidades como de flush() na entrada indicam apenas que não entendeu bem o que está lendo e o que é a entrada via teclado, free form: o usuário pode digitar qualquer coisa e é o seu programa que tem que se virar O teclado tem ao menos 105 teclas de liberdade e o usuário pode digitar qualquer coisa em qualquer ordem.
     
  • Nunca escreva um programa interativo. Não vai aprender nada. Não vai ganhar nada. Escreva e teste todas as funções. DEPOIS de tudo testado coloque a parte interativa. isso inclui claro o eventual menu.
     
  •  evite ler do teclado a menos que seja o objetivo do problema. Ler de arquivos é muito mais simples, seguro e fácil de reproduzir. Não há razão para ficar parado em frente a tela minutos inventando nomes de campos e coisas assim: o efeito é que vai acabar não testando direito porque é difícil controlar e repetir testes.

 

  • Não misture entrada de dados ou formatação com a apresentação dos dados ou a lógica do programa, Isso é um desastre para manutenção e desenvolvimento
     
  •  Um printf() de 6 linhas é muito, mas muito melhor que 6 printf() de 1 linha. E se só vai mostrar o texto puts() é ainda melhor e dezenas de vezes mais rápido que uma série de printf().
     
  •  Ao usar uma estrutura de dados como uma lista, uma pilha ou fila entenda que ela é um container e nada tem a ver com os dados. Não misture NUNCA os dados com a estrutura porque só via complicar tudo. Em especial vai ficar muito mais difícil aproveitar a estrutura em outros programas, e essa é toda a razão de escrever um programa.

 

De minha lista de problemas comuns faltou apenas você ter incluído conio.h em seu programa

 

É claro possível concluir seu programa assim, mas vai ter um trabalho do inferno e vai poder usar muito menos de seu programa num próximo programa.

 

Revendo o código

 

void saida_veiculo()
{
  //...
}

 

 

 

Coisas assim são proibidas em toda parte, escolas e empresas.  E por boa razão. Isso é um desastre em termos de manutenção e torna suas funções praticamente inúteis.

 

Nada entra e nada sai. Tudo com o que sua função opera ou morre dentro dela ou é global e portanto pode ser acessado de propósito ou por engano no programa inteiro. E, acredito em mim, você não quer isso. Nem seu professor nem seu patrão.

 

Você quer dar saída de um veículo de um estacionamento e quer saber se deu certo. Considere uma hipotética estrutura Veiculo descrevendo um veículo e uma estrutura Estacionamento descrevendo você imagina o que.

 

Então uma função 

 

    int    saida(Veiculo* v, Estacionamento* e); 

 

 

que recebe um ponteiro para um veiculo 'v' e tenta processar a saida dele de um estacionamento 'e' e retorna um código negativo descrevendo um eventual erro ou um valor maior ou igual a zero sinalizando quantos carros sobraram no pátio não faria sua vida mais simples? Sim, faria. 

 

Escreva em torno dos dados

 

Pense nos dados ANTES de começar a escrever código. E escreva em torno disso. Todos esses programas de iniciantes são iguais. Ao perceber isso você trabalha cada vez menos nesses programas. Hoje é o estacionamento em um vetor. Amanhã será a playlist, os livros, a loja, os tickets. E o vetor vira lista, pilha, árvore, banco de dados, o diabo.

 

Exemplo

 

Isso é o que está usando:

 

struct usuario_t
{
    char login[64];
    char senha[32];
};

struct tempo
{
    char hora[22];
};

struct c_veiculos
{
    char placa[8], pequeno[25], medio[25], grande[25],
        modelo[100], moto[25];
    int          status;
    struct tempo entrada;
} veiculo[100];

 

 

Problemático. 

 

Onde está o estacionamento? Não é esse o seu objetivo? Se não tiver um desses explícito vai ter que implementar de todo modo. Porque não tem um Estacionamento num programa de estacionamento??? Não acha que vai fazer falta? Vai.

 

E o veículo? 

 

struct c_veiculos
{
    char placa[8], pequeno[25], medio[25], grande[25],
        modelo[100], moto[25];
    int          status;
    struct tempo entrada;
} veiculo[100];

 

 

pequeno médio grande e moto com 25 char cada um? O que é isso? Sequer pode ser mais de 1 ao mesmo tempo. Não seria a simples categoria do veículo? Uma letrinha não serviria?

 

E um vetor global com 100 dessas coisas? Como vai saber quantos tem num dado momento? ? ?

 

int  nvei = 0;  // NUMERO DE VEICULOS CADASTRADO

 

 

pois é: um contador global. E se zoar esse valor o programa já era. E não dá pra imaginar mais de um estacionamento. 

 

E o tempo?

 

struct tempo
{
    char hora[22];
};

 


22 char? Como assim? Num estacionamento tem um ticket. Um horário. Como vai calcular a permanência? Não seria muito mais simples ter uma data? C tem suporte para isso. Em um int. Ou usa o simples: dd/mm/aa hh:mm:ss. Não seria novidade.

 

Uma alternativa

 

#include <stdio.h>

#define LOGIN_MAX 64
#define SENHA_MAX 32
#define CAPACIDADE 10

typedef struct
{
    char login[64];
    char senha[32];
} Usuario;

typedef struct
{
    char dia[2];
    char mes[2];
    char ano[2];
    char hh[2];
    char mm[2];
    char ss[2];
} Tempo;

typedef struct
{
    char pl[8];
} Placa;

typedef struct
{
    char  cat;  // categoria
    Placa placa[8];
    char  modelo[100];
    int   status;
    Tempo entrada;
} Veiculo;

typedef struct
{
    char     nome[64];
    unsigned cap;  // quantos cabem
    unsigned qtd;  // quantos tem
    Veiculo  V[CAPACIDADE];
} Estac;

 

 

A diferença: não alocou nada. Nenhuma variável. Não começou o programa. Mas tem

  • Estacionamento
  • Veiculo
  • Placa
  • Uma data com a qual pode operar e calcular intervalos
  • Um usuario

E as funções?

 

ANTES de começar a programar já pode considerar como sua vida poderia ser mais simples:

 

Usando sem pensar as mesmas funções

 

    int cadastrar_veiculo(Veiculo* v, Estac* e);
    int inserir( Placa* plc, Estac* e);
    int excluir( Veiculo* v, Estac* e);
    int saida( Veiculo* v, Estac* e);
    int listar_veiculo(Veiculo* v);
    int listar_frota(Esta* e);

 

 

Sem void. Tudo retorna algo. Se retornar negativo deu pau. A poesia dos programas de estudo: pode cancelar e começar de novo sem tratar muitos dos erros

 

Esse "programa" 

 

#include <stdio.h>

#define LOGIN_MAX 64
#define SENHA_MAX 32
#define CAPACIDADE 10

typedef struct
{
    char login[64];
    char senha[32];
} Usuario;

typedef struct
{
    char dia[2];
    char mes[2];
    char ano[2];
    char hh[2];
    char mm[2];
    char ss[2];
} Tempo;

typedef struct
{
    char pl[8];
} Placa;

typedef struct
{
    char  cat;  // categoria
    Placa placa[8];
    char  modelo[100];
    int   status;
    Tempo entrada;
} Veiculo;

typedef struct
{
    char     nome[64];
    unsigned cap;  // quantos cabem
    unsigned qtd;  // quantos tem
    Veiculo  V[CAPACIDADE];
} Estac;

int cadastrar_veiculo(Veiculo* v, Estac* e);
int inserir(Placa* plc, Estac* e);
int excluir(Veiculo* v, Estac* e);
int saida(Veiculo* v, Estac* e);
int listar_veiculo(Veiculo* v);
int listar_frota(Estac* e);

int main(void)
{
    Estac   teste;
    Veiculo V;
    Veiculo* pV = NULL;
    Usuario  Jhonny = {"Jhonny", "12345"};
}

 

 

Já compila e até roda. E nem começamos a programar nada. Mas já dá pra testar muitas coisas.

 

Espero que entenda a diferença. 

 

 

 

 

 

 

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

  • 2 semanas depois...

@arfneto obrigado pela ajuda, eu vou refazer o meu código, eu estou usando o programa Falcon C++, e antes de postar o meu código aqui, eu tinha visto as mensagens de erro, ai eu tentei corrigi-las, mas não acabou do jeito que eu queria, não faço ideia de como adicionar os portes no código e acabei tentando usar o if e else, eu também não sei muita coisa na programação, e tem algumas coisas que os meus professores não explicou, eu estou assistindo alguns de vídeos, mas ainda sim eu tenho dificuldades, mas estou tentando e foi isso que eu conseguir fazer com os meus conhecimentos. Eu irei refazer o meu código com base no seu código.

  • Curtir 2
Link para o comentário
Compartilhar em outros sites

@Titi_supera acha que entendeu a diferença de escrever assim como eu expliquei? 

 

Entendeu o que seria "escrever em torno dos dados" e porque fazendo do modo como expliquei já pode ter algo para testar em 1 hora? 

 

13 minutos atrás, Titi_supera disse:

eu tinha visto as mensagens de erro, ai eu tentei corrigi-las, mas não acabou do jeito que eu queria, não faço ideia de como adicionar os portes no código e acabei tentando usar o if e else

 

Poste aqui um exemplo do problema e da dificuldade e provavelmente terá ajuda

  • Curtir 1
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...

 

GRÁTIS: ebook Redes Wi-Fi – 2ª Edição

EBOOK GRÁTIS!

CLIQUE AQUI E BAIXE AGORA MESMO!