Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- #include <stdio.h>
- #include <string.h>
- #include <stdlib.h>
- #define TAMANHO_NOME 200
- #define TAMANHO_REINO 40
- #define TAMANHO_NOME_CASA 40
- #define TAMANHO_COLECAO_CLIENTE 5
- /**
- * Define o tipo Cliente
- */
- typedef struct {
- char nome[TAMANHO_NOME];
- char reino[TAMANHO_REINO];
- char nomeCasa[TAMANHO_NOME_CASA];
- float quantidadeParcelas;
- float percentualJuros;
- float valorEmprestado;
- float valorJuros;
- float valorFinalPagar;
- } t_cliente;
- /**
- * Define o tipo Coleção de Cliente
- */
- typedef struct {
- t_cliente *elementos;
- int indice;
- int alocado;
- } t_colecao_cliente;
- /**
- * Remove a linha em branco, lida pelo fgets, do final da string.
- */
- void trim(char *valor) {
- valor[strcspn(valor, "\n")] = 0;
- }
- /**
- * Inicializa a coleção
- */
- t_colecao_cliente colecao_cliente_inicializar() {
- t_colecao_cliente colecaoCliente;
- colecaoCliente.elementos = (t_cliente*) calloc(TAMANHO_COLECAO_CLIENTE, sizeof(t_cliente));
- colecaoCliente.indice = 0;
- colecaoCliente.alocado = TAMANHO_COLECAO_CLIENTE;
- return colecaoCliente;
- }
- /**
- * Cadastra um novo cliente na coleção
- */
- void colecao_cliente_cadastrar(t_cliente cliente, t_colecao_cliente *colecaoCliente) {
- /**
- * Se atingiu a quantidade máxima de elementos, aloca mais memória
- */
- if (colecaoCliente->indice == colecaoCliente->alocado) {
- colecaoCliente->elementos =
- (t_cliente*) realloc(
- colecaoCliente->elementos,
- (colecaoCliente->indice + TAMANHO_COLECAO_CLIENTE) * sizeof(t_cliente)
- );
- }
- /**
- * Adiciona o elemento e incrementa o índice
- */
- *(colecaoCliente->elementos + colecaoCliente->indice) = cliente;
- colecaoCliente->indice++;
- }
- /**
- * Retorna um cliente da coleção
- */
- t_cliente colecao_cliente_indice(int indice, t_colecao_cliente colecaoCliente) {
- return *(colecaoCliente.elementos + indice);
- }
- /**
- * Cria um novo cliente
- */
- t_cliente cliente_criar() {
- t_cliente cliente;
- printf("\n# Novo cliente #\n");
- printf("Informe o nome: ");
- fgets(cliente.nome, TAMANHO_NOME, stdin);
- trim(cliente.nome);
- strcpy(cliente.reino, "Br Hu3");
- strcpy(cliente.nomeCasa, "Porto Alegre");
- cliente.valorEmprestado = 1000;
- cliente.percentualJuros = 0.33;
- cliente.quantidadeParcelas = 12;
- //printf("Informe o reino: ");
- //fgets(cliente.reino, TAMANHO_REINO, stdin);
- //trim(cliente.reino);
- //printf("Informe o nome da casa: ");
- //fgets(cliente.nomeCasa, TAMANHO_NOME_CASA, stdin);
- //trim(cliente.reino);
- //printf("Informe o valor emprestado: ");
- //scanf("%f", &cliente.valorEmprestado);
- //printf("Informe o percentual de juros (exemplo: 10 para 10%%): ");
- //scanf("%f", &cliente.percentualJuros);
- //printf("Informe a quantidade de parcelas: ");
- //scanf("%f", &cliente.quantidadeParcelas);
- cliente.valorJuros =
- cliente.valorEmprestado
- * (cliente.percentualJuros / 100)
- * cliente.quantidadeParcelas;
- cliente.valorFinalPagar =
- cliente.valorEmprestado
- + cliente.valorJuros;
- return cliente;
- }
- /**
- * Exibe as informações de um cliente
- */
- void cliente_exibir(t_cliente cliente) {
- printf("\nCliente\n");
- printf("Nome: %s\n", cliente.nome);
- printf("Reino: %s\n", cliente.reino);
- printf("Nome da casa: %s\n", cliente.nomeCasa);
- printf("Valor emprestado: R$ %.2f\n", cliente.valorEmprestado);
- printf("Percentual de juros: %.2f%%\n", cliente.percentualJuros);
- printf("Quantidade de parcelas: %.f\n", cliente.quantidadeParcelas);
- printf("Valor de juros: R$ %.2f\n", cliente.valorJuros);
- printf("Valor final a pagar: R$ %.2f\n", cliente.valorFinalPagar);
- printf("Valor de cada parcela: R$ %.2f\n", (cliente.valorJuros / cliente.quantidadeParcelas));
- }
- int main(int argc, char *argv[]) {
- t_colecao_cliente colecaoCliente;
- colecaoCliente = colecao_cliente_inicializar();
- for (int i=0; i<7; i++) {
- t_cliente cliente = cliente_criar();
- colecao_cliente_cadastrar(cliente, &colecaoCliente);
- }
- printf("Coleção completa:\n");
- for (int i=0; i<colecaoCliente.indice; i++) {
- cliente_exibir(colecao_cliente_indice(i, colecaoCliente));
- }
- return (EXIT_SUCCESS);
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement