Ir ao conteúdo

Posts recomendados

Postado

Olá, estou com um problema nessa parte do meu código, após apertar 0 para voltar ao menu, o sistema não volta e fica travado nessa tela de cadastro, alguém me ajuda? 

 

Estou começando a programar e sou novo no fórum...

 

 

//CadastroMED***********************************************
int cadastramed(void){
    clrscr();


line();
      center(2,SISTEMA2 );
    center(1,"MÓDULO DE CADASTRAMENTO\n");
    center(3,"Digite os dados abaixo\n");
  line();
    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 ja 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/

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

             gotoxy(1,23);
             printf("Tecle <Enter> para nova tentativa   ");
             fflush(stdin);
             while((TECLA = getchar())!='\n')
                gotoxy(33,23);
          }
       }
    }while(NR_CLI != 0);

    return(0);
}





o Codigo todo....
  
  #include <stdio.h>
#include <stdlib.h>
#include <windows.h>
#define clrscr() (system("CLS"))//
#include <conio.h>
#include <string.h>
#include <locale.h>
#define u GetStdHandle(STD_OUTPUT_HANDLE)
#define textcolor_2(l,f) SetConsoleTextAttribute(u,l+(f<<4));
#define gotoxy_2(x,y) {COORD c={x,y};SetConsoleCursorPosition(u,c);}


/* run this program using the console pauser or add your own getch, system("pause") or input loop */
int main() {
    setlocale(LC_ALL, "Portuguese");

cadastro();
}


     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;

int I,NR_CLI,ESCOLHA;
char OPT[2];
char RESP,TECLA;
char SISTEMA1[33]="PROGRAMA DE CADASTRO DE PACIENTES";
char SISTEMA2[33]="PROGRAMA DE CADASTRO DE MÉDICOS";
char SISTEMA4[38]="PROGRAMA DE CADASTRO DE FUNCIONÁRIOS";
/**********/
void line(void);
void center(int LINHA, char *MENSAGEM);
void tela(void);
void mostradados(void);
int PESQUISA(int NUMERO);
int cadastrapac(void);
int cadastramed(void);
int cadastrafun(void);
int cadastra1(void);
int consulta(void);
int info(void);
int agendar(void);
int editar(void);
int cor(void);
int exclusao(int NUMERO);
/**********/
void clearline(void){
     printf("                                                                                 ");
     return;
}
/**********/
  int cadastro()
{
  //Verifica existencia do arquivo, se não existe, cria/
  char OPCAO;
 {


  }
  do{
     system("COLOR 0F");
     clrscr();
     line();
printf("\n           MM    MM  EEEEEEE  DDDDD     CCCCC  LL       IIIII  NN   NN \n");
printf("           MMM  MMM  EE       DD  DD   CC      LL        III   NNN  NN \n");
printf("           MM MM MM  EEEEE    DD   DD  CC      LL        III   NN N NN \n");
printf("           MM    MM  EE       DD   DD  CC      LL        III   NN  NNN \n");
printf("           MM    MM  EEEEEEE  DDDDDD    CCCCC  LLLLLLL  IIIII  NN   NN \n");
line();
     gotoxy(26,9);printf("informações.............[1]");
     gotoxy(26,11);printf("Cadastrar...............[2]");
     gotoxy(26,13);printf("Agendamento.............[3]");
     gotoxy(26,15);printf("Consultar/Editar........[4]");
     gotoxy(26,17);printf("Excluir.................[5]");
     gotoxy(26,19);printf("Finalizar e salvar......[6]");
     gotoxy(26,21);printf("Entre com a opcao: ");

     scanf("%c",&OPCAO);fflush(stdin);
     switch(OPCAO){

        case '1':ESCOLHA=0;info();break;
        case '2':ESCOLHA=0;cadastra1();break;
        case '3':ESCOLHA=0;agendar();break;
        case '4':ESCOLHA=0;consultar();break;
        case '5':ESCOLHA=1;consultar();break;

     }
  }while(OPCAO!='6');

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

////////////////////////////////////////////// CADASTRAR//////////////////////////////////////////////
int cadastra1(){
    clrscr();
  line();
        center(1,"MÓDULO DE CADASTRAMENTO\n");
        center(3,"Digite os dados abaixo\n");
  line();
    char OPCAO;



     gotoxy(26,7);printf("Cadastrar Paciente____________[1]");
     gotoxy(26,9);printf("Cadastrar Médico______________[2]");
     gotoxy(26,11);printf("Cadastrar Funcionário_________[3]");
     gotoxy(26,13);printf("Voltar________________________[0]");
     gotoxy(26,15);printf("Entre com a opcao:");
     scanf("%c",&OPCAO);fflush(stdin);
     switch(OPCAO){
        case '1':ESCOLHA=0;cadastrapac();break;
        case '2':ESCOLHA=0;cadastramed();break;
        case '3':ESCOLHA=0;cadastrafun();break;
        case '0':ESCOLHA=0;cadastro();break;

 }
        while(OPCAO!='0');

        gotoxy(1,23);
    return(0);
}



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

   {

       if(NUMERO==CLIENTE.CODIGO)
          ACHOU = 1;
    }
    return(ACHOU);
}
/**********/
//Exclusão de clientes//***********************************
int exclusao(int NUMERO){


    CLIENTE.EXCLUIDO=1;

    printf("Registro excluido! Pressione <Enter> para prosseguir                       ");

}
/**********/
//Cadastramento de dados/**********************************
int cadastrapac(void){
    clrscr();
    line();
    center(2,SISTEMA1);
    center(1,"MÓDULO DE CADASTRAMENTO\n");
    center(3, "Digite os dados abaixo \n");
    line();

    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 ja 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/

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

             gotoxy(1,23);
             printf("Tecle <Enter> para nova tentativa   ");
             fflush(stdin);
             while((TECLA = getchar())!='\n')
                gotoxy(33,23);
          }
       }
    }
    while(NR_CLI != 0);

    return(0);
}
//CadastroMED***********************************************
int cadastramed(void){
    clrscr();


line();
      center(2,SISTEMA2 );
    center(1,"MÓDULO DE CADASTRAMENTO\n");
    center(3,"Digite os dados abaixo\n");
  line();
    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 ja 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/

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

             gotoxy(1,23);
             printf("Tecle <Enter> para nova tentativa   ");
             fflush(stdin);
             while((TECLA = getchar())!='\n')
                gotoxy(33,23);
          }
       }
    }while(NR_CLI != 0);

    return(0);
}

//CadastroFuncionario*******************************

int cadastrafun(void){
    clrscr();
    line();
    center(2,SISTEMA4);
    center(1,"MÓDULO DE CADASTRAMENTO \n");
    center(3,"Digite os dados abaixo \n");
    line();

    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 ja 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/

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

             gotoxy(1,23);
             printf("Tecle <Enter> para nova tentativa   ");
             fflush(stdin);
             while((TECLA = getchar())!='\n')
                gotoxy(33,23);
          }
       }
    }while(NR_CLI != 0);

    return(0);
}



//Agendar//
 int agendar(void) {
        clrscr();
        center(3,"AGENDAMENTO\n");

 getchar();


}
/**********/
//Informação//
int info (void) {
 clrscr();
    line();
    center(3,"INFORMAÇÕES DO SISTEMA\n");
textcolor_2(9,15);
    printf("SISTEMAS PARA CLINICAS \n\n\n");

getchar();



    return(0);

}
//Consulta dos dados/
int consultar(void){
    clrscr();
    line();

    center(1,"MÓDULO DE CONSULTA\n");
    center(3,"Digite o número do codigo:\n");

    line();
    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 nao 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){


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

 

  • Amei 1
Postado

Escreva seu programa aos poucos se está começando.

 

Está praticamente desenhando linha a linha o programa e assim vai ter um trabalho enorme para testar e manter isso.

Sugiro reordenar tudo isso. Não usar void e usar sim mais parâmetros. E não misturar lógica com detalhes da tela e muito menos de posicionamento do cursor.

 

main() deve ser a primeira função de todo programa. Se possível em um arquivo separado.

 

Tem muitos potenciais problemas em seu programa. 

Se tem tantas funções, porque não tem uma função para o menu que mostra o menu, le a opção e retorna?
 

    int menu();

 

  • LEIA o retorno de scanf().
  • scanf() retorna um int. Teste. 
  • Não tente nunca ler um único char com scanf(). Ainda mais para ler uma simples letra como opção de um menu.
    Leia algo como nessa função de 4 linhas:
     
    #include <stdio.h>
    
    char menu();
    
    int main(void)
    {
        printf("Use control-C para encerrar...\n\n\n");
        while(1)
        {
            char opcao = menu();
            printf("\n\tEm main(): opcao foi '%c', %d em decimal\n", opcao,opcao);
        };
        return 0;
    }
    
    char menu()
    {
        char linha[8];
        printf("Sua opcao: ");
        fgets(linha,8,stdin);
        return linha[0];
    };

     

Ela sempre retorna a letra, mesmo que o cara digite 500 letras.

 

 

 

  • Curtir 1
  • Amei 1
Postado

@L3ozao    notei que você gosta de escrever ,  para treinar a digitação ,  pois você escreve essa palavra " (void) " um montão de vezes no seu código todo , ou você acredita que ela tenha alguma utilidade nesse contexto ? , e outra é que você também gosta de colocar parênteses nos return's , e  isso não faz nenhuma diferença para o compilador ,  e também  seria bom fazer uma identação do código para ficar mais fácil de identificar algum erro de digitação , e creio que  hum erro , que esteja fazendo ficar em Loop , está na função cadastral , onde você colocou uma chamada para a própria função cadastro e assim ao digitar zero ele volta para a função cadastro e fica nesse Loop ethernamente , e seu código com algumas modificações poderia ser assim :

#include <stdio.h>
#include <stdlib.h>
#include <windows.h>
#define clrscr() (system("CLS"))//
#include <conio.h>
#include <string.h>
#include <locale.h>
#define u GetStdHandle(STD_OUTPUT_HANDLE)
#define textcolor_2(l,f) SetConsoleTextAttribute(u,l+(f<<4));
#define gotoxy_2(x,y) {COORD c={x,y};SetConsoleCursorPosition(u,c);}
/**********/
struct REG_CLI{
   int CODIGO;
   char NOME[31];
   char ENDERECO[100];
   int CEP;
   int TELEFONE;
   char EMAIL[60];
   int EXCLUIDO;
};
struct REG_CLI CLIENTE;

int I,NR_CLI,ESCOLHA;
char OPT[2];
char RESP,TECLA;
char SISTEMA1[35]="PROGRAMA DE CADASTRO DE PACIENTES";
char SISTEMA2[35]="PROGRAMA DE CADASTRO DE MÉDICOS";
char SISTEMA4[40]="PROGRAMA DE CADASTRO DE FUNCIONÁRIOS";
/**********/
int cadastro();
int consultar();
void line(void);
void center(int LINHA, char *MENSAGEM);
void tela(void);
void mostradados(void);
int PESQUISA(int NUMERO);
int cadastrapac(void);
int cadastramed(void);
int cadastrafun(void);
int cadastra1(void);
int consulta(void);
int info(void);
int agendar(void);
int editar(void);
int cor(void);
int exclusao(int NUMERO);
/**********/


/* run this program using the console pauser or add your own getch, system("pause") or input loop */
int main()
{
    setlocale(LC_ALL, "Portuguese");
    cadastro();
    return 4096;
}


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

void clearline(void){
     printf("                                                                                 ");
     return;
}
/**********/
int cadastro()
{
    //Verifica existencia do arquivo, se não existe, cria/
    char OPCAO;
    do{
        system("COLOR 0F");
        clrscr();
        line();
        printf("\n");
        printf("           MM    MM  EEEEEEE  DDDDD     CCCCC  LL       IIIII  NN   NN \n");
        printf("           MMM  MMM  EE       DD  DD   CC      LL        III   NNN  NN \n");
        printf("           MM MM MM  EEEEE    DD   DD  CC      LL        III   NN N NN \n");
        printf("           MM    MM  EE       DD   DD  CC      LL        III   NN  NNN \n");
        printf("           MM    MM  EEEEEEE  DDDDDD    CCCCC  LLLLLLL  IIIII  NN   NN \n");
        line();
        gotoxy(26, 9);printf("informações.............[1]");
        gotoxy(26,11);printf("Cadastrar...............[2]");
        gotoxy(26,13);printf("Agendamento.............[3]");
        gotoxy(26,15);printf("Consultar/Editar........[4]");
        gotoxy(26,17);printf("Excluir.................[5]");
        gotoxy(26,19);printf("Finalizar e salvar......[6]");
        gotoxy(26,21);printf("Entre com a opcao: ");
        fflush(stdin);      // limpar o BUFFER antes
        scanf("%c",&OPCAO); // senão pega as sijeiras q estão lá
        switch(OPCAO){
        case '1':
            ESCOLHA=0;
            info();
            break;
        case '2':
            ESCOLHA=0;
            cadastra1();
            break;
        case '3':
            ESCOLHA=0;
            agendar();
            break;
        case '4':
            ESCOLHA=0;
            consultar();
            break;
        case '5':
            ESCOLHA=1;
            consultar();
            break;
        case '6':
            printf("Saiundo . . . !\n\n\n");
        }
    }while(OPCAO!='6');
    //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;
}

////////////////////////////////////////////// CADASTRAR//////////////////////////////////////////////
int cadastra1()
{
    clrscr();
    line();
    center(1,"MÓDULO DE CADASTRAMENTO\n");
    center(3,"Digite os dados abaixo\n");
    line();
    char OPCAO;
    do
    {
        gotoxy(26, 7);printf("Cadastrar Paciente____________[1]");
        gotoxy(26, 9);printf("Cadastrar Médico______________[2]");
        gotoxy(26,11);printf("Cadastrar Funcionário_________[3]");
        gotoxy(26,13);printf("Voltar________________________[0]");
        gotoxy(26,15);printf("Entre com a opcao:");
        fflush(stdin);       // primeiro Limpar o BuFFer
        scanf("%c",&OPCAO);  //senão prga tudas as sujeiras q tem lá
        switch(OPCAO)
        {
        case '1':
            ESCOLHA=0;
            cadastrapac();
           break;
        case '2':
            ESCOLHA=0;
            cadastramed();
            break;
        case '3':
            ESCOLHA=0;
            cadastrafun();
            break;
        case '0':
            ESCOLHA=0;
            //cadastro();
            break;
        }
    }while( OPCAO != '0' );
    gotoxy(1,23);
    return 0;
}



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

   {

       if(NUMERO==CLIENTE.CODIGO)
          ACHOU = 1;
    }
    return(ACHOU);
}
/**********/
//Exclusão de clientes//***********************************
int exclusao(int NUMERO){


    CLIENTE.EXCLUIDO=1;

    printf("Registro excluido! Pressione <Enter> para prosseguir                       ");

}
/**********/
//Cadastramento de dados/**********************************
int cadastrapac(void){
    clrscr();
    line();
    center(2,SISTEMA1);
    center(1,"MÓDULO DE CADASTRAMENTO\n");
    center(3, "Digite os dados abaixo \n");
    line();

    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 ja 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/

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

             gotoxy(1,23);
             printf("Tecle <Enter> para nova tentativa   ");
             fflush(stdin);
             while((TECLA = getchar())!='\n')
                gotoxy(33,23);
          }
       }
    }
    while(NR_CLI != 0);

    return(0);
}
//CadastroMED***********************************************
int cadastramed()
{
    clrscr();
    line();
    center(2,SISTEMA2 );
    center(1,"MÓDULO DE CADASTRAMENTO\n");
    center(3,"Digite os dados abaixo\n");
    line();
    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 ja 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/
                //Grava registro/
                gotoxy(18,11);
                fgets(CLIENTE.NOME,31,stdin);  // não precisa do fflush pois o fgets tem esse comando incluido nele
                gotoxy(18,12);
                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;
                gotoxy(1,23);
                printf("Tecle <Enter> para nova tentativa   ");
                fflush(stdin);
                while((TECLA = getchar())!='\n')
                    gotoxy(33,23);
            }
        }
    }while( NR_CLI != 0 );
    return 0;
}

