Ir ao conteúdo
  • Cadastre-se

izk__

Membro Júnior
  • Posts

    1
  • Cadastrado em

  • Última visita

Reputação

1
  1. Olá, sou novo aqui, estou começando agora meu curso de engenharia de software e preciso desenvolver um sistema de cadastro de pessoas em C. Infelizmente venho tendo problemas em algumas partes do código e estou aceitando QUALQUER DICA só pra fazer isso funcionar (sério, to desesperado). Problemas: 1) Eu executo o cadastro da pessoa corretamente, mas ao entrar na função consultar_pessoa(), meu programa não reconhece o numero digitado pelo usuario (cpf) como existente, e logo após recebo a mensagem "Cpf não encontrado" Alguém poderia me explicar o motivo? 2) Preciso criar uma função que lista as pessoas em ordem alfabética por cidade, conseguem me explicar como fazer isso? Foi disponibilizado um arquivo de texto que contem todas as cidades com e sem acento e o uf das cidades respectivamente. obs: tentei utilizar o "Printf()" em algumas partes do código para entender o que exatamente meu programa estava recebendo mas não obtive sucesso. obs2: pode ser que alguns comentários no meio do código estejam errados ou incompletos pois esse código já foi muito alterado. O resto das funções creio que sejam mais fáceis de resolver, por hora é isso O #include "function.c" por enquanto só foi utilizado para incluir uma função de limpar o buffer e a tela, mas também tem uma função que valida o cpf que não usei ainda. Código function: #include <stdio.h> #include <stdlib.h> #include <string.h> #include <ctype.h> #include <locale.h> void limpar_buffer() // Limpar buffer { char ch; while ((ch = getchar()) != '\n' && ch != EOF); } void limpar_tela()// Limpa terminal { #if defined(linux) || defined(unix) || defined(APPLE) system("clear"); #endif #if defined(_WIN32) || defined(_WIN64) system("cls"); #endif } int validador_cpf(){ // Declaração de variaveis int soma, resultado, num, cont; char digito10, digito11, cpf[11]; scanf("%s", cpf); // gets usado como scanf para variaveis do tipo char // Validar o primeiro digito soma = 0; for(cont = 0; cont < 9; cont++){ num = cpf[cont] - 48; soma = soma + (num * (10 - cont)); } resultado = 11 - (soma % 11); if((resultado == 10) || (resultado == 11)){ digito10 = '0'; }else digito10 = resultado + 48; // Validar o segundo digito soma=0; for(cont = 0; cont < 10; cont++){ num = cpf[cont] - 48; soma = soma + (num * (11 - cont)); } resultado = 11 - (soma % 11); if((resultado == 10) || (resultado == 11)) digito11 = '0'; else digito11 = resultado + 48; // Comparação entre os cálculos if((digito10 != cpf[9]) && (digito11 != cpf[10])) return 1; else return 0; } int main(); Código main: #include <stdio.h> #include <stdlib.h> #include <unistd.h> #include <string.h> #include <stdbool.h> #include "function.c" #define TAM_NOME 100 // tamanho max do nome #define TAM_CPF 11 // tamanho max do cpf #define TAM_SX 10 bool sair = false; // caso sair seja verdadeiro ele encerra o programa FILE *arquivo; // declaração do arquivo typedef struct pessoa { //criação do tipo "pessoa" char nome[TAM_NOME]; char cpf[TAM_CPF]; int dia; int mes; int ano; char sexo[TAM_SX]; char cidade[25]; char ufederal[25]; } PESSOA; typedef struct cidade { // criação do tipo "cidade" char uf[3]; char nome[100]; char nome_sem_acento[200]; } CIDADE; PESSOA pessoa; void cadastrar_pessoa(){ limpar_tela(); // limpar o terminal arquivo = fopen("pessoa.txt", "a"); // acrescenta ou cria um arquivo para leitura/escrita denominado "pessoas.txt" if(arquivo == NULL){ // if para caso ocorra um erro na abertura printf("Erro na abertura do arquivo\n"); system("pause"); exit(1); } limpar_buffer(); // Sempre limpar o buffer antes de escanear uma variavel do tipo char // Recebendo os dados printf("Digite o CPF: "); scanf("%[^\n]", pessoa.cpf); printf("%s", pessoa.cpf); limpar_buffer(); printf("Digite o nome: "); scanf("%[^\n]", pessoa.nome); printf("Digite o dia de nascimento: "); scanf("%d", &pessoa.dia); printf("Digite o mes de nascimento: "); scanf("%d", &pessoa.mes); printf("Digite o ano de nascimento: "); scanf("%d", &pessoa.ano); limpar_buffer(); printf("Digite o seu sexo: "); scanf("%[^\n]", pessoa.sexo); limpar_buffer(); printf("Digite sua cidade: "); scanf("%[^\n]", pessoa.cidade); limpar_buffer(); printf("Digite sua unidade de federacao: "); scanf("%[^\n]", pessoa.ufederal); rewind(arquivo); // Função que retorna para o começo do arquivo fprintf(arquivo, "%s %s %d/%d/%d %s %s %s\n", pessoa.nome, pessoa.cpf, pessoa.dia, pessoa.mes, pessoa.ano, pessoa.sexo, pessoa.cidade, pessoa.ufederal); // Escrevendo o struct pessoa recem cadastrado fclose(arquivo); // Fechando arquivo system("pause"); // "pressione qualquer tecla para continuar" } void consultar_pessoa(){ // Declarações char cpf[TAM_CPF]; int a=0; // Instruções limpar_tela(); arquivo = fopen("pessoa.txt", "r"); // abre o arquivo denominado "pessoas.txt" em forma de leitura if(arquivo == NULL){ // if para caso ocorra um erro na abertura printf("Erro na abertura do arquivo\n"); system("pause"); exit(1); } limpar_buffer(); printf("Informe o CPF que deseja pesquisar: "); scanf("%s", cpf); // lendo o cpf digitado pelo usuário rewind(arquivo); // posicionando o ponteiro no início do arquivo while (fscanf(arquivo, "%s %s %d/%d/%d %s %s %s", pessoa.nome, pessoa.cpf, &pessoa.dia, &pessoa.mes, &pessoa.ano, pessoa.sexo, pessoa.cidade, pessoa.ufederal) != EOF) { if (strcmp(pessoa.cpf, cpf) == 0) { a++; printf("Nome: %s\n", pessoa.nome); printf("Data de nascimento: %d/%d/%d\n", pessoa.dia, pessoa.mes, pessoa.ano); printf("Cpf: %s\n", pessoa.cpf); printf("Sexo: %s\n", pessoa.sexo); printf("Cidade: %s\n", pessoa.cidade); printf("Unidade de Federacao: %s\n", pessoa.ufederal); fclose(arquivo); break; system("pause"); } if(a == 0)printf("Cpf não encontrado\n"); fclose(arquivo); system("pause"); } } void menu(){ //Declarações int op__menu; //Instruções limpar_tela(); printf("\n Menu de opções: \n\n"); printf("1) Cadastrar Pessoa\n"); printf("2) Consultar Pessoa\n"); printf("3) Listar pessoas por Cidade\n"); printf("4) Gerar relatorio\n"); printf("5) Excluir Pessoa\n"); printf("6) Encerrar Programa\n\n"); printf("Digite o numero da opcao: "); scanf("%d", &op__menu); switch (op__menu){ case 1:cadastrar_pessoa(); // procedimento de cadastro de pessoa. break; case 2:consultar_pessoa(); //CONSULTAR_PESSOA break; case 3://listar_pessoa(); //LISTAR_PESSOAS POR CIDADE break; //essa função não precisa ser feita no momento case 4://gerar_relatorio(); //RELATORIO printf("Esta funcao ainda não esta pronta.\n"); sleep(2); break; //essa função não precisa ser feita no momento case 5://excluir(); //EXCLUIR_PESSOA printf("Esta funcao ainda não esta pronta.\n"); sleep(2); break; case 6:sair = true; //ENCERRAR_PROGRAMA break; default:printf("Essa opcao não existe!\n");sleep(1); } } int main(){ arquivo = fopen("pessoa.txt", "a+"); if(arquivo == NULL){ printf("Erro na abertura do arquivo\n"); system("pause"); exit(1); } fclose(arquivo); while(!sair){ limpar_tela(); menu(); } return 0; }

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!