Ir ao conteúdo
  • Cadastre-se

C Não consigo validar dados repetidos em arquivo


ReplicantMachine

Posts recomendados

#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <ctype.h>
#include <locale.h>
/*
Síntese
Objetivo: Acompanhar os teste dos aviões dos clientes, realizado pela Embraer, nas pistas de prova 
Entrada: Para cada avião, codigo de identificação, modelo, capacidade, nome do cliente, país de origem;
para as pistas de teste, código sequencial,endereco, estado onde localiza-se a pista, tamanho do circuito,
velocidade maxima obtida em todos os testes, identificação da avião que obteve maior velocidade
Saída: Se teste realizado, identificação do avião, identificação do aviao, data do teste (com dia mes e ano) colhido
diretamente do computador e velocidade máxima aferida.
 */

#define EXIT_SUCCESS 0
#define EXIT_FAILURE 1
#define COD_ID 7
#define MAX 100

//cria um sinônimo ou alias para para um tipo de dado existente

typedef struct{
	char codigoIdentificacao[COD_ID];
	char modeloAviao[MAX];
	int capacidade;
	char nomeCliente[MAX];
	char nomePais[MAX];
}Aviao;

typedef struct{
	int codigoPista;
	char enderecoPista[MAX];
	char estadoPista[MAX];
	float tamanhoCircuito;
	float velocidadeMaxima;
	Aviao aviao;
}PistaDeTeste;



void leValidaFloat(char *msg, char *msgErro, float *circuito);
int verifica(char nome[]);
int leValidaCapacidade(char *msg, char *msgErro, int *cap);
char *leValidaTexto(char *msg, char *msgErro);
int verificaModelo(char modelo[]);
int verificaCodigoAviao(char codigoAviao[]);
int verificaCodigo(char nome[]);
char *leValidaCodigoAviao(char *msg, char *msgErro);
void cadastrarDadosPistas();
void cadastrarDadosAvioes();
void chamaMenuPrincipal(char *opcao);
void chamaFuncoesMenuPrincipal(char *opcao);
int main(int argc, char *argv[]) {
	setlocale(LC_ALL, "Portuguese");
	char opcao=' ';
	do{
		printf("CONTROLE DE TESTES DE AVIOES DA EMBRAER\n\n");
		chamaMenuPrincipal(&opcao);
		chamaFuncoesMenuPrincipal(&opcao);
		
	}while(opcao!='s');
	
	
	return 0;
}



//Chama as funcoes do menu principal
//entrada: Opcao
//Saida: Nenhuma
void chamaMenuPrincipal(char *opcao){
	int flag=1;
	do{
		printf("(1)- CADASTRAR DADOS DO CLIENTE\n");
		printf("(2)- CADASTRAR DADOS DA PISTA DE TESTE\n");
		printf("(3)- CADASTRAR DADOS TESTE\n");
		printf("(S)- ENCERRAR O PROGRAMA\n");
		scanf(" %c", &*opcao);
		*opcao=tolower(*opcao);
		if((*opcao<49||*opcao>51)&&*opcao!='s'){
			printf("\nOpcao invalida!\n");
			flag=0;
		}else{
			flag=1;
		}
		system("cls");
	}while(!flag);
}
void chamaFuncoesMenuPrincipal(char *opcao){
	switch(*opcao){
		case '1':
			cadastrarDadosAvioes();
			break;
		case '2':
			cadastrarDadosPistas();
			break;
		case '3':
			break;
		case 's':
			exit(EXIT_SUCCESS);
			break;
	}
}
void cadastrarDadosAvioes(){
	Aviao aviao;
	char opcaoEscolhida= ' ';
	int gravado=0, flag=1;
	FILE *arquivo;
	
	arquivo = fopen("avioes.txt", "ab");
	
	if(!arquivo){
		perror("\nErro na abertura do arquivo!\n");
		exit(EXIT_FAILURE);
	}else{
		
		do{
			
			do{
				strcpy(aviao.codigoIdentificacao, leValidaCodigoAviao("DIGITE O CODIGO DO AVIAO:", "\nCODIGO INVALIDO!\n"));
				//verifica se existe repeticao
				if(verificaCodigoAviao(aviao.codigoIdentificacao)==0){
					flag=0;
					printf("\nESSE CODIGO JA EXISTE!\n");
				}else{
					flag=1;
				}
				
			}while(!flag);
			
			do{
				strcpy(aviao.modeloAviao, leValidaTexto("DIGITE O MODELO DO AVIAO:", "\nMODELO NAO PODE SER VAZIO!\n"));
				if(verificaModelo(aviao.modeloAviao)==0){
					flag=0;
					printf("\nESSE MODELO JA EXISTE\n");
				}else{
					flag=1;
				}
				
			}while(!flag);
			
			
			
			gravado = fwrite(&aviao, sizeof(Aviao), 1, arquivo);
			
			if(gravado==1){
				printf("\nGravado com sucesso!\n");
			}
			
			printf("(1)- CADASTRAR OUTRO AVIAO (Tecle S)\n");
			printf("(2)- VOLTAR AO MENU (QUALQUER  OUTRA TECLA)\n");
			scanf(" %c", &opcaoEscolhida);
			opcaoEscolhida=tolower(opcaoEscolhida);
			system("cls");
			getch();
		}while(opcaoEscolhida=='s');
		
		fclose(arquivo);
		
	}
	
	
	
}

