Buscar

Atividade A3 TÉCNICAS DE PROGRAMAÇÃO

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

Continue navegando