//CadastroFuncionario*******************************

int cadastrafun()
{
    clrscr();
    line();
    center(2,SISTEMA4);
    center(1,"MÓDULO DE CADASTRAMENTO \n");
    center(3,"Digite os dados abaixo \n");
    line();

    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 ja 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/

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

             gotoxy(1,23);
             printf("Tecle <Enter> para nova tentativa   ");
             fflush(stdin);
             while((TECLA = getchar())!='\n')
                gotoxy(33,23);
          }
       }
    }while(NR_CLI != 0);

    return 0;
}
//Agendar//
int agendar()
{
    clrscr();
    center(3,"AGENDAMENTO\n");
    getchar();
}
/**********/
//Informação//
int info (void)
{
    clrscr();
    line();
    center(3,"INFORMAÇÕES DO SISTEMA\n");
    textcolor_2(9,15);
    printf("SISTEMAS PARA CLINICAS \n\n\n");
    getchar();
    return 0;
}
//Consulta dos dados/
int consultar(void)
{
    clrscr();
    line();center(1,"MÓDULO DE CONSULTA\n");
    center(3,"Digite o número do codigo:\n");
    line();
    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)?");
                        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 nao 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){


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

 

  • Amei 1
Postado
9 minutos atrás, L3ozao disse:

@devair1010 @arfneto  poxa vida, muito obrigado pelas dicas e ajuda.

Então eu posso retirar todos os "(void)" do meu código? só deixar nos dados...

 

 

Não. É boa prática deixar (void) nas declarações. No mínimo garante a quem está lendo e ao compilador que o protótipo era esse mesmo.

 

Seu programa tem problemas muito maiores, como as coisas que eu listei. Veja essa função por exemplo:
 

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

 

Isso é um pesadelo. Para você. Eis o que está errado:

  • De onde vem CLIENTE? Se você mudar essa m. vai mudar no programa inteiro. E se foi sem querer? Num instante isso zoa todo o seu programa
  • Serio que chamou 12 funções só nesse bloco? Uma para posicionar o cursor e outra para mostrar o texto?
  • Se mudar a origem, mudar o formato ou mudar a posição está tudo misturado. NUNCA faça isso. Gera programas impossíveis de manter e mudar.
  • nunca retorne void. E entenda que uma função
     
         void f(void);

     

Apenas a título de exemplo, não estou recomendando isso, mas veja essa diferença para o mesmo código:
 

  • int    mostradados(const COORD origem, CLIENTE* c)
    {
      char linha = origem.Y;
      char coluna = origem.X;
      gotoYX(linha,coluna); printf("%d",C->NOME);      linha += 1;
      gotoYX(linha,coluna); printf("%d",C->ENDERECO);  linha += 1;
      gotoYX(linha,coluna); printf("%d",C->CEP);       linha += 1;
      gotoYX(linha,coluna); printf("%d",C->TELEFONE);  linha += 1;
      return 0;
    }

 

gotoxy()

 

Não entendo isso que sempre vejo aqui nesse forum: a menos que se tenha formação matemática e programe em FORTRAN desde os '70, o normal é se ter a noção de cursor em termos de linha e coluna e não em (x,y) como no plano cartesiano, coluna e linha. Então porque, já que vocês copiam para todo o sempre essa função
 

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

 

Porque d1@b0 de razão não escrevem afinal

 

gotoYX(linha,coluna)? O código está no programa. Custa muito inverter?
 

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

 

Isso vem desde o turtle graphics do Apple II nos anos 80, uma biblioteca de desenho para crianças ;) 

 

 

 

  • Curtir 1
