Ir ao conteúdo
  • Cadastre-se

Igor Soares da Paixão

Membro Júnior
  • Posts

    18
  • Cadastrado em

  • Última visita

posts postados por Igor Soares da Paixão

  1. Olá Senhores(a). Estou com uma dúvida a semanas e não consigo tirar. Estou desenvolvendo um código em C para um trabalho da faculdade e preciso salvar dados de um vetor de struct em arquivo txt e depois acessar eles e mostrar na tela. A struct contém nome, celular, idade. A ideia é salvar várias dados com estas informações, e depois acessá-los individualmente. Como eu faço isso? Exemplos são bem vindos.

  2. #include <stdio.h>
    #include <stdlib.h>
    #include <locale.h>
    
    
    void main(){
    setlocale(LC_ALL, "");
    
    typedef struct{
    
    char nome[15];
    int idade;
    char telefone[12];
    
    }Cpessoa; //Cadastro Pessoa
    
    Cpessoa pessoa[10];
    
    int i = 0, menu;
    
    
        FILE *arquivo;
        arquivo = fopen("pessoa.txt", "ab");
    
    
        printf("1 - Cadastro\n2 - Consultar\n");
        printf("Selecione a opção desejada: ");
        scanf("%d", &menu);
    
    
        switch(menu){
    
    case 1:
    
        fflush(stdin);
        printf("Digite os dados da pessoa abaixo.\n\n");
        printf("Nome: ");
        fgets(pessoa[i].nome, 15, stdin);
    
        printf("Idade: ");
        scanf("%d", &pessoa[i].idade);
    
        fflush(stdin);
        printf("Telefone: ");
        fgets(pessoa[i].telefone, 12, stdin);
    
        fwrite(&pessoa[i], sizeof(Cpessoa), 1, arquivo);
    
    
    case 2:
    
     arquivo = fopen("cadastro_paciente.txt", "rb");
    
     while(fread(&pessoa[i], sizeof(Cpessoa), 1, arquivo)){
        printf("%s", pessoa[i].nome);
        printf("%d", pessoa[i].idade);
        printf("%s", pessoa[i].telefone);
        }
    }
    
    }

    Está sendo bem difícil kkk, como eu leio os dados e mostro na tela? Não sei se está correto o jeito de gravar também.

    • Obrigado 1
  3. 21 minutos atrás, arfneto disse:

    Todos os campos de sua estrutura são char.

    • Não há razão pra usar scanf(). Só vai ter problemas. Faça o simples e leia linha a linha com fgets(). 
    • Não leia os dados na rotina que insere. São coisas diferentes. Só vai dar problema.
    • Se vai gravar texto apenas, use fprintf() ou fputs(). É muito mais fácil e ainda pode abrir o arquivo de saída no IDE para testar. Não há razão para usar um arquivo binário de texto ;) porque afinal é texto.
    • Não há razão para escrever o programa já com 11 onze campos. Teste apenas com dois ou tres. Ninguém vai culpar você. Se acertar com os dois vai acertar com 2 mil. Mas é muito chato testar com onze numa estrutura de incriveis 3K cada uma. Para que? 255 bytes para a cidade está bem até para os nomes da Islândia. mas uns 10 já estriam bem no teste.
    • Se tem um função menu() porque razão não ler a opção lá dentro e retornar??????? É o simples: e tira esse código todo de main()
       
    • 
          opcao = menu();
          switch(opcao)
          {
              default:
                  break;
          }

       

    • main() deve ser a primeira função em seu programa. SEMPRE. Se possível em um arquivo separado.
    • Em geral para percorrer essas estruturas em programas comuns você inicialmente tenta ler um arquivo com o estado inicial dos dados
      • depois você carrega o vetor todo para a memória e roda o programa a partir desses dados
      • ao final você grava no disco em outro arquivo todos os dados
      • muda o nome do arquivo original
      • muda o nome do arquivo gerado para o nome oficial
         
    
    Strcpy(paciente[contP].carteirinha, "NULL");
    strcpy(paciente[contP].cidadeEestado, "NULL"); 
    strcpy(paciente[contP].convenio, "NULL"); 
    ...

     

    Não sei o que pretendia com isso, mas colocar o valor "NULL" é tem estranho. Poderia escrever apenas

    
            paciente[contP].carteirinha = 0;
    


    E seria o equivalente a ter uma string vazia lá. NULL é 0, ou \0

     

    Nunca use variáveis globais. Nunca mesmo. É problema e por isso é proibido em muitas empresas e escolas e condenado por todos autores.

     

     

     

     

    Tem algum problema de todos os campos serem char na minha estrutura? Qual formato de variável eu deveria usar para ler um número grande? Tipo o CPF? 

    • Curtir 1
  4.  Esqueci de colocar ela, perdoe-me..

     

    void menuprincipal(){
    setlocale(LC_ALL, "");
    
    // VARIÁVEL PARA ARMAZENAR A OPÇÃO DO MENU
    
    int opcao;
    
    
    do{ printf("| MENU PRINCIPAL DO SISTEMA |\n");
        printf("1 - Cadastro de pacientes.\n");
        printf("2 - Cadastro de médicos.\n");
        printf("3 - Consulta de cadastros.\n");
        printf("4 - Agendamento de consultas.\n");
        printf("5 - Cancelamento de consultas.\n");
        printf("6 - Agenda do dia.\n");
        printf("7 - Cadastro de funcionários.\n");
        printf("8 - Sugestões, reclamações e elogios.\n");
        printf("9 - Relatórios.\n");
        printf("10 - Sair\n");
    
        printf("Digite a opção desejada: ");
        scanf("%d", &opcao);
        system("cls");
    
    
        switch(opcao){
    
        case 1:
            cadastroPaciente();
            break;
    
        case 2:
    
            break;
    
        case 3:
            consultaCadastro();
            break;
    
        case 10:
            printf("\n\n Finalizando....");
            sleep(3);
            exit(1);
    
    
        default:
            printf("Opção inválida! Tente Novamente.\n\n");
            }
    
    }while(opcao!=10);

     

    adicionado 0 minutos depois

     Esqueci de colocar ela, perdoe-me.. @devair1010

     

    void menuprincipal(){
    setlocale(LC_ALL, "");
    
    // VARIÁVEL PARA ARMAZENAR A OPÇÃO DO MENU
    
    int opcao;
    
    
    do{ printf("| MENU PRINCIPAL DO SISTEMA |\n");
        printf("1 - Cadastro de pacientes.\n");
        printf("2 - Cadastro de médicos.\n");
        printf("3 - Consulta de cadastros.\n");
        printf("4 - Agendamento de consultas.\n");
        printf("5 - Cancelamento de consultas.\n");
        printf("6 - Agenda do dia.\n");
        printf("7 - Cadastro de funcionários.\n");
        printf("8 - Sugestões, reclamações e elogios.\n");
        printf("9 - Relatórios.\n");
        printf("10 - Sair\n");
    
        printf("Digite a opção desejada: ");
        scanf("%d", &opcao);
        system("cls");
    
    
        switch(opcao){
    
        case 1:
            cadastroPaciente();
            break;
    
        case 2:
    
            break;
    
        case 3:
            consultaCadastro();
            break;
    
        case 10:
            printf("\n\n Finalizando....");
            sleep(3);
            exit(1);
    
    
        default:
            printf("Opção inválida! Tente Novamente.\n\n");
            }
    
    }while(opcao!=10);

     

    adicionado 1 minuto depois
    2 minutos atrás, devair1010 disse:

    @Gegê82737     esse nem compila e está faltando a função menuprincipal ..

    Foi como te falei, o restante do código está funcionando normal só estou me complicando nessa função consultaCadastro(); ..... 

    • Curtir 1
  5. #include <stdio.h>
    #include <stdlib.h>
    #include <locale.h>
    #include <string.h>
    
    int main(){
    setlocale(LC_ALL, "");
    
        printf ("Inicializando sistema...");
        sleep(3);
        system("cls");
        login();
    
    
    
    
    
    
    
        return 0;
    }
    
      void login(){
    
    char loginA[7], senhaA[20], dloginA[9]="adminA", dsenhaA[20]="unipadminA";
    char loginB[7], senhaB[20], dloginB[9]="adminB", dsenhaB[20]="unipadminB";
    char loginC[7], senhaC[20], dloginC[9]="adminC", dsenhaC[20]="unipadminC";
    char novasenha[20];
    
    int unidade, redefinir_senha;
    
        volta:
    
    printf("\nOpções disponíveis: 1, 2 e 3 ou digite 4 para redefinir a senha.");
    printf("\nEscolha uma das opções disponíveis: ");
    scanf("%d", &unidade);
    
    switch(unidade){
    case 1:
            printf("Você escolheu a unidade %d!\n", unidade);
    
    
        printf("LOGIN: ");
    	scanf("%s",loginA);/*aqui você digita o login*/
    	printf("SENHA: ");
    	scanf("%s",senhaA);/*aqui você digita a senha*/
    	if((strcmp(dloginA,loginA) == 0) && (strcmp(dsenhaA,senhaA) == 0)){
    	    printf("\n\nLogin efetuado com sucesso!\n");
    	}else{
    	    printf("Usuário ou senha inválida!\n\n");
    	    goto volta;
            };
    	break;
    
    case 2:
        printf("Você escolheu a unidade %d!\n", unidade);
    
    
        printf("LOGIN: ");
    	scanf("%s",loginB);/*aqui você digita o login*/
    	printf("SENHA: ");
    	scanf("%s",senhaB);/*aqui você digita a senha*/
    	if((strcmp(dloginB,loginB) == 0) && (strcmp(dsenhaB,senhaB) == 0)){
    	    printf("\n\nLogin efetuado com sucesso!\n");
        }
        else{
    	    printf("Usuário ou senha inválida!\n\n");
    	    goto volta;
            };
        break;
    
    case 3:
        printf("Você escolheu a unidade %d!\n", unidade);
        printf("LOGIN: ");
    	scanf("%s",loginC);/*aqui você digita o login*/
    	printf("SENHA: ");
    	scanf("%s",senhaC);/*aqui você digita a senha*/
    	if((strcmp(dloginC,loginC) == 0) && (strcmp(dsenhaC,senhaC) == 0)){
    	    printf("\n\nLogin efetuado com sucesso!\n");
        }
        else{
    	    printf("Usuário ou senha inválida!\n\n");
            goto volta;
            }
        break;
    
    case 4:
        printf("Para redefinir sua senha, digite sua unidade: ");
        scanf("%d", &redefinir_senha);
        if(redefinir_senha == 1){
                printf("Digite sua nova senha: ");
                scanf("%s", &novasenha);
            novasenha == senhaA;
            printf("Sua senha foi alterada!");
            login();
    }
    
        default:
            printf("Opção inválida!\n");
                 goto volta;
                 break;
                 };
    
    
    
        printf ("Carregando o sistema...");
        sleep(3);
        system("cls");
        menuprincipal();
    
    getch();
    }
      
    typedef struct{
        char nomecompleto[255];
        char datanasc[255];
        char CPF[255];
        char RG[255];
        char telefone[255];
        char email[255];
        char endereco[255];
        char cidadeEestado[255];
        char validacar[255];
        char convenio[255];
        char carteirinha[255];
    
    
    }Cpaciente;
      
      Cpaciente paciente[MAXPACIENTES];
    int contP = 0;
    int posicao;
    
    
    
    void cadastroPaciente(){
    setlocale(LC_ALL, "");
    
    
    
    FILE *arquivo;
    arquivo = fopen("cadastro_paciente.bin", "ab");
    int dados, retornar, i;
    char fpag = 'P' || 'C';
    char formapag[2];
    
    
    
    
        if(arquivo == NULL){
            printf("Erro ao abrir o arquivo.");
            };
    
            // INICIALIZAÇÃO DA STRUCT EM VETORES
    
    
            //ARMAZENANDO DADOS NAS STRUCT
    
            for(contP = 0; contP < MAXPACIENTES; contP++){
    
            printf("Você está na tela de cadastramento de pacientes.\n\n");
            fflush(stdin);
            printf("Digite o CPF: ");
            fgets(paciente[contP].CPF, 255, stdin);
            printf("Digite o Nome Completo: ");
            fgets(paciente[contP].nomecompleto, 255, stdin); // Função que lê o nome
            printf("Digite a data de nascimento(EX: DD/MM/AAAA): ");
            fgets(paciente[contP].datanasc, 255, stdin); // Função que lê a data de nasc
            printf("Digite o CPF novamente: ");
            fgets(paciente[contP].CPF, 255, stdin);
            fflush(stdin);
            printf("Digite o número do RG: ");
            fgets(paciente[contP].RG, 255, stdin); // Função que lê o RG
            printf("Digite o número do Telefone/Celular: ");
            fgets(paciente[contP].telefone, 255, stdin); // Função que lê o num de telefone
            printf("Digite o email: ");
            fgets(paciente[contP].email, 255, stdin); // Função que lê o email
    
            printf("Digite o endereço completo(EX: Rua, numCasa - Bairro): ");
            fgets(paciente[contP].endereco, 255, stdin); // Função que lê o endereço
            printf("Digite a Cidade e o Estado(EX: Cidade/Estado): ");
            fgets(paciente[contP].cidadeEestado, 255, stdin);
            printf("Particular ou Convênio? Informe com P ou C: ");
            scanf("%c", &fpag); // Função que lê a forma de pagamento informada pelo printf
            fpag = toupper(fpag);
            if(fpag == 'P'){
               printf("Digite D para Dinheiro ou C para Cartão.\n");
               printf("Forma de pagamento: ");
               scanf("%s", formapag); // Função que lê a forma de pagamento informada pelo printf
                }else if(fpag == 'C'){
                printf("Nome do Convênio: ");
                scanf("%s", paciente[contP].convenio); // Função que lê o nome do convenio
                printf("Digite o número da carteirinha: ");
                scanf("%s", &paciente[contP].carteirinha); // Função que lê o num da carteirinha
                printf("Data de validade da carteirinha(DD/MM/AAAA), não inserir se já estiver vencida!: ");
                scanf("%s", paciente[contP].validacar); // Função que lê a validade da carteirinha
                }
    
            printf("Os dados estão corretos? Digite 1 para SIM ou 2 para NÃO: ");
            scanf("%d", &dados);
    
            if(dados == 1){
                fwrite(&paciente[contP], sizeof(Cpaciente), 1, arquivo);
                contP = contP + 1;
                fclose(arquivo);
                printf("O paciente foi cadastrado com sucesso!\n");
                }else if(dados == 2){
                printf("Os dados não foram cadastrados!\n");
                }
    
    
    
        printf("Voltar ao menu principal? Digite 1 ou para sair digite 0: ");
        scanf("%d", &retornar);
            if(retornar == 1){
                system("cls");
                menuprincipal();
            }else if(retornar == 0){
                exit(1);
            }
        }
    
    }
                                                
    void consultaCadastro(FILE *arquivo){
    
    
    arquivo = fopen("cadastro_paciente.txt","rb");
    
    
    char CPF[255];
    
    
    printf("VOCÊ ESTÁ NA TELA DE CONSULTAR CADASTRO\n\n");
    
    printf("Para encontrar o registro, digite o número do CPF: ");
    fflush(stdin);
    gets(CPF);
    
    
    const int info = fread(&paciente, sizeof(Cpaciente), MAXPACIENTES, arquivo);
    
    if (info != MAXPACIENTES)
    {
    	/* Gerenciar o erro adequadamente aqui */
    	printf("ERRO");
    }
    
    for(contP = 0; contP < MAXPACIENTES; contP++){
        if(strcmp(CPF, paciente[contP].CPF)== 0){
            printf("Registro encontrado!\n");
            posicao = contP;
            }else{
            posicao = -1;
            }
        if(posicao = -1) {
        printf(" \n Registro não encontrado! ");
        }else{
        printf(" \n Registro Encontrado!\n");
        printf(": %s", paciente[posicao].CPF);
    
        }
    
    
    
    }
    
    
    
    
    }

    Aí está o código completo, foi como eu disse sou iniciante em C e me perdoe se não pego essas dicas/sugestões que você me deu fácil.....Verifique se eu estou fazendo da maneira correta.@devair1010

    • Obrigado 1
  6. 6 horas atrás, V!OLADOR disse:

    Talvez o problema esteja na leitura usando dois laços, um for e um while. Não apenas não é necessário como o intuito do programa não fica claro. Por sinal, o retorno de fread não é verdadeiro/falso (ou seja, zero ou diferente de zero com esse propósito específico) mas, sim, o número de elementos lidos do arquivo (eventualmente pode ser zero). 

     

    Sabendo de antemão que existe sempre o mesmo número  de entradas no arquivo (150), você pode lê-los todos com uma chamada de fread:

     

    
    const int info = fread(&paciente, sizeof(Cpaciente), MAXPACIENTES, arquivo)
      
    if (info != MAXPACIENTES)
    {
    	/* Gerenciar o erro adequadamente aqui */
    }

     

    Depois dessa etapa, você pode checar todos os elementos do vetor paciente procurando pelo cpf do cliente. Ou seja, usando apenas um for.

     

    Edit: Noutra olhadela rápida, e apesar que você de fato não precisa de dois laços, é provável que o erro não esteja ai pelo menos enquanto contP == 0. O próximo candidato a testar seria strcmp.

    Fiz isso aí que você me sugeriu mas não consegui o retorno desejado =(

    adicionado 2 minutos depois
    5 horas atrás, devair1010 disse:

    @Gegê82737    você não postou a função para listar , e então seu código  poderia ser assim  :

    
    #include <stdio.h>
    #include <windows.h>
    #include <ctype.h>
    #include <stdlib.h>
    #include <string.h>
    #define MAXPACIENTES 150
    void            _Meu_Fflush();
    void Listar();
    // DADOS DO PACIENTE
    typedef struct{
        char nomecompleto [255];
        char datanasc     [255];
        char CPF          [255];
        char RG           [255];
        char telefone     [255];
        char email        [255];
        char endereco     [255];
        char cidadeEestado[255];
        char validacar    [255];
        char convenio     [255];
        char carteirinha  [255];
    }Cpaciente;
    Cpaciente paciente[MAXPACIENTES];
    void desenha(int co_i, int li_i, int caract[],int w);
    void gotoxy_2(int,int);
    int carac2[70]={
      124,130,130,126,  2,130,124,/* Digito 9 */ // 01111100 --|
      124,130,124,130,130,130,124,/* Digito 8 */ // 10000010   |
      254,  2, 12, 16, 96, 64, 64,/* Digito 7 */ // 10000010   |
      124,128,188,194,130,130,124,/* Digito 6 */ // 01111110   |-- Digito Nove
      252,128,252,  2,  2,130,124,/* Digito 5 */ // 00000010   |
       28, 36, 68,132,252,  4, 62,/* Digito 4 */ // 10000010   |
      124,130,  2, 28,  2,130,124,/* Digito 3 */ // 01111100 --|
      124,130,  2, 28, 96,128,252,/* Digito 2 */
       16,112, 16, 16, 16, 16,124,/* Digito 1 */
       56, 68,138,146,162, 68, 56 /* Digito 0 */
      };
    int contP = 0;
    int posicao;
    int cadastroPaciente()
    {
        FILE *arquivo;
        arquivo = fopen("cadastro_paciente.bin", "ab");
        int dados, retornar, i;
        char fpag = 'P' || 'C';
        char formapag[2];
        if(arquivo == NULL)
        {
            printf("Erro ao abrir o arquivo.");
        };
        // INICIALIZAÇÃO DA STRUCT EM VETORES
        for(contP = 0; contP <MAXPACIENTES; contP++){
            strcpy(paciente[contP].carteirinha, "NULL");
            strcpy(paciente[contP].cidadeEestado, "NULL");
            strcpy(paciente[contP].convenio, "NULL");
            strcpy(paciente[contP].CPF, "NULL");
            strcpy(paciente[contP].datanasc, "NULL");
            strcpy(paciente[contP].email, "NULL");
            strcpy(paciente[contP].endereco, "NULL");
            strcpy(paciente[contP].nomecompleto, "NULL");
            strcpy(paciente[contP].RG, "NULL");
            strcpy(paciente[contP].telefone, "NULL");
            strcpy(paciente[contP].validacar, "NULL");
        }
        //ARMAZENANDO DADOS NAS STRUCT
        for(contP = 0; contP < MAXPACIENTES; contP++)
        {
            printf("Você está na tela de cadastramento de pacientes.\n\n");
            _Meu_Fflush();
            printf("Digite o CPF: ");
            fgets(paciente[contP].CPF, 255, stdin);
            printf("Digite o Nome Completo: ");
            fgets(paciente[contP].nomecompleto, 255, stdin); // Função que lê o nome
            printf("Digite a data de nascimento(EX: DD/MM/AAAA): ");
            fgets(paciente[contP].datanasc, 255, stdin); // Função que lê a data de nasc
            printf("Digite o CPF novamente: ");
            fgets(paciente[contP].CPF, 255, stdin);
            _Meu_Fflush();
            printf("Digite o número do RG: ");
            fgets(paciente[contP].RG, 255, stdin); // Função que lê o RG
            printf("Digite o número do Telefone/Celular: ");
            fgets(paciente[contP].telefone, 255, stdin); // Função que lê o num de telefone
            printf("Digite o email: ");
            fgets(paciente[contP].email, 255, stdin); // Função que lê o email
            printf("Digite o endereço completo(EX: Rua, numCasa - Bairro): ");
            fgets(paciente[contP].endereco, 255, stdin); // Função que lê o endereço
            printf("Digite a Cidade e o Estado(EX: Cidade/Estado): ");
            fgets(paciente[contP].cidadeEestado, 255, stdin);
            printf("Particular ou Convênio? Informe com P ou C: ");
            scanf("%c", &fpag); // Função que lê a forma de pagamento informada pelo printf
            fpag = toupper(fpag);
            if(fpag == 'P'){
                printf("Digite D para Dinheiro ou C para Cartão.\n");
                printf("Forma de pagamento: ");
                scanf("%s", formapag); // Função que lê a forma de pagamento informada pelo printf
            }
            else
                if(fpag == 'C')
                {
                    printf("Nome do Convênio: ");
                    scanf("%s", paciente[contP].convenio); // Função que lê o nome do convenio
                    printf("Digite o número da carteirinha: ");
                    scanf("%s", &paciente[contP].carteirinha); // Função que lê o num da carteirinha
                    printf("Data de validade da carteirinha(DD/MM/AAAA), não inserir se já estiver vencida!: ");
                    scanf("%s", paciente[contP].validacar); // Função que lê a validade da carteirinha
                }
            printf("Os dados estão corretos? Digite 1 para SIM ou 2 para NÃO: ");
            scanf("%d", &dados);
            if(dados == 1){
                fwrite(&paciente[contP], sizeof(Cpaciente), 1, arquivo);
                contP = contP + 1;
                fclose(arquivo);
                printf("O paciente foi cadastrado com sucesso!\n");
            }
            else
                if(dados == 2)
                {
                    printf("Os dados não foram cadastrados!\n");
                }
            printf("Voltar ao menu principal? Digite 1 ou para sair digite 0: ");
            scanf("%d", &retornar);
            if(retornar == 1)
            {
                system("cls");
                //menuprincipal();
            }
            else
                if(retornar == 0)
                {
                    break;
                }
        }
    }
    void consultaCadastro()
    {
        FILE *arquivo;
        arquivo = fopen("cadastro_paciente.bin","rb");
        char CPF[255];
        printf("VOCÊ ESTÁ NA TELA DE CONSULTAR CADASTRO\n\n");
        printf("Para encontrar o registro, digite o número do CPF: ");
        fflush(stdin);
        gets(CPF);
        for(contP = 0; contP < MAXPACIENTES; contP++)
        {
            while( fread(&paciente[contP], sizeof(Cpaciente), 1, arquivo))
            {
                if(strcmp(CPF, paciente[contP].CPF)== 0)
                {
                    printf("Registro encontrado!\n");
                    posicao = contP;
                }
                else
                {
                    posicao = -1;
                }
                if(posicao = -1)
                {
                    printf(" \n Registro não encontrado! ");
                }
                else
                {
                    printf(" \n Registro Encontrado!\n");
                    printf("CPF: %s", paciente[posicao].CPF);
                }
            }
        }
    }
    int main()
    {
        int j;
        cadastroPaciente();
        Listar();
        printf("\n\n");
        int w,px,py,x;                            /* variáveis simples                       */
        HANDLE hOut;                              /* controle dos dispositivos do pc         */
        HBITMAP hb;
        long lg;
        hOut= GetStdHandle(STD_OUTPUT_HANDLE);    /* pega a saída padrão                     */
        CONSOLE_SCREEN_BUFFER_INFO SBInfo;        /* informações sobre a buffer da tela      */
        GetConsoleScreenBufferInfo(hOut, &SBInfo);/* pega a posição do cursor do console     */
        GetBitmapBits(hb,lg,NULL);
        px = SBInfo.dwCursorPosition.X;           /* pX será a posição da coluna do cursor no console */
        py = SBInfo.dwCursorPosition.Y;           /* pY será a posição da linha do cursor no console  */
        gotoxy_2(0,py+20);
        gotoxy_2(0,py+2 );
        for( j=0; j<10; j++ )
            desenha(40,py,carac2,j);  /* são os dígitos   */
        printf("\n\n\n\n");
        return 32768;
    }
    void Listar()
    {
        int i;
        printf("esta no Listar !\n\n");
        for(i=0; i<contP; i++)
        {
            printf("Nome -------> %s", paciente[i].nomecompleto );
            printf("cpf --------> %s", paciente[i].CPF          );
            printf("celular ----> %s", paciente[i].telefone     );
            printf("Nascimento -> %s", paciente[i].datanasc     );
            printf("RG ---------> %s", paciente[i].RG           );
            printf("Email ------> %s", paciente[i].email        );
            printf("Endereco ---> %s", paciente[i].endereco     );
            printf("Cidade -----> %s", paciente[i].cidadeEestado);
        }
    }
    void            _Meu_Fflush()
    {
        char c;
        while( c = fgetc(stdin) != '\n');
    }
    void desenha(int co_i, int li_i, int caract[],int w){
        int x,y,q,co,li;
        li=li_i;
        w *= 7;
        for(x=0;x<7;x++){                  /* linhas */
            co=co_i;
            q=caract[x+w];
            for(y=0;y<16;y += 2){              /* colunas */
                gotoxy_2(co,li);
                if(q % 2==0)printf("  ");
                else   printf("%c%c",219,219);
                co -= 2;
                q/=2;
            }
            li++;
        }
        gotoxy_2(70,li_i+7);
        Sleep(1000);
    }
    void gotoxy_2(int x, int y){/*imprimir na linha e coluna desejada */
      SetConsoleCursorPosition( GetStdHandle(STD_OUTPUT_HANDLE),(COORD){x,y});
    }
    

     

    Eu só estou com problema nessa parte de mandar a função listar(); o restante do código eu fiz e está funcionando normal kk

    • Obrigado 1
  7. Como faço para listar as pessoas? Eu armazenei os dados em uma struct e coloquei em arquivo .bin e agora eu quero ler esses dados e imprimir na tela do usuário. Como eu faço? Eu vi num fórum que eu teria que criar um for para "dar o inicio" de gravação de dados. Não sei se isso é realmente assim, comecei a escrever código em C a pouco tempo e não sei nada de programação. 

    #include <stdio.h>
    #include <stdlib.h>
    #include <locale.h>
    #include <string.h>
    #define MAXPACIENTES 150
    
    
    // DADOS DO PACIENTE
    
    typedef struct{
        char nomecompleto[255];
        char datanasc[255];
        char CPF[255];
        char RG[255];
        char telefone[255];
        char email[255];
        char endereco[255];
        char cidadeEestado[255];
        char validacar[255];
        char convenio[255];
        char carteirinha[255];
    
    
    }Cpaciente;
    
    
    
    Cpaciente paciente[MAXPACIENTES];
    int contP = 0;
    int posicao;
    
    
    
    void cadastroPaciente(){
    setlocale(LC_ALL, "");
    
    
    
    FILE *arquivo;
    arquivo = fopen("cadastro_paciente.bin", "ab");
    int dados, retornar, i;
    char fpag = 'P' || 'C';
    char formapag[2];
    
    
    
    
        if(arquivo == NULL){
            printf("Erro ao abrir o arquivo.");
            };
    
            // INICIALIZAÇÃO DA STRUCT EM VETORES
            for(contP = 0; contP <MAXPACIENTES; contP++){
             strcpy(paciente[contP].carteirinha, "NULL");
             strcpy(paciente[contP].cidadeEestado, "NULL");
             strcpy(paciente[contP].convenio, "NULL");
             strcpy(paciente[contP].CPF, "NULL");
             strcpy(paciente[contP].datanasc, "NULL");
             strcpy(paciente[contP].email, "NULL");
             strcpy(paciente[contP].endereco, "NULL");
             strcpy(paciente[contP].nomecompleto, "NULL");
             strcpy(paciente[contP].RG, "NULL");
             strcpy(paciente[contP].telefone, "NULL");
             strcpy(paciente[contP].validacar, "NULL");
    
            }
    
            //ARMAZENANDO DADOS NAS STRUCT
    
            for(contP = 0; contP < MAXPACIENTES; contP++){
    
            printf("Você está na tela de cadastramento de pacientes.\n\n");
            fflush(stdin);
            printf("Digite o CPF: ");
            fgets(paciente[contP].CPF, 255, stdin);
            printf("Digite o Nome Completo: ");
            fgets(paciente[contP].nomecompleto, 255, stdin); // Função que lê o nome
            printf("Digite a data de nascimento(EX: DD/MM/AAAA): ");
            fgets(paciente[contP].datanasc, 255, stdin); // Função que lê a data de nasc
            printf("Digite o CPF novamente: ");
            fgets(paciente[contP].CPF, 255, stdin);
            fflush(stdin);
            printf("Digite o número do RG: ");
            fgets(paciente[contP].RG, 255, stdin); // Função que lê o RG
            printf("Digite o número do Telefone/Celular: ");
            fgets(paciente[contP].telefone, 255, stdin); // Função que lê o num de telefone
            printf("Digite o email: ");
            fgets(paciente[contP].email, 255, stdin); // Função que lê o email
    
            printf("Digite o endereço completo(EX: Rua, numCasa - Bairro): ");
            fgets(paciente[contP].endereco, 255, stdin); // Função que lê o endereço
            printf("Digite a Cidade e o Estado(EX: Cidade/Estado): ");
            fgets(paciente[contP].cidadeEestado, 255, stdin);
            printf("Particular ou Convênio? Informe com P ou C: ");
            scanf("%c", &fpag); // Função que lê a forma de pagamento informada pelo printf
            fpag = toupper(fpag);
            if(fpag == 'P'){
               printf("Digite D para Dinheiro ou C para Cartão.\n");
               printf("Forma de pagamento: ");
               scanf("%s", formapag); // Função que lê a forma de pagamento informada pelo printf
                }else if(fpag == 'C'){
                printf("Nome do Convênio: ");
                scanf("%s", paciente[contP].convenio); // Função que lê o nome do convenio
                printf("Digite o número da carteirinha: ");
                scanf("%s", &paciente[contP].carteirinha); // Função que lê o num da carteirinha
                printf("Data de validade da carteirinha(DD/MM/AAAA), não inserir se já estiver vencida!: ");
                scanf("%s", paciente[contP].validacar); // Função que lê a validade da carteirinha
                }
    
            printf("Os dados estão corretos? Digite 1 para SIM ou 2 para NÃO: ");
            scanf("%d", &dados);
    
            if(dados == 1){
                fwrite(&paciente[contP], sizeof(Cpaciente), 1, arquivo);
                contP = contP + 1;
                fclose(arquivo);
                printf("O paciente foi cadastrado com sucesso!\n");
                }else if(dados == 2){
                printf("Os dados não foram cadastrados!\n");
                }
    
    
    
        printf("Voltar ao menu principal? Digite 1 ou para sair digite 0: ");
        scanf("%d", &retornar);
            if(retornar == 1){
                system("cls");
                menuprincipal();
            }else if(retornar == 0){
                exit(1);
            }
        }
    
    }
    
    void consultaCadastro(){
    
    FILE *arquivo;
    arquivo = fopen("cadastro_paciente.bin","rb");
    
    
    char CPF[255];
    
    
    printf("VOCÊ ESTÁ NA TELA DE CONSULTAR CADASTRO\n\n");
    
    printf("Para encontrar o registro, digite o número do CPF: ");
    fflush(stdin);
    gets(CPF);
    
    for(contP = 0; contP < MAXPACIENTES; contP++){
    
    
        while( fread(&paciente[contP], sizeof(Cpaciente), 1, arquivo)){
        if(strcmp(CPF, paciente[contP].CPF)== 0){
            printf("Registro encontrado!\n");
            posicao = contP;
            }else{
            posicao = -1;
            }
        if(posicao = -1) {
        printf(" \n Registro não encontrado! ");
        }else{
        printf(" \n Registro Encontrado!\n");
        printf("CPF: %s", paciente[posicao].CPF);
    
                }
            }
        }
    }

     

    • Obrigado 1
  8. @sannoy Obrigado meu parceiro, foi como eu disse sou estudante e praticamente calouro ainda kkk. O scanf pra ler strings foi um modo que eu vi no youtube. Obrigado pela dica, vou ver se funciona aqui

    adicionado 28 minutos depois

    @sannoy E quanto a ler uma informação .txt para não repetir um número digitado pelo usuário? Eu quero que o sistema limite um cadastro por CPF, como faço para fazer isso? 

    • Curtir 1
  9. Olá pessoal, sou novo aqui no fórum. Estou cursando o 2o semestre de ADS na Unip e meu trabalho desse semestre é fazer um sistema para uma clínica médica, a dúvida que eu estou é: Eu preciso ler um arquivo .txt com várias informações guardadas nele, mas eu preciso de uma só para válidar o cadastro do paciente. Para o sistema não efetuar duplo cadastro, eu quero pegar a informação no arquivo .txt, no caso o CPF. Preciso que o sistema leia o arquivo .txt se ele não encontrar o número do CPF já digitado pelo usuário, ele poderá continuar com o cadastro. Caso o número informado pelo usuário já possuir no registro .txt, ele não poderá prosseguir e mostrará que o CPF já está cadastrado. Alguém pode me ajudar com isso? Vou deixar o código aqui embaixo. Também aceito sugestões para deixar o código menor.

     

    #include <stdio.h>
    #include <stdlib.h>
    #include <locale.h>
    #include <string.h>
    
    
    void cadastroPaciente(){
    setlocale(LC_ALL, "");
    
    // DADOS DO PACIENTE 
    
    
    
    struct cadastro_paciente{
        char nomecompleto[50];
        char datanasc[50];
        char RG[50];
        char CPF[50];
        char telefone[50];
        char email[50];
        char endereco[255];
        char validacar[20];
        char convenio[30];
        char carteirinha[20];
    
    
    };
    
    
    int i, dados, retornar;
    char fpag = 'P' || 'C';
    char formapag[2];
    char CPF[20];
    
    FILE *cadastro_paciente;
    cadastro_paciente = fopen("cadastro_paciente.txt", "a");
    struct cadastro_paciente paciente;
    
    
        if(cadastro_paciente == NULL){
            printf("Erro ao abrir o arquivo.");
            };
    
            printf("Você está na tela de cadastramento de pacientes.\n\n");
    
            printf("Digite o Nome Completo: ");
            scanf("%s", paciente.nomecompleto);
            fflush(stdin);
            printf("Digite a data de nascimento(EX: DD/MM/AAAA): ");
            scanf("%s", paciente.datanasc);
            fflush(stdin);
            printf("Digite o número do RG: ");
            scanf("%s", paciente.RG);
            fflush(stdin);
            printf("Digite o número do CPF: ");
            scanf("%s", paciente.CPF);
            fflush(stdin);
            printf("Digite o número do Telefone/Celular: ");
            scanf("%s", paciente.telefone);
            fflush(stdin);
            printf("Digite o email: ");
            scanf("%s", paciente.email);
            fflush(stdin);
            printf("Digite o endereço completo(EX: Rua, numCasa - Bairro - Cidade/Estado): ");
            fgets(paciente.endereco, 255, stdin);
            printf("Particular ou Convênio? Informe com P ou C: ");
            scanf("%c", &fpag);
            fpag = toupper(fpag);
            if(fpag == 'P'){
               printf("Digite D para Dinheiro ou C para Cartão.\n");
               printf("Forma de pagamento: ");
               scanf("%s", formapag);
                }else if(fpag == 'C'){
                printf("Nome do Convênio: ");
                scanf("%s", paciente.convenio);
                printf("Digite o número da carteirinha: ");
                scanf("%s", &paciente.carteirinha);
                printf("Data de validade da carteirinha (DD/MM/AAAA): ");
                scanf("%s", paciente.validacar);
                }
    
            printf("Os dados estão corretos? Digite 1 para SIM ou 2 para NÃO: ");
            scanf("%d", &dados);
    
            if(dados == 1){
                    //SALVANDO OS DADOS EM TXT
                fprintf(cadastro_paciente, "\nDADOS DO PACIENTE CADASTRADO\n");
                fprintf(cadastro_paciente,"Nome Completo: %s\n", paciente.nomecompleto);
                fprintf(cadastro_paciente,"Data de nascimento: %s\n", paciente.datanasc);
                fprintf(cadastro_paciente,"RG: %s\n", paciente.RG);
                fprintf(cadastro_paciente,"CPF: %s\n", paciente.CPF);
                fprintf(cadastro_paciente,"Telefone/Celular: %s\n", paciente.telefone);
                fprintf(cadastro_paciente,"Email: %s\n", paciente.email);
                fprintf(cadastro_paciente,"Endereço: %s", paciente.endereco);
                fprintf(cadastro_paciente,"Convênio ou Particular?: %c\n", fpag);
                fprintf(cadastro_paciente, "Forma de pagamento, Cartão ou Dinheiro: %c\n", formapag);
                fprintf(cadastro_paciente,"Nome do Convênio: %s\n", paciente.convenio);
                fprintf(cadastro_paciente,"Número da Carteirinha: %s\n", paciente.carteirinha);
                fprintf(cadastro_paciente,"Data de validade da carteirinha: %s", paciente.validacar);
                fclose(cadastro_paciente);
                printf("O paciente foi cadastrado com sucesso!\n");
                }else if(dados == 2){
                printf("Os dados não foram cadastrados!\n");
                }
    
        printf("Voltar ao menu principal? Digite 1 ou para sair digite 0: ");
        scanf("%d", &retornar);
            if(retornar == 1){
                system("cls");
                menuprincipal();
            }else if(retornar == 0){
                exit(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!