Advertisement
Guest User

Untitled

a guest
Aug 17th, 2017
77
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C 4.41 KB | None | 0 0
  1. #include <stdio.h>
  2. #include <string.h>
  3. #include <stdlib.h>
  4.  
  5. #define TAMANHO_NOME             200
  6. #define TAMANHO_REINO            40
  7. #define TAMANHO_NOME_CASA        40
  8. #define TAMANHO_COLECAO_CLIENTE  5
  9.  
  10. /**
  11.  * Define o tipo Cliente
  12.  */
  13. typedef struct {
  14.  
  15.     char nome[TAMANHO_NOME];
  16.     char reino[TAMANHO_REINO];
  17.     char nomeCasa[TAMANHO_NOME_CASA];
  18.  
  19.     float quantidadeParcelas;
  20.     float percentualJuros;
  21.     float valorEmprestado;
  22.     float valorJuros;
  23.     float valorFinalPagar;
  24.  
  25. } t_cliente;
  26.  
  27. /**
  28.  * Define o tipo Coleção de Cliente
  29.  */
  30. typedef struct {
  31.  
  32.     t_cliente *elementos;
  33.     int indice;
  34.     int alocado;
  35.  
  36. } t_colecao_cliente;
  37.  
  38. /**
  39.  * Remove a linha em branco, lida pelo fgets, do final da string.
  40.  */
  41. void trim(char *valor) {
  42.     valor[strcspn(valor, "\n")] = 0;
  43. }
  44.  
  45. /**
  46.  * Inicializa a coleção
  47.  */
  48. t_colecao_cliente colecao_cliente_inicializar() {
  49.  
  50.     t_colecao_cliente colecaoCliente;
  51.     colecaoCliente.elementos = (t_cliente*) calloc(TAMANHO_COLECAO_CLIENTE, sizeof(t_cliente));
  52.     colecaoCliente.indice = 0;
  53.     colecaoCliente.alocado = TAMANHO_COLECAO_CLIENTE;
  54.  
  55.     return colecaoCliente;
  56. }
  57.  
  58. /**
  59.  * Cadastra um novo cliente na coleção
  60.  */
  61. void colecao_cliente_cadastrar(t_cliente cliente, t_colecao_cliente *colecaoCliente) {
  62.     /**
  63.      * Se atingiu a quantidade máxima de elementos, aloca mais memória
  64.      */
  65.     if (colecaoCliente->indice == colecaoCliente->alocado) {
  66.         colecaoCliente->elementos =
  67.             (t_cliente*) realloc(
  68.                 colecaoCliente->elementos,
  69.                 (colecaoCliente->indice + TAMANHO_COLECAO_CLIENTE) * sizeof(t_cliente)
  70.             );
  71.     }
  72.     /**
  73.      * Adiciona o elemento e incrementa o índice
  74.      */
  75.     *(colecaoCliente->elementos + colecaoCliente->indice) = cliente;
  76.     colecaoCliente->indice++;
  77. }
  78.  
  79. /**
  80.  * Retorna um cliente da coleção
  81.  */
  82. t_cliente colecao_cliente_indice(int indice, t_colecao_cliente colecaoCliente) {
  83.     return *(colecaoCliente.elementos + indice);
  84. }
  85.  
  86. /**
  87.  * Cria um novo cliente
  88.  */
  89. t_cliente cliente_criar() {
  90.  
  91.     t_cliente cliente;
  92.     printf("\n# Novo cliente #\n");
  93.  
  94.     printf("Informe o nome: ");
  95.     fgets(cliente.nome, TAMANHO_NOME, stdin);
  96.     trim(cliente.nome);
  97.  
  98.     strcpy(cliente.reino, "Br Hu3");
  99.     strcpy(cliente.nomeCasa, "Porto Alegre");
  100.     cliente.valorEmprestado = 1000;
  101.     cliente.percentualJuros = 0.33;
  102.     cliente.quantidadeParcelas = 12;
  103.  
  104.     //printf("Informe o reino: ");
  105.     //fgets(cliente.reino, TAMANHO_REINO, stdin);
  106.     //trim(cliente.reino);
  107.  
  108.     //printf("Informe o nome da casa: ");
  109.     //fgets(cliente.nomeCasa, TAMANHO_NOME_CASA, stdin);
  110.     //trim(cliente.reino);
  111.  
  112.     //printf("Informe o valor emprestado: ");
  113.     //scanf("%f", &cliente.valorEmprestado);
  114.  
  115.     //printf("Informe o percentual de juros (exemplo: 10 para 10%%): ");
  116.     //scanf("%f", &cliente.percentualJuros);
  117.  
  118.     //printf("Informe a quantidade de parcelas: ");
  119.     //scanf("%f", &cliente.quantidadeParcelas);
  120.  
  121.     cliente.valorJuros =
  122.           cliente.valorEmprestado
  123.         * (cliente.percentualJuros / 100)
  124.         * cliente.quantidadeParcelas;
  125.  
  126.     cliente.valorFinalPagar =
  127.         cliente.valorEmprestado
  128.         + cliente.valorJuros;
  129.  
  130.     return cliente;
  131. }
  132.  
  133. /**
  134.  * Exibe as informações de um cliente
  135.  */
  136. void cliente_exibir(t_cliente cliente) {
  137.     printf("\nCliente\n");
  138.     printf("Nome: %s\n", cliente.nome);
  139.     printf("Reino: %s\n", cliente.reino);
  140.     printf("Nome da casa: %s\n", cliente.nomeCasa);
  141.     printf("Valor emprestado: R$ %.2f\n", cliente.valorEmprestado);
  142.     printf("Percentual de juros: %.2f%%\n", cliente.percentualJuros);
  143.     printf("Quantidade de parcelas: %.f\n", cliente.quantidadeParcelas);
  144.     printf("Valor de juros: R$ %.2f\n", cliente.valorJuros);
  145.     printf("Valor final a pagar: R$ %.2f\n", cliente.valorFinalPagar);
  146.     printf("Valor de cada parcela: R$ %.2f\n", (cliente.valorJuros / cliente.quantidadeParcelas));
  147. }
  148.  
  149. int main(int argc, char *argv[]) {
  150.  
  151.     t_colecao_cliente colecaoCliente;
  152.     colecaoCliente = colecao_cliente_inicializar();
  153.  
  154.     for (int i=0; i<7; i++) {
  155.         t_cliente cliente = cliente_criar();
  156.         colecao_cliente_cadastrar(cliente, &colecaoCliente);
  157.     }
  158.  
  159.     printf("Coleção completa:\n");
  160.     for (int i=0; i<colecaoCliente.indice; i++) {
  161.         cliente_exibir(colecao_cliente_indice(i, colecaoCliente));
  162.     }
  163.  
  164.     return (EXIT_SUCCESS);
  165. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement