Ir ao conteúdo

Posts recomendados

Postado

Ola, eu não sou muito bom em programação. To no inicio do curso e queria uma ajuda...

Eu to usando DEV-C++, no windows, e meu código até a parte que quero mexer é este:

void CheckIn(RegCadastro *Dados){ //Funcao para pegar os dados de novos clientes
    int I;
    FILE *Entrada;

	system("cls");
	printf("Numero do quarto desejado: ");
	scanf(" %d", &Dados[I].NumeroQuarto);
	
	fflush(stdin);
	printf("*Por questoes de controle, o codigo do quarto\nsera o numero dele multiplicado por -1.\n\n");
	Dados[I].CodigoCliente = Dados[I].NumeroQuarto * -1;
	
	printf("Insira o nome do titular: ");
	gets(Dados[I].Titular);
	fflush(stdin);
	printf("Insira o telefone do titular: ");
	scanf(" %d", &Dados[I].Telefone);
	fflush(stdin);
	printf("Numero de acompanhantes para %s: ", Dados[I].Titular);
	scanf("%d", &Dados[I].Acompanhantes);	
	fflush(stdin);
	printf("Tempo de estadia: ");
	scanf("%d", &Dados[I].TempoEstadia);
	fflush(stdin);

	printf("\n\n");
	system("cls");
	printf("Dados registrados com sucesso.");
	
	//Armazenando os dados dos vetores no arquivo
	
	Entrada = fopen("CheckIn.txt", "aw");
	fprintf(Entrada,"Codigo: %d.\n", Dados[I].CodigoCliente,"aw");
	fprintf(Entrada,"Nome do Titular: %s.\n", Dados[I].Titular,"aw");
	fprintf(Entrada,"Telefone: %d.\n", Dados[I].Telefone,"aw");
	fprintf(Entrada,"Quarto: %d.\n", Dados[I].NumeroQuarto, "aw");
	fprintf(Entrada,"Numero de acompanhantes: %d.\n", Dados[I].Acompanhantes,"aw");
	fprintf(Entrada,"%d dia(s).\n\n", Dados[I].TempoEstadia,"aw");
	fprintf(Entrada,"            **              \n\n", "aw");
	fclose(Entrada);
	getche();
	
}

 

Minha dificuldade é a seguinte: sempre que eu entrar nessa função CheckIn, serão cadastrados novos hospedes e serao gravados todos os dados inseridos no bloco txt.

Obs.: Esses dois asteriscos é apenas para separar cada cliente.

 

Enfim, o que eu quero fazer é um if em baixo da linha: scanf(" %d", &Dados.NumeroQuarto);

Essa condição faz o seguinte: ela precisa entrar no arquivo em modo leitura. O valor inserido para Dados.NumeroQuarto vai ser multiplicado por -1 para converter o numero do quarto para um código.... Ao inserir o numero 3 por exemplo, será verificado no arquivo CheckIn o numero -3. E  se encontrar, eu gostaria que aparecesse como printf: Este quarto já está ocupado, por favor, escolha outro. Ai ele volta a perguntar o numero do quarto desejado, até que o numero inserido não exista no arquivo CheckIn.txt

 

Os quartos vão de 1 ate 55.

 

Eu tentei pesquisar e mudar varias coisas, mas não consigo fazer. 

Obrigado!

 

Postado

@EduardoSch Veja, você tem que ler o arquivo da mesma forma que foi salva, assim é possível usar o fscanf e verificar rapidamente se o quarto já está ocupado, de uma lida sobre fscanf. Uma dica, já que você salva o checkin assim no arquivo:

//Salvamento - tente não usar pontos
fprintf(Entrada,"Codigo: %d.\n", Dados[I].CodigoCliente,"aw");
fprintf(Entrada,"Nome do Titular: %s.\n", Dados[I].Titular,"aw");
fprintf(Entrada,"Telefone: %d.\n", Dados[I].Telefone,"aw");
fprintf(Entrada,"Quarto: %d.\n", Dados[I].NumeroQuarto, "aw");
fprintf(Entrada,"Numero de acompanhantes: %d.\n", Dados[I].Acompanhantes,"aw");
fprintf(Entrada,"%d dia(s).\n\n", Dados[I].TempoEstadia,"aw");
fprintf(Entrada,"            **              \n\n", "aw");

//Output's
1- Codigo: X
2- Nome do Titular: XXXX
3- Telefone: XXXX-XXXX
4- Quarto: XXX
5- Numero de acompanhantes: X
6- X dia(s).
7-            **              
8-
9- Codigo: X

 

 

Observe acima, depois da linha 2, apenas a linha 9 terá outro código, então você pode usar um contador mais o while, até encontrar o próximo código, exemplo:

#define separador 7 //contagem de linhas que separa os codigos


bool bsCodigo(int codigo, const char *nomeArquivo){
    //;; var temporarias
    char buffer[500];
    int cdgtmp = 0;
    int linhaAtual = 1;	
    int proxLinha = 1;
    FILE *arquivo = fopen(nomeArquivo, "r");
    
  	if(arquivo != NULL){
    	//;; achar código no arquivo até EOF
        while(!feof(arquivo)){
            //;; Se linhaAtual for a linha  prevista, Código:
         	if(linhaAtual == proxLinha){
            	fscanf(arquivo,"%s %d", buffer, &cdgtmp);
                if(codigo == cdgtmp){
                  	//;; código encontrado
                	fclose(arquivo);
                    return true;
                }
            	proxLinha += separador;
            }
        	linhaAtual++;
        }
    	fclose(arquivo);
    }
  
//;; código não encontrado
return false;
}

 

Postado

Ola, @TYSQUARE89, eu entendi um pouco sobre o que escreveu ali. Eu tive duvidas de onde inserir esta parte. Eu pensei em um arquivo header e incluir como #include dentro do arquivo header desta função ali em cima, que é void CheckIn(). Eu to errado?

 

Se sim, onde devo implementar esta verificação? Fique um pouco perdido.

Obrigado

  • 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!