Jump to content
Fórum Script Brasil
  • 0

Tentando fazer um programa para cadastro de pessoas


brunonoia
 Share

Question

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

Link to comment
Share on other sites

1 answer to this question

Recommended Posts

Join the conversation

You can post now and register later. If you have an account, sign in now to post with your account.

Guest
Answer this question...

×   Pasted as rich text.   Paste as plain text instead

  Only 75 emoji are allowed.

×   Your link has been automatically embedded.   Display as a link instead

×   Your previous content has been restored.   Clear editor

×   You cannot paste images directly. Upload or insert images from URL.

 Share



  • Forum Statistics

    • Total Topics
      149.9k
    • Total Posts
      646.8k
×
×
  • Create New...