Baixe o app para aproveitar ainda mais
Prévia do material em texto
TÉCNICAS DE PROGRAMAÇÃO Se foi útil para você deixe um joinha Atividade A3 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: <https://www.embarcados.com.br/ponteiro-em-c-alocacao-dinamica/>. 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. Poste o código, implementado em C, em seu portfólio. Bons Estudos! Referência DEITEL, P. J.; DEITEL, H. C: Como Programar. 6. Ed. São Paulo: Pearson Prentice Hall, 2011. [Recurso eletrônico, Biblioteca Virtual Universitária] GARCIA, F. D. Ponteiro em C: Alocação Dinâmica de Memória. Publicado em 08/01/2016. Disponível em <https://www.embarcados.com.br/ponteiro-em-c-alocacao-dinamica/>. Acesso em 05/07/2019. #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; } logPed[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]; 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){ 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("\n Entre 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("\n Codigo ja existente ou invalido pressione enter para voltar ao menu principal\n"); getchar(); system ("cls"); main(); } } else printf("\n Nao e possivel realizar mais cadastro s!\n"); break; } else if (Opcao == 2) { system("cls"); do{ printf("Voce selecionou a opcao 2 - Clientes\n\n"); printf("1 - Pesquisar cliente por codigo\n"); printf("2 - Listar todos os clientes\n"); printf("3 - Voltar ao menu principal\n"); printf("Selecione uma opcao por favor: "); scanf("%d", &OpcaoCliente); getchar(); if(OpcaoCliente == 1){ consultaCod(); } else if(OpcaoCliente == 2){ list(); } else if(OpcaoCliente == 3){ printf("Voce selecionou voltar ao menu principal, pressione ENTER para continuar"); getchar(); system("cls"); } else printf("Opcao Invalida\n\n"); }while(OpcaoCliente =!3 || OpcaoCliente > 3 || OpcaoCliente < 0 || OpcaoCliente == 0 ); } else if (Opcao == 3) { printf("Voce selecionou a opcao 3 - Alterar Cliente\n"); } else if (Opcao == 4) { printf("Voce selecionou a opcao 4 - Excluir Cliente\n"); excluirCliente(); } else if (Opcao == 5) { printf("Voce selecionou a opcao 5 - Cadastrar Pedido\n"); cadastroPedido(); } else if (Opcao == 6) { printf("Voce selecionou a opcao 6 - Alterar Pedido\n"); } else if (Opcao == 7) { printf("Voce selecionou a opcao 7 - Excluir Pedido\n"); } else if (Opcao == 8) { printf("Voce selecionou a opcao 8 - Sair\n"); } else{ printf("Opcao invalida, favor pressione enter para voltar ao menu principal"); getchar(); system("cls"); } } while (Opcao != 8 || Opcao < 8); } void list(){ int i,j; for(i=0;i<200;i++){ if(log[i].cod!=NULL){ printf("\nCodigo: %d \nNome: %s\nCPF: %s\nEndereco: %s\nTelefone: %s\n\n"); log[i].cod,log[i].nome,log[i].CPF,log[i].endereco,log[i].telefone; } } printf("Pressione enter para volta ao menu principal"); getchar(); system("cls"); } void cadastroP(int cod, int pos){ int i; do{ pos = verifica_pos(); log[pos].cod = cod; printf("\n Digite seu nome: "); gets(log[pos].nome); printf("\n Digite seu CPF: "); gets(log[pos].CPF); printf("\n Digite seu Endereco: "); gets(log[pos].endereco); printf("\n Digite seu Telefone: "); gets(log[pos].telefone); log[pos].vazio = 1; //printf("\n Digite enter para efetuar novo cadastro ou qualquer outra tecla para volar ao menu principal"); //scanf("%d", &opt); opt ==1; getchar(); }while(opt==1 ); system("cls"); main(); } int verifica_pos( void ) { int cont = 0; while ( cont <= 200 ) { if ( log[cont].vazio == 0 ) return(cont); cont++; } return(-1); } int verifica_cod( int cod ) { int cont = 0; while ( cont <= 200 ) { if ( log[cont].cod == cod ) return(0); cont++; } return(1); } void cadastroPedido(){ system("cls"); int i; int Option; int OpcaoPedido; char nomeCad[200]; printf("\n Digite seu nome como esta no cadastro: "); gets(nomeCad); for(i=0;i<200;i++){ if(strcmp(log[i].nome, nomeCad)==0){ do{ printf("\n Escolha o seu pedido: "); printf("\n1- Sanduba esperto"); printf("\n2- Ceasar Salad"); printf("\n3- Raviolli\n:"); scanf("%d", &OpcaoPedido); if(OpcaoPedido == 1){ strcpy(log[i].clientePed.namePed, "Sanduba esperto"); printf("\n Voce escolheu %s, seu pedido foi adicionado ao seu cadastro.",log[i].clientePed.namePed); printf("\n Pressione 1 para continuar pedindo ou 2 para volar ao menu principal: "); scanf("%d", &Option); i++; } else if(OpcaoPedido == 2){ strcpy(log[i].clientePed.namePed, "Ceasar Salad"); printf("\n Voce escolheu %s, seu pedido foi adicionado ao seu cadastro.", log[i].clientePed.namePed); printf("\n Pressione 1 para continuar pedindoou 2 para volar ao menu principal: "); scanf("%d", &Option); i++; } else if(OpcaoPedido == 3){ strcpy (log[i].clientePed.namePed, "Raviolli"); printf("\n Voce escolheu %s, seu pedido foi adicionado ao seu cadastro.", log[i].clientePed.namePed); printf("\n Pressione 1 para continuar pedindo ou 2 para volar ao menu principal: "); scanf("%d", &Option); i++; } }while(Option == 1); system("cls"); } } } void consultaCod (void) { int cont = 0, cod; printf("\n Entre com o codigo \n"); scanf("%d",&cod); fflush(stdin); system("cls"); while ( cont <= 200 ) { if (log[cont].cod==cod) { if (log[cont].vazio==1) { printf("\n Codigo:%d\n Nome:%s\n CPF:%s\n Endereco:%s\n Telefone:%s\n\n"); log[cont].cod,log[cont].nome,log[cont].CPF,log[cont].endereco,log[cont].telefone; system ("pause"); system("cls"); break; } } cont++; if ( cont > 200 ){ printf("\n Codigo nao encontrado, pressione enter para volar ao menu principal \n"); getchar(); system("cls"); } } } void excluirCliente(void) { int cod, cont = 0; char resp; printf("\n Entre com o codigo do registro que deseja excluir: \n"); scanf("%d", &cod ); while ( cont <= 200 ) { if ( log[cont].cod == cod ) { if (log[cont].vazio == 1 ) { printf("\n Codigo:%d\n Nome:%s\n CPF:%s\n Endereco:%s\n Telefone:%s\n\n"); log[cont],cod,log[cont].nome,log[cont].CPF,log[cont].endereco ,log[cont].telefone ; getchar(); printf("\n Deseja realmente exlucir? S /n: "); scanf("%s",&resp); if ( ( resp == 'S' ) || ( resp == 's' ) ) { log[cont].vazio=0; log[cont].cod = null; printf("\n Exclusao feita com sucesso \n"); break; } else { if ( ( resp == 'N' ) || ( resp == 'n' ) ) { printf("Exclusao cancelada! \n"); break; } } } } cont++; if ( cont > 200 ) printf("\n Codigo nao encontrado \n"); } system("pause"); system("cls"); } Bibliografia Material EAD TÉCNICAS DE PROGRAMAÇÃO https://www.youtube.com https://www.embarcados.com.br https://www.embarcados.com.br/bits-em-linguagem-c http://mindbending.org
Compartilhar