Jump to content
Fórum Script Brasil
  • 0

programa em C, Controle de Estacionamento com Menu


Edual

Question

/*programa em C, Controle de Estacionamento com Menu,

--------------------------------------------------------------------------------

Se você executa o programa e tenta gravar um veículo direto, funciona.Se você tenta gravar outro veículo,

desde que não seja uma placa repetida funciona também...

Mas se você tenta gravar uma placa que já existe, a mensagem de erro é mostrada e ele pede

outra placa(como esperado), mas depois de entrar com o resto dos dados (marca, modelo e cor)

ele volta a pedir os

dados desde o modelo, e as vezes desde a placa, eu não consigo achar erro no meu algoritmo,

será que é porque eu fiquei chamando o procedimento "INSERIR(I)" passando a variável I por

parâmetro várias vezes?

Será que preciso colocar tudo dentro de laços de repetição invez de ficar chamando o procedimento

de novo caso alguma condição não seja respeitada?

O algoritmo tá fácil de analisa, até agora só fiz alguns procedimentos, o que inicializa os campos

STATUS pra dizer se pode ou não gravar naquele registro, o menu com a opção 1 chamando o CADASTRAR_VEICULO()

que testa se tem algum registro livre ai chama o INSERIR(I) passando o I que é a posição do vetor com o registro

livre, acho que o erro tá no procedimento INSERIR mesmo... Conto com a ajuda do grupo,

________________________________________________________________________________

________________________________________________________________________________

Código: */

#include <stdio.h>

#include <conio.h>

#include <stdlib.h>

#include <ctype.h>

#include <string.h>

void INICIALIZA();

void INSERIR(int I);

void CADASTRAR_VEICULO();

void CADASTRAR_VAGA();

void CONTROLAR_ESTACIONAMENTO();

void CONSULTAR_VAGAS();

void LISTAR_OCUPADAS();

void LISTAR_VEICULOS();

struct

{

char PLACA[8], MODELO[20], MARCA[20], COR[10];

int STATUS;

}CARRO[10];

int NVEI=0; //contador de veículos cadastrados

//int NVAG=0; //contador de vagas cadastradas

//-----------------------------------------------------------------------------

main()

{

int OP;

FILE* P;

INICIALIZA();

//abre o arquivo pro fopen "w" não substituir o que já existe

P=fopen("CARRO.txt", "r");

fread(&CARRO, sizeof(CARRO), 1, P);

fclose(P);

do{

printf("CONTROLE DE ESTACIONAMENTO\n\n");

printf("1. Cadastrar veiculo\n2. Cadastrar vaga\n3. Controle do estacionamento\n");

printf("4. Consultar vagas\n5. Listar vagas ocupadas\n6. Listar veiculos\n7. Sair\n\nOpcao: ");

scanf("%d", &OP);

switch(OP)

{

case 1:

{

system("cls");

CADASTRAR_VEICULO();

break;

}

case 2:

{

system("cls");

CADASTRAR_VAGA();

break;

}

case 3:

{

system("cls");

CONTROLAR_ESTACIONAMENTO();

break;

}

case 4:

{

system("cls");

CONSULTAR_VAGAS();

break;

}

case 5:

{

system("cls");

LISTAR_OCUPADAS();

break;

}

case 6:

{

system("cls");

LISTAR_VEICULOS();

break;

}

case 7: break;

default:

{

system("cls");

printf("Opcao invalida!\nEnter para voltar ao menu");

getch();

system("cls");

}

}

}while(OP!=7);

getchar();

}

//-----------------------------------------------------------------------------

void INICIALIZA()

{

int I;

for(I=0; I<10; I++)

CARRO.STATUS=0;

}

//-----------------------------------------------------------------------------

void INSERIR(int I)

{

char PL[8];

int I2, TESTE, TAM_PLACA;

FILE *P;

puts("Digite a placa: ");

fflush(stdin);

gets(PL);

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

for(I2=0; I2<10; I2++)

{

if(strcmp(PL, CARRO[i2].PLACA)==0)

{

printf("\nVeiculo já cadastrado, informe outra placa\n\n");

INSERIR(I);

}

}

strcpy(CARRO.PLACA, PL);

TAM_PLACA=strlen(CARRO.PLACA);

if(TAM_PLACA!=7)

{

if(TAM_PLACA<7)

{

printf("\nPlaca invalida\nDigitos insuficientes\n\n");

INSERIR(I);

}

else//(TAM_PLACA>7)

{

printf("\nPlaca invalida\nMuitos digitos\n\n");

INSERIR(I);

}

}

//testa se 3 primeiros digitos são letras

for(I2=0; I2<3; I2++)

{

TESTE=isalpha(CARRO.PLACA[i2]);//retorna 1 se for letra

if(TESTE==0)

{

printf("\nPlaca invalida\nTres primeiros digitos devem ser letras!\n\n");

INSERIR(I);

}

}

//testa se 4 últimos digitos não são letras

for(I2=3; I2<7; I2++)

{

TESTE=isalpha(CARRO.PLACA[i2]);//retorna 1 se for letra

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);

strlwr(CARRO.MARCA);

CARRO.MARCA[0]=toupper(CARRO.MARCA[0]);

puts("\nDigite a cor: ");

fflush(stdin);

gets(CARRO.COR);

strlwr(CARRO.COR);

CARRO.COR[0]=toupper(CARRO.COR[0]);

CARRO.STATUS=1;

P=fopen("CARRO.txt", "w");

fwrite(&CARRO, sizeof(CARRO), 1, P);

fclose(P);

}

//-----------------------------------------------------------------------------

void CADASTRAR_VEICULO()

{

int I, FLAG=1;

for(I=0; I<10; I++)

{

if(CARRO.STATUS==0)

{

INSERIR(I);

FLAG=0;

system("cls");

break;

}

}

if(FLAG==1)

{

printf("Sem espaco para cadastrar\nEnter voltar ao menu...");

getch();

system("cls");

}

}

//-----------------------------------------------------------------------------

void CADASTRAR_VAGA()

{}

//-----------------------------------------------------------------------------

void CONTROLAR_ESTACIONAMENTO()

{}

//-----------------------------------------------------------------------------

void CONSULTAR_VAGAS()

{}

//-----------------------------------------------------------------------------

void LISTAR_OCUPADAS()

{}

void LISTAR_VEICULOS()

{

int I, X=1;

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);

X=0;

}

}

if(X==0)

{

printf("\nEnter voltar ao menu...");

getch();

system("cls");

}

else

{

puts("Nenhum veiculo cadastrado\nEnter voltar ao menu...");

getch();

system("cls");

}

}

Link to comment
Share on other sites

0 answers to this question

Recommended Posts

There have been no answers to this question yet

Join the conversation

You can post now and register later. If you have an account, sign in now to post with your account.

Guest
Answer this question...

×   Pasted as rich text.   Paste as plain text instead

  Only 75 emoji are allowed.

×   Your link has been automatically embedded.   Display as a link instead

×   Your previous content has been restored.   Clear editor

×   You cannot paste images directly. Upload or insert images from URL.



  • Forum Statistics

    • Total Topics
      152.2k
    • Total Posts
      652k
×
×
  • Create New...