Postado

Vou ser sincero minha professora passou esse código e eu estou trabalhando em cima dele, nesta parte do gotoxy eu não entendi muito bem 😕

 Então não é ideal eu usar desta forma? como eu deveria construir 

Em 17/11/2020 às 21:28, arfneto disse:

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

e nessa parte também nao entendi muito bem!

Em 17/11/2020 às 21:28, arfneto disse:

gotoYX(linha,coluna)? O código está no programa. Custa muito inverter?

 Desculpe pela ignorância sou bem leigo no assuntou comecei o curso a pouco tempo to tentando fazer o melhor possivel

  • Obrigado 1
Postado
26 minutos atrás, L3ozao disse:

Vou ser sincero minha professora passou esse código e eu estou trabalhando em cima dele, nesta parte do gotoxy eu não entendi muito bem 😕

 Então não é ideal eu usar desta forma? como eu deveria construir 

 

Talvez eu não tenha sido claro no tópico anterior, mas eis o que eu disse, no tópico #5:

 

Você escreveu isso: 
 

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

 

E eu escrevi:

 

Isso é um pesadelo. Para você. Eis o que está errado:

  • De onde vem CLIENTE? Se você mudar essa m. vai mudar no programa inteiro. E se foi sem querer? Num instante isso zoa todo o seu programa
  • Serio que chamou 12 funções só nesse bloco? Uma para posicionar o cursor e outra para mostrar o texto?
  • Se mudar a origem, mudar o formato ou mudar a posição está tudo misturado. NUNCA faça isso. Gera programas impossíveis de manter e mudar.

