Ir para conteúdo
Fórum Script Brasil

brunonoia

Membros
  • Total de itens

    1
  • Registro em

  • Última visita

Posts postados por brunonoia

  1. Galera já não sei mais o que fazer eu to tentando fazer o programa ele compila e grava o cadastro mas na hora de lista os cadastros ele apaga o nome.

    vou mandar todo o codigo para que fique mas fácil de visualizar o erro.

    #include <stdio.h>
    #include <string.h>
    #include <stdlib.h>
    #include <conio.h>
    #include <ctype.h>

    typedef struct dados
    {

     char endereco[80];
     char cidade[80];
     char estado[2];
     char nome[100];
     char profissao[30];
    char nascimento[15];
    char bairro[30];
    }T_dados;
     T_dados d[300];

    // prototipos
    void inclusao(void);
    void Listar(void);
    void quick_struct(int);
    void qs_struct(int,int);
    void ordenar(void);
    void pesquisar(void);
    char Validaresp();

    static int qtd = 0;


    FILE *fp;


    // =================================================================
    // ======Incluir dados no arquivo ==================================

    void inclusao(void){
         int total = 0, retorno;
         char op = 's';

         if ((fp = fopen("agenda.db", "a")) == NULL)
         {
            printf ("O arquivo da lista não pode ser aberto!\n");
            printf ("Insira dados!\n");
            getch();
            exit(1);
         }
         while ((total < 300) && (op == 's'))
         {
              
               printf ("Digite o nome: ");
               gets(d[total].nome);
               fflush(stdin);
               printf("Digite a data de nascimento:");
               gets(d[total].nascimento);
               fflush(stdin);           
               printf ("Digite a cidade: ");
               gets(d[total].cidade);
               fflush(stdin);
               printf ("Digite a UF do estado: ");
               gets(d[total].estado);
               fflush(stdin);
               printf("Digite o bairro:  ");
               gets(d[total].bairro);
               fflush(stdin);
               printf ("Digite o endereco: ");
               gets(d[total].endereco);
               fflush(stdin);
               printf ("Digite a profissao: ");
               gets(d[total].profissao);
               fflush(stdin);
               


               retorno = fwrite (&d[total], sizeof(struct dados) ,1,fp);

               if (retorno == 1) {
                   printf(" \nGravacao ok ! ");
               }
               total++;
               op = Validaresp();
               qtd++;
         }
         fclose (fp);
    }

    //======================================================================
    // ======Valida resposta ===============================================

    char Validaresp() {
       char op;
       do {
          printf(" \nDeseja inserir novos dados? [S ou N] ? " );
          op = getch();
          printf("\n" );
       } while (op != 's' && op != 'n');
       return op;
    }

    //======================================================================
    // ======Organizar em ordem alfabetica =================================

    void ordenar(void){
          
         T_dados vet;
         int aux,i,j,k,retorno;
         char *str, *str2, *straux;
       
     if ((fp = fopen("agenda.db", "w+")) == NULL){
            printf ("ERRO!\n");
            getch();
            exit(1);
         }
            
             aux = qtd; // aux recebe a quantidade de contatos inscritos
             for ( i = aux ; i <0 ; i-- ){
                   str = d.nome;             
                   for ( j = i-1 ; j <=0 ; j-- ){
                       str2 = d[j].nome;
                       if ( strcmp ( str, str2 )> 0 ){
                            vet = d;
                            d = d[j];
                            d[j] = vet;
                       }
                   }
             }
         for ( k = 0 ; k < aux ; k++ ){
               retorno = fwrite (&d[k], sizeof(struct dados) ,1,fp);
               if (retorno != 1) {
                   printf(" \nERRO ! ");
               }
         }
         fclose(fp);
         printf("\nLista Ordenada! \n");
        getch();
    }

    //======================================================================
    // ======Pesquisar pelo nome ===================================

    void pesquisar(void){
         int indice = 0, retorno = 1, cont = 0;
         char nome[80],op;

         if ((fp = fopen("agenda.db", "r")) == NULL){
         printf ("O arquivo da lista não pode ser aberto!\n");
         printf ("Insira dados!\n");
         getch();
         exit(1);
         }
         printf ("Digite o nome: ");
         gets(nome);

         retorno = fread(&d[indice], sizeof(struct dados), 1, fp);

            while (retorno == 1){
                if (strcmp(nome, d[indice].nome) == 0 ){
                printf ("\nNome ..: %s\nEndereco ..: %s\nCidade ..: %s\nEstado..:%s\nProfissao..:%s\nNascimento..:%s\nBairro..:%s", d[indice].nome, d[indice].endereco, d[indice].cidade,d[indice].estado,d[indice].profissao,d[indice].nascimento,d[indice].bairro);
                cont++;
                }
                indice++;
                retorno = fread(&d[indice], sizeof(struct dados), 1, fp);
            }
            if(cont == 0){
                         printf("não contatos com este nome!\n");
                         }
            getch();
            fclose(fp);
       }
     
    //======================================================================
    // ======Pesquisar Nascimento ============================================

    void pesquisarnascimento(void){
         int indice = 0, retorno = 1, cont = 0;
         char nascimento[15],op;

         if ((fp = fopen("agenda.db", "r")) == NULL){
         printf ("O arquivo da lista não pode ser aberto!\n");
         printf ("Insira dados!\n");
         getch();
         exit(1);
         }
         printf ("Digite o nascimento: ");
         gets(nascimento);

         retorno = fread(&d[indice], sizeof(struct dados), 1, fp);

            while (retorno == 1){
                if (strcmp(nascimento, d[indice].nascimento)==0){
                printf ("%s\nNome ..: %s\nEndereco ..: %s\nCidade ..: %s\nEstado..:%s\nProfissao..:%s\nNascimento..:%s\nBairro..:", d[indice].nome, d[indice].endereco, d[indice].cidade,d[indice].estado,d[indice].profissao,d[indice].nascimento,d[indice].bairro);
                cont++;
                }
                indice ++;
                retorno = fread(&d[indice], sizeof(struct dados), 1, fp);
            }
            if(cont == 0){
                         printf("não contatos com este Nascimento!\n");
                         }
            getch();
            fclose(fp);
       }
     

     
    //======================================================================
    // ======Lista os contatos cadastrados =================================

    void Listar(void){
    int i = 0, retorno;

        if ((fp = fopen("agenda.db", "r")) == NULL)
        {
        printf ("O arquivo da lista não pode ser aberto!\n");
        printf ("Insira dados!\n");
        getch();
        exit(1);
        }

        retorno = fread(&d, sizeof(struct dados), 1, fp);
       // fread retorna a quantidade de itens ...

       while ( retorno == 1) {
          printf("\n Nome ..: %s",   d.nome);
          printf("\n Nadcimento ..: %s",    d.nascimento);
          printf("\n Cidade ..: %s",   d.cidade);
          printf("\n Estado ..: %s",    d.estado);
          printf("\n Bairro..:%s",   d.bairro);
          printf("\n Endereco ..: %s",   d.endereco);
          printf("\n Profissao ..: %s\n",    d.profissao);
          i++;
          retorno = fread(&d, sizeof(struct dados), 1, fp);
          }
          printf(" \n\n %d Contatos salvos!\n", i);
          getch();
          fclose(fp);
    }

    //======================================================================
    // ======Menu ==========================================================

    void menu(void){
    char op;
    int teste;

    if ((fp = fopen("agenda.db", "r")) != NULL){
            qtd = 0;      
            do {
                 teste = fread(&d, sizeof(struct dados), 1, fp);
                 qtd++;
            }while ( teste == 1 );
            qtd--;
    }

    do{
    system("cls");
    printf("\n(1)Incluir\n(2)Listar\n(3)Ordenar por nome\n(4)Pesquisar por nome\n");
    printf("(5)Pesquisar por nascimento\n(6)Qualquer outra tecla para sair\n\n");
    op = getch();
    switch(op){
    case '1':
         inclusao();
    break;
    case '2':
         Listar();
    break;
    case '3':
         ordenar();
    break;
    case '4':
         pesquisar();
    break;
    case '5':
         pesquisarnascimento();
    break;

    default:
    exit(1);
    }
    }while (op < '6');
    }

    int main (){
        int var;
        

        printf("\n\n\n\n\n\n\n\n\n\n");
        printf("                  .::AGENDA ELETRONICA:.  \n\n");
        printf("  Veja todas as funcoes disponiveis no menu   \n");
        printf("  use os numeros para selecionar a opcao desejada  \n");
        printf("  pressione qualquer tecla para continuar ou ESC para sair do programa agora.");
        var=getch();
        if(var == 300){ exit(1);}
    menu();
    system("pause");
    }
     

    Espero que alguém possa me ajudar.

    Obrigado

×
×
  • Criar Novo...