Buscar

Tecnicas de programacao - Atividade - 3

Prévia do material em texto

Curso: Ciência da Computação – Atividade: A3 Data: 29/11/2020 
Disciplina: Técnicas de Programação 
 
/*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 cliente 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. */ 
 
#include <stdio.h> 
#include <stdlib.h> 
#include <stdbool.h> 
#include <string.h> 
#include <locale.h> 
 
#define BLOCK_SIZE 10 
 
typedef struct { 
 char name[30]; 
 int yearOfBirth; 
 float amountPaid; 
} Customer; 
 
void customerRegisterFlow(); 
void amountPaidByCustomerName(); 
void printCustomer(Customer *customer); 
void updateCustomerAmount(); 
void endMonth(); 
void bestBuyer(); 
void initializeCustomers(); 
void reallocCustomers(); 
void bubbleSort(); 
void pressAnyKeyToContinue(); 
void listAll(); 
 
Customer * pCustomers; 
int *pCustomersSize; 
 
 
Curso: Ciência da Computação – Atividade: A3 Data: 29/11/2020 
Disciplina: Técnicas de Programação 
 
int main() 
{ 
 setlocale(LC_ALL, "Portuguese"); 
 initializeCustomers(); 
 
 int customerSize = -1; 
 pCustomersSize = &customerSize; 
 
 int menuOption = 99; 
 while(menuOption > 0) { 
 system("cls"); 
 printf("Menu\n\n"); 
 printf("1 - Cadastrar cliente\n"); 
 printf("2 - Gastos totais por cliente\n"); 
 printf("3 - Melhor comprador\n"); 
 printf("4 - Remover cliente\n"); 
 printf("5 - Atualizar gastos do cliente\n"); 
 printf("6 - Virada de mês\n"); 
 printf("\n0 - Sair\n\n"); 
 
 printf("Escolha uma opção: "); 
 scanf("%i", &menuOption); 
 
 system("cls"); 
 switch(menuOption) { 
 case 1: 
 customerRegisterFlow(); 
 break; 
 case 2: 
 amountPaidByCustomerName(); 
 break; 
 case 3: 
 bestBuyer(); 
 break; 
 case 4: 
 removeCustomerByName(); 
 break; 
 case 5: 
 updateCustomerAmount(); 
 break; 
 case 6: 
 endMonth(); 
 break; 
 case 99: 
 listAll(); 
 break; 
 } 
 } 
 free(pCustomers); 
 pCustomers = NULL; 
 
 return 0; 
} 
 
void customerRegisterFlow() { 
 
Curso: Ciência da Computação – Atividade: A3 Data: 29/11/2020 
Disciplina: Técnicas de Programação 
 
 printf("Cadastro de cliente\n\n"); 
 
 *pCustomersSize = *pCustomersSize + 1; 
 
 Customer *customer = &pCustomers[*pCustomersSize]; 
 strcpy(customer->name, ""); 
 customer->yearOfBirth = 0; 
 customer->amountPaid = -1; 
 
 while(strlen(customer->name) < 2) { 
 printf("Nome do cliente: "); 
 scanf(" %[^\n]s", &customer->name); 
 
 if(strlen(customer->name) < 2) { 
 printf("Entrada inválida!\n"); 
 } 
 } 
 
 while(customer->yearOfBirth < 1){ 
 printf("\nAno de nascimento: "); 
 scanf("%i", &customer->yearOfBirth); 
 
 if(customer->yearOfBirth < 1) { 
 printf("Entrada inválida!\n"); 
 } 
 } 
 
 while(customer->amountPaid < 0) { 
 printf("\nTotal gasto no mês: (Usar (,) para decimais) "); 
 scanf("%f", &customer->amountPaid); 
 
 if(customer->amountPaid < 0) { 
 printf("Entrada inválida!\n"); 
 } 
 } 
 
 printf("\n\nCadastro realizado com sucesso!"); 
 
 if(*pCustomersSize % BLOCK_SIZE == 0) { 
 reallocCustomers(); 
 } 
 
 bubbleSort(); 
 
 pressAnyKeyToContinue(); 
} 
 
void amountPaidByCustomerName() { 
 printf("Gastos totais por cliente\n\n"); 
 char name[30] = ""; 
 while(strlen(name) < 2) { 
 printf("Digite o nome: "); 
 scanf(" %[^\n]s", &name); 
 
 if(strlen(name) < 2) { 
 
Curso: Ciência da Computação – Atividade: A3 Data: 29/11/2020 
Disciplina: Técnicas de Programação 
 
 printf("Entrada inválida!\n"); 
 } 
 } 
 
 int i; 
 for (i = 0; i <= *pCustomersSize; i++) { 
 Customer *customer = &pCustomers[i]; 
 
 if(strcmp(customer->name, name) == 0) { 
 printCustomer(customer); 
 } 
 } 
 
 pressAnyKeyToContinue(); 
} 
 
