Buscar

Atividade 03

Faça como milhares de estudantes: teste grátis o Passei Direto

Esse e outros conteúdos desbloqueados

16 milhões de materiais de várias disciplinas

Impressão de materiais

Agora você pode testar o

Passei Direto grátis

Você também pode ser Premium ajudando estudantes

Faça como milhares de estudantes: teste grátis o Passei Direto

Esse e outros conteúdos desbloqueados

16 milhões de materiais de várias disciplinas

Impressão de materiais

Agora você pode testar o

Passei Direto grátis

Você também pode ser Premium ajudando estudantes

Faça como milhares de estudantes: teste grátis o Passei Direto

Esse e outros conteúdos desbloqueados

16 milhões de materiais de várias disciplinas

Impressão de materiais

Agora você pode testar o

Passei Direto grátis

Você também pode ser Premium ajudando estudantes
Você viu 3, do total de 8 páginas

Faça como milhares de estudantes: teste grátis o Passei Direto

Esse e outros conteúdos desbloqueados

16 milhões de materiais de várias disciplinas

Impressão de materiais

Agora você pode testar o

Passei Direto grátis

Você também pode ser Premium ajudando estudantes

Faça como milhares de estudantes: teste grátis o Passei Direto

Esse e outros conteúdos desbloqueados

16 milhões de materiais de várias disciplinas

Impressão de materiais

Agora você pode testar o

Passei Direto grátis

Você também pode ser Premium ajudando estudantes

Faça como milhares de estudantes: teste grátis o Passei Direto

Esse e outros conteúdos desbloqueados

16 milhões de materiais de várias disciplinas

Impressão de materiais

Agora você pode testar o

Passei Direto grátis

Você também pode ser Premium ajudando estudantes
Você viu 6, do total de 8 páginas

Faça como milhares de estudantes: teste grátis o Passei Direto

Esse e outros conteúdos desbloqueados

16 milhões de materiais de várias disciplinas

Impressão de materiais

Agora você pode testar o

Passei Direto grátis

Você também pode ser Premium ajudando estudantes

Faça como milhares de estudantes: teste grátis o Passei Direto

Esse e outros conteúdos desbloqueados

16 milhões de materiais de várias disciplinas

Impressão de materiais

Agora você pode testar o

Passei Direto grátis

Você também pode ser Premium ajudando estudantes

Prévia do material em texto

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; 
}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; 
}logP[200]; 
//DECLARACAO DAS 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; 
} 
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); 
} // FIM DO MAIN 
void list(){ // Lista os usuarios cadastrados. 
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"); 
} //FIM DO LIST 
void cadastroP(int cod, int pos){ //Cadastro das pessoas 
int i;
do{ 
pos = verifica_pos(); 
log[pos].cod = cod; 
printf("\nD igite seu nome: "); 
gets(log[pos].nome); 
printf("\nDigite seu CPF: "); 
gets(log[pos].CPF); 
printf("\nDigite seu Endereco: "); 
gets(log[pos].endereco); 
printf("\nDigite seu Telefone: "); 
gets(log[pos].telefone); 
log[pos].vazio = 1; 
//printf("\nDigite 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(); 
} // FIM DO CADASTRO DE PESSOAS 
int verifica_pos( void ) //VERIFICADOR DA POSIÇÃO 
{ 
int cont = 0; 
while ( cont <= 200 ) 
{ 
if ( log[cont].vazio == 0 ) 
return(cont);
cont++; 
} 
return(-1); 
} // FIM DO VERIFICADOR 
int verifica_cod( int cod ) // VERIFICADOR DE CÓDIGO 
{ 
int cont = 0; 
while ( cont <= 200 ) 
{ 
if ( log[cont].cod == cod ) 
return(0); 
cont++; 
} 
return(1); 
} // FIM DO VERIFICADOR 
void cadastroPedido(){ //Cadastro dos pedidos 
system("cls"); 
int i; 
int Option; 
int OpcaoPedido; 
char nomeCad[200]; 
printf("\nDigite seu nome como esta no cadastro: "); 
gets(nomeCad); 
for(i=0;i<200;i++){ 
if(strcmp(log[i].nome, nomeCad)==0){ 
do{ 
printf("\nEscolha o seu pedido: "); //PEDIDOS MERAMENTE ILUSTRATIVOS, COLOQUEI SÓ 
PARA VER SE CONSEGUIA ANEXAR A 1 CADASTRO MAS NÃO CONSEGUI. 
printf("\- Sanduba esperto");
printf("\n2 - Ceasar Salad"); 
printf("\n3 - Raviolli\n:"); 
scanf("%d", &OpcaoPedido); 
if(OpcaoPedido == 1){ 
strcpy(log[i].clientePed.namePed, "Sanduba esperto"); 
printf("\nVoce escolheu %s, seu pedido foi adicionado ao seu 
cadastro.",log[i].clientePed.namePed); 
printf("\nPressione 1 para continuar pedindoou 2 para volar ao menu principal: "); 
scanf("%d", &Option); 
i++; 
} 
else if(OpcaoPedido == 2){ 
strcpy(log[i].clientePed.namePed, "Ceasar Salad"); 
printf("\nVoce escolheu %s, seu pedido foi adicionado ao seu cadastro.", 
log[i].clientePed.namePed); 
printf("\nPressione 1 para continuar pedindo ou 2 para volar ao menu principal: "); 
scanf("%d", &Option); 
i++; 
} 
else if(OpcaoPedido == 3){ 
strcpy(log[i].clientePed.namePed, "Raviolli"); 
printf("\nVoce escolheu %s, seu pedido foi adicionado ao seu cadastro.", 
log[i].clientePed.namePed); 
printf("\nPressione 1 para continuar pedindo ou 2 para volar ao menu principal: "); 
scanf("%d", &Option); 
i++; 
} 
}while(Option == 1); 
system("cls"); 
} 
} 
} // FIM DO CADASTRO DE PEDIDOS.
void consultaCod (void) // CONSULTAR 1 CADASTRADO QUALQUER VIA CÓDIGO DADO POR 
USUÁRIO. 
{ 
int cont = 0, cod; 
printf("\nEntre 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("\nCodigo: %d \nNome: %s\nCPF: %s\nEndereco: %s\nTelefone: %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("\nCodigo nao encontrado, pressione enter para volar ao menu principal\n"); 
getchar(); 
system("cls"); 
} 
} 
} // FIM DA FUNÇÃO CONSULTAR 
void excluirCliente(void) // EXCLUI CLIENTE 
{ 
int cod, cont = 0; 
char resp; 
printf("\nEntre 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("\nCodigo: %d \nNome: %s\nCPF: %s\nEndereco: %s\nTelefone: %s\n\n", 
log[cont].cod,log[cont].nome,log[cont].CPF,log[cont].endereco,log[cont].telefone); 
getchar(); 
printf("\nDeseja realmente exlucir? s/n: "); 
scanf("%s",&resp); 
if ( ( resp == 'S' ) || ( resp == 's' ) )
{ 
log[cont].vazio=0; 
log[cont].cod = NULL; 
printf("\nExclusao feita com sucesso\n"); 
br eak; 
} 
else 
{ 
if ( ( resp == 'N' ) || ( resp == 'n' ) ) 
{ 
printf("Exclusao cancelada!\n"); 
break; 
} 
} 
} 
} 
cont++; 
if ( cont > 200 ) 
printf("\nCodigo nao encontrado\n"); 
} 
system("pause"); 
system("cls"); 
}

Continue navegando