Ir para conteúdo
Fórum Script Brasil
  • 0

O meu cadastro de clientes não funciona


senhor_unix

Pergunta

Fiz um cadastro de clientes no Dev-C++,mas ele possui alguns erros,veja o código-fonte:

#include <stdio.h>
#include <stdlib.h>
#include <windows.h>
#define clrscr() (system("CLS"))

void gotoxy(int x, int y){
     COORD coord;
     coord.X=(short)x;
     coord.Y=(short)y;
     SetConsoleCursorPosition(GetStdHandle(STD_OUTPUT_HANDLE),coord);
}

/******************************************************************************/
struct REG_CLI{
   int CODIGO;
   char NOME[31];
   char ENDERECO[100];
   int CEP;
   int TELEFONE;
   char EMAIL[60];
   int EXCLUIDO;
};
struct REG_CLI CLIENTE;
FILE *ARQCLI;
int I,NR_CLI,ESCOLHA;
char OPT[2];
char RESP,TECLA;
char SISTEMA[33]="PROGRAMA DE CADASTRO DE CLIENTES";
/******************************************************************************/
void line(void);
void center(int LINHA, char *MENSAGEM);
void tela(void);
void mostradados(void);
int PESQUISA(int NUMERO);
int cadastra(void);
int consulta(void);
int editar(void);
int cor(void);
int exclusao(int NUMERO);
/******************************************************************************/
void clearline(void){
     printf("                                                                                 ");
     return;
}
/******************************************************************************/
int main(void)
{
  /*Verifica existencia do arquivo, se não existe, cria*/
  char OPCAO;
  if((ARQCLI=fopen("CADCLI.DAT","rb+"))==NULL){
     ARQCLI=fopen("CADCLI.DAT","wb+");
     fwrite(&CLIENTE,sizeof(struct REG_CLI),1,ARQCLI);
  }
  do{
     system("COLOR F0");
     clrscr();
     line();
     center(2,SISTEMA);
     center(3,"Menu de Opcoes");
     gotoxy(26,9);printf("Cadastrar...............[1]");
     gotoxy(26,11);printf("Consultar/Editar........[2]");
     gotoxy(26,13);printf("Excluir.................[3]");
     gotoxy(26,15);printf("Finalizar e salvar......[4]");
     gotoxy(26,17);printf("Entre com a opcao:");
     scanf("%c",&OPCAO);fflush(stdin);
     switch(OPCAO){
        case '1':cadastra();break;
        case '2':ESCOLHA=0;consultar();break;
        case '3':ESCOLHA=1;consultar();break;
     }
  }while(OPCAO!='4');
  fclose(ARQCLI);
  gotoxy(1,23);
  return(0);
}
/******************************************************************************/
/*Troca uma linha*/
void line(void){
     int POSICAO;
     for(POSICAO=0;POSICAO<80;POSICAO++)
       printf("+");
     return;
}
/*Centraliza uma mensagem no video em uma determinada linha*/
void center(int LINHA, char *MENSAGEM){
     int COLUNA;
     COLUNA = ((80-strlen(MENSAGEM))/2);
     gotoxy(COLUNA,LINHA);
     printf(MENSAGEM);
     return;
}
/*Apresenta a tela de cadastro e consulta*/
/******************************************************************************/
void tela(void){
     gotoxy(18,10);clearline();
     gotoxy(18,11);clearline();
     gotoxy(18,12);clearline();
     gotoxy(18,13);clearline();
     gotoxy(18,14);clearline();
     gotoxy(18,15);clearline();
     gotoxy(1,10);printf("Codigo......:");
     gotoxy(1,11);printf("Nome........:");
     gotoxy(1,12);printf("Endereco....:");
     gotoxy(1,13);printf("CEP.........:");
     gotoxy(1,14);printf("Telefone....:");
     gotoxy(1,15);printf("E-Mail......:");
     return;
}
/*Mostra os dados quando da consulta ou tentativa de cadastro*/
/******************************************************************************/
void mostradados(void){
     gotoxy(18,10);printf("%d",NR_CLI);
     gotoxy(18,11);printf("%s",CLIENTE.NOME);
     gotoxy(18,12);printf("%s",CLIENTE.ENDERECO);
     gotoxy(18,13);printf("%d",CLIENTE.CEP);
     gotoxy(18,14);printf("%d",CLIENTE.TELEFONE);
     gotoxy(18,15);printf("%s",CLIENTE.EMAIL);
     return;
}
/******************************************************************************/
int pesquisa(int NUMERO){
    int ACHOU = 0;
    rewind(ARQCLI);
    while(!feof(ARQCLI)&&ACHOU!=1){
       fread(&CLIENTE,sizeof(struct REG_CLI),1,ARQCLI);
       if(NUMERO==CLIENTE.CODIGO)
          ACHOU = 1;
    }
    return(ACHOU);
}
/******************************************************************************/
int exclusao(int NUMERO){
    /*Exclusão de clientes*/
    
    /*Nota para o professor: Achei dois modos de excluir um registro do arquivo,
    o primeiro foi substituir a struct dos elementos por uma struct vazia e a
    segunda foi o que está abaixo, que é recopiar o banco. Desse jeito eu pode
    ser que venha a travar pois o numero de instruções executadas é muito maior
    do que do outro modo, mas dessa maneira eu não comprometo a integridade do
    arquivo salvando arquivos com muito lixo dentro.*/
    /*
    FILE *AUX;
    fclose(ARQCLI);
    system("copy CADCLI.DAT DADOS.DAT");
    gotoxy(1,23);clearline();gotoxy(1,23);
    system("del CADCLI.DAT");    
    ARQCLI=fopen("CADCLI.DAT","wb+");
    AUX=fopen("DADOS.DAT","rb+");
    rewind(AUX);  
    while(!feof(AUX)){
       fread(&CLIENTE,sizeof(struct REG_CLI),1,AUX);
       if(NUMERO!=CLIENTE.CODIGO)
          fwrite(&CLIENTE,sizeof(struct REG_CLI),1,ARQCLI);
    }  
    fclose(AUX);
    system("del DADOS.DAT");
    gotoxy(1,23);    
    printf("Registro excluido! Pressione <Enter> para prosseguir   ");
    fflush(stdin);
    while((TECLA = getchar())!='\n')
       gotoxy(33,23);    
    return(0);*/
    
    /*segunda maneira*/
    CLIENTE.EXCLUIDO=1;
    fseek(ARQCLI , -(long)sizeof(struct REG_CLI), 1);
    fwrite(&CLIENTE,sizeof(struct REG_CLI),1,ARQCLI);
    printf("Registro excluido! Pressione <Enter> para prosseguir                       ");
    
    /*Eu poderia setar um flag apontando se ele estivesse sendo excluido ou não
    com a data e hora da exclusão mas eu procurei fazer de um modo simples*/
}
/******************************************************************************/
/*Cadastramento de dados*/
int cadastra(void){
    clrscr();
    line();
    center(2,SISTEMA);
    center(3,"Modulo de Cadastramento\n");
    line();
    gotoxy(28,1);printf("Digite os dados abaixo");
    do{
       gotoxy(1,22);//clearline()
       gotoxy(1,23);//clearline()
       printf("Digite[0] para voltar ao menu                     ");
       tela();
       gotoxy(18,10);fflush(stdin);
       scanf("%d",&NR_CLI);
       gotoxy(1,23);//clearline();
       if(NR_CLI!=0){
          if(pesquisa(NR_CLI)==1)
          {
             /*Apresenta os dados caso exista no arquivo*/
             mostradados();
             gotoxy(1,22);
             if(CLIENTE.EXCLUIDO!=1)printf("Este registro já existe    ");
             else printf("Este registro foi excluido    ");
             gotoxy(1,23);
             printf("Tecle <Enter> para nova tentativa   ");
             fflush(stdin);
             while((TECLA=getchar())!='\n')
             gotoxy(33,23);
             gotoxy(1,22);clearline();
          }
          else{
             /*Localiza posicao para gravar registro*/
             fseek(ARQCLI,(long)sizeof(struct REG_CLI),2);
             /*Grava registro*/
             gotoxy(18,11);
             fflush(stdin);fgets(CLIENTE.NOME,31,stdin);
             gotoxy(18,12);
             fflush(stdin);fgets(CLIENTE.ENDERECO,100,stdin);
             gotoxy(18,13);
             fflush(stdin);scanf("%d",&CLIENTE.CEP);
             gotoxy(18,14);
             fflush(stdin);scanf("%d",&CLIENTE.TELEFONE);
             gotoxy(18,15);
             fflush(stdin);fgets(CLIENTE.EMAIL,60,stdin);
             CLIENTE.CODIGO=NR_CLI;
             CLIENTE.EXCLUIDO = 0;
             fwrite(&CLIENTE,sizeof(struct REG_CLI),1,ARQCLI);
             gotoxy(1,23);
             printf("Tecle <Enter> para nova tentativa   ");
             fflush(stdin);
             while((TECLA = getchar())!='\n')
                gotoxy(33,23);
          }
       }
    }
    while(NR_CLI != 0);
    return(0);
}
/******************************************************************************/
/*Consulta dos dados*/
int consultar(void){
    clrscr();
    line();
    center(2,SISTEMA);
    center(3,"Modulo de consulta\n");
    line();
    gotoxy(28,6);printf("Digite o numero do codigo:");
    do{
       gotoxy(1,22);//clearline();
       gotoxy(1,23);//clearline();
       printf("Digite [0] para voltar ao menu                                   ");
       tela();
       gotoxy(18,10);fflush(stdin);scanf("%d",&NR_CLI);
       gotoxy(1,23);//clearline();
       if(NR_CLI != 0){
          I=pesquisa(NR_CLI);
          if(I==1&&CLIENTE.EXCLUIDO==0){
             /*Apresenta os dados caso exista no arquivo*/
             mostradados();
             alterar:
             gotoxy(1,23);clearline();gotoxy(1,23);
             if(ESCOLHA==0)
             {
              printf("Deseja editar esse registro(S/N)?");fflush(stdin);fgets(OPT,2,stdin);
              if(strcmp(OPT,"n")==0||strcmp(OPT,"N")==0){}
              else if(strcmp(OPT,"s")==0||strcmp(OPT,"S")==0){
                editar();
              }
              else{
                gotoxy(1,23);clearline();gotoxy(1,23);
                printf("Digite S ou N! Pressione <Enter> para continuar...   ");
                while((TECLA=getchar())!='\n')
                  gotoxy(33,23);
                goto alterar;
              }
             }
             else
             {
              printf("Deseja excluir esse registro(S/N)?");fflush(stdin);fgets(OPT,2,stdin);
              if(strcmp(OPT,"n")==0||strcmp(OPT,"N")==0){}
              else if(strcmp(OPT,"s")==0||strcmp(OPT,"S")==0)
              {
                gotoxy(1,23);clearline();gotoxy(1,23);
                exclusao(NR_CLI);
              }
              else{
                gotoxy(1,23);clearline();gotoxy(1,23);
                printf("Digite S ou N! Pressione <Enter> para continuar...   ");
                while((TECLA=getchar())!='\n')
                  gotoxy(33,23);
                goto alterar;
              }
             }            
             gotoxy(1,23);
             printf("Tecle <Enter> para nova tentativa                    ");
             fflush(stdin);
             while((TECLA=getchar())!='\n')
                gotoxy(33,23);
          }
          else{
             gotoxy(1,22);
             if(CLIENTE.EXCLUIDO!=1)
                printf("Este registro não esta cadastrado                   ");
             else{
                printf("Este registro esta excluido                         ");
                mostradados();
             }
             gotoxy(1,23);
             printf("Tecle <Enter> para nova tentativa                   ");
             fflush(stdin);
             while((TECLA=getchar())!='\n')
                gotoxy(33,23);
             gotoxy(1,22);
             printf("                                    ");
          }
       }
    }while(NR_CLI!=0);
    return(0);
}
/*****************************************************************************/
/*Edição de dados*/
int editar(void){
   /*Alterações e miscelenia*/
   char OPCAO;
   int achou=2;
   do{
      gotoxy(1,23);printf("[1]Nome|[2]Endereco|[3]CEP|[4]Telefone|[5]Email|[6]Confirma|[7]Abandona:");
      fflush(stdin);OPCAO=getchar();
      switch(OPCAO){
         case '1':
              gotoxy(18,11);printf("                                           ");gotoxy(18,11);
              fflush(stdin);fgets(CLIENTE.NOME,31,stdin);
              break;
         case '2':
              gotoxy(18,12);printf("                                                     ");gotoxy(18,12);
              fflush(stdin);fgets(CLIENTE.ENDERECO,100,stdin);
              break;
         case '3':
              gotoxy(18,13);printf("                                           ");gotoxy(18,13);
              fflush(stdin);scanf("%d",&CLIENTE.CEP);
              break;
         case '4':
              gotoxy(18,14);printf("                                           ");gotoxy(18,14);
              fflush(stdin);scanf("%d",&CLIENTE.TELEFONE);
              break;
         case '5':
              gotoxy(18,15);printf("                                           ");gotoxy(18,15);
              fflush(stdin);fgets(CLIENTE.EMAIL,60,stdin);
              break;
         case '6':
              Confirma:
              gotoxy(1,23);clearline();gotoxy(1,23);
              printf("Confirma a edicao desse registro(S/N)?");fflush(stdin);fgets(OPT,2,stdin);
              if(strcmp(OPT,"n")==0||strcmp(OPT,"N")==0){}
              else if(strcmp(OPT,"s")==0||strcmp(OPT,"S")==0){
                 achou=0;
              }
              else{
                 gotoxy(1,23);
                 printf("Digite S ou N! Pressione <Enter> para continuar...       ");
                 while((TECLA=getchar())!='\n')
                   gotoxy(33,23);
                 goto Confirma;
              }
              break;
         case '7':
              Cancela:
              gotoxy(1,23);clearline();gotoxy(1,23);
              printf("Abandona a edicao desse registro(S/N)?");fflush(stdin);fgets(OPT,2,stdin);
              if(strcmp(OPT,"n")==0||strcmp(OPT,"N")==0){}
              else if(strcmp(OPT,"s")==0||strcmp(OPT,"S")==0){
                 achou=1;
              }
              else{
                 gotoxy(1,23);clearline();gotoxy(1,23);
                 printf("Digite S ou N! Pressione <Enter> para continuar...      ");
                 while((TECLA=getchar())!='\n')
                   gotoxy(33,23);
                 goto Cancela;
              }
              break;
      }
      gotoxy(71,23);printf("         ");
   }while(achou!=0&&achou!=1);
   gotoxy(1,23);
   if(achou==0){
      fseek(ARQCLI , -(long)sizeof(struct REG_CLI), 1);
      fwrite(&CLIENTE,sizeof(struct REG_CLI),1,ARQCLI);
      printf("Sucesso na alteracao do registro! Pressione <Enter> para prosseguir   ");
   }
   else
   {
      printf("Registro alterado! Pressione <Enter> para prosseguir   ");
   }
   fflush(stdin);
   while((TECLA = getchar())!='\n')
      gotoxy(33,23);
   gotoxy(1,23);clearline();
   return(0);
}

