Ir ao conteúdo
  • Cadastre-se

C Controle de estacionamento, como fazer?


Def

Posts recomendados

@arfneto mas e se eu colocar o case 2 junto com o case 1? tipo assim:

#include <stdio.h>
#include <stdlib.h>
#include <string.h>
struct cad_veiculo {
    char placa[10];
    int  modelo;
    char marca[20];
    char cor[30];
    char ano[50];
};

//dados cadastrais do cliente
    struct cad_cliente{
    char nome[10];
    int idade;
    char CPF_CNPJ[20];
    char CNH[30];
    char Endereco[50];
    };
    int main(void){
    char aux[200];
    while(1){
            system("cls");
       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("\nOpcao: ");
    scanf("%d",&opcao);
    switch(opcao){
    case 1:
    struct cad_cliente info;
    int opcao;
        system("cls");
    printf("Informe o nome do cliente: ");
    fflush(stdin);
    gets(info.nome);
    printf("Informe a idade do cliente: ");
    scanf("%d", &info.idade);

    printf("Informe o CPF/CNPJ do cliente: ");
    cpf:
    fflush(stdin);
    gets(aux);
    if (strlen(aux) < 11){
    printf("erro quantidade de digitos menor do que o correto\n");
    printf("Digite novamente: \n");
    goto cpf;

    }
    else if (strlen(aux) > 11){
    printf("erro quantidade de digitos maior do que o correto\n");
    printf("Digite novamente: \n");
    goto cpf;

    }
    else{
    strcpy(info.CPF_CNPJ,aux);
    }
    printf("Informe o número do CNH do cliente: ");
    cnh:
    fflush(stdin);
    gets(aux);
    if (strlen(aux) < 11){
    printf("erro quantidade de digitos menor do que o correto\n");
    printf("digite novamente: \n");
    goto cnh;

    }
    else if (strlen(aux) > 11){
    printf("erro quantidade de digitos maior do que o correto\n");
    printf("digite novamente: \n");
    goto cnh;

    }
    else{
    strcpy(info.CNH,aux);
    }

    printf("Informe o endereco do cliente: ");
    gets(info.Endereco);
    system("pause");
    break;
    }
    {
    case 2:
    struct cad_veiculo info;
    int opcao;
        system("cls");
        printf("Informe o numero da placa: ");
    placa:
        fflush(stdin);
        fgets(aux, 300, stdin);
        if (strlen(aux) < 7) {
            printf("erro quantidade de digitos menor do que o correto\n");
            printf("Digite novamente: ");
            goto placa;
            break;
        }
        else if (strlen(aux) > 7) {
            printf("erro quantidade de digitos maior do que o correto\n");
            printf("Digite novamente: ");
            goto placa;
            break;
        }
        else {
            strcpy(info.placa, aux);
        }
        printf("Informe o modelo do veiculo: ");
    modelo:
        fflush(stdin);
        fgets(aux, 300, stdin);
        if (strlen(aux) < 17) {
            printf("erro quantidade de digitos menor do que o correto\n");
            printf("digite novamente: ");
            goto modelo;
            break;
        }
        else if (strlen(aux) > 17) {
            printf("erro quantidade de digitos maior do que o correto\n");
            printf("digite novamente: ");
            goto modelo;
            break;
        }
        else {
            scanf("%d", &info.modelo);
        }
        printf("Informe a marca do veiculo: ");
        fgets(info.marca, 20, stdin);
        system("pause");
        printf("Informe a cor do veiculo: ");
        fgets(info.cor, 30, stdin);
        system("pause");
        printf("Informe o ano do veiculo: ");
        fgets(info.ano, 50, stdin);
        system("pause");
        break;
    default:
        break;
    };  // switch()
};

Como você disse se eu trocar o int modelo pra int ano fica melhor, acho que vou fazer isso então

Link para o comentário
Compartilhar em outros sites

 

    printf("\nOpcao: ");
    scanf("%d",&opcao);
    switch(opcao){
    case 1:
    struct cad_cliente info;
 ...

Faça o que eu te disse. Não invente. 

 

Seu programa só tratava a opção 2. Então você vai lá depois de ver o erro tantas vezes e afinal escreve 

int opcao = 2;

E não fique mudando as coisas. Provavelmente essa opcao 2 era a do menu original e quando incorporar esse trecho ao programa vai ter que mudar de novo. Para que?

 

Agora você mudou para um e colocou a opção para ler a opção. Pra que, se está testando uma única opção e não faz diferença alguma? 

 

A primeira coisa que eu te disse foi para não usar menu e te mostrei como iria prosseguir mais rápido sem isso.

 

Veja como pode ser mais simples, fizesse você como eu te expliquei:

    Carro info;
    int opcao = 2;
    switch (opcao)
    {
    case 2:
        le_um_carro(&info);
        mostra_um_carro(&info);
        break;
    default:
        printf("Opcao inesperada: %d\n", opcao);
        break;
    };  // switch()
};  // main()

E pronto. Lê a estrutura em outra função. Ao ler mostra o que leu e pronto. Quando estiver certo você junta ao menu do programa completo e pronto...

 

Link para o comentário
Compartilhar em outros sites

@arfneto

#define _CRT_SECURE_NO_WARNINGS

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

struct cad_cliente {
    char nome[10];
    int idade;
    char CPF_CNPJ[20];
    char CNH[30];
    char Endereco[50];
};

struct cad_veiculo {
    char placa[10];
    int modelo;
    char marca[20];
    char cor[30];
    char ano[50];
};

int main(void)
{
    char aux[300];
    struct cad_veiculo info;
    int opcao = 400;
    switch (opcao)
    {
    case 2:
        system("cls");
        printf("Informe o numero da placa: ");
    placa:
        fflush(stdin);
        fgets(aux, 300, stdin);
        if (strlen(aux) < 7) {
            printf("erro quantidade de digitos menor do que o correto\n");
            printf("Digite novamente: ");
            goto placa;
            break;
        }
        else if (strlen(aux) > 7) {
            printf("erro quantidade de digitos maior do que o correto\n");
            printf("Digite novamente: ");
            goto placa;
            break;
        }
        else {
            strcpy(info.placa, aux);
        }
        printf("Informe o modelo do veiculo: ");
    modelo:
        fflush(stdin);
        fgets(aux, 300, stdin);
        if (strlen(aux) < 17) {
            printf("erro quantidade de digitos menor do que o correto\n");
            printf("digite novamente: ");
            goto modelo;
            break;
        }
        else if (strlen(aux) > 17) {
            printf("erro quantidade de digitos maior do que o correto\n");
            printf("digite novamente: ");
            goto modelo;
            break;
        }
        else {
            scanf("%d", &info.modelo);
        }
        printf("Informe a marca do veiculo: ");
        fgets(info.marca, 20, stdin);
        system("pause");
        printf("Informe a cor do veiculo: ");
        fgets(info.cor, 30, stdin);
        system("pause");
        printf("Informe o ano do veiculo: ");
        fgets(info.ano, 50, stdin);
        system("pause");
        break;
    default:
        break;
    };  // switch()
};

Você fez dessa forma, mas uma coisa que não entendi até agora foi porque você colocou parte do cadastro do cliente lá em cima? sendo que não tem nada sobre cliente nesse ai?? Eu te mandei a parte completa do cad_cliente e embaixo a parte que eu tava fazendo do cad_veiculo, porém você arrumou o do veiculo e deixou uma pequena parte do cadastro do cliente em cima, talvez seja por isso que deu erro. Ou não?

Link para o comentário
Compartilhar em outros sites

 

12 minutos atrás, Def disse:

uma coisa que não entendi até agora foi porque você colocou parte do cadastro do cliente lá em cima? sendo que não tem nada sobre cliente nesse ai??

alguns dias atras quando eu coloquei a struct la emcima a primeira vez eu expliquei o motivo, e o que falta para ter parte do cadastro do cliente? crie outro case ...

case 1: parte do cadastro do cliente

case 2: parte do cadastro do veiculo

default: invalido.

ou entao chame funcões:

case 1 : cliente();

break;

case 2: veiculo ();

break;

ou entao 

case 1 : info = *le_um_carro();

break;

ou

 res = le_um_carro(&info);

break;

Link para o comentário
Compartilhar em outros sites

13 minutos atrás, Def disse:

Ou não

 

Não. Já te expliquei porque deu erro e mais de uma vez. Também te expliquei como corrigir. E te mostrei outro programa há pouco. E te expliquei que para fazer isso simples e rápido como devia fazer, e isso incluia uma estrutura para os carros, uma para as vagas e uma para os clientes e uma maneira de vincular essas coisas. E como seria melhor ter seu programa perto da realidade: carros tem donos, donos tem carros, carros tem "prismas" numerados, Carros ficam em vagas e a vida segue...

 

16 minutos atrás, Def disse:

porém você arrumou o do veiculo e deixou uma pequena parte do cadastro do cliente em cima

 

Não faz diferença. Faça o simples como está descrito acima.  E aqui: entendeu isso ai abaixo? É o que escreveu, mas de uma maneira que consegue tratar melhor...

 

   Carro info;
    int opcao = 2;
    switch (opcao)
    {
    case 2:
        le_um_carro(&info);
        mostra_um_carro(&info);
        break;
    default:
        printf("Opcao inesperada: %d\n", opcao);
        break;
    };  // switch()
};  // main()

A função que mostra um carro te mostrei um exemplo há dias.

A que lê pode ser muito simples como

int le_um_carro(Carro* C)
{
    char aux[200];
    Carro info;
        printf("Informe o numero da placa [7 digitos]: ");
    placa:
        fflush(stdin);
        gets(aux);
        if (strlen(aux) < 7) {
            printf("erro quantidade de digitos menor do que o correto\n");
            printf("Digite novamente: ");
            goto placa;
        }
        else if (strlen(aux) > 7) {
            printf("erro quantidade de digitos maior do que o correto\n");
            printf("Digite novamente: ");
            goto placa;
        }
        else {
            strcpy(info.placa, aux);
        }
        printf("Informe a marca do veiculo: ");
        gets(info.marca);
        printf("Informe o modelo do veiculo: ");
        gets(info.modelo);
        printf("Informe a cor do veiculo: ");
        gets(info.cor);
        printf("Informe o ano do veiculo: ");
        gets(info.ano);
        *C = info;
        return 0;
};  // le_um_carro()

 

Que é o seu código!!!!!

 

E  mostra por exemplo

Informe o numero da placa [7 digitos]: ABC1212
Informe a marca do veiculo: Ford
Informe o modelo do veiculo: Taurus
Informe a cor do veiculo: Azul
Informe o ano do veiculo: 2020
Marca/Modelo: Ford Taurus Cor: Azul Placa: ABC1212 Entrada: 2020

