Ir para conteúdo
Fórum Script Brasil
  • 0

programa em C, Controle de Estacionamento com Menu


Edual

Pergunta

/*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 para o comentário
Compartilhar em outros sites

0 respostass a esta questão

Posts Recomendados

Até agora não há respostas para essa pergunta

Participe da discussão

Você pode postar agora e se registrar depois. Se você já tem uma conta, acesse agora para postar com sua conta.

Visitante
Responder esta pergunta...

×   Você colou conteúdo com formatação.   Remover formatação

  Apenas 75 emoticons são permitidos.

×   Seu link foi incorporado automaticamente.   Exibir como um link em vez disso

×   Seu conteúdo anterior foi restaurado.   Limpar Editor

×   Você não pode colar imagens diretamente. Carregar ou inserir imagens do URL.



  • Estatísticas dos Fóruns

    • Tópicos
      152,3k
    • Posts
      652,3k
×
×
  • Criar Novo...