Alguém pode consertar esses erros no Dev-C++?

Link para o comentário
Compartilhar em outros sites

6 respostass a esta questão

Posts Recomendados

  • 0
Utiliza o Dev-C++ para achar os erros.

Oi, eu achei erro e agora tah funcionando certinho seu programa ficou muito legal, parabens era um erro super simples.

O protótipo da sua função consultar estava faltando, faltou você anexar um prototipo, por terem nomes muito parecidos, provavelmente você não percebeu.. vou passar o codigo certinho.

#include <stdio.h>
#include <stdlib.h>
#include <windows.h>
#define clrscr() (system("CLS"))

void gotoxy(int x, int y){
     COORD coord;
     coord.X=(short)x;
     coord.Y=(short)y;
     SetConsoleCursorPosition(GetStdHandle(STD_OUTPUT_HANDLE),coord);
}

/******************************************************************************/
struct REG_CLI{
   int CODIGO;
   char NOME[31];
   char ENDERECO[100];
   int CEP;
   int TELEFONE;
   char EMAIL[60];
   int EXCLUIDO;
};
struct REG_CLI CLIENTE;
FILE *ARQCLI;
int I,NR_CLI,ESCOLHA;
char OPT[2];
char RESP,TECLA;
char SISTEMA[33]="PROGRAMA DE CADASTRO DE CLIENTES";
/******************************************************************************/
void line(void);
void center(int LINHA, char *MENSAGEM);
void tela(void);
void mostradados(void);
int PESQUISA(int NUMERO);
int cadastra(void);
//prototipo "consultar" não estav xexado no seu prototipo
/*Uma dica para você é a seguinte efite de por nomes parecidos, pois na hora de declarar
você acaba se confundindo, isso eu prendi co meu professor, eu tinha muitos erros nos meus programas por causa disso se precisar
é só falar ok!cadastrar e cadastrar sã coisas diferentes e com nomes muito parecidos só muda uma letra no final da palavra e as vezs
a gente não entende isso.*/
int consultar(void);
int editar(void);
int cor(void);
int exclusao(int NUMERO);
/******************************************************************************/
void clearline(void){
     printf("                                                                                 ");
     return;
}
/******************************************************************************/
int main(void)
{
  /*Verifica existencia do arquivo, se não existe, cria*/
  char OPCAO;
  if((ARQCLI=fopen("CADCLI.DAT","rb+"))==NULL){
     ARQCLI=fopen("CADCLI.DAT","wb+");
     fwrite(&CLIENTE,sizeof(struct REG_CLI),1,ARQCLI);
  }
  do{
     system("COLOR F0");
     clrscr();
     line();
     center(2,SISTEMA);
     center(3,"Menu de Opcoes");
     gotoxy(26,9);printf("Cadastrar...............[1]");
     gotoxy(26,11);printf("Consultar/Editar........[2]");
     gotoxy(26,13);printf("Excluir.................[3]");
     gotoxy(26,15);printf("Finalizar e salvar......[4]");
     gotoxy(26,17);printf("Entre com a opcao:");
     scanf("%c",&OPCAO);fflush(stdin);
     switch(OPCAO){
        case '1':cadastra();break;
        case '2':ESCOLHA=0;consultar();break;
        case '3':ESCOLHA=1;consultar();break;
     }
  }while(OPCAO!='4');
  fclose(ARQCLI);
  gotoxy(1,23);
  return(0);
}
/******************************************************************************/
/*Troca uma linha*/
void line(void){
     int POSICAO;
     for(POSICAO=0;POSICAO<80;POSICAO++)
       printf("+");
     return;
}
/*Centraliza uma mensagem no video em uma determinada linha*/
void center(int LINHA, char *MENSAGEM){
     int COLUNA;
     COLUNA = ((80-strlen(MENSAGEM))/2);
     gotoxy(COLUNA,LINHA);
     printf(MENSAGEM);
     return;
}
/*Apresenta a tela de cadastro e consulta*/
/******************************************************************************/
void tela(void){
     gotoxy(18,10);clearline();
     gotoxy(18,11);clearline();
     gotoxy(18,12);clearline();
     gotoxy(18,13);clearline();
     gotoxy(18,14);clearline();
     gotoxy(18,15);clearline();
     gotoxy(1,10);printf("Codigo......:");
     gotoxy(1,11);printf("Nome........:");
     gotoxy(1,12);printf("Endereco....:");
     gotoxy(1,13);printf("CEP.........:");
     gotoxy(1,14);printf("Telefone....:");
     gotoxy(1,15);printf("E-Mail......:");
     return;
}
/*Mostra os dados quando da consulta ou tentativa de cadastro*/
/******************************************************************************/
void mostradados(void){
     gotoxy(18,10);printf("%d",NR_CLI);
     gotoxy(18,11);printf("%s",CLIENTE.NOME);
     gotoxy(18,12);printf("%s",CLIENTE.ENDERECO);
     gotoxy(18,13);printf("%d",CLIENTE.CEP);
     gotoxy(18,14);printf("%d",CLIENTE.TELEFONE);
     gotoxy(18,15);printf("%s",CLIENTE.EMAIL);
     return;
}
/******************************************************************************/
int pesquisa(int NUMERO){
    int ACHOU = 0;
    rewind(ARQCLI);
    while(!feof(ARQCLI)&&ACHOU!=1){
       fread(&CLIENTE,sizeof(struct REG_CLI),1,ARQCLI);
       if(NUMERO==CLIENTE.CODIGO)
          ACHOU = 1;
    }
    return(ACHOU);
}
/******************************************************************************/
int exclusao(int NUMERO){
    /*Exclusão de clientes*/
    
    /*Nota para o professor: Achei dois modos de excluir um registro do arquivo,
    o primeiro foi substituir a struct dos elementos por uma struct vazia e a
    segunda foi o que está abaixo, que é recopiar o banco. Desse jeito eu pode
    ser que venha a travar pois o numero de instruções executadas é muito maior
    do que do outro modo, mas dessa maneira eu não comprometo a integridade do
    arquivo salvando arquivos com muito lixo dentro.*/
    /*
    FILE *AUX;
    fclose(ARQCLI);
    system("copy CADCLI.DAT DADOS.DAT");
    gotoxy(1,23);clearline();gotoxy(1,23);
    system("del CADCLI.DAT");    
    ARQCLI=fopen("CADCLI.DAT","wb+");
    AUX=fopen("DADOS.DAT","rb+");
    rewind(AUX);  
    while(!feof(AUX)){
       fread(&CLIENTE,sizeof(struct REG_CLI),1,AUX);
       if(NUMERO!=CLIENTE.CODIGO)
          fwrite(&CLIENTE,sizeof(struct REG_CLI),1,ARQCLI);
    }  
    fclose(AUX);
    system("del DADOS.DAT");
    gotoxy(1,23);    
    printf("Registro excluido! Pressione <Enter> para prosseguir   ");
    fflush(stdin);
    while((TECLA = getchar())!='\n')
       gotoxy(33,23);    
    return(0);*/
    
    /*segunda maneira*/
    CLIENTE.EXCLUIDO=1;
    fseek(ARQCLI , -(long)sizeof(struct REG_CLI), 1);
    fwrite(&CLIENTE,sizeof(struct REG_CLI),1,ARQCLI);
    printf("Registro excluido! Pressione <Enter> para prosseguir                       ");
    
    /*Eu poderia setar um flag apontando se ele estivesse sendo excluido ou não
    com a data e hora da exclusão mas eu procurei fazer de um modo simples*/
}
/******************************************************************************/
/*Cadastramento de dados*/
int cadastra(void){
    clrscr();
    line();
    center(2,SISTEMA);
    center(3,"Modulo de Cadastramento\n");
    line();
    gotoxy(28,1);printf("Digite os dados abaixo");
    do{
       gotoxy(1,22);//clearline()
       gotoxy(1,23);//clearline()
       printf("Digite[0] para voltar ao menu                     ");
       tela();
       gotoxy(18,10);fflush(stdin);
       scanf("%d",&NR_CLI);
       gotoxy(1,23);//clearline();
       if(NR_CLI!=0){
          if(pesquisa(NR_CLI)==1)
          {
             /*Apresenta os dados caso exista no arquivo*/
             mostradados();
             gotoxy(1,22);
             if(CLIENTE.EXCLUIDO!=1)printf("Este registro já existe    ");
             else printf("Este registro foi excluido    ");
             gotoxy(1,23);
             printf("Tecle <Enter> para nova tentativa   ");
             fflush(stdin);
             while((TECLA=getchar())!='\n')
             gotoxy(33,23);
             gotoxy(1,22);clearline();
          }
          else{
             /*Localiza posicao para gravar registro*/
             fseek(ARQCLI,(long)sizeof(struct REG_CLI),2);
             /*Grava registro*/
             gotoxy(18,11);
             fflush(stdin);fgets(CLIENTE.NOME,31,stdin);
             gotoxy(18,12);
             fflush(stdin);fgets(CLIENTE.ENDERECO,100,stdin);
             gotoxy(18,13);
             fflush(stdin);scanf("%d",&CLIENTE.CEP);
             gotoxy(18,14);
             fflush(stdin);scanf("%d",&CLIENTE.TELEFONE);
             gotoxy(18,15);
             fflush(stdin);fgets(CLIENTE.EMAIL,60,stdin);
             CLIENTE.CODIGO=NR_CLI;
             CLIENTE.EXCLUIDO = 0;
             fwrite(&CLIENTE,sizeof(struct REG_CLI),1,ARQCLI);
             gotoxy(1,23);
             printf("Tecle <Enter> para nova tentativa   ");
             fflush(stdin);
             while((TECLA = getchar())!='\n')
                gotoxy(33,23);
          }
       }
    }
    while(NR_CLI != 0);
    return(0);
}
/******************************************************************************/
/*Consulta dos dados*/
int consultar(void){
    clrscr();
    line();
    center(2,SISTEMA);
    center(3,"Modulo de consulta\n");
    line();
    gotoxy(28,6);printf("Digite o numero do codigo:");
    do{
       gotoxy(1,22);//clearline();
       gotoxy(1,23);//clearline();
       printf("Digite [0] para voltar ao menu                                   ");
       tela();
       gotoxy(18,10);fflush(stdin);scanf("%d",&NR_CLI);
       gotoxy(1,23);//clearline();
       if(NR_CLI != 0){
          I=pesquisa(NR_CLI);
          if(I==1&&CLIENTE.EXCLUIDO==0){
             /*Apresenta os dados caso exista no arquivo*/
             mostradados();
             alterar:
             gotoxy(1,23);clearline();gotoxy(1,23);
             if(ESCOLHA==0)
             {
              printf("Deseja editar esse registro(S/N)?");fflush(stdin);fgets(OPT,2,stdin);
              if(strcmp(OPT,"n")==0||strcmp(OPT,"N")==0){}
              else if(strcmp(OPT,"s")==0||strcmp(OPT,"S")==0){
                editar();
              }
              else{
                gotoxy(1,23);clearline();gotoxy(1,23);
                printf("Digite S ou N! Pressione <Enter> para continuar...   ");
                while((TECLA=getchar())!='\n')
                  gotoxy(33,23);
                goto alterar;
              }
             }
             else
             {
              printf("Deseja excluir esse registro(S/N)?");fflush(stdin);fgets(OPT,2,stdin);
              if(strcmp(OPT,"n")==0||strcmp(OPT,"N")==0){}
              else if(strcmp(OPT,"s")==0||strcmp(OPT,"S")==0)
              {
                gotoxy(1,23);clearline();gotoxy(1,23);
                exclusao(NR_CLI);
              }
              else{
                gotoxy(1,23);clearline();gotoxy(1,23);
                printf("Digite S ou N! Pressione <Enter> para continuar...   ");
                while((TECLA=getchar())!='\n')
                  gotoxy(33,23);
                goto alterar;
              }
             }            
             gotoxy(1,23);
             printf("Tecle <Enter> para nova tentativa                    ");
             fflush(stdin);
             while((TECLA=getchar())!='\n')
                gotoxy(33,23);
          }
          else{
             gotoxy(1,22);
             if(CLIENTE.EXCLUIDO!=1)
                printf("Este registro não esta cadastrado                   ");
             else{
                printf("Este registro esta excluido                         ");
                mostradados();
             }
             gotoxy(1,23);
             printf("Tecle <Enter> para nova tentativa                   ");
             fflush(stdin);
             while((TECLA=getchar())!='\n')
                gotoxy(33,23);
             gotoxy(1,22);
             printf("                                    ");
          }
       }
    }while(NR_CLI!=0);
    return(0);
}
/*****************************************************************************/
/*Edição de dados*/
int editar(void){
   /*Alterações e miscelenia*/
   char OPCAO;
   int achou=2;
   do{
      gotoxy(1,23);printf("[1]Nome|[2]Endereco|[3]CEP|[4]Telefone|[5]Email|[6]Confirma|[7]Abandona:");
      fflush(stdin);OPCAO=getchar();
      switch(OPCAO){
         case '1':
              gotoxy(18,11);printf("                                           ");gotoxy(18,11);
              fflush(stdin);fgets(CLIENTE.NOME,31,stdin);
              break;
         case '2':
              gotoxy(18,12);printf("                                                     ");gotoxy(18,12);
              fflush(stdin);fgets(CLIENTE.ENDERECO,100,stdin);
              break;
         case '3':
              gotoxy(18,13);printf("                                           ");gotoxy(18,13);
              fflush(stdin);scanf("%d",&CLIENTE.CEP);
              break;
         case '4':
              gotoxy(18,14);printf("                                           ");gotoxy(18,14);
              fflush(stdin);scanf("%d",&CLIENTE.TELEFONE);
              break;
         case '5':
              gotoxy(18,15);printf("                                           ");gotoxy(18,15);
              fflush(stdin);fgets(CLIENTE.EMAIL,60,stdin);
              break;
         case '6':
              Confirma:
              gotoxy(1,23);clearline();gotoxy(1,23);
              printf("Confirma a edicao desse registro(S/N)?");fflush(stdin);fgets(OPT,2,stdin);
              if(strcmp(OPT,"n")==0||strcmp(OPT,"N")==0){}
              else if(strcmp(OPT,"s")==0||strcmp(OPT,"S")==0){
                 achou=0;
              }
              else{
                 gotoxy(1,23);
                 printf("Digite S ou N! Pressione <Enter> para continuar...       ");
                 while((TECLA=getchar())!='\n')
                   gotoxy(33,23);
                 goto Confirma;
              }
              break;
         case '7':
              Cancela:
              gotoxy(1,23);clearline();gotoxy(1,23);
              printf("Abandona a edicao desse registro(S/N)?");fflush(stdin);fgets(OPT,2,stdin);
              if(strcmp(OPT,"n")==0||strcmp(OPT,"N")==0){}
              else if(strcmp(OPT,"s")==0||strcmp(OPT,"S")==0){
                 achou=1;
              }
              else{
                 gotoxy(1,23);clearline();gotoxy(1,23);
                 printf("Digite S ou N! Pressione <Enter> para continuar...      ");
                 while((TECLA=getchar())!='\n')
                   gotoxy(33,23);
                 goto Cancela;
              }
              break;
      }
      gotoxy(71,23);printf("         ");
   }while(achou!=0&&achou!=1);
   gotoxy(1,23);
   if(achou==0){
      fseek(ARQCLI , -(long)sizeof(struct REG_CLI), 1);
      fwrite(&CLIENTE,sizeof(struct REG_CLI),1,ARQCLI);
      printf("Sucesso na alteracao do registro! Pressione <Enter> para prosseguir   ");
   }
   else
   {
      printf("Registro alterado! Pressione <Enter> para prosseguir   ");
   }
   fflush(stdin);
   while((TECLA = getchar())!='\n')
      gotoxy(33,23);
   gotoxy(1,23);clearline();
   return(0);
}