Você está perdendo muito tempo. Procure ler e resolver os problemas antes de seguir e não ficar dando voltas em torno do problema.

adicionado 2 minutos depois

Já que foi por esse caminho não mexa nos números do case ou em nada.

 

Assim ao juntar as partes não precisa mudar nada. Se não entendeu ainda vou repetir: apenas coloque a opção igual a que est;a tratando em cada parte e quando vocês juntarem as partes o programa funciona direitinho...

 

Pare de mexer e criar coisas. Como uma leitura de opção e um case 1....

adicionado 11 minutos depois

Seu programa está fundamentalmente errado. Devia seguir o modelo que te expliquei, em torno dos dados.

 

Isso não quer dizer que não vai funcionar ou que você não vai conseguir.

Só quer dizer que vai ter trabalho muito maior e resultado muito menor. E isso você está vendo desde o início. Quando resolveu fazer o programa de novo deveria ter feito da maneira que te expliquei, um modelo da realidade. E já teria terminado. Entidades: carro, vaga, cliente, prisma. As relações que existem no estacionamento. E os eventos: chegada e saída de carros. Preço da estadia. É isso.

 

Nada mais. As funções de que não precisa não implementa. Mas cria uma abstração da realidade. Esse é o objetivo de um programa como esse.

 

Veja isso:
 

231-170201-Estacionamento-0101.jpg.d0c23300714b6f04abee0fc17219627b.jpg

 

Comece por algo assim. É o simples. Esse não usa prisma...

 

 

Link para o comentário
Compartilhar em outros sites

3 minutos atrás, Def disse:

Ok, já incluo isso. Olha só compilou, bem que você disse!! só foi eu mudar pra  int opcao = 2

 

Como eu já te disse, sempre compila. Você quer dizer que rodou o programa e até mostrou algo dessa vez... 

Espero que esteja lendo de fato o que eu te escrevo. 

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

@arfneto sim estou lendo tudo que você está falando, as vezes só to ficando meio perdido tipo onde eu coloco tal coisa que você me manda 

 

image.thumb.png.c06623e3255d6220215eb433a90c95db.png

Lembra que disse que começou a aparecer a estrutura no compilador? então, aparece certinho até a parte do modelo, depois disso eu aperto enter para ir pra próxima opção e não aparece nada, posso dar enter infinito que não vai pra próxima opção. O porque disso? saberia me dizer?

Link para o comentário
Compartilhar em outros sites

@arfneto @arfneto  Antes estava assim com o codigo que você tinha me enviado image.thumb.png.147ea04be651d4722eb1e9b222e83f47.png

Dessa forma estava compilando até o modelo do veiculo mas a partir disso ele parou de processar o restante dos códigos. Mas você me mandou outros códigos, e então apaguei esse começo da struct e coloquei o codigo que você me mandou agora a pouco, era assim que era pra fazer? ou eu tinha que apagar tudo que começar com o codigo que acabou de me enviar? Esse é meu problema, eu não sei bem onde colocar cada código mesmo com o - e +

#define _CRT_SECURE_NO_WARNINGS

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

struct cad_cliente {
    char nome[10];
    int idade;
    char CPF_CNPJ[20];
    char CNH[30];
    char Endereco[50];
};

struct cad_veiculo {
    char placa[10];
    int modelo;
    char marca[20];
    char cor[30];
    char ano[50];
};

int main(void)
{

    int opcao = 2;
    switch (opcao)
    {
    case 2:
        le_um_carro(&info);
        mostra_um_carro(&info);
        break;
    default:
        printf("Opcao inesperada: %d\n", opcao);
        break;
    };  // switch()
};  // main()
int le_um_carro(Carro* C)
{
    char aux[200];
    Carro info;
        printf("Informe o numero da placa [7 digitos]: ");
    placa:
        fflush(stdin);
        gets(aux);
        if (strlen(aux) < 7) {
            printf("erro quantidade de digitos menor do que o correto\n");
            printf("Digite novamente: ");
            goto placa;
        }
        else if (strlen(aux) > 7) {
            printf("erro quantidade de digitos maior do que o correto\n");
            printf("Digite novamente: ");
            goto placa;
        }
        else {
            strcpy(info.placa, aux);
        }
        printf("Informe a marca do veiculo: ");
        gets(info.marca);
        printf("Informe o modelo do veiculo: ");
        gets(info.modelo);
        printf("Informe a cor do veiculo: ");
        gets(info.cor);
        printf("Informe o ano do veiculo: ");
        gets(info.ano);
        *C = info;
        return 0;
};  // le_um_carro()

 

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

Detalhes do projeto: É realmente tão importante indica que tem dígitos a mais e a menos quando o mais importante é a placa ter exatamente 7 dígitos.

 

Refiro-me essa parte abaixo, observem que o resultado lógico dos comandos é impor 7 dígitos:

...
	fflush(stdin);
        gets(aux);
        if (strlen(aux) < 7) {
            printf("erro quantidade de digitos menor do que o correto\n");
            printf("Digite novamente: ");
            goto placa;
        }
        else if (strlen(aux) > 7) {
            printf("erro quantidade de digitos maior do que o correto\n");
            printf("Digite novamente: ");
            goto placa;
        }
        else {
            strcpy(info.placa, aux);
        }
...

 

Disso podemos juntas as partes numa só e com a mesma determinação, assim:

...
	fflush(stdin);
        gets(aux);
        if (strlen(aux) != 7){
            printf("Erro quantidade de digitos diferente de 7\n"
                   "Digite novamente: ");
            goto placa;
        }
        else {
            strcpy(info.placa, aux);
        }
...

😉 Tendeu ??

Link para o comentário
Compartilhar em outros sites

😆 né! Porque fala, "mais que o correto",  "menos que o correto" e não diz qual é o correto, parece um jogo de adivinhação. 

 
12 minutos atrás, Def disse:

@Mauro Britivaldo Hmmm, verdade kkk vou tentar

 

Os (...) pontinhos não são parte dos comandos, estão ali só para indicação de que existe outras coisas, mas sem interesse para discussão.

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

4 minutos atrás, Def disse:

Sim fiz essa parte e deu certinho, só to com dificuldade com os outros codigos. No compilador processa até "Informe o modelo do veiculo" e a partir disso não processa o restante, posso dar enter infinito que não vai 

 

Meu pessoal diz que eu tenho muita paciência e que não desisto . Mas há desafios...

 

Eu vou passar o dia e parte da noite nos computadores mesmo, então posso ir te ajudando.

 

Mas tem que ter algum progresso....

você voltou a usar um int para modêlo e está usando o código que eu te mostrei? Sério? 

Você leu o que te expliquei várias vezes e vai insistir com o modelo int? Leu mesmo? Leu o exemplo que te mandei dias atrás? E a discussão sobre o que iria acontecer --- e está acontecendo --- se insistisse nesse caminho?

 

