Baixe o app para aproveitar ainda mais
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 } } }
Compartilhar