Informática, perguntado por dexorgaming, 1 ano atrás

Em algumas situações, para a implementação de um sistema computacional, não se conhece, previamente, qual o tamanho da massa de dados que será efetivamente manipulada. Em tais casos, pode ser usado o recurso de alocação dinâmica de memória. Com tal recurso, uma região de memória poderá ser alocada, sob demanda de modo a tornar o programa mais flexível em relação à quantidade de itens a serem manipulados. Essa flexibilidade torna o programa escalável.

O objetivo desta questão é exercitar a manipulação de ponteiros em um cenário onde se exige a alocação dinâmica de memória através da implementação de um programa computacional.

Antes de falarmos das funcionalidades do programa a ser implementado, convém mencionar que, em algumas situações o espaço previamente alocado deve ser redimensionado devido, à por exemplo, um aumento ou diminuição inesperada na quantidade de itens manipulados. Para realizar o redimensionamento, pode-se, na linguagem C, utilizar a função “realloc()”. Essa função segue a seguinte sintaxe:

void *realloc (void *ptr_original, size_t);

A função “realloc()” retorna a posição do bloco realocado com a nova dimensão. No trecho de código acima, o parâmetro “ptr_original” representa o bloco previamente alocado com a função “malloc()” ou “calloc()”. Detalhes destas funções, inclusive a “realloc()” poderão ser obtidas acessando-se (GARCIA, 2016) através do link: .

Para a realização desta atividade, suponha a necessidade de cadastrar clientes de uma loja. Por ser uma loja nova e com produtos inovadores, pouco se sabe do mercado a ser atingido, sendo assim, não se sabe a quantidade de clientes poderão ser cadastrados. Estima-se, inicialmente, em 10 clientes. Cada cliente terá os seguintes
campos:

- nome (suponha um nome com, no máximo, 30 caracteres)
- ano de nascimento
- montante de gastos realizados no mês (quanto o clinte pagou em suas compras dentro do mês corrente)

Para tanto, o sistema deverá oferecer as seguintes funcionalidades:

- incluir um novo cliente
- remover cliente - atualizar o montante de compras do cliente realizadas no mês corrente
- zerar todos os montantes de compras por ocasião da virada de mês
- listar o cliente melhor comprador
- exibir um montante de compras de um cliente específico.

O programa deverá, ainda, prever a situação que a quantidade de clientes a ser cadastrados supere a previsão inicial. Neste caso, quando o espaço de memória destinado a receber dados dos clientes estiver cheia, deve-se ampliar esse espaço – sempre em blocos de 10.

Soluções para a tarefa

Respondido por dboracanedo
35

Resposta:

#include <stdio.h>

#include <string.h>

#include <stdlib.h>

#include <ctype.h>

struct pedido

{

   char namePed[200];

   char CPF[200];

   char numPed[200];

   char qtdPed[200];

   char valorped[200];

   int cod;

}logP[200];

struct cadastro

{

   char CPF[200];

   char telefone[200];

   char nome[200];

   char endereco[200];

   char data[200];

   int vazio,cod;

   struct pedido clientePed;

   

}log[200];

//AQUI DECLARO AS FUNÇÕES A SEREM USADAS

int verifica_pos(void);

int verifica_cod( int cod );

int opt;

void cadastroP(int cod,int pos);

void list();

void cadastroPedido();

void consultaCod (void);

void excluirCliente (void);

int main(void){ //INICIO DO MAIN

   int i,Opcao,OpcaoCliente,posicao,retorno;

   int codaux;

   do

   {

       printf("1 - Cadastrar Novo Cliente\n");

       printf("2 - Cliente\n");

       printf("3 - Alterar Cliente\n");

       printf("4 - Excluir Cliente\n");

       printf("5 - Cadastrar Pedido\n");

       printf("6 - Alterar Pedido\n");

       printf("7 - Excluir Pedido\n");

       printf("8 - Sair\n");

       printf(" Selecione uma opcao por favor: ");

       scanf("%d", &Opcao);

       getchar();

       if (Opcao == 1)

       {

           printf("Voce selecionou a opcao 1 - Cadastrar Novo Cliente\n");

           posicao=verifica_pos();

               if ( posicao != -1 )

               {

                   printf("\nEntre com um codigo de 1 a 200 para seu cadastro: \n");

                   scanf("%d",&codaux);fflush(stdin);

                   retorno = verifica_cod( codaux );

                   if ( retorno == 1 )

                       cadastroP( codaux, posicao );

                   else{

                       printf("\nCodigo ja existente ou invalido pressione enter para voltar ao menu principal\n");

                       getchar();

                       system("cls");

                       main();

                   }

               }

               else

                   printf("\nNao e possivel realizar mais cadastros!\n");

               break;

 

       }

Respondido por fidelixmonteiro
28

Atividade completa no txt

Anexos:
Perguntas interessantes