Ir para conteúdo
Fórum Script Brasil
  • 0

Desafio faculdade (Sistema Bancário)


Wendell

Pergunta

Se alguém poder me dar uma luz, pois necessito muito de um esclarecimento direto, em cima do código,

pois na literatura pra mim esta muito (*abstrato).

Valeu

Desenvolver as funções CriaSubListaContaOrdenada e

CriaSubListaFaturaOrdenada, necessárias para o funcionamento de um sistema de

geração de extrato de conta corrente e cartão de crédito para o Banco TAD$. Estas

funções devem ser desenvolvidas utilizando a linguagem de programação C, seguindo

a estrutura do código fonte do anexo I, cujas funções estão descritas no anexo II. Vale

a pena salientar que é permitida a criação de funções adicionais, desde que estas

sejam chamadas dentro do escopo das funções CriaSubListaContaOrdenada ou

CriaSubListaFaturaOrdenada.

Usando o arquivo Entrada.txt (

Maria Cristina Ribeiro;123-4;5678-9;1000.00;987654321

05/01/2009;10:30;Deposito;100.00

09/01/2009;15:30;Compra_debito;30.00

01/11/2008;09:00;Compra_credito;30.00

10/02/2009;11:10;Transferencia;+49.50

11/12/2008;13:20;Pgto_fatura;50.00

10/12/2008;14:25;Compra_credito;30.00

28/12/2008;08:00;Saque;500.00

07/02/2009;11:20;Pgto_fatura;100.00

25/01/2009;08:00;Saque;200.00

18/10/2008;12:04;Compra_debito;500.00

09/01/2009;18:30;Compra_debito;55.00

02/01/2009;18:25;Compra_credito;150.00

17/02/2009;09:55;Compra_credito;25.45

15/11/2008;12:40;Compra_debito;500.00

18/01/2009;13:40;Deposito;500.00

05/01/2009;10:20;Pgto_fatura;50.00

10/01/2009;16:30;Transferencia;-90.50

05/01/2009;20:35;Transferencia;+100.25

21/11/2008;09:10;Compra_credito;90.00

25/12/2008;12:40;Compra_debito;70.45

13/01/2009;11:45;Deposito;50.10

05/12/2008;10:30;Deposito;200.00

05/12/2008;14:25;Compra_credito;20.00

25/10/2008;09:30;Compra_debito;130.00

07/02/2009;11:55;Compra_credito;175.45

25/12/2008;11:30;Compra_debito;200.45

15/02/2009;10:30;Deposito;300.00

15/01/2009;10:25;Compra_credito;220.00

07/11/2008;11:20;Pgto_fatura;100.00

05/01/2009;10:55;Compra_credito;35.45

20/02/2009;17:20;Pgto_fatura;400.00)

/******************************************Bibliotecas*************************************/

#include <stdio.h>

#include <stdlib.h>

#include <string.h>

#include <conio.h>

/*****************************************Definições***************************************/

#define TAM_STRING 100

/*****************************************Estruturas***************************************/

//Estrutura utilizada para armazenar uma data

typedef struct Data

{

int iDia;

int iMes;

int iAno;

} stData;

//Estrutura utilizada para armazenar uma hora

typedef struct Horario

{

int iHora;

int iMinuto;

}stHorario;

//Estrutura utilizada para armazenar os dados de uma conta

typedef struct Conta

{

char cTitular[TAM_STRING];

char cAgencia[TAM_STRING];

char cNumConta[TAM_STRING];

float fSaldoAnterior;

float fSaldoAtual;

int iNumCartao;

float fTotalComprasCartao;

float fTotalPagtosCartao;

float fTotalCartao;

}stConta;

//Estrutura utilizada para representar uma transação efetuada na conta ou cartão de crédito

typedef struct Transacao

{

float fValor;

stData sData;

int iOperacao;

stHorario sHorario;

struct Transacao *prProximo;

}stTransacao;

//Estrutura utilizada para representar uma lista de transações

typedef struct Lista

{

stTransacao *prInicio;

stTransacao *prFim;

}stLista;

/*****************************************Variáveis Globais********************************/

//Armazena o nome das operações bancárias para conta corrente (Compra_debito, Saque, Deposito, Transferencia) e

//cartao de crédito (Compra_credito, Pgto_fatura)

char* OPERACOES[] = {"Compra_debito","Saque","Deposito","Transferencia","Compra_credito","Pgto_fatura"};

/*************************Implementação das funções****************************************/

/*------------------------------------------------------------------------------------------

* Nome da função: LerCabecalho

* Descrição: Realiza a quebra das informações contidas no cabeçalho do arquivo (1ª linha do arquivo)

* Retorno: Nenhum

* Parâmetros: Ponteiro para uma estrutura stConta e string contendo cabeçalho

------------------------------------------------------------------------------------------*/

void LerCabecalho(stConta *pConta, char psCabecalho[])

{

//Quebra os tokens do cabeçalho

strcpy(pConta->cTitular,strtok(psCabecalho,";"));

strcpy(pConta->cAgencia,strtok(NULL,";"));

strcpy(pConta->cNumConta,strtok(NULL,";"));

sscanf(strtok(NULL,";"),"%f",&pConta->fSaldoAnterior);

sscanf(strtok(NULL,";"),"%d",&pConta->iNumCartao);

}

/*------------------------------------------------------------------------------------------

* Nome da função: RetornaOperacao

* Descrição: Recebe uma string contendo uma operação e retorna o código da mesma

* Retorno: Um valor inteiro indicando o código da transação

* Parâmetros: String contendo a operaçao

------------------------------------------------------------------------------------------*/

int RetornaOperacao(char psOperacao[])

{

int iIndex=0;

for (iIndex=0; iIndex<6; iIndex++)

{

if(!strcmp(psOperacao,OPERACOES[iIndex]))

{

return iIndex;

}

}

return -1;

}

/*------------------------------------------------------------------------------------------

* Nome da função: PreencheTransacao

* Descrição: Quebra os campos de uma String contendo a transação e preenche a estrutura

* Retorno: Nenhum

* Parâmetros: Ponteiro para uma estrutura stTransacao e uma String

------------------------------------------------------------------------------------------*/

void PreencheTransacao(stTransacao *pTransacao, char psTransacao[])

{

//Inicializa a transacao

pTransacao->prProximo = NULL;

pTransacao->fValor = 0.0f;

//Quebra os tokens da transacao

sscanf(strtok(psTransacao,";"),"%d/%d/%d/",&pTransacao->sData.iDia,&pTransacao->sData.iMes, &pTransacao->sData.iAno);

sscanf(strtok(NULL,";"),"%d:%d",&pTransacao->sHorario.iHora,&pTransacao->sHorario.iMinuto);

//Invoca a função que devolve o código da operação com base em uma string

pTransacao->iOperacao = RetornaOperacao(strtok(NULL,";"));

sscanf(strtok(NULL,";"),"%f",&pTransacao->fValor);

//Faz a leitura do valor da transacao e de acordo com o tipo de operação coloca o sinal

if(pTransacao->iOperacao == 0 || pTransacao->iOperacao == 1 || pTransacao->iOperacao == 4)

{

pTransacao->fValor *= -1;

}

}

/*------------------------------------------------------------------------------------------

* Nome da função: InsereTransacao

* Descrição: Insere uma transação na lista passada como parâmetro

* Retorno: Nenhum

* Parâmetros: Um ponteiro para uma lista e um ponteiro para uma transação

-------------------------------------------------------------------------------------------*/

void InsereTransacao(stLista *pLista, stTransacao *pTransacao)

{

//Variáveis temporárias

int iIndex=0;

int iPosicao = 0;

stTransacao *temp = NULL;

//Verifica se a lista existe

if (!pLista)

{

return;

}

//Lista vazia, inserção do primeiro elemento na lista

if (!pLista->prInicio)

{

pLista->prInicio = pTransacao;

pLista->prFim = pTransacao;

return;

}

//Inserção no final da lista

pLista->prFim->prProximo = pTransacao;

pLista->prFim = pTransacao;

}

