Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- #include <stdio.h>
- #include <stdlib.h>
- #include <string.h>
- #include "transacoes.h"
- #include "input.h"
- #include "tools.h"
- void iniciarTransacoes(Transacoes *transacoes, char *ficheiro) {
- int i, sucesso = 0;
- FILE *fp = fopen(ficheiro, "rb");
- if (fp != NULL) {
- fread(&transacoes->contador, sizeof (int), 1, fp);
- if (transacoes->contador > 0) {
- transacoes->tamanho = transacoes->contador;
- transacoes->transacao = (Transacao*) malloc(transacoes->contador * sizeof (Transacao));
- for (i = 0; i < transacoes->contador; i++) {
- fread(&transacoes->transacao[i], sizeof (Transacao), 1, fp);
- transacoes->transacao[i].codigo = malloc(sizeof (int));
- transacoes->transacao[i].data.dia = malloc(sizeof (int));
- transacoes->transacao[i].data.mes = malloc(sizeof (int));
- transacoes->transacao[i].data.ano = malloc(sizeof (int));
- transacoes->transacao[i].numeroCartao = malloc(sizeof (long));
- transacoes->transacao[i].nome = malloc(sizeof (char[TRANSACOES_STR_MAX]));
- transacoes->transacao[i].descricao = malloc(sizeof (char[TRANSACOES_DESCRICAO_MAX]));
- transacoes->transacao[i].tipoTransacao = malloc(sizeof (Tipo));
- transacoes->transacao[i].valor = malloc(sizeof (double));
- fread(transacoes->transacao[i].codigo, sizeof (int), transacoes->transacao[i].codigo, fp);
- fread(transacoes->transacao[i].data.dia, sizeof (int), transacoes->transacao[i].data.dia, fp);
- fread(transacoes->transacao[i].data.mes, sizeof (int), transacoes->transacao[i].data.mes, fp);
- fread(transacoes->transacao[i].data.ano, sizeof (int), transacoes->transacao[i].data.ano, fp);
- fread(transacoes->transacao[i].numeroCartao, sizeof (long), transacoes->transacao[i].numeroCartao, fp);
- fread(transacoes->transacao[i].nome, sizeof (char[TRANSACOES_STR_MAX]), transacoes->transacao[i].nome, fp);
- fread(transacoes->transacao[i].descricao, sizeof (char[TRANSACOES_DESCRICAO_MAX]), transacoes->transacao[i].descricao, fp);
- fread(transacoes->transacao[i].tipoTransacao, sizeof (Tipo), transacoes->transacao[i].tipoTransacao, fp);
- fread(transacoes->transacao[i].valor, sizeof (double), transacoes->transacao[i].valor, fp);
- }
- sucesso = 1;
- }
- fclose(fp);
- }
- if (!sucesso) {
- fp = fopen(ficheiro, "wb");
- if (fp != NULL) {
- transacoes->transacao = (Transacao*) malloc(TRANSACOES_TAM_INICIAL * sizeof (Transacao));
- transacoes->contador = 0;
- transacoes->tamanho = TRANSACOES_TAM_INICIAL;
- fclose(fp);
- }
- }
- }
- int inserirTransacao(Transacoes *transacoes) {
- char nome[TRANSACOES_STR_MAX];
- char descricao[TRANSACOES_DESCRICAO_MAX];
- long numeroCartao;
- double valor;
- printf("Número do cartão: ");
- scanf("%ld", &numeroCartao);
- transacoes->transacao[transacoes->contador].numeroCartao = numeroCartao;
- printf("Valor da transação");
- scanf("%lf",&valor);
- transacoes->transacao[transacoes->contador].valor = valor;
- transacoes->transacao[transacoes->contador].data.dia = obterInt(1, 31, "Dia: ");
- transacoes->transacao[transacoes->contador].data.mes = obterInt(1, 12, "Mes: ");
- transacoes->transacao[transacoes->contador].data.ano = obterInt(1900, 2021, "Ano: ");
- lerString(nome, TRANSACOES_STR_MAX, "\nNome do colaborador: ");
- strcpy(transacoes->transacao[transacoes->contador].nome, nome);
- lerString(nome, TRANSACOES_STR_MAX, "\nDescrição da transacao: ");
- strcpy(transacoes->transacao[transacoes->contador].descricao, descricao);
- int opcao = obterInt(1, 3, "Tipo de transacao: \n1- Alimentação\n2-Combustível\n3- Outros");
- Tipo tipo;
- switch (opcao) {
- case 1:
- tipo = Tipo.ALIMENTACAO;
- break;
- case 2:
- tipo = Tipo.COMBUSTIVEL;
- break;
- case 3: Tipo.OUTROS;
- }
- transacoes->transacao[transacoes->contador].tipoTransacao = tipo;
- transacoes->transacao[transacoes->contador].codigo = transacoes->contador;
- guardarTransacoes(&transacoes);
- return transacoes->contador++;
- }
- void guardarTransacoes(Transacoes *transacoes, char *ficheiro) {
- int i;
- FILE *fp = fopen(ficheiro, "wb");
- if (fp == NULL) {
- exit(EXIT_FAILURE);
- }
- fwrite(&transacoes->contador, sizeof (int), 1, fp);
- for (i = 0; i < transacoes->contador; i++) {
- fwrite(&transacoes->transacao[i], sizeof (Transacao), 1, fp);
- fwrite(transacoes->transacao[i].codigo, sizeof (int), transacoes->transacao[i].codigo, fp);
- fwrite(transacoes->transacao[i].data.dia, sizeof (int), transacoes->transacao[i].data.dia, fp);
- fwrite(transacoes->transacao[i].data.mes, sizeof (int), transacoes->transacao[i].data.mes, fp);
- fwrite(transacoes->transacao[i].data.ano, sizeof (int), transacoes->transacao[i].data.ano, fp);
- fwrite(transacoes->transacao[i].numeroCartao, sizeof (long), transacoes->transacao[i].numeroCartao, fp);
- fwrite(transacoes->transacao[i].descricao, sizeof (char[TRANSACOES_DESCRICAO_MAX]), transacoes->transacao[i].descricao, fp);
- fwrite(transacoes->transacao[i].nome, sizeof (char[TRANSACOES_STR_MAX]), transacoes->transacao[i].nome, fp);
- fwrite(transacoes->transacao[i].tipoTransacao, sizeof (Tipo), transacoes->transacao[i].tipoTransacao, fp);
- fwrite(transacoes->transacao[i].valor, sizeof (double), transacoes->transacao[i].valor, fp);
- }
- fclose(fp);
- }
- void libertarTransacoes(Transacoes *transacoes) {
- if (transacoes->transacao) {
- free(transacoes->transacao);
- transacoes->transacao = NULL;
- }
- transacoes = NULL;
- }
- void expandirTransacoes(Transacoes *transacoes) {
- int tam = (transacoes->tamanho) == 0 ? TRANSACOES_TAM_INICIAL : transacoes->tamanho * 2;
- Transacao *temp = (Transacao*) realloc(transacoes->transacao, sizeof (Transacao) * (tam));
- if (temp != NULL) {
- transacoes->tamanho = tam;
- transacoes->transacao = temp;
- }
- }
- void ObterValorAlimentacaoMesAno(Transacoes *transacoes) {
- int i, mes, ano;
- double valorTotal = 0;
- mes = obterInt(1, 12, "Mês: ");
- ano = obterInt(1900, 2021, "Ano: ");
- if (transacoes.contador > 0) {
- for (i = 0; i < transacoes.contador; i++) {
- if (transacoes->transacao[i].tipoTransacao == Tipo.ALIMENTACAO
- && transacoes->transacao[i].data.mes == mes
- && transacoes->transacao[i].data.ano == ano) {
- valorTotal += transacoes->transacao[i].valor;
- }
- }
- } else {
- puts("Não existem pagamentos de alimentação para a data escolhida");
- }
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement