Ir ao conteúdo

Posts recomendados

Postado
joice

Preciso melhor esse código de cadastro, preciso de um limpa buffer o meu não funciona, e de fazer alterações  de cadastro no arquivo.

#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <math.h>


/*   escrever  */
//declarando a struct de  cliente
struct Clientes{
    char telefone[15];        
    char nome[50];
    char endereco[100];
    int ativo; // na hora de excluir vou dizer se esta ativo sim ou nao
}m_clientes[200];


void cliente();
void cadastrar();
void buscar();
void limparbuffer();


int main(int argc, char** argv) {

 cliente();
 limparbuffer();
 
system ("pause");
    return 0;
}
void cliente() {


    int opcao;
    do{
    system ("cls");
    printf("\n--------------------------PIZZARIA 6 AMIGOS ----------------------------------------------\n");
    printf("\n-----------------------------Tela Cliente ----------------------------------------------- \n");
    printf("\n__________________________________________________________________________________________\n");
    printf("\n 1-Cadastrar cliente");
    printf("\n 2-Buscar cliente");
    printf("\n 3-Excluir cliente");
    printf("\n 0-sair\n");

    scanf("%d",&opcao);
    getchar();
    switch(opcao){
        case 1: cadastrar(); break;
        case 2: buscar(); break;
        
    }
    
    }while(opcao!=0);
}
void cadastrar() {
    
    FILE*arq;
    m_clientes[200];
    arq = fopen("arquivocliente.bin", "ab+");

    char telefone[15];        
    char nome[50];
    char endereco[100];    
    int opcao;
    int i=0;
    

    do{
        system("cls");
        
        printf("\n--------------------CADASTRO DE CLIENTES-------------------\n");

           printf("\nDigite o telefone com (DDD): ");
           fgets(m_clientes.telefone,15,stdin);
           fprintf(arq, m_clientes.telefone);
           limparbuffer();
          
           printf("\nDigite o nome do cliente: ");
           fgets(m_clientes.nome,50,stdin);
           fprintf(arq, m_clientes.nome);
           
    
           limparbuffer();
           printf("\nDigite o endereço com n da residencia: ");
           fgets(m_clientes.endereco,100,stdin);
           fprintf(arq, m_clientes.endereco);
         limparbuffer();
           
           
          
           
    for ( int i = 0; i < sizeof(m_clientes)/sizeof(struct Clientes); i++ )
          {
    if (m_clientes.ativo==0)
              {
                  strcpy(m_clientes.telefone,telefone);
                  strcpy(m_clientes.nome,nome);
                  strcpy(m_clientes.endereco,endereco);
                  break;
              }
          }
          
    limparbuffer();
    printf("Cadastro efetuado com sucesso!\n\n");
    printf("\n----------------------------------------------------------\n");
    printf("\n 1-Continuar\n 0-Sair\n");
    scanf("%d",&opcao);
        

    }while(opcao!=0);
    

    fclose(arq);
    }

void buscar(){
    char telefone[50];
    int opcao;
    int i;
            
    FILE*arq;
     arq = fopen("arquivocliente.bin", "rb");
    if(!arq)
{
    printf("ocorreu um erro ao acessar o arquivo\n");
    exit (1);
    
}
do
{
    system("cls");
        printf("\n\n___________________Busca de Cliente________________________\n");
        printf("\nDigite o telefone: ");
        fgets(m_clientes.telefone,15,stdin);
        
        getchar();
        fread(&m_clientes, sizeof(Clientes), 1, arq);
        
    while ( i < sizeof(m_clientes)/sizeof(struct Clientes) )
    {
        if(strcmp(m_clientes.telefone,telefone)!=NULL)
        {
    
             printf("\nBem vindo sr(a)");
             printf("\nNome: %s\nTelefone: %s\nEndereco: %s",m_clientes.nome,m_clientes.telefone,m_clientes.endereco);
             void limparbuffer(char *string, int pos);
            getchar();
               printf("\n--------------------------------------------------------\n");
               break;
        }
        else
        {
        printf("\nCliente Nao Encontrado");
        }

    }
    getchar();
    printf("\n 1-Nova busca \n 0-Sair\n");
    scanf("%d",&opcao);
    
    }while(opcao!=0);
    
    fclose(arq);
    system("pause");
    }
void limparbuffer(char *string, int pos)
{
    //Fgets que limpa o buffer
    char ch;
    fgets(string, pos, stdin);
    strtok(string, "\n");

    if (strlen(string) == pos - 1)
        while ((ch = getchar()) != '\n' && ch != EOF);
}


// preciso carregar o que esta no arquivo e jogar em matriz para que meu sistema leia.}

 

  • Obrigado 1
Postado

@joicenathalice    para postar seu código é melhor usar o botão      <>   

1193061210_barradeferramentas.JPG.d6450dc172121871d4fdd4c9f923a1e2.JPG

que está desenhado lá na barra de ferramentas da janela de postar , pois senão seu código fica faltando alguns caracteres como os  [ i ]  , que sumiram do seu código ,  e seu código está bom , mas se é arquivo binário então o fprintf não é uma boa escolha , melhor seria o fwrite que grava todos os dados daquela posição do vetor de uma vez , e também ,  trabalhar com arquivos é bem difícil , então seria melhor no início pegar os dados que estão no arquivo binário e coloca-los na struct , e durante o uso do programa vai inserindo ou listando ou removendo os dados na struct , e no final grava tudo novamente , e então seu código com algumas modificações  poderia se assim  :

#include <stdio.h>
#include <conio.h>
#include <ctype.h>
#include <stdlib.h>
#include <locale.h>
#include <math.h>
#include <windows.h>
#include <string.h>
#define  tam 20
#define  cls system("cls");
#define  pausar(g) for(f=0;f<g*200000;f++);
#define  u GetStdHandle(STD_OUTPUT_HANDLE)
#define gotoxy_2(x,y) {COORD c={x,y};SetConsoleCursorPosition(u,c);}
#define textcolor_2(l,f) SetConsoleTextAttribute(u,l+(f<<4));
/*
    0 preto 1 azul 2 verde 3 az desbotado 4 vermelho 5 magenta
    6 marrom 7 cinza claro 8 cinza escuro 9 az claro 10 verde claro
    11 az celeste 12 vermelho claro 13 lilás 14 amarelo 15 branco
*/
int f,i,j,w,cont,flag;
int mov[5]={0,21,63,3,18};
FILE *arq;
/*   escrever  */
//declarando a struct de  cliente
struct   Clientes     {
    char telefone[ 15];
    char nome[     50];
    char endereco[100];
    int  ativo        ; // na hora de excluir vou dizer se esta ativo sim ou nao
}m_clientes[200      ];
void cliente(        );
void cadastrar(      );
void buscar(         );
void limparbuffer(   );
void init_graph(     );
void listar(         );
void remover(        );
void alterar(        );
void menu(           );
void esperar(        );
void movement(       );
int main(int argc, char** argv){
    init_graph( );/* pega os dados do arquivo e coloca na struct */
    int opcao;
    do{
        menu();
        do{
            movement();/* uma animação        */
            Sleep(100);/* dorme hum pouquinho */
        }while( ! kbhit() );
        opcao = getch()-48;/* sem enter ou scanf("%d",&esc); com enter      */
        cls   ;/* opcao contém o cód ASCII da tecla pressionada menos 48    */
        switch(opcao){/* então cód ASCII de zero é 48 menos 48 igual a zero */
        case 1:
            cadastrar();
            break;
        case 2:
            listar();
            break;
        case 3:
            remover();/* melhor remover na struct e no final grava tudo */
            break;
        case 4:
            alterar();
            break;
        case 0:
            gotoxy_2(0,9);
            printf("Saindo Do Programa !\n");
            //escrevendo no arquivo
            arq = fopen("arquivocliente.bin","wb");        /* cria e abre o arquivo vazio para gravação */
            for(j=0;j<cont;j++){                           /* quantidade de posições no vetor de struct */
                fwrite(&m_clientes[j],sizeof(struct Clientes),1,arq);/* grava no arquivo cada bloco da struct     */
            }
            //fechando arquivo
            fclose(arq);
            esperar();
            textcolor_2(10,12);
            exit(0);
        }
    }while( opcao != 0 );
    return 0;
}
void cadastrar(){
    char op;
    do{
        cls                                                  ;
        textcolor_2(14,12                                   );
        printf("\n------------------- CADASTRO DE CLIENTES ------------------\n\n");
        textcolor_2(10,0                                    );
        printf("Digite o telefone com (DDD): "              );
        fflush(stdin                                        );
        fgets(m_clientes[cont].telefone,15,stdin            );
        fflush(stdin                                        );
        printf("Digite o nome do cliente: "                 );
        fgets(m_clientes[cont].nome,50,stdin                );
        printf("Digite o endereço com n da residencia: "    );
        fflush(stdin                                        );
        fgets(m_clientes[cont].endereco,100,stdin           );
        m_clientes[cont].ativo=1                             ;
        cont++                                               ;
        printf("Quer Cadastrar Outro S/N "                  );
        op = (char)getch(                                   );
        printf("\n"                                         );
    }while( toupper(op) != 'N'                              );
}
void init_graph(){
    arq = fopen("arquivocliente.bin","rb");       /* abre arquivo binário para leitura                      */
    if(arq == NULL)       return ;                /* se o arquivo não existir retorna para o menu           */
    while(fread(&m_clientes[cont],sizeof(struct Clientes),1,arq)==1 )/* essa parte quer dizer que enquanto ele estiver retor-  */
        cont++;                                   /* nando 1 significa que tem coisas pra ler e vai pegando */
                                                  /* e colocando na struct e inc o cont de pos da struct    */
    fclose(arq);                                  /* fechando arquivo de leitura                            */
}
void listar(                                    ){
    if( ! cont                                  ){
        printf("Ainda Nao Tem Nada Cadastrado\n");
        printf("\n       Tecle !"               );
        getch();
        return ;
    }
    w=2                                          ;
    for(j=0;j<cont;j++                          ){/* cont é o total de cadastros */
        textcolor_2(12,15                       );
        printf("  %d%c Cadastro    \n",j+1,167  );
        textcolor_2(10,0                        );
        printf("Nome ------: %s"  ,m_clientes[j].nome             );
        printf("Telefone --: %s"  ,m_clientes[j].telefone         );
        printf("Endereco --: %s\n",m_clientes[j].endereco         );
        if( j == w                                                ){/* a cada três cadastros espera */
            printf(" aqui  Tecle !\r"                             );
            w+=3                                                   ;
            getch(                                                );
        }
    }
    printf("Terminou De Listar,    Tecle !"                       );
    esperar();
}
void remover(                                                     ){
    char nom[20                                                   ];
    printf("Qual nome deseja excluir: "                           );
    fgets(nom,50,stdin                                            );
    cls                                                            ;
    flag=0                                                         ;
    for(j=0;j<cont;j++                                            ){/* cont é o total de cadastros */
        if(strcmp(m_clientes[j].nome,nom) == 0                    ){
            for(w=j;w<cont;w++                                    ){
                m_clientes[w] = m_clientes[w+1];/* pega conteúdo da posição da frente e coloca em cima dessa posição */
            }
            printf("Excluiu O Cadastro De %s Com Sucesso . . . !\n",
                   nom                                            );
            flag = 1                                               ;
            cont--;           /* decrementa uma unidade pois terá hum cadastro a menos      */
            break;            /* removeu , sai desse looo for                               */
        }
    }
    if( ! flag                               )
        printf("Cadastro Nao Encontrado !\n");
    printf("    Tecle !"                    );
    getch(                                  );
}
void alterar(                               ){
    //alterar atraves do nome do paciente
    char pessoa[31                          ];
    printf("Nome do paciente para alterar: ");
    fflush(stdin                            );
    fgets(pessoa,50,stdin                   );
    cls                                      ;
    flag=0;
    for(j=0;j<cont;j++                      ){/* cont é o total de cadastros */
        if(strcmp(pessoa,m_clientes[j].nome) == 0                ){
            printf("insira novos dados\n"                        );
            printf("Digite o telefone com (DDD): "               );
            fflush(stdin                                         );
            fgets(m_clientes[cont].telefone,15,stdin             );
            fflush(stdin                                         );
            printf("Digite o nome do cliente: "                  );
            fgets(m_clientes[cont].nome,50,stdin                 );
            printf("Digite o endereço com n da residencia: "     );
            fflush(stdin                                         );
            fgets(m_clientes[cont].endereco,100,stdin            );
            m_clientes[cont].ativo=1                              ;
            printf("\n\n\t*** Dados Alterado com Sucesso ***\n\n");
            printf("Alterou O Nome %s Para %s\n",pessoa,m_clientes[j].nome);
            flag=1;
            break                                                 ;/* alterou ; sai do loop for */
        }
    }
    if( ! flag                                 )
        printf("Cadastro Nao Encontrado !\n"  );
    printf("    Tecle !"                      );
    getch(                                    );
}
void menu(                                    ){
    cls                                        ;
    int lin=2                                  ;
    textcolor_2(11,0                          );
    gotoxy_2(28, 4);printf("*** PIZZARIA 6 AMIGOS ***",      );
    gotoxy_2(28, 5);printf("      tela  cliente      "       );
    gotoxy_2(28, 6);printf("_________________________"       );
    gotoxy_2(28, 8);printf(" 1 - Cadastrar cliente \n"       );
    gotoxy_2(28, 9);printf(" 2 - Buscar cliente    \n"       );
    gotoxy_2(28,10);printf(" 3 - Excluir cliente   \n"       );
    gotoxy_2(28,11);printf(" 4 - ALTERAR             "       );
    gotoxy_2(28,12);printf(" 0 - sair                "       );
    gotoxy_2(28,14);printf("  Escolha uma op%c%co : ",135,198);
    textcolor_2(14,0          );
    for(j=20;j<60;j++         ){
        gotoxy_2(j,lin        );
        printf("%c",205       );
        gotoxy_2(j,lin+14     );
        printf("%c",205       );
        if(j<35               ){
            gotoxy_2(20  ,j-18);
            printf("%c",186   );
            gotoxy_2(60  ,j-18);
            printf("%c",186   );
        }
    }
    gotoxy_2(20,2             );
    printf("%c",201           );
    gotoxy_2(60,2             );
    printf("%c",187           );
    gotoxy_2(20,16            );
    printf("%c",200           );
    gotoxy_2(60,16            );
    printf("%c",188           );
    gotoxy_2(54,14            );
    textcolor_2(10,0          );
}
void esperar(                 ){
    textcolor_2(15,0          );
    printf("\n     Tecle !\n\n       ");
    while( ! kbhit()                  ){
        printf("|\b"    );pausar(300  );
        printf("/\b"    );pausar(300  );
        if(kbhit()      ) break        ;
        printf("-\b"    );pausar(300  );
        printf("%c\b",92);pausar(300  );
    }
    getch();/* coloquei esse getch    */
            /* porque a tela estava   */
            /* pisacando ,  ai parou  */
}
void movement(){
    int po=mov[1],po2=po,ii,w=5;
    char op = '+';
    textcolor_2(12,0);
    if(mov[0] >20)textcolor_2(15,0);
    if(mov[0] >40)textcolor_2(10,0);
    if(mov[0] >70)textcolor_2(11,0);
    if(mov[0]==90)mov[0]=0;
    mov[0]++;
    for(ii=0;ii<9;ii++){/* linha de cima */
        if(po2==21){
            gotoxy_2(po+4,1);
        }
        else{
            gotoxy_2(po-1,1);
        }
        printf(" ");
        if(po<63){
            gotoxy_2(po,1);
            printf("%c",op);
            po+=w;
        }
    }
    po=mov[2];/* linha de baixo */
    for(ii=0;ii<9;ii++){
        if(po2==21){
            gotoxy_2(po-4,19);
        }
        else{
            gotoxy_2(po+1,19);
        }
        printf(" ");
        if(po>20){
            gotoxy_2(po,19);
            printf("%c",op);
            po-=w;
        }
    }
    po=mov[3];/* linha lateral direita */
    for(ii=0;ii<3;ii++){
        if(po2==21){
            gotoxy_2(64,po+4);
        }
        else{
            gotoxy_2(64,po-1);
        }
        printf(" ");
        gotoxy_2(64,po);
        printf("%c",op);
        po+=w;
    }
    po=mov[4];/* linha lateral esquerda */
    for(ii=0;ii<4;ii++){
        if(po2==21){
            gotoxy_2(18,po-4);
        }
        else{
            gotoxy_2(18,po+1);
        }
        printf(" ");
        if(po>2){
            gotoxy_2(18,po);
            printf("%c",op);
            po-=w;
        }
    }
    mov[1]++;
    mov[2]--;
    mov[3]++;
    mov[4]--;
    if( mov[1] > 25){
        mov[1] = 21 ;
        mov[2] = 63 ;
        mov[3] =  3 ;
        mov[4] = 18 ;
    }
    textcolor_2(11,0);
}

 

  • Obrigado 1
  • Amei 1
