Advertisement
xickoh

transacoes.c

Feb 12th, 2021
679
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C 6.95 KB | None | 0 0
  1. #include <stdio.h>
  2. #include <stdlib.h>
  3. #include <string.h>
  4.  
  5. #include "transacoes.h"
  6. #include "input.h"
  7. #include "tools.h"
  8.  
  9. void iniciarTransacoes(Transacoes *transacoes, char *ficheiro) {
  10.     int i, sucesso = 0;
  11.  
  12.     FILE *fp = fopen(ficheiro, "rb");
  13.     if (fp != NULL) {
  14.  
  15.         fread(&transacoes->contador, sizeof (int), 1, fp);
  16.  
  17.         if (transacoes->contador > 0) {
  18.             transacoes->tamanho = transacoes->contador;
  19.             transacoes->transacao = (Transacao*) malloc(transacoes->contador * sizeof (Transacao));
  20.             for (i = 0; i < transacoes->contador; i++) {
  21.                 fread(&transacoes->transacao[i], sizeof (Transacao), 1, fp);
  22.  
  23.                 transacoes->transacao[i].codigo = malloc(sizeof (int));
  24.                 transacoes->transacao[i].data.dia = malloc(sizeof (int));
  25.                 transacoes->transacao[i].data.mes = malloc(sizeof (int));
  26.                 transacoes->transacao[i].data.ano = malloc(sizeof (int));
  27.                 transacoes->transacao[i].numeroCartao = malloc(sizeof (long));
  28.                 transacoes->transacao[i].nome = malloc(sizeof (char[TRANSACOES_STR_MAX]));
  29.                 transacoes->transacao[i].descricao = malloc(sizeof (char[TRANSACOES_DESCRICAO_MAX]));
  30.                 transacoes->transacao[i].tipoTransacao = malloc(sizeof (Tipo));
  31.                 transacoes->transacao[i].valor = malloc(sizeof (double));
  32.  
  33.                 fread(transacoes->transacao[i].codigo, sizeof (int), transacoes->transacao[i].codigo, fp);
  34.                 fread(transacoes->transacao[i].data.dia, sizeof (int), transacoes->transacao[i].data.dia, fp);
  35.                 fread(transacoes->transacao[i].data.mes, sizeof (int), transacoes->transacao[i].data.mes, fp);
  36.                 fread(transacoes->transacao[i].data.ano, sizeof (int), transacoes->transacao[i].data.ano, fp);
  37.                 fread(transacoes->transacao[i].numeroCartao, sizeof (long), transacoes->transacao[i].numeroCartao, fp);
  38.                 fread(transacoes->transacao[i].nome, sizeof (char[TRANSACOES_STR_MAX]), transacoes->transacao[i].nome, fp);
  39.                 fread(transacoes->transacao[i].descricao, sizeof (char[TRANSACOES_DESCRICAO_MAX]), transacoes->transacao[i].descricao, fp);
  40.                 fread(transacoes->transacao[i].tipoTransacao, sizeof (Tipo), transacoes->transacao[i].tipoTransacao, fp);
  41.                 fread(transacoes->transacao[i].valor, sizeof (double), transacoes->transacao[i].valor, fp);
  42.             }
  43.             sucesso = 1;
  44.         }
  45.  
  46.         fclose(fp);
  47.     }
  48.  
  49.     if (!sucesso) {
  50.         fp = fopen(ficheiro, "wb");
  51.         if (fp != NULL) {
  52.  
  53.             transacoes->transacao = (Transacao*) malloc(TRANSACOES_TAM_INICIAL * sizeof (Transacao));
  54.             transacoes->contador = 0;
  55.             transacoes->tamanho = TRANSACOES_TAM_INICIAL;
  56.  
  57.             fclose(fp);
  58.         }
  59.     }
  60.  
  61. }
  62.  
  63. int inserirTransacao(Transacoes *transacoes) {
  64.     char nome[TRANSACOES_STR_MAX];
  65.     char descricao[TRANSACOES_DESCRICAO_MAX];
  66.     long numeroCartao;
  67.     double valor;
  68.  
  69.     printf("Número do cartão: ");
  70.     scanf("%ld", &numeroCartao);
  71.     transacoes->transacao[transacoes->contador].numeroCartao = numeroCartao;
  72.    
  73.     printf("Valor da transação");
  74.     scanf("%lf",&valor);
  75.     transacoes->transacao[transacoes->contador].valor = valor;
  76.  
  77.     transacoes->transacao[transacoes->contador].data.dia = obterInt(1, 31, "Dia: ");
  78.     transacoes->transacao[transacoes->contador].data.mes = obterInt(1, 12, "Mes: ");
  79.     transacoes->transacao[transacoes->contador].data.ano = obterInt(1900, 2021, "Ano: ");
  80.  
  81.     lerString(nome, TRANSACOES_STR_MAX, "\nNome do colaborador: ");
  82.     strcpy(transacoes->transacao[transacoes->contador].nome, nome);
  83.  
  84.     lerString(nome, TRANSACOES_STR_MAX, "\nDescrição da transacao: ");
  85.     strcpy(transacoes->transacao[transacoes->contador].descricao, descricao);
  86.  
  87.     int opcao = obterInt(1, 3, "Tipo de transacao: \n1- Alimentação\n2-Combustível\n3- Outros");
  88.     Tipo tipo;
  89.     switch (opcao) {
  90.         case 1:
  91.             tipo = Tipo.ALIMENTACAO;
  92.             break;
  93.         case 2:
  94.             tipo = Tipo.COMBUSTIVEL;
  95.             break;
  96.         case 3: Tipo.OUTROS;
  97.     }
  98.     transacoes->transacao[transacoes->contador].tipoTransacao = tipo;
  99.  
  100.     transacoes->transacao[transacoes->contador].codigo = transacoes->contador;
  101.  
  102.     guardarTransacoes(&transacoes);
  103.  
  104.     return transacoes->contador++;
  105. }
  106.  
  107. void guardarTransacoes(Transacoes *transacoes, char *ficheiro) {
  108.     int i;
  109.  
  110.     FILE *fp = fopen(ficheiro, "wb");
  111.     if (fp == NULL) {
  112.         exit(EXIT_FAILURE);
  113.     }
  114.  
  115.     fwrite(&transacoes->contador, sizeof (int), 1, fp);
  116.  
  117.     for (i = 0; i < transacoes->contador; i++) {
  118.         fwrite(&transacoes->transacao[i], sizeof (Transacao), 1, fp);
  119.         fwrite(transacoes->transacao[i].codigo, sizeof (int), transacoes->transacao[i].codigo, fp);
  120.         fwrite(transacoes->transacao[i].data.dia, sizeof (int), transacoes->transacao[i].data.dia, fp);
  121.         fwrite(transacoes->transacao[i].data.mes, sizeof (int), transacoes->transacao[i].data.mes, fp);
  122.         fwrite(transacoes->transacao[i].data.ano, sizeof (int), transacoes->transacao[i].data.ano, fp);
  123.         fwrite(transacoes->transacao[i].numeroCartao, sizeof (long), transacoes->transacao[i].numeroCartao, fp);
  124.         fwrite(transacoes->transacao[i].descricao, sizeof (char[TRANSACOES_DESCRICAO_MAX]), transacoes->transacao[i].descricao, fp);
  125.         fwrite(transacoes->transacao[i].nome, sizeof (char[TRANSACOES_STR_MAX]), transacoes->transacao[i].nome, fp);
  126.         fwrite(transacoes->transacao[i].tipoTransacao, sizeof (Tipo), transacoes->transacao[i].tipoTransacao, fp);
  127.         fwrite(transacoes->transacao[i].valor, sizeof (double), transacoes->transacao[i].valor, fp);
  128.     }
  129.  
  130.     fclose(fp);
  131. }
  132.  
  133. void libertarTransacoes(Transacoes *transacoes) {
  134.     if (transacoes->transacao) {
  135.         free(transacoes->transacao);
  136.         transacoes->transacao = NULL;
  137.     }
  138.  
  139.     transacoes = NULL;
  140. }
  141.  
  142. void expandirTransacoes(Transacoes *transacoes) {
  143.     int tam = (transacoes->tamanho) == 0 ? TRANSACOES_TAM_INICIAL : transacoes->tamanho * 2;
  144.     Transacao *temp = (Transacao*) realloc(transacoes->transacao, sizeof (Transacao) * (tam));
  145.     if (temp != NULL) {
  146.         transacoes->tamanho = tam;
  147.         transacoes->transacao = temp;
  148.     }
  149. }
  150.  
  151. void ObterValorAlimentacaoMesAno(Transacoes *transacoes) {
  152.     int i, mes, ano;
  153.     double valorTotal = 0;
  154.  
  155.     mes = obterInt(1, 12, "Mês: ");
  156.     ano = obterInt(1900, 2021, "Ano: ");
  157.  
  158.     if (transacoes.contador > 0) {
  159.         for (i = 0; i < transacoes.contador; i++) {
  160.  
  161.             if (transacoes->transacao[i].tipoTransacao == Tipo.ALIMENTACAO
  162.                     && transacoes->transacao[i].data.mes == mes
  163.                     && transacoes->transacao[i].data.ano == ano) {
  164.                 valorTotal += transacoes->transacao[i].valor;
  165.             }
  166.         }
  167.     } else {
  168.         puts("Não existem pagamentos de alimentação para a data escolhida");
  169.     }
  170. }
  171.  
  172.  
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement