Ir ao conteúdo
  • Cadastre-se

izk__

Membro Júnior
  • Posts

    1
  • Cadastrado em

  • Última visita

posts postados por izk__

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

     

    • Obrigado 1

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...

 

GRÁTIS: ebook Redes Wi-Fi – 2ª Edição

EBOOK GRÁTIS!

CLIQUE AQUI E BAIXE AGORA MESMO!