Ir ao conteúdo

Limitar quantodade de inserção em arquivo


fdsmello

Posts recomendados

Postado

To precisando de uma ajuda nesse codigo. Minha intenção é que se tiver 5 clientes ja cadastrado no arquivo ele informar que esta cheio e não pode inserir mais.Alguem poderia ajudar.

#include<stdlib.h>#include<stdio.h>#include<string.h>#define QUANTIDADE_CLIENTES 5void InserirCliente(void);void ApresentarCliente(void);typedef struct telefone{    char codInternacional[3];    char codArea[3];    char numeroTel[10];} tpTelefone;typedef struct data{    int dia;    int mes;    char ano[5];} tpData;struct cliente{    char nome[51];    tpTelefone residencialTel;    char cpf[12];    tpData nascimento;    char logradouro[60];    char bairro[20];    char cep[10];    char complemento[51];    char email[100];    tpData DtCadastro;};struct cliente listaClientes[QUANTIDADE_CLIENTES];int inicioListaCliente = 0;int fimListaCliente = 0;int MenuPrincipal(){    //----------------------MENU PRICIPAL-------------------------------------------      char escolha=0;      system("color 1f");//função para alterar a cor o 1º representa o fundo e 2º numero representa caracteres      printf("\n                ======================================\n");      printf("               |         __      __    ___  ___  __   |");      printf("\n               | |\\  /| |       |  | |   /    / |  |  |");      printf("\n               | | \\/ | |--     |--  | /    /   |--|  |");      printf("\n               | |    | |       |    | ---  --- |  |  |");      printf("\n               |                          VERSAO 1.0  |");      printf("\n                ======================================\n");      printf("\n                             MENU PRINCIPAL");      printf("\n\n\n\tCLIENTE\t\t\t PIZZA\t\t\tPEDIDOS");      printf("\n\n\n [1] - INCLUIR CLIENTE\t\t[4] - INCLUIR PIZZA\t[7] - INCLUIR PEDIDO");      printf("\n\n [2] - VISUALIZAR CLIENTE\t[5] - VISUALIZAR PIZZA\t[8] - VISUALIZAR PEDIO");      printf("\n\n [3] - ALTERAR DADOS CLIENTE\t[6] - ALTERAR PIZZA\t[9] - GERAR NOTA");      printf("\n\n\n                         Bem Vindo(a) ao MF PIZZA!\n");      printf("________________________________________________________________________________");      printf("\n[Opcao]: ");      return (getche());     //------------------------MENU PRINCIPAL----------------------------------------}void TrataMenu( char op){    switch(op)    {            case '1':InserirCliente();                    break;            case '2': ApresentarCliente();                    break;    }}int main(){    int opcao = 0;    do    {        opcao=MenuPrincipal();        TrataMenu(opcao);    }    while(opcao != 0);    return (0);}void InserirCliente(){    char temp[4096];    FILE *ptrArq;    int escolha =0;    system("cls");    do    {    system("cls");    printf("DESEJA VOLTAR AO MENU PRINCIPAL \n\n[1]RETORNA AO MENU PRINCIPAL\n\nAPERTE [2] PARA PROSSEGUIR \n\n[ ]\b\b");    scanf("%d",&escolha);    if(escolha==1)        {        system("cls");        main();        }    else if (escolha==2)        {    system("cls");    system("color 0f");    printf("\n                             INSERIR CLIENTE");    printf("\n                             ===============");    ptrArq = fopen("CLIENTE.txt","a");        if(!ptrArq)    {            printf("\nErro na abertura do arquivo! Finalizando o programa!\n");            getchar();            exit(0);    }    if(fimListaCliente < QUANTIDADE_CLIENTES)            {            fflush(stdin);            printf("\n\n\nNOME: ");            fgets(listaClientes[fimListaCliente].nome,51,stdin);            strupr(listaClientes[fimListaCliente].nome); // Transforma a string em maiscula para facilitar numa função pesquisa            fflush(stdin);            printf("\nTELEFONE: ");            printf("\n DIGITE O CODIGO NACIONAL: [  ]\b\b\b");            fgets(listaClientes[fimListaCliente].residencialTel.codInternacional,3,stdin);// função fgest para não passar de caracteres estupulados da sting            fflush(stdin);            printf("\n DIGITE O CODIGO AREA: [  ]\b\b\b");            fgets(listaClientes[fimListaCliente].residencialTel.codArea,3,stdin);            fflush(stdin);            printf("\n DIGITE O TELEFONE RESIDENCIAL: ");            fgets(listaClientes[fimListaCliente].residencialTel.numeroTel,10,stdin);            fflush(stdin);            printf("\nCPF: ");            fgets(listaClientes[fimListaCliente].cpf,12,stdin);            fflush(stdin);        do        {        printf("\nDATA DE NASCIMENTO: ");        printf("DIA: ");        scanf("%d",&listaClientes[fimListaCliente].nascimento.dia);        fflush(stdin);        }while((listaClientes[fimListaCliente].nascimento.dia > 31)|| (listaClientes[fimListaCliente].nascimento.dia<1));        do        {            printf("MES: ");            scanf("%d",&listaClientes[fimListaCliente].nascimento.mes);            fflush(stdin);        }while((listaClientes[fimListaCliente].nascimento.mes < 1)|| (listaClientes[fimListaCliente].nascimento.mes > 12));            printf("ANO: ");            fgets(listaClientes[fimListaCliente].nascimento.ano,5,stdin);            fflush(stdin);            printf("\nE-MAIL: ");            fgets(listaClientes[fimListaCliente].email,100,stdin);            strupr(listaClientes[fimListaCliente].email);            fflush(stdin);            printf("\nLOGRADOURO (rua, avenida, travessa, ...): ");            fgets(listaClientes[fimListaCliente].logradouro,60,stdin);            strupr(listaClientes[fimListaCliente].logradouro);            fflush(stdin);            printf("\nCOMPLEMENTO (casa, apto, ...): ");            fgets(listaClientes[fimListaCliente].complemento,51,stdin);            strupr(listaClientes[fimListaCliente].complemento);            fflush(stdin);            printf("\nBAIRRO: ");            fgets(listaClientes[fimListaCliente].bairro,20,stdin);            strupr(listaClientes[fimListaCliente].bairro);            fflush(stdin);            printf("\nCEP: ");            fgets(listaClientes[fimListaCliente].cep,10,stdin);            strupr(listaClientes[fimListaCliente].cep);            fflush(stdin);            printf("\nDATA DO CADASTRO: ");            printf("DIA: ");            scanf("%d",&listaClientes[fimListaCliente].DtCadastro.dia);            fflush(stdin);            printf("MES: ");            scanf("%d",&listaClientes[fimListaCliente].DtCadastro.mes);            fflush(stdin);            printf("ANO: ");            fgets(listaClientes[fimListaCliente].DtCadastro.ano,5,stdin);            fflush(stdin);            printf("\n\t\t\t   CLIENTE CADASTRADO! \n\n\t PRESSIONE QUALQUER TECLA PARA RETORNAR AO MENU PRINCIPAL");            sprintf(temp,"\n\n    ========================= \n\nNOME: %s;CPF: %s;",listaClientes[fimListaCliente].nome,listaClientes[fimListaCliente].cpf);            fputs(temp,ptrArq);            fclose(ptrArq);            fimListaCliente++;            }    else        {        printf("\n\n\nQUANTIDADE DE CLIENTES CADASTRADOS CHEGOU AO LIMITE!");        }    }    getchar();}while ((escolha<1)||(escolha>2));}void ApresentarCliente(){    {        system("cls");        printf("\n                             CLIENTES CADASTRADOS");        printf("\n                             ===============");        char c;        FILE *ptrvisualizar;        ptrvisualizar = fopen("CLIENTE.txt", "r");        do {            c = fgetc(ptrvisualizar);            printf("%c",c);            if (c == ';')                printf("\n");            } while (c != EOF);            getch();            fclose(ptrvisualizar);            getchar();           }    /*else    {        printf("\nLista de Clientes vazia!!!");        getchar();    }*/    getchar();}
Postado

No caso era para salvar só 5 posições.Aí quando abrisse o programa de novo e tivesse gravado 5 clientes informasse que não pode mais inserir clientes.

Postado

voce pode posicionar o ponteiro do arquivo no final do arquivo

fseek(arquivo,0,SEEK_END); 

depois pega a posição atual do ponteiro no arquivo(contada em bytes)

int tamanhoarq = ftell(arquivo)

depois divide pela quantidade de bytes que voce usa pra inserir cada cliente

int quantidadecliente = tamanhoarq/sizeof(estruturas)

Arquivado

Este tópico foi arquivado e está fechado para novas respostas.

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...