E então eu te mostrei:
 

int    mostradados(const COORD origem, CLIENTE* c)
{
  char linha = origem.Y;
  char coluna = origem.X;
  gotoYX(linha,coluna); printf("%d",C->NOME);      linha += 1;
  gotoYX(linha,coluna); printf("%d",C->ENDERECO);  linha += 1;
  gotoYX(linha,coluna); printf("%d",C->CEP);       linha += 1;
  gotoYX(linha,coluna); printf("%d",C->TELEFONE);  linha += 1;
  return 0;
}

 

E acrescentei:

 

Citação

Apenas a título de exemplo, não estou recomendando isso, mas veja essa diferença para o mesmo código:


E por que?

 

  • Porque continua muito misturado o acesso ao s dados, a posição e a impressão. Mas com a função escrita como eu mostrei você pode usar a função com vários CLIENTE, porque ela recebe apenas um ponteiro para a estrutura
  • você passa a origem uma vez só, então pode mudar só um lugar para escrever em outro ponto da tela. Entenda por exemplo que na versão que escreveu se quer mudar a posição do menu você tem que mudar em todo lugar, e os valores lá são CONSTANTES, linha e coluna.

Exemplo: o que é CLIENTE?
 

É
 

        struct REG_CLI CLIENTE;

 

E REG_CLI é o que?
 

 struct REG_CLI{
   int CODIGO;
   char NOME[31];
   char ENDERECO[100];
   int CEP;
   int TELEFONE;
   char EMAIL[60];
   int EXCLUIDO;
};
struct REG_CLI CLIENTE;