void cadastrarDadosPistas(){
	
	
	
}

char *leValidaCodigoAviao(char *msg, char *msgErro){
	char *pNome=0, nome[MAX];
	strcpy(nome, "");
	int stringTam=0, flag=1, verificador=0;
	
	do{
		printf("%s", msg);
		fflush(stdin);
		scanf("%[^\n]s", nome);
		
		if(strlen(nome)==0){
			printf("%s", msgErro);
			flag=0;
		}else if(strlen(nome)<COD_ID || strlen(nome)>COD_ID){
			flag=0;
			
		}else if(verificaCodigo(nome)==0){
			flag=0;
		}else{
			flag=1;
		}
		
	
	}while(!flag);
	system("cls");
	getch();
	return pNome = nome;
}
int verificaCodigo(char nome[]){
	int i, flag=1;
	
	
	for(i=0;i<COD_ID;i++){
		if(i<3){
			if(!isalpha(nome[i])){
				flag=0;
			}
		}else{
			if(!isdigit(nome[i])){
				flag=0;
			}
		}
	}
	
	return flag;
}
char *leValidaTexto(char *msg, char *msgErro){
	char *pNome=0, aux[MAX];
	strcpy(aux, "");
	int i, flag=1, stringTam=0;
	
	do{
		printf("%s", msg);
		fflush(stdin);
		scanf("%[^\n]s", &aux);
				
		if(strlen(aux)==0){
			printf("%s", msgErro);
			flag=0;
		}else{
			flag=1;
		}
	
	}while(!flag);
	system("cls");
	getch();
	return pNome = aux;
}
int leValidaCapacidade(char *msg, char *msgErro, int *cap){
	int flag=1;
	
	do{
		printf("%s", msg);
		scanf("%d", &*cap);
		
		if(*cap<=0){
			printf("%s", msgErro);
			flag=0;
		}else{
			flag=1;
		}
		
	}while(!flag);
	system("cls");
}
int verifica(char nome[]){
	FILE *paises;
	char aux[MAX];
	paises = fopen("paises.txt", "rb");
	
	if(!paises){
		perror("Error: ");
		exit(EXIT_FAILURE);
	}else{
		fflush(stdin);
		while(fgets(aux, sizeof(aux), paises)!=NULL){
			if(aux[strlen(aux)-1]=='\n'){
				aux[strlen(aux)-1]='\0';
			}
			if(stricmp(nome, aux)==0){
				return 1;
			}
		}
	}
	
	return 0;
	
}
void leValidaFloat(char *msg, char *msgErro, float *circuito){
	int flag=1;
	
	do{
		printf("%s", msg);
		scanf("%f", &*circuito);
		
		if(*circuito<=0){
			flag=0;
			printf("%s", msgErro);
		}else{
			flag=1;
		}
	
	}while(!flag);
}

int verificaCodigoAviao(char codigoAviao[]){
	Aviao aviao;
	FILE *arquivo;
	arquivo = fopen("avioes.txt", "rb");
	if(!arquivo){
		perror("Error: ");
		exit(EXIT_FAILURE);
	}else{
		fread(&aviao, sizeof(Aviao), 1, arquivo);
		while(!feof(arquivo)){
			if(strcmp(aviao.codigoIdentificacao, codigoAviao)==0){
				fseek(arquivo, -sizeof(Aviao), SEEK_CUR);
				return 0;
			}
			fread(&aviao, sizeof(Aviao), 1, arquivo);
		}
	
		return 1;
		
	}
	
}
int verificaModelo(char modelo[]){
	Aviao aviao;
	
	FILE *arquivo;
	
	arquivo = fopen("avioes.txt", "rb");
	
	if(!arquivo){
		perror("\nNao foi possivel abertura do arquivo!\n");
		exit(EXIT_FAILURE);
	}else{
		fread(&aviao, sizeof(Aviao), 1, arquivo);
		while(!feof(arquivo)){
			if(strcmp(aviao.modeloAviao, modelo)==0){
				fseek(arquivo, -sizeof(Aviao), SEEK_CUR);
				return 0;
			}
		}
		
		return 1;
		
	}
	
	
	fclose(arquivo);
	
}

 

Link para o comentário
Compartilhar em outros sites

Olá, tudo certo

Então ...

Dei um tapinha na sua função

{	do{
		printf( "(1)- CADASTRAR DADOS DO CLIENTE\n" );
		printf( "(2)- CADASTRAR DADOS DA PISTA DE TESTE\n" );
		printf( "(3)- CADASTRAR DADOS TESTE\n" );
		printf( "(S)- ENCERRAR O PROGRAMA\n" );

		scanf( " %c", opcao );
		* opcao= tolower( (* opcao) );

		if( ((* opcao < '1')||(* opcao > '3'))&&(* opcao != 's') )
		{	printf("\nOpcao invalida!\n");
			/*< continuar loop */
		}else
		{	break;
			/*< finalizar loop */
		}
	} while( 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...