Você percebeu que eu te mandei um programa há pouco que lê e mostra essa estrutura? Viu o resultado lá?

Link para o comentário
Compartilhar em outros sites

Não, o ano não precisa de 50 letras a menos que queira escrever por extenso o ano...
 

Não, a cor não precisa de 30 letras a menos que vá trazer um arquiteto para explicar os tons e nuances e reflexos de cada pintura
 

Não, o modelo não é um número: é uma coisa tipo "3.0 Turbo"....

 

Use como eu te mandei

adicionado 0 minutos depois

Apenas use o que te mandei. Pare de dar voltas ou não vai terminar nunca

adicionado 3 minutos depois

Vá exatamente ao ponto.

 

Use algo simples como isso, que já te mostrei

#define  _CRT_SECURE_NO_WARNINGS

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

typedef struct
{
    char placa[10];
    char modelo[20];
    char marca[20];
    char cor[20];
    char ano[5];
}   Carro;

int le_um_carro(Carro*);
int mostra_um_carro(Carro* c);

int main(void)
{
    Carro info;
    int opcao = 2;
    switch (opcao)
    {
    case 2:
        le_um_carro(&info);
        mostra_um_carro(&info);
        break;
    default:
        printf("Opcao inesperada: %d\n", opcao);
        break;
    };  // switch()
};  // main()

int le_um_carro(Carro* C)
{
    char aux[200];
    Carro info;
        printf("Informe o numero da placa [7 digitos]: ");
    placa:
        fflush(stdin);
        gets(aux);
        if (strlen(aux) < 7) {
            printf("erro quantidade de digitos menor do que o correto\n");
            printf("Digite novamente: ");
            goto placa;
        }
        else if (strlen(aux) > 7) {
            printf("erro quantidade de digitos maior do que o correto\n");
            printf("Digite novamente: ");
            goto placa;
        }
        else {
            strcpy(info.placa, aux);
        }
        printf("Informe a marca do veiculo: ");
        gets(info.marca);
        printf("Informe o modelo do veiculo: ");
        gets(info.modelo);
        printf("Informe a cor do veiculo: ");
        gets(info.cor);
        printf("Informe o ano do veiculo: ");
        gets(info.ano);
        *C = info;
        return 0;
};  // le_um_carro()


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

 

Link para o comentário
Compartilhar em outros sites

@arfneto

7 minutos atrás, arfneto disse:

Use como eu te mandei

#define _CRT_SECURE_NO_WARNINGS

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

struct cad_cliente {
    char nome[10];
    int idade;
    char CPF_CNPJ[20];
    char CNH[30];
    char Endereco[50];
};

struct cad_veiculo {
    char placa[10];
    char modelo;
    char marca[20];
    char cor;
    char ano;
};

int main(void)
{
   Carro info;
    int opcao = 2;
    switch (opcao)
    {
    case 2:
        le_um_carro(&info);
        mostra_um_carro(&info);
        break;
    default:
        printf("Opcao inesperada: %d\n", opcao);
        break;
    };  // switch()
};  // main()

int le_um_carro(Carro* C)
{
    char aux[200];
    Carro info;
        printf("Informe o numero da placa [7 digitos]: ");
    placa:
        fflush(stdin);
        gets(aux);
        if (strlen(aux) < 7) {
            printf("erro quantidade de digitos menor do que o correto\n");
            printf("Digite novamente: ");
            goto placa;
        }
        else if (strlen(aux) > 7) {
            printf("erro quantidade de digitos maior do que o correto\n");
            printf("Digite novamente: ");
            goto placa;
        }
        else {
            strcpy(info.placa, aux);
        }
        printf("Informe a marca do veiculo: ");
        gets(info.marca);
        printf("Informe o modelo do veiculo: ");
        gets(info.modelo);
        printf("Informe a cor do veiculo: ");
        gets(info.cor);
        printf("Informe o ano do veiculo: ");
        gets(info.ano);
        *C = info;
        return 0;
};  // le_um_carro()

Assim? @arfneto

Link para o comentário
Compartilhar em outros sites

1 minuto atrás, Def disse:

Ahh sim, agora que vi aquela mensagem. Deu tudo certo, agora vou tentar colocar o codigo do cliente nele

 

Se você mantiver a disciplina nisso e apenas deixar de fixar a opção no menu ao incorporar os outros trechos tudo vai rodar sem mudar uma linha. Sistemas enormes são escritos assim.

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!