/*------------------------------------------------------------------------------------------

* Nome da função: LerArquivo

* Descrição: Realiza a leitura das informações do arquivo de entrada para as listas da conta

* corrente e do cartão de crédito

* Retorno: Nenhum

* Parâmetros: Um ponteiro para a lista conta, um ponteiro para a lista cartao, um ponteiro para

* uma estrutura stConta e uma String com o nome do arquivo a ser lido

------------------------------------------------------------------------------------------*/

void LerArquivo(stLista *pListaConta, stLista *pListaCartao, stConta *pConta, char psNomeArquivo[])

{

//Declara um ponteiro para a estrutura de um arquivo

FILE *prArquivoEntrada = NULL;

//Declara uma string para a leitura da linha

char sLinha[TAM_STRING];

//Declara um ponteiro para transaçao

stTransacao *prTransacao = NULL;

//Faz as inicializaçoes das estruturas lista

pListaConta->prInicio = NULL;

pListaConta->prFim = NULL;

pListaCartao->prInicio = NULL;

pListaCartao->prFim = NULL;

//Faz as inicializações da estrutura conta

pConta->fSaldoAnterior = 0.0f;

pConta->fSaldoAtual = 0.0f;

pConta->iNumCartao = 0;

pConta->fTotalComprasCartao = 0.0f;

pConta->fTotalPagtosCartao = 0.0f;

pConta->fTotalCartao = 0.0f;

//Faz a abertura do arquivo

prArquivoEntrada = fopen(psNomeArquivo,"r");

//Testa se o arquivo foi aberto com sucesso

if (!prArquivoEntrada)

{

printf("não foi possivel abrir o arquivo de entrada");

return;

}

//Le a primeira linha do arquivo (cabecalho)

fgets(sLinha,TAM_STRING,prArquivoEntrada);

//Invoca a função que separa as informaçoes do cabeçalho

LerCabecalho(pConta,sLinha);

//Enquanto existirem transasões a serem lidas

while (!feof(prArquivoEntrada))

{

//Faz a leitura de uma linha no arquivo contendo os dados da transação

fgets(sLinha,TAM_STRING,prArquivoEntrada);

//Testa se não é linha em branco

if (sLinha[0]=='\n')

{

continue;

}

//Aloca memória para uma nova transação

prTransacao = (stTransacao*)malloc(sizeof(stTransacao));

//Quebra os dados da transação e preenche as estruturas

PreencheTransacao(prTransacao,sLinha);

//Verifica o tipo da operação e insere na lista do cartão ou da conta corrente:

//código 1 a 4: operações de conta corrente

//código 5 e 6: operações do cartão de crédito

if (prTransacao->iOperacao < 4)

{

InsereTransacao(pListaConta,prTransacao);

}

else

{

InsereTransacao(pListaCartao,prTransacao);

}

}

//Fecha o arquivo

fclose(prArquivoEntrada);

}

/*------------------------------------------------------------------------------------------

* Nome da função: CriaSubListaContaOrdenada

* Descrição: Cria uma sublista ordenada contendo as transações da conta com base em uma data inicial e final

* Retorno: Ponteiro para uma lista

* Parâmetros: Ponteiro para uma lista ordenada, ponteiro para estrutura do tipo conta e duas

* estruturas do tipo data

------------------------------------------------------------------------------------------*/

stLista* CriaSubListaContaOrdenada(stLista* pListaConta, stConta *pConta, stData pDataInicial, stData pDataFinal)

{

//Cria um ponteiro para o nó inicial de uma lista

stLista* prSubLista = NULL;

//Implemente aqui

//Retorna a lista ordenada

return prSubLista;

}

/*------------------------------------------------------------------------------------------

* Nome da função: CriaSubListaFaturaOrdenada

* Descrição: Cria uma sublista das transações da fatura com base em uma data inicial e final

* Retorno: Ponteiro para uma lista

* Parâmetros: Ponteiro para uma lista ordenada, ponteiro para estrutura do tipo conta e duas

* estruturas do tipo data

------------------------------------------------------------------------------------------*/