Pois é: CLIENTE é uma variável. Só uma variável. Sua função só opera com uma variável. Não faz sentido. Ela não tem parâmetros e não retorna nada. Para tratar outro cliente tem que escrever outra função. Um buraco negro. E ela opera com uma variável global. Pode zoar qualquer coisa fora dela. É muito difícil de controlar... Nunca use isso:
 

        void mostradados(void)


Só vai comprometer sua nota ou seu emprego ou seu contrato.

 

Exemplo: alterando esse código, de novo:

 

#include <stdio.h>
#include <windows.h>

#define _MAX_CLI_ 20
typedef struct
{
	int		id;

	char	CEP[10];
	char	EMAIL[60];
	char	ENDERECO[100];
	char	NOME[31];
	char	TELEFONE[25];

}    Cliente;

typedef struct
{
	int		tamanho;
	Cliente cli[_MAX_CLI_];

}	Cadastro;

int		gotoYX(char linha, char coluna);
int		mostra_dado(char, char, Cliente*);

 

Só usando recortar e colar do seu programa.

 

Note:

  • CEP int não é boa ideia. Em geral vai sempre usar como string.
  • Telefone int é bem ruim. Existe uma norma internacional de telefonia e o formato é bem conhecido há décadas. E só dá trabalho pra formatar.
  • O que importa no seu programa é o Cadastro e não o cliente
     
  • Se o cadastro já tiver DENTRO uma variável com quantos caras tem dentro é bem conveniente. E é bem ingênuo se ele não tiver e você tiver que ter um
     
            int cont_cli;
    para seu cadastro ;) como todo mundo
  • Nada global. E declare as funções antes. 
  • main() deve ser sempre a primeira. Se possível em um arquivo separado

 

Um programa de exemplo usando isso
 

É um exemplo não funcional. Só para você entender como isso funciona na prática:

 

O programa declara alguns cadastros e usa mostra_dado() para mostrar os clientes. Todos tem o mesmo conteúdo porque eu só quero mostrar a ideia e estou sem tempo.

Do programa:

 

 

    Cadastro  cad;
    Cadastro  outra_loja;
    Cadastro  rede[5];

    cad.tamanho = 0;
    outra_loja.tamanho = 0;

 

Veja como declarar dois cadastros simples e uma rede com 5 lojas: cada cadastro tem uma variável tamanho que diz quantos elementos tem dentro.
 

Veja como iniciar a rede de 5 lojas
 

    // exemplo: zera todos os cadastros da rede
    int tam_rede = sizeof(rede) / sizeof(Cadastro);
    for (int i = 0; i < tam_rede; i += 1)
        rede[i].tamanho = 0;

 

Entenda que assim pode calcular quantos cadastros tem no vetor sem usar uma constante. Compare com sua função que só atende um CIiente e escreve só na coluna 18

 

E na hora de mostrar algum cliente pode usar sempre a mesma função. Veja a saída do programa
 


     Johnny Cash
     Rua Um 1 - Cidade Grande - XY
     CEP 01234-567
     Fone: +39 (23) 1234-5678


          Johnny Cash
          Rua Um 1 - Cidade Grande - XY
          CEP 01234-567
          Fone: +39 (23) 1234-5678


              Johnny Cash
              Rua Um 1 - Cidade Grande - XY
              CEP 01234-567
              Fone: +39 (23) 1234-5678


                  Johnny Cash
                  Rua Um 1 - Cidade Grande - XY
                  CEP 01234-567
                  Fone: +39 (23) 1234-5678


                      Johnny Cash
                      Rua Um 1 - Cidade Grande - XY
                      CEP 01234-567
                      Fone: +39 (23) 1234-5678


                          Johnny Cash
                          Rua Um 1 - Cidade Grande - XY
                          CEP 01234-567
                          Fone: +39 (23) 1234-5678

 

Rode o programa e espero que entenda melhor o que estou explicando:

Spoiler

#include <stdio.h>
#include <windows.h>

#define _MAX_CLI_ 20
typedef struct
{
	int		id;

	char	CEP[10];
	char	EMAIL[60];
	char	ENDERECO[100];
	char	NOME[31];
	char	TELEFONE[25];

}    Cliente;

typedef struct
{
	int		tamanho;
	Cliente cli[_MAX_CLI_];

}	Cadastro;

int		gotoYX(char linha, char coluna);
int		mostra_dado(char, char, Cliente*);

int main(void)
{
    Cadastro  cad;
    Cadastro  outra_loja;
    Cadastro  rede[5];

    cad.tamanho = 0;
    outra_loja.tamanho = 0;
    // exemplo: zera todos os cadastros da rede
    int tam_rede = sizeof(rede) / sizeof(Cadastro);
    for (int i = 0; i < tam_rede; i += 1)
        rede[i].tamanho = 0;

    // um cliente de exemplo
    Cliente C = {
        .id = 1,
        .CEP = "01234-567",
        .EMAIL = "[email protected]",
        .ENDERECO = "Rua Um 1 - Cidade Grande - XY",
        .NOME = "Johnny Cash",
        .TELEFONE = "+39 (23) 1234-5678"
    };

    // coloca esse cliente no cadastro 'cad'
    cad.cli[0] = C;
    cad.tamanho = 1;

    // enche todos os registros de "rede" com
    // esse cliente em todas as lojas
    for (int loja = 0; loja < tam_rede; loja += 1)
    {
        // cada loja tem um cadastro
        for (int c = 0; c < _MAX_CLI_; c += 1)
        {
            rede[loja].cli[c] = C; // copia o mesmo
            rede[loja].tamanho += 1; // conta o cara
        };  // for()
    };  // for()

    // mostra o primeiro cliente
    mostra_dado(1, 5, &cad.cli[0]);

    // mostra o ultimo cliente de cada loja da rede
    for( int i=0;i<tam_rede;i+=1)
        mostra_dado(
            (6*i + 7), // linha
            (4*i + 10), // coluna
            &rede[4].cli[_MAX_CLI_ - 1] // cliente
        );

    return 0;
};


int gotoYX(char y, char x)
{
    COORD coord;
    coord.X = (short)x;
    coord.Y = (short)y;
    return SetConsoleCursorPosition(GetStdHandle(STD_OUTPUT_HANDLE), coord);
}


int		mostra_dado(char linha, char coluna, Cliente* cli)
{
    gotoYX(linha, coluna); printf("%s", cli->NOME);      linha += 1;
    gotoYX(linha, coluna); printf("%s", cli->ENDERECO);  linha += 1;
    gotoYX(linha, coluna); printf("CEP %s", cli->CEP);       linha += 1;
    gotoYX(linha, coluna); printf("Fone: %s", cli->TELEFONE);  linha += 1;
    return 0;
}

 

 

1 hora atrás, L3ozao disse:

e nessa parte também nao entendi muito bem!

Em 17/11/2020 às 21:28, arfneto disse:

gotoYX(linha,coluna)? O código está no programa. Custa muito inverter?

 Desculpe pela ignorância sou bem leigo no assuntou comecei o curso a pouco tempo to tentando fazer o melhor possivel

 

O lance de gotoxy() é que exceto para o cara que tenha formação matemática apenas, você sempre espera colocar o cursor em uma certa linha e coluna. E vejo aqui nesse forum todo mundo copiando essa função gotoxy() que tem 4 linhas. Ela é derivada de um trem chamado turtle graphics, uma biblioteca de desenho para crianças dos anos 80, que rodava no apple II, antes até do IBM PC, DOS, Windows. Anos depois a Borland incluiu função com esse nome no compilador Turbo Pascal, antes do C. E isso veio até hoje :D 

 

Acontece que se você tem o código na sua frente por que razão não muda essa m. para passar a LINHA e a COLUNA nessa ordem? 

 

Por isso mostrei uma gotoYX(). Entendeu?

 

1 hora atrás, L3ozao disse:

Vou ser sincero minha professora passou esse código e eu estou trabalhando em cima dele, nesta parte do gotoxy eu não entendi muito bem 😕

 Então não é ideal eu usar desta forma? como eu deveria construir

 

Às vezes o professor passa um código ruim de propósito para testar até onde o pessoal vai com ele. Às vezes o professor é ruim mesmo.

 

Sugiro mesmo tentar mudar tudo que eu apontei em seu programa. Vai terminar mais depressa esse e os próximos programas. Seu programa como escreveu está frágil, monolítico e com muitos erros ainda.

 

Continue escrevendo. Rode os exemplos que recebeu.

 

  • Curtir 1
  • Amei 1

Crie uma conta ou entre para comentar

Você precisa ser um usuário para fazer um comentário

Criar uma conta

Crie uma nova conta em nossa comunidade. É fácil!

Crie uma nova conta

Entrar

Já tem uma conta? Faça o login.

Entrar agora

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!