Wendell Postado Março 19, 2009 Denunciar Share Postado Março 19, 2009 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).ValeuDesenvolver 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;98765432105/01/2009;10:30;Deposito;100.0009/01/2009;15:30;Compra_debito;30.0001/11/2008;09:00;Compra_credito;30.0010/02/2009;11:10;Transferencia;+49.5011/12/2008;13:20;Pgto_fatura;50.0010/12/2008;14:25;Compra_credito;30.0028/12/2008;08:00;Saque;500.0007/02/2009;11:20;Pgto_fatura;100.0025/01/2009;08:00;Saque;200.0018/10/2008;12:04;Compra_debito;500.0009/01/2009;18:30;Compra_debito;55.0002/01/2009;18:25;Compra_credito;150.0017/02/2009;09:55;Compra_credito;25.4515/11/2008;12:40;Compra_debito;500.0018/01/2009;13:40;Deposito;500.0005/01/2009;10:20;Pgto_fatura;50.0010/01/2009;16:30;Transferencia;-90.5005/01/2009;20:35;Transferencia;+100.2521/11/2008;09:10;Compra_credito;90.0025/12/2008;12:40;Compra_debito;70.4513/01/2009;11:45;Deposito;50.1005/12/2008;10:30;Deposito;200.0005/12/2008;14:25;Compra_credito;20.0025/10/2008;09:30;Compra_debito;130.0007/02/2009;11:55;Compra_credito;175.4525/12/2008;11:30;Compra_debito;200.4515/02/2009;10:30;Deposito;300.0015/01/2009;10:25;Compra_credito;220.0007/11/2008;11:20;Pgto_fatura;100.0005/01/2009;10:55;Compra_credito;35.4520/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 datatypedef struct Data{ int iDia; int iMes; int iAno; } stData;//Estrutura utilizada para armazenar uma horatypedef struct Horario{ int iHora; int iMinuto; }stHorario;//Estrutura utilizada para armazenar os dados de uma contatypedef 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éditotypedef struct Transacao{ float fValor; stData sData; int iOperacao; stHorario sHorario; struct Transacao *prProximo; }stTransacao;//Estrutura utilizada para representar uma lista de transaçõestypedef 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;} Citar Link para o comentário Compartilhar em outros sites More sharing options...
0 OSJunior Postado Março 19, 2009 Denunciar Share Postado Março 19, 2009 Olá.O que você não entendeu: o código, a linguagem ou as especificações? Citar Link para o comentário Compartilhar em outros sites More sharing options...
0 Wendell Postado Março 20, 2009 Autor Denunciar Share Postado Março 20, 2009 Olá.O que você não entendeu: o código, a linguagem ou as especificações?Eu entendi o código, so que criar uma lista ordenada buscando dentro de um arquivo txt, ordenando data,ae o bicho pega, porque não to sabendo nem começar.valeu abraço Citar Link para o comentário Compartilhar em outros sites More sharing options...
0 w0lv3r1n3 Postado Março 20, 2009 Denunciar Share Postado Março 20, 2009 de uma olhada no outro tópico que eu respondi sobre ordenacao...ele funciona pra voce tambem!!!Abrassss Citar Link para o comentário Compartilhar em outros sites More sharing options...
Pergunta
Wendell
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.