void updateCustomerAmount() { 
 printf("Atualizar gastos totais por cliente\n\n"); 
 char name[30] = ""; 
 while(strlen(name) < 2) { 
 printf("Nome do cliente: "); 
 scanf(" %[^\n]s", &name); 
 
 if(strlen(name) < 2) { 
 printf("Entrada inválida!\n"); 
 } 
 } 
 
 int i; 
 for (i = 0; i <= *pCustomersSize; i++) { 
 Customer *customer = &pCustomers[i]; 
 
 if(strcmp(customer->name, name) == 0) { 
 printCustomer(customer); 
 
 while(customer->amountPaid < 0) { 
 printf("\nQual o novo valor gasto? (Usar (,) para decimais) 
"); 
 scanf("%f", &customer->amountPaid); 
 
 if(customer->amountPaid < 0) { 
 printf("Entrada inválida!\n"); 
 } 
 } 
 } 
 } 
 
 pressAnyKeyToContinue(); 
} 
 
void removeCustomerByName() { 
 printf("Remoção de cliente por nome\n\n"); 
 char name[30] = ""; 
 while(strlen(name) < 2) { 
 printf("Nome do cliente: "); 
 
Curso: Ciência da Computação – Atividade: A3 Data: 29/11/2020 
Disciplina: Técnicas de Programação 
 
 scanf(" %[^\n]s", &name); 
 
 if(strlen(name) < 2) { 
 printf("Entrada inválida!\n"); 
 } 
 } 
 
 int i, removed = 0; 
 for (i = 0; i <= *pCustomersSize; i++) { 
 Customer *customer = &pCustomers[i]; 
 
 if(strcmp(customer->name, name) == 0) { 
 strcpy(customer->name, ""); 
 customer->yearOfBirth = 0; 
 customer->amountPaid = -1; 
 
 ++removed; 
 } 
 } 
 
 bubbleSort(); 
 
 *pCustomersSize = *pCustomersSize - removed; 
 
 listAll(); 
 
 pressAnyKeyToContinue(); 
} 
 
void bestBuyer() { 
 Customer *customer = &pCustomers[0]; 
 printf("Melhor comprador\n\n"); 
 printCustomer(customer); 
 
 pressAnyKeyToContinue(); 
} 
 
void endMonth() { 
 printf("Virada de mês\n\n"); 
 
 int i; 
 for (i = 0; i <= *pCustomersSize; i++) { 
 Customer *customer = &pCustomers[i]; 
 customer->amountPaid = 0; 
 } 
 
 pressAnyKeyToContinue(); 
} 
 
void listAll() { 
 printf("Lista de clientes\n\n"); 
 
 int i; 
 for (i = 0; i <= *pCustomersSize; i++) { 
 Customer *customer= &pCustomers[i]; 
 
Curso: Ciência da Computação – Atividade: A3 Data: 29/11/2020 
Disciplina: Técnicas de Programação 
 
 
 printCustomer(customer); 
 } 
 
 pressAnyKeyToContinue(); 
} 
 
void printCustomer(Customer * customer) { 
 printf("'%s', gastou R$ %.2f esse mês!\n", customer->name, customer-
>amountPaid); 
} 
 
void pressAnyKeyToContinue() { 
 printf("\n\nPressione qualquer tecla para continuar..."); 
 getch(); 
} 
 
void initializeCustomers() { 
 pCustomers = (Customer *) malloc(BLOCK_SIZE * sizeof(Customer)); 
 
 if (pCustomers == NULL) 
 { 
 printf("Memória insuficiente! Não é possivel continuar."); 
 printf("\n\nPressione qualquer tecla para finalizar..."); 
 getch(); 
 exit(1); 
 } 
} 
 
void reallocCustomers() { 
 pCustomers = (Customer *) realloc(pCustomers, BLOCK_SIZE * 
sizeof(Customer)); 
 
 if (pCustomers == NULL) 
 { 
 printf("Memória insuficiente! Não é possivel continuar."); 
 printf("\n\nPressione qualquer tecla para finalizar..."); 
 getch(); 
 exit(1); 
 } 
} 
 
void bubbleSort(){ 
 int i, contador; 
 Customer aux; 
 
 for (contador = -1; contador < *pCustomersSize; contador++) { 
 for (i = 0; i <= *pCustomersSize - 1; i++) { 
 Customer *customer = &pCustomers[i]; 
 Customer *customer2 = &pCustomers[i + 1]; 
 if (customer->amountPaid < customer2->amountPaid) { 
 aux = *customer2; 
 *customer2 = *customer; 
 *customer = aux; 
 } 
 
Curso: Ciência da Computação – Atividade: A3 Data: 29/11/2020 
Disciplina: Técnicas de Programação 
 
 } 
 } 
}

Continue navegando