stLista* CriaSubListaFaturaOrdenada(stLista* pListaCartao, stConta *pConta, stData pDataInicial, stData pDataFinal)

{

//Cria um ponteiro para o nó inicial de uma lista

stLista* prSubLista = NULL;

//Implemente aqui

//Retorna a lista ordenada

return prSubLista;

}

/*------------------------------------------------------------------------------------------

* Nome da função: LiberaTransacoes

* Descrição: Libera a memória de todas as transações contidas em uma lista

* Retorno: Nenhum

* Parâmetros: Um ponteiro para uma lista

------------------------------------------------------------------------------------------*/

void LiberaMemoriaTransacoes(stLista *pLista)

{

stTransacao *temp = NULL;

//Verifica se a lista não está vazia

if (!pLista || !pLista->prInicio)

{

return;

}

//Enquanto houverem transações na lista, libera memória

while (pLista->prInicio != NULL)

{

temp = pLista->prInicio->prProximo;

free(pLista->prInicio);

pLista->prInicio = temp;

}

//Aponta os ponteiros de inicio e fim de lista para NULL

pLista->prInicio = NULL;

pLista->prFim = NULL;

}

/*------------------------------------------------------------------------------------------

* Nome da função: FormataValorMonetario

* Descrição: Formata um valor monetário para o formato +00.00 ou -00.00

* Retorno: Nenhum

* Parâmetros: Um ponteiro para uma string e um valor do tipo float

------------------------------------------------------------------------------------------*/

void FormataValorMonetario(char *psValor, float pValor)

{

// Verifica o valor pra ver se é necessário inserir o sinal

if(pValor >= 0)

{

sprintf(psValor, "+%0.2f", pValor);

}

else

sprintf(psValor, "%0.2f", pValor);

}

/*------------------------------------------------------------------------------------------

* Nome da função: FormataData

* Descrição: Formata uma data para o formato dd/mm/aaaa

* Retorno: Nenhum

* Parâmetros: Um ponteiro para uma string e uma estrutura do tipo Data

------------------------------------------------------------------------------------------*/

void FormataData(char *psData, stData pData)

{

char cTmpDia[3];

char cTmpMes[3];

if(pData.iDia < 10)

{

sprintf(cTmpDia, "0%d", pData.iDia);

}

else

{

sprintf(cTmpDia, "%d", pData.iDia);

}

if(pData.iMes < 10)

{

sprintf(cTmpMes, "0%d", pData.iMes);

}

else

{

sprintf(cTmpMes, "%d", pData.iMes);

}

sprintf(psData, "%s/%s/%d", cTmpDia, cTmpMes, pData.iAno);

}

/*------------------------------------------------------------------------------------------

* Nome da função: FormataHorario

* Descrição: Formata um horario para o formato hh:mm

* Retorno: Nenhum

* Parâmetros: Um ponteiro para uma string e uma estrutura do tipo Horario

------------------------------------------------------------------------------------------*/

void FormataHorario(char *psHorario, stHorario pHorario)

{

char cTmpHora[3];

char cTmpMin[3];

if(pHorario.iHora < 10)

{

sprintf(cTmpHora, "0%d", pHorario.iHora);

}

else

{

sprintf(cTmpHora, "%d", pHorario.iHora);

}

if(pHorario.iMinuto < 10)

{

sprintf(cTmpMin, "0%d", pHorario.iMinuto);

}

else

{

sprintf(cTmpMin, "%d", pHorario.iMinuto);

}

sprintf(psHorario, "%s:%s", cTmpHora, cTmpMin);

}

/*------------------------------------------------------------------------------------------

* Nome da função: ImprimeExtrato

* Descrição: Faz a impressão do extrato da conta corrente

* Retorno: Nenhum

* Parâmetros: Uma estrutura do tipo stConta e um ponteiro para uma lista ordenada

------------------------------------------------------------------------------------------*/

void ImprimeExtrato(stConta pConta, stLista *pLista)