Postado

Fazendo um adendo, fflush(stdin) teria essa função de limpar o buffer do teclado. Tente colocar esse comando depois de todos os fgets, tipo o exemplo abaixo:

do{
        system("cls");
        
        printf("\n--------------------CADASTRO DE CLIENTES-------------------\n");

           printf("\nDigite o telefone com (DDD): ");
           fgets(m_clientes.telefone,15,stdin);
           fprintf(arq, m_clientes.telefone);
           limparbuffer();
          
           printf("\nDigite o nome do cliente: ");
           fgets(m_clientes.nome,50,stdin);

			fflush(stdin);

           fprintf(arq, m_clientes.nome);
           
    
           limparbuffer();
           printf("\nDigite o endereço com n da residencia: ");
           fgets(m_clientes.endereco,100,stdin);

			fflush(stdin);

           fprintf(arq, m_clientes.endereco);
         limparbuffer();
           
           
          
           
    for ( int i = 0; i < sizeof(m_clientes)/sizeof(struct Clientes); i++ )
          {
    if (m_clientes.ativo==0)
              {
                  strcpy(m_clientes.telefone,telefone);
                  strcpy(m_clientes.nome,nome);
                  strcpy(m_clientes.endereco,endereco);
                  break;
              }
          }
          
    limparbuffer();
    printf("Cadastro efetuado com sucesso!\n\n");
    printf("\n----------------------------------------------------------\n");
    printf("\n 1-Continuar\n 0-Sair\n");
    scanf("%d",&opcao);

 

  • Curtir 1
  • Obrigado 1
Postado

@joicenathalice     o gotoxy_2 posiciona o cursor em uma posição da tela para começar a escrever , e ali no código estava escrito gotoxy , mas o certo é gotoxy_2 , como está lá em cima no define .  então editei o código acima , para ficar do jeito certo  .

  • Curtir 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!