Link para o comentário
Compartilhar em outros sites

  • 0

Bom dia, fiz um cadastro de alunos de uma academia como trabalho da facul. Também fiz no DevC++. Estou com problemas com a minha função cadastrar. Ela funcionava normalmente mas fiz algumas alterações ai ela parou de funcionar e depois mesmo restaurando ela não voltou.

Posso estar deixando passar alguma coisa muito óbvia. deem uma olhada na função.

Cadastrar.h

#include <cstdlib>

#include <iostream>

#include <conio.h>

#include <stdlib.h>

#include <stdio.h>

#include <cstring>

#include <string>

struct Cadastrar1 {

//Cadastro

int x;

char nome[1000];

char cpf[1000];

char endereco[1000];

char email[1000];

char telefone[1000];

int dia;

int mes;

int ano;

//Cadastro

};

FILE * fp;

struct Cadastrar1 C;

int cadastrar(){

int confirmaCadastro;

COMECACADASTRO: system("CLS");

int escolha;

fp = fopen("banco.txt", "w");

if(fp == NULL){

printf("\nErro com conexão com o banco\n");

printf("Informe o administrador do sistema\n");

system("PAUSE");

return EXIT_SUCCESS;

}

C.x++;

printf("\nInsira o nome\n");

fflush(stdin);

gets(C.nome);

printf("\nInsira o CPF\n");

fflush(stdin);

gets(C.cpf);

printf("\nInsira o e-mail\n");

fflush(stdin);

gets(C.email);

printf("\nInsira o endereco\n");

fflush(stdin);

gets(C.endereco);

printf("\nInsira o telefone\n");

fflush(stdin);

gets(C.telefone);

REFAZDIA: printf("\nInsira o dia da data de nascimento\n");

fflush(stdin);

scanf("%d", &C.dia);

if(C.dia < 1 || C.dia > 31){

printf("\nOpcao de dia invalida\n");

goto REFAZDIA;

}

else{

REFAZMES: printf("\nInsira o mes da data de nascimento\n");

fflush(stdin);

scanf("%d", &C.mes);

if(C.mes < 1 || C.mes > 12){

printf("\nOpcao de mes invalida\n");

goto REFAZMES;

}

else{

if(C.dia == 31 && C.dia != 1){

if(C.dia == 31 && C.dia != 3){

if(C.dia == 31 && C.dia != 5){

if(C.dia == 31 && C.dia != 7){

if(C.dia == 31 && C.dia != 8){

if(C.dia == 31 && C.dia != 10){

if(C.dia == 31 != C.dia != 12){

printf("\nData invalida, este mes não contem 31 dias\n");

goto REFAZDIA;

}

}

}

}

}

}

}

if(C.mes == 2 && C.dia > 28){

printf("\nO mes de fevereiro não contem dias acima de 28\n");

goto REFAZDIA;

}

}

REFAZANO: printf("\nInsira o ano da data de nascimento\n");

fflush(stdin);

scanf("%d", C.ano);

if(C.ano < 1900 || C.ano > 2010){

printf("\nAno invalido\n");

goto REFAZANO;

}

}

fwrite(&C, sizeof©, 1, fp);

system("CLS");

printf("\nConfirmacao de dados\n");

VOLTACONFIRMA:

printf("Nome ............ : %s\n", C.nome);

printf("CPF ............. : %s\n", C.cpf);

printf("E-mail .......... : %s\n", C.email);

printf("Endereco ........ : %s\n", C.endereco);

printf("Telefone ........ : %s\n", C.telefone);

printf("Data de nascimento: %d/%d/%d\n\n\n", C.dia, C.mes, C.ano);

printf("\nConfimacao de cadastro\n");

printf("\n1 - Confirmar cadastro \n2 - Ajustar Nome \n3 - Ajustar CPF \n4 - Ajustar E-mail \n5 - Ajustar Endereco \n6 - Ajustar Telefone \n7 - Ajutar Data de nascimento \n8 - Refazer cadastro\n\n");

scanf("%i", &confirmaCadastro);

switch(confirmaCadastro){

case 1: system("CLS");

printf("\nCadastro confirmado com Sucesso\n");

break;

case 2: system("CLS");

printf("\nInsira o nome novamente\n");

gets(C.nome);

goto VOLTACONFIRMA;

break;

case 3: system("CLS");

printf("\nInsira o CPF novamente\n");

gets(C.cpf);

goto VOLTACONFIRMA;

break;

case 4: system("CLS");

printf("\nInsira o E-mail novamente\n");

gets(C.email);

goto VOLTACONFIRMA;

break;

case 5: system("CLS");

printf("\nInsira o endereco novamente\n");

gets(C.endereco);

goto VOLTACONFIRMA;

break;

case 6: system("CLS");

printf("\nInsira o telefone novamente\n");

gets(C.telefone);

goto VOLTACONFIRMA;

break;

case 7: system("CLS");

REFAZREFAZDIA: printf("\nInsira o dia da data de nascimento\n");

fflush(stdin);

scanf("%d", &C.dia);

if(C.dia < 1 || C.dia > 31){

printf("\nOpcao de dia invalida\n");

goto REFAZREFAZDIA;

}

else{

REFAZREFAZMES: printf("\nInsira o mes da data de nascimento\n");

fflush(stdin);

scanf("%d", &C.mes);

if(C.mes < 1 || C.mes > 12){

printf("\nOpcao de mes invalida\n");

goto REFAZREFAZMES;

}

else{

if(C.dia == 31 && C.dia != 1){

if(C.dia == 31 && C.dia != 3){

if(C.dia == 31 && C.dia != 5){

if(C.dia == 31 && C.dia != 7){

if(C.dia == 31 && C.dia != 8){

if(C.dia == 31 && C.dia != 10){

if(C.dia == 31 != C.dia != 12){

printf("\nData invalida, este mes não contem 31 dias\n");

goto REFAZREFAZDIA;

}

}

}

}

}

}

}

if(C.mes == 2 && C.dia > 28){

printf("\nO mes de fevereiro não contem dias acima de 28\n");

goto REFAZREFAZDIA;

}

}

REFAZREFAZANO: printf("\nInsira o ano da data de nascimento\n");

fflush(stdin);

scanf("%d", C.ano);

if(C.ano < 1900 || C.ano > 2010){

printf("\nAno invalido\n");

goto REFAZREFAZANO;

}

break;

case 8: system("CLS");

goto COMECACADASTRO;

break;

}

}

fwrite(&C, sizeof©, 1, fp);

}

P.S. Peço desculpas antecipadas porque tentei incluir um CODEBOX várias vezes e não consegui. Espero que não fique muito ruim a visualização!

Editado por darkripper
Link para o comentário
Compartilhar em outros sites

Participe da discussão

Você pode postar agora e se registrar depois. Se você já tem uma conta, acesse agora para postar com sua conta.

Visitante
Responder esta pergunta...

×   Você colou conteúdo com formatação.   Remover formatação

  Apenas 75 emoticons são permitidos.

×   Seu link foi incorporado automaticamente.   Exibir como um link em vez disso

×   Seu conteúdo anterior foi restaurado.   Limpar Editor

×   Você não pode colar imagens diretamente. Carregar ou inserir imagens do URL.



  • Estatísticas dos Fóruns

    • Tópicos
      152k
    • Posts
      651,8k
×
×
  • Criar Novo...