{

// Armazena valores que são convertidos para string

char strValor[TAM_STRING];

char strData[TAM_STRING];

char strHorario[TAM_STRING];

//Declara um ponteiro para a estrutura de um arquivo

FILE *prArquivoSaida = NULL;

//Faz a abertura do arquivo

prArquivoSaida = fopen("extratoConta.txt","w");

//Testa se o arquivo foi aberto com sucesso

if (!prArquivoSaida)

{

printf("não foi possivel abrir o arquivo de saída");

return;

}

fputs("\n ================================================\n", prArquivoSaida);

fputs("\n Banco TAD$\n", prArquivoSaida);

fputs("\n Extrato de Conta Corrente\n\n", prArquivoSaida);

fputs(" Agencia: ", prArquivoSaida);

fputs(pConta.cAgencia, prArquivoSaida);

fputs("\n",prArquivoSaida);

fputs(" Conta Corrente: ", prArquivoSaida);

fputs(pConta.cNumConta, prArquivoSaida);

fputs("\n",prArquivoSaida);

fputs(" Titular: ", prArquivoSaida);

fputs(pConta.cTitular, prArquivoSaida);

fputs("\n ------------------------------------------------\n\n", prArquivoSaida);

fputs("\n\t\t\tSaldo Anterior: ", prArquivoSaida);

FormataValorMonetario(strValor, pConta.fSaldoAnterior);

fputs(strValor, prArquivoSaida);

fputs("\n\n Data\t Horario\t Operacao\t Valor\n\n", prArquivoSaida);

//Cria um nó temporário

stTransacao *temp = NULL;

//Testa se a lista existe

if(!pLista || !pLista->prInicio)

{

return;

}

//Aponta para o primeiro elemento da lista

temp = pLista->prInicio;

//Enquanto lista não chegou ao final, imprime

while(temp!=pLista->prFim)

{

FormataValorMonetario(strValor, temp->fValor);

FormataData(strData, temp->sData);

FormataHorario(strHorario, temp->sHorario);

if(temp->iOperacao == 1) // Saque: adiciona mais uma tabulação antes do valor

{

fprintf(prArquivoSaida, " %s \t %s \t %s \t\t %s\n", strData, strHorario, OPERACOES[temp->iOperacao], strValor);

}

else

{

fprintf(prArquivoSaida, " %s \t %s \t %s \t %s\n", strData, strHorario, OPERACOES[temp->iOperacao], strValor);

}

temp = temp->prProximo;

}

FormataValorMonetario(strValor, temp->fValor);

FormataData(strData, temp->sData);

FormataHorario(strHorario, temp->sHorario);

fprintf(prArquivoSaida, " %s \t %s \t %s \t %s\n", strData, strHorario, OPERACOES[temp->iOperacao], strValor);

FormataValorMonetario(strValor, pConta.fSaldoAtual);

fputs("\n\t\t\tSaldo Atual: ", prArquivoSaida);

fputs(strValor, prArquivoSaida);

//Fecha o arquivo

fclose(prArquivoSaida);

}

/*------------------------------------------------------------------------------------------

* Nome da função: ImprimeFatura

* Descrição: Faz a impressão da fatura do cartão de crédito

* Retorno: Nenhum

* Parâmetros: Estrutura do tipo Conta e um ponteiro para uma lista ordenada

------------------------------------------------------------------------------------------*/

void ImprimeFatura(stConta pConta, stLista *pLista)

{

// Armazena valores que são convertidos para string

char strValor[TAM_STRING];

char strData[TAM_STRING];

char strHorario[TAM_STRING];

//Declara um ponteiro para a estrutura de um arquivo

FILE *prArquivoSaida = NULL;

//Faz a abertura do arquivo

prArquivoSaida = fopen("faturaCartao.txt","w");

//Testa se o arquivo foi aberto com sucesso

if (!prArquivoSaida)

{

printf("não foi possivel abrir o arquivo de saída");

return;

}

fputs("\n ================================================\n", prArquivoSaida);

fputs("\n Banco TAD$\n", prArquivoSaida);

fputs("\n Fatura do Cartao de Credito\n\n", prArquivoSaida);

fputs(" Nro. do Cartao: ", prArquivoSaida);

fprintf(prArquivoSaida, "%i\n", pConta.iNumCartao);

fputs(" Titular: ", prArquivoSaida);

fputs(pConta.cTitular, prArquivoSaida);

fputs("\n ------------------------------------------------\n\n", prArquivoSaida);

fputs("\n Data\t Horario\t Operacao\t Valor\n\n", prArquivoSaida);

//Cria um nó temporário

stTransacao *temp = NULL;

//Testa se a lista existe

if(!pLista || !pLista->prInicio)

{

return;

}

//Aponta para o primeiro elemento da lista

temp = pLista->prInicio;

//Enquanto lista não chegou ao final, imprime

while(temp!=pLista->prFim)

{

FormataValorMonetario(strValor, temp->fValor);

FormataData(strData, temp->sData);

FormataHorario(strHorario, temp->sHorario);

if(temp->iOperacao == 5) // Pagto_Fatura: adiciona mais uma tabulação antes do valor

{

fprintf(prArquivoSaida, " %s \t %s \t %s \t\t %s\n", strData, strHorario, OPERACOES[temp->iOperacao], strValor);

}

else

{

fprintf(prArquivoSaida, " %s \t %s \t %s \t %s\n", strData, strHorario, OPERACOES[temp->iOperacao], strValor);

}

temp = temp->prProximo;

}

FormataValorMonetario(strValor, temp->fValor);

FormataData(strData, temp->sData);

FormataHorario(strHorario, temp->sHorario);

if(temp->iOperacao == 5) // Pagto_Fatura: adiciona mais uma tabulação antes do valor

{

fprintf(prArquivoSaida, " %s \t %s \t %s \t\t %s\n", strData, strHorario, OPERACOES[temp->iOperacao], strValor);

}

else

{

fprintf(prArquivoSaida, " %s \t %s \t %s \t %s\n", strData, strHorario, OPERACOES[temp->iOperacao], strValor);

}

fputs("\n\t\t\tTotal de Compras: ", prArquivoSaida);

FormataValorMonetario(strValor, pConta.fTotalComprasCartao);

fputs(strValor, prArquivoSaida);

fputs("\n\t\t\tTotal de Pagamentos: ", prArquivoSaida);

FormataValorMonetario(strValor, pConta.fTotalPagtosCartao);

fputs(strValor, prArquivoSaida);

fputs("\n\t\t\tTotal da Fatura: ", prArquivoSaida);

FormataValorMonetario(strValor, pConta.fTotalCartao);

fputs(strValor, prArquivoSaida);

//Fecha o arquivo

fclose(prArquivoSaida);

}

/*------------------------------------------------------------------------------------------

* Nome da função: MenuPrincipal

* Descrição: Mostra na tela o menu principal

* Retorno: Nenhum

* Parâmetros: Nenhum

------------------------------------------------------------------------------------------*/

void MenuPrincipal()

{

system("cls");

printf("\n |------------------------------------------------|\n");

printf(" | |\n");

printf(" | UNIVERSIDADE DO TOCANTINS |\n");

printf(" | Banco TAD$ |\n");

printf(" | |\n");

printf(" |------------------------------------------------|\n");

printf(" | |\n");

printf(" | <1> Extrato da Conta Corrente |\n");

printf(" | <2> Fatura do Cartao de Credito |\n");

printf(" | <3> Sair |\n");

printf(" | |\n");

printf(" |------------------------------------------------|\n\n");

printf("\t\tOpcao: ");

}

/*------------------------------------------------------------------------------------------

* Nome da função: TelaPeriodo

* Descrição: Mostra na tela o cabeçalho para solicitação do período do extrato da conta ou do cartao

* Retorno: Nenhum

* Parâmetros: Nenhum

------------------------------------------------------------------------------------------*/

void TelaPeriodo(char* psTipoRelatorio, stData *pDataInicio, stData *pDataFinal)

{

system("cls");

printf("\n |------------------------------------------------|\n");

printf(" | |\n");

printf(" | UNIVERSIDADE DO TOCANTINS |\n");

printf(" | Banco TAD$ |\n");

printf(" | |\n");

printf(" |------------------------------------------------|\n");

printf(" | |\n");

printf(" | %s - Periodo |\n",psTipoRelatorio);

printf(" | |\n");

printf(" |------------------------------------------------|\n\n");

//Obtem a data inicial e final para o extrato desejado

printf(" Entre com a data inicial: ");

scanf("%d/%d/%d", &pDataInicio->iDia, &pDataInicio->iMes, &pDataInicio->iAno);

printf(" Entre com a data final: ");

scanf("%d/%d/%d", &pDataFinal->iDia, &pDataFinal->iMes, &pDataFinal->iAno);

}

/*------------------------------------------------------------------------------------------

* Nome da função: main

* Descrição: Função principal de um programa em C

* Retorno: Um valor inteiro

* Parâmetros: Nenhum

------------------------------------------------------------------------------------------*/

int main(void)

{

//Variáveis criadas para armazenar a data inicial e final do extrato desejado

stData sDataInicio;

stData sDataFinal;

//Variável criada para armazenar as informações da conta do cliente

stConta sConta;

//Declaração e alocação de memória para as listas

stLista *sListaConta = (stLista*)malloc(sizeof(stLista));

stLista *sListaCartao = (stLista*)malloc(sizeof(stLista));

stLista *sSubLista = NULL;

// Variável que armazena a opção do menu selecionada pelo usuário

char opcao;

//Invoca a função para realizar a leitura dos dados do arquivo

LerArquivo(sListaConta, sListaCartao, &sConta, "Entrada.txt");

// Mostra o menu principal na tela

MenuPrincipal();

fflush(stdin);

opcao=getchar();

switch(opcao)

{

case '1': // Emitir extrato da conta corrente

system("cls");

TelaPeriodo("Extrato da Conta Corrente ",&sDataInicio, &sDataFinal);

//Cria a sublista de transações com base nas datas fornecidas

sSubLista = CriaSubListaContaOrdenada(sListaConta, &sConta, sDataInicio, sDataFinal);

//Imprime extrato no arquivo de saída

ImprimeExtrato(sConta, sSubLista);

system("cls");

//Imprime mensagem

printf("\n\n\t\tExtrato da conta corrente gerado com sucesso");

getch();

break;

case '2': // Emitir fatura do cartão de crédito

system("cls");

TelaPeriodo("Fatura do Cartao de Credito",&sDataInicio, &sDataFinal);

//Cria a sublista de transações com base nas datas fornecidas

sSubLista = CriaSubListaFaturaOrdenada(sListaCartao, &sConta, sDataInicio, sDataFinal);

//Imprime a fatura no arquivo de saída

ImprimeFatura(sConta, sSubLista);

system("cls");

//Imprime mensagem

printf("\n\n\t\tFatura do cartao de credito gerado com sucesso");

getch();

break;

}

//Libera a memória alocada dinamicamente

LiberaMemoriaTransacoes(sListaConta);

LiberaMemoriaTransacoes(sListaCartao);

free(sListaConta);

free(sListaCartao);

free(sSubLista);

return 0;

}

Link para o comentário
Compartilhar em outros sites

3 respostass a esta questão

Posts Recomendados

Participe da discussão

Você pode postar agora e se registrar depois. Se você já tem uma conta, acesse agora para postar com sua conta.

Visitante
Responder esta pergunta...

×   Você colou conteúdo com formatação.   Remover formatação

  Apenas 75 emoticons são permitidos.

×   Seu link foi incorporado automaticamente.   Exibir como um link em vez disso

×   Seu conteúdo anterior foi restaurado.   Limpar Editor

×   Você não pode colar imagens diretamente. Carregar ou inserir imagens do URL.



  • Estatísticas dos Fóruns

    • Tópicos
      152,3k
    • Posts
      652,3k
×
×
  • Criar Novo...