nelicquele Posted November 21, 2015 at 01:53 PM Report Share #589930 Posted November 21, 2015 at 01:53 PM Bom dia, Sou uma novata nestas andanças de programação e tenho que realizar um projecto em C++ que me está a dar alguns problemas. Depois de um módulo de C++ de 50 horas, o formador deu-nos um projecto que consiste no desenvolvimento de uma aplicação que permite fazer a gestão de uma agência bancária, que deveria conter Classes, Vectores Dinâmicos e Ficheiros.Como uma parte significativa da matéria necessária que temos que aplicar não foi dada durante o módulo, realizar este projecto tem sido um verdadeiro desafio. O meu problema neste momento prende-se com as funções para gravar e ler no ficheiro.Todo o projecto funciona perfeitamente se não lhe adicionar essas funções. Neste momento os problemas que me surgem são: 1 - Depois de criar uma conta, sair do programa e voltar a entrar, ao efectuar a consulta de conta, esta aparece-me duas vezes. 2 - O programa ao ler os dados do ficheiro não lê correctamente o valor do Saldo (float). Apresenta o valor a zeros, mesmo que no ficheiro o valor seja diferente de zero. 3 - Ao actualizar os dados da conta a aplicação não grava as alterações efectuadas. 4 - Qualquer operação relacionada com saldos deixou de funcionar correctamente uma vez que ele não lê o valor do saldo de forma correta. Não sei se me consegui explicar correctamente. Seria possível alguém me dar alguma ajuda para detectar onde estou a errar? Desde já, muito obrigada! //*************************************************************************************** //* Projeto - Gestão Bancária //*************************************************************************************** //* Objectivo: Desevolver uma aplicação que permita fazer a gestão das contas bancárias //* de um banco. //*************************************************************************************** //* Ficherio - BancoV12.cpp //*************************************************************************************** #include <cstdio> // Funções: "fflush()", "printf()" e "scanf()". #include <cstdlib> // Função: "system()". #include <locale.h> // Função: "setlocale()". #include <windows.h> // Função: "SetConsoleCursorPosition()" #include <iostream> // Objetos: "cin" e "cout". #include <iomanip> // Funções: "std::setw()" e "std::setprecision()" #include <string.h> // ou "#include <cstring> #include <vector> // Para criar e usar vetores dinâmicos. #include <algorithm> // Função "std::remove()", "std::sort()" #include <time.h> #include <string> #include <fstream> #include <sstream> using namespace std; // Definição das Constantes Globais (extern) const int MAXNOME = 50; const int MAXDATA = 11; int idConta = 0; void escreveZeros(int idConta); //******************************************************************** //* Classe Conta //******************************************************************** class Conta { public: // 1. Dados int numConta; string dataConta; int codigoBanco; string balcao; int codigoBalcao; int codigoSeguranca; string nome; string morada; string cPostal; string localidade; int contacto; string dataNascimento; string docIdentificacao; string numDocIdentificacao; int NIF; string tipoConta; int codigoConta; string estado; int codigoEstado; float saldo; // 2.1 Funções construtoras Conta() { numConta = 0; dataConta.clear(); codigoBanco = 0; balcao.clear(); codigoBalcao = 0; codigoSeguranca = 0; nome.clear(); morada.clear(); cPostal.clear(); localidade.clear(); contacto = 0; dataNascimento.clear(); docIdentificacao.clear(); numDocIdentificacao.clear(); NIF = 0; tipoConta.clear(); codigoConta = 0; estado.clear(); codigoEstado = 0; saldo = 0; } // 2.2 Funções Destrutoras ~Conta() { } // 2.3 Funções "Setters" void setNumConta(int nc) { numConta = nc; } void setDataConta() { time_t now = time(0); char* dt = ctime(&now); dataConta.assign(dt); } void setCodigoBanco(int cb) { codigoBanco = cb; } void setBalcao(string b) { balcao.assign(b); } void setBalcao(char * b) { balcao.assign(b); } void setCodigoBalcao(int cl) { codigoBalcao = cl; } void setCodigoSeguranca(int cs) { codigoSeguranca = cs; } void setNome(string n) { nome.assign(n); } void setNome(char * n) { nome.assign(n); } void setMorada(string m) { morada.assign(m); } void setMorada(char * m) { morada.assign(m); } void setCPostal(string cp) { cPostal.assign(cp); } void setCPostal(char * cp) { cPostal.assign(cp); } void setLocalidade(string l) { localidade.assign(l); } void setLocalidade(char * l) { localidade.assign(l); } void setContacto(int ct) { contacto = ct; } void setDataNascimento(string dn) { dataNascimento.assign(dn); } void setDataNascimento(char * dn) { dataNascimento.assign(dn); } void setDocIdentificacao(string di) { docIdentificacao.assign(di); } void setDocIdentificacao(char * di) { docIdentificacao.assign(di); } void setNumDocIdentificacao(string nd) { numDocIdentificacao.assign(nd); } void setNumDocIdentificacao(char * nd) { numDocIdentificacao.assign(nd); } void setNIF(int nif) { NIF = nif; } void setTipoConta(string tc) { tipoConta.assign(tc); } void setTipoConta(char * tc) { tipoConta.assign(tc); } void setCodigoConta(int cc) { codigoConta = cc; } void setEstado(string es) { estado.assign(es); } void setEstado(char * es) { estado.assign(es); } void setCodigoEstado(int ce) { codigoEstado = ce; } void setSaldo(float sd) { saldo = sd; } // 2.4 Funções "Getters" int getNumConta() { return numConta; } string getDataConta() { return dataConta; } int getCodigoBanco() { return codigoBanco; } string getBalcao() { return balcao; } int getCodigoBalcao() { return codigoBalcao; } int getCodigoSeguranca() { return codigoSeguranca; } string getNome() { return nome; } string getMorada() { return morada; } string getCPostal() { return cPostal; } string getLocalidade() { return localidade; } int getContacto() { return contacto; } string getDataNascimento() { return dataNascimento; } string getDocIdentificacao() { return docIdentificacao; } string getNumDocIdentificacao() { return numDocIdentificacao; } int getNIF() { return NIF; } string getTipoConta() { return tipoConta; } int getCodigoConta() { return codigoConta; } string getEstado() { return estado; } int getCodigoEstado() { return codigoEstado; } float getSaldo() { return saldo; } // 2.5. Funções de Leitura void leNome() { char texto[MAXNOME]; for(int cLetra = 0; cLetra < MAXNOME; cLetra++) texto[cLetra] = '\0'; cout << "Nome: "; cin.getline(texto, MAXNOME, '\n'); setNome(texto); } void leMorada() { char texto[MAXNOME]; for(int cLetra = 0; cLetra < MAXNOME; cLetra++) texto[cLetra] = '\0'; cout << "Morada: "; cin.getline(texto, MAXNOME, '\n'); setMorada(texto); } void leCPostal() { char texto[MAXNOME]; for(int cLetra = 0; cLetra < MAXNOME; cLetra++) texto[cLetra] = '\0'; cout << "Código Postal: "; cin.getline(texto, MAXNOME, '\n'); setCPostal(texto); } void leLocalidade() { char texto[MAXNOME]; for(int cLetra = 0; cLetra < MAXNOME; cLetra++) texto[cLetra] = '\0'; cout << "Localidade: "; cin.getline(texto, MAXNOME, '\n'); setLocalidade(texto); } void leContacto() { cout<<"Contacto Telefónico: "; int contacto = 0; cin>>contacto; fflush(stdin); setContacto(contacto); } void leDataNascimento() { char texto[MAXDATA]; for(int cLetra=0; cLetra<MAXDATA; cLetra++) texto[cLetra]='\0'; cout<<"Data de Nascimento (dd-mm-aaaa): "; cin.getline(texto, MAXDATA, '\n'); setDataNascimento(texto); } void leDocIdentificacao() { char texto[MAXNOME]; for(int cLetra = 0; cLetra < MAXNOME; cLetra++) texto[cLetra] = '\0'; cout << "Tipo de Documento de Identificaçao: "; cin.getline(texto, MAXNOME, '\n'); setDocIdentificacao(texto); } void leNumDocIdentificacao() { char texto[MAXNOME]; for(int cLetra = 0; cLetra < MAXNOME; cLetra++) texto[cLetra] = '\0'; cout << "Número do Documento de Identificaçao: "; cin.getline(texto, MAXNOME, '\n'); setNumDocIdentificacao(texto); } void leNIF() { cout<<"Número de Identificaçao Fiscal: "; int nNIF = 0; cin>>NIF; fflush(stdin); setNIF(NIF); } void leSaldo() { cout<<"Saldo: "; float saldo = 0; cin>>saldo; fflush(stdin); setSaldo(saldo); } void leTudoConta() { cout<<"\n-> Insira os Dados da Conta: \n"<<endl; setNumConta(idConta); setDataConta(); leNome(); leMorada(); leCPostal(); leLocalidade(); leContacto(); leDataNascimento(); leDocIdentificacao(); leNumDocIdentificacao(); leNIF(); leSaldo(); } // 2.6. Funções de Escrita void mostraNumConta() { cout << "Número de Conta: "; escreveZeros(getNumConta()); cout <<"." <<endl; } void mostraDataConta() { cout<< "Data de Criaçao da Conta: "<<getDataConta()<<endl; } void mostraBalcao() { cout<< "Balcao: "<<getBalcao()<<"."<<endl; } void mostraNome() { cout<< "Nome: "<<getNome()<<"."<<endl; } void mostraMorada() { cout<< "Morada: "<<getMorada()<<"."<<endl; } void mostraCPostal() { cout<< "Código Postal: "<<getCPostal()<<"."<<endl; } void mostraLocalidade() { cout<< "Localidade: "<<getLocalidade()<<"."<<endl; } void mostraContacto() { cout<< "Contacto Telefónico: "<<getContacto()<<"."<<endl; } void mostraDataNascimento() { cout<< "Data de Nascimento: "<<getDataNascimento()<<"."<<endl; } void mostraDocIdentificacao() { cout<< "Tipo de Documento de Identificaçao: "; cout<<getDocIdentificacao()<<"."<<endl; } void mostraNumDocIdentificacao() { cout<< "Número do Documento de Identificaçao: "; cout<<getNumDocIdentificacao()<<"."<<endl; } void mostraNIF() { cout<< "Número de Identificaçao Fiscal: "<<getNIF()<<"."<<endl; } void mostraTipoConta() { cout<< "Tipo de Conta: "<<getTipoConta()<<"."<<endl; } void mostraEstado() { cout<< "Estado de Conta: "<<getEstado()<<"."<<endl; } void mostraSaldo() { cout<< "Saldo: "<<fixed<<setprecision(2)<<getSaldo()<<" Euros."<<endl; } void mostraTudoConta() { cout<<"\n-> Apresentaçao dos Dados da Conta: \n"; mostraNumConta(); mostraBalcao(); mostraTipoConta(); mostraEstado(); mostraSaldo(); mostraDataConta(); cout<<"\n-> Dados do Cliente: \n"; mostraNome(); mostraMorada(); mostraCPostal(); mostraLocalidade(); mostraContacto(); mostraDataNascimento(); mostraDocIdentificacao(); mostraNumDocIdentificacao(); mostraNIF(); cout<<endl; } void mostraTudoConta2() { cout<<"\n-> Apresentaçao dos Dados da Conta: \n"; mostraNumConta(); mostraBalcao(); mostraTipoConta(); mostraEstado(); mostraSaldo(); mostraDataConta(); cout<<"\n-> Dados do Cliente: \n"; mostraNome(); mostraMorada(); mostraCPostal(); mostraLocalidade(); mostraContacto(); mostraDataNascimento(); mostraDocIdentificacao(); mostraNumDocIdentificacao(); mostraNIF(); cout<<endl; } }; // Fim da Classe // Declaração e inicialização das variáveis int contaSelecionada; float debito; float credito; string movimento = ""; float valor; // Declaração do vetor dinâmico std::vector<Conta> contas; // Protótipos das funções: declaração das funções void menuApresentacao(); void mostraMenu(); char obtemEscolha(char ); bool processaEscolha(char escolha , bool queroSair ); bool processaSaida(bool queroSair); bool processaSaida1(bool queroSair); void processaEscolhaInvalida(); void despedida(); void novaConta(); void mostraSubMenu1(); char obtemEscolha1(char escolha); bool processaEscolha1(char escolha, bool queroSair); void novaCCorrente(); void novaCPoupanca(); int geraCodSeguranca(); void consultaConta(); void atualizaConta(); void mostraSubMenu2(); char obtemEscolha2(char escolha); bool processaEscolha2(char escolha, bool queroSair); void novoMovimento(); void mostraSubMenu3(); char obtemEscolha3(char escolha); bool processaEscolha3(char escolha, bool queroSair); void novoDebito(); void novoCredito(); void emiteComprovativo(); void fechaConta(); void listarContas(); void emiteNIB(); void gravaFicheiro(char fConta[]); void leFicheiro(char fConta[]); //*************************************************************************************** //* Função "escreveZeros(int idConta)" //*************************************************************************************** //* Entradas: int idConta; //* Saidas: não tem //*************************************************************************************** void escreveZeros(int idConta) { int valor = idConta; int length = 1; int zeros; while ( valor /= 10 ) length++; zeros = 11-length; cout << setfill('0') << setw(zeros) << idConta; } //*************************************************************************************** //* Função Principal //*************************************************************************************** int main () { setlocale(LC_ALL, "Portuguese"); system("color 7"); char escolha = '\0'; bool queroSair = false; int cConta; leFicheiro("Contas.txt"); menuApresentacao(); do { system("cls"); mostraMenu(); escolha = obtemEscolha(escolha); queroSair = processaEscolha(escolha, queroSair); } while(!queroSair); despedida(); } // Fim da Função "main()" //*************************************************************************************** //* Função "menuApresentacao()" //*************************************************************************************** //* Entradas: não tem. //* Saidas: não tem. //*************************************************************************************** void menuApresentacao() { system("cls"); cout<<"*************************************************************************"<<endl; cout<<"* *"<<endl; cout<<"* Projecto C++ *"<<endl; cout<<"* *"<<endl; cout<<"* Sistema de Gestao Bancária *"<<endl; cout<<"* *"<<endl; cout<<"* Autores: Ana Oliveira *"<<endl; cout<<"* Joao Rocha *"<<endl; cout<<"* *"<<endl; cout<<"*************************************************************************"<<endl; cout<<endl; system("pause"); } //*************************************************************************************** //* Função "mostraMenu()" //*************************************************************************************** //* Entradas: não tem. //* Saidas: não tem. //*************************************************************************************** void mostraMenu() { system("cls"); system("color 7"); cout<<"*************************************************************************"<<endl; cout<<"* *"<<endl; cout<<"* Banco *"<<endl; cout<<"* *"<<endl; cout<<"* 1. Nova Conta *"<<endl; cout<<"* 2. Consultar Conta *"<<endl; cout<<"* 3. Atualizar Conta *"<<endl; cout<<"* 4. Novo Movimento *"<<endl; cout<<"* 5. Fechar Conta *"<<endl; cout<<"* 6. Listagens *"<<endl; cout<<"* 7. Emitir NIB *"<<endl; cout<<"* 0. Sair *"<<endl; cout<<"* *"<<endl; cout<<"*************************************************************************"<<endl; cout<<endl; } //*************************************************************************************** //* Função "obtemEscolha()" //*************************************************************************************** //* Entradas: "escolha" (char). //* Saidas: "escolha" (char). //*************************************************************************************** char obtemEscolha(char escolha) { cout<<"Qual a sua escolha (0-6): "; cin>>escolha; return escolha; } //*************************************************************************************** //* Função "processaEscolha()" //*************************************************************************************** //* Entradas: "escolha" (char), "queroSair" (booleano). //* //* Saidas: "queroSair" (booleano). //*************************************************************************************** bool processaEscolha(char escolha, bool queroSair) { switch(escolha) { case '1': novaConta(); break; case '2': consultaConta(); break; case '3': atualizaConta(); break; case '4': novoMovimento(); break; case '5': fechaConta(); break; case '6': listarContas(); break; case '7': emiteNIB(); break; case '0': queroSair = processaSaida(queroSair); break; default: processaEscolhaInvalida(); } fflush(stdin); return queroSair; } //*************************************************************************************** //* Função "processaSaida()" //*************************************************************************************** //* Entradas: "queroSair" (booleano). //* Saidas: "queroSair" (booleano). //*************************************************************************************** bool processaSaida(bool queroSair) { char resposta = '\0'; fflush(stdin); cout<<"Tem a certeza (S/N)? "; cin>>resposta; if (resposta == 's' || resposta == 'S') queroSair = true; gravaFicheiro("Contas.txt"); return queroSair; } //*************************************************************************************** //* Função "processaSaida1()" //*************************************************************************************** //* Entradas: "queroSair" (booleano). //* Saidas: "queroSair" (booleano). //*************************************************************************************** bool processaSaida1(bool queroSair) { char resposta = '\0'; fflush(stdin); cout<<"Tem a certeza (S/N)? "; cin>>resposta; if (resposta == 's' || resposta == 'S') queroSair = true; return queroSair; } //*************************************************************************************** //* Função "processaEscolhaInvalida()" //*************************************************************************************** //* Entradas: não tem. //* Saidas: não tem. //*************************************************************************************** void processaEscolhaInvalida() { cout<<"Escolha inválida! Tente de novo!\n"; system("pause"); } //*************************************************************************************** //* Função "despedida()" //*************************************************************************************** //* Entradas: não tem. //* Saidas: não tem. //*************************************************************************************** void despedida() { cout<<"Obrigado! Até breve!\n"; system("pause"); } //*************************************************************************************** //* Função "novaConta()" //*************************************************************************************** //* Entradas: não tem //* Saidas: não tem //*************************************************************************************** void novaConta() { char escolha = '\0'; bool queroSair = false; do { mostraSubMenu1(); escolha = obtemEscolha1(escolha); queroSair = processaEscolha1(escolha, queroSair); } while(!queroSair); } //*************************************************************************************** //* Função "mostraSubMenu1()" //*************************************************************************************** //* Entradas: não tem. //* Saidas: não tem. //*************************************************************************************** void mostraSubMenu1() { system("cls"); system("color 7"); cout<<"*************************************************************************"<<endl; cout<<"* *"<<endl; cout<<"* Tipo de Conta *"<<endl; cout<<"* *"<<endl; cout<<"* 1. Conta à Ordem *"<<endl; cout<<"* 2. Conta Poupança *"<<endl; cout<<"* 0. Sair *"<<endl; cout<<"* *"<<endl; cout<<"*************************************************************************"<<endl; cout<<endl; } //*************************************************************************************** //* Função "obtemEscolha1()" //*************************************************************************************** //* Entradas: "escolha" (char). //* Saidas: "escolha" (char). //*************************************************************************************** char obtemEscolha1(char escolha) { cout<<"Qual a sua escolha (0-2): "; cin>>escolha; fflush(stdin); return escolha; } //*************************************************************************************** //* Função "processaEscolha1()" //*************************************************************************************** //* Entradas: "escolha" (char), "queroSair" (booleano). //* //* Saidas: "queroSair" (booleano). //*************************************************************************************** bool processaEscolha1(char escolha, bool queroSair) { switch(escolha) { case '1': novaCCorrente(); system("pause"); break; case '2': novaCPoupanca(); system("pause"); break; case '0': queroSair = processaSaida1(queroSair); break; default: processaEscolhaInvalida(); } fflush(stdin); return queroSair; } //*************************************************************************************** //* Função "novaCCorrente()" //*************************************************************************************** //* Entradas: não tem //* Saidas: não tem //*************************************************************************************** void novaCCorrente() { system("cls"); system("color 7"); cout<<"*************************************************************************"<<endl; cout<<"* *"<<endl; cout<<"* Nova Conta Ordem *"<<endl; cout<<"* *"<<endl; cout<<"*************************************************************************"<<endl; cout<<endl; int codigoBanco; string balcao = ""; int codigoBalcao; string estado = ""; string tipoConta = ""; int codigoConta; int codigoEstado; Conta conta = Conta(); codigoBanco = 1234; balcao = "Lisboa"; codigoBalcao = 1111; estado = "Aberta"; codigoEstado = 1; tipoConta = "Conta Corrente"; codigoConta = 1; idConta++; conta.setNumConta(idConta); conta.setCodigoBanco(codigoBanco); conta.setBalcao(balcao); conta.setCodigoBalcao(codigoBalcao); conta.setEstado(estado); conta.setCodigoEstado(codigoEstado); conta.setTipoConta(tipoConta); conta.setCodigoConta(codigoConta); conta.setCodigoSeguranca(geraCodSeguranca()); conta.leTudoConta(); contas.push_back(conta); } //*************************************************************************************** //* Função "geraCodSeguranca()" //*************************************************************************************** //* Entradas: não tem //* Saidas: não tem //*************************************************************************************** int geraCodSeguranca() { int valor; //time_t t; //srand((unsigned) time(&t)); srand(GetTickCount()); valor = rand() % 100; return(valor); } //*************************************************************************************** //* Função "novaCPoupanca()" //*************************************************************************************** //* Entradas: não tem //* Saidas: não tem //*************************************************************************************** void novaCPoupanca() { system("cls"); system("color 7"); cout<<"*************************************************************************"<<endl; cout<<"* *"<<endl; cout<<"* Nova Conta Poupança *"<<endl; cout<<"* *"<<endl; cout<<"*************************************************************************"<<endl; cout<<endl; string balcao = ""; string estado = ""; string tipoConta = ""; int codigoConta; int codigoEstado; Conta conta = Conta(); balcao = "Lisboa"; estado = "Aberta"; codigoEstado = 1; tipoConta = "Conta Poupança"; codigoConta = 2; idConta++; conta.setNumConta(idConta); conta.setBalcao(balcao); conta.setEstado(estado); conta.setCodigoEstado(codigoEstado); conta.setTipoConta(tipoConta); conta.setCodigoConta(codigoConta); conta.leTudoConta(); contas.push_back(conta); } //*************************************************************************************** //* Função "consultaConta()" //*************************************************************************************** //* Entradas: cConta //* Saidas: não tem //*************************************************************************************** void consultaConta() { int cConta; bool flag = false; int codigo; system("cls"); system("color 7"); cout<<"*************************************************************************"<<endl; cout<<"* *"<<endl; cout<<"* Consulta de Contas *"<<endl; cout<<"* *"<<endl; cout<<"*************************************************************************"<<endl; cout<<endl<<endl; cout << "Número da Conta: "; cin >> cConta; fflush(stdin); for (int cIndice=0; cIndice < contas.size() ; cIndice++) { if (cConta == contas.at(cIndice).getNumConta()) { contas[cIndice].mostraTudoConta(); flag = true; system("pause"); } } if (flag == false) { cout << "-> Conta Inexistente.\n"; system("pause"); } } //*************************************************************************************** //* Função "atualizaConta()" //*************************************************************************************** //* Entradas: não tem //* Saidas: não tem //*************************************************************************************** void atualizaConta() { int cConta; char escolha = '\0'; bool queroSair = false; bool flag = false; cout << endl; cout << "Número da Conta: "; cin >> cConta; fflush(stdin); for (int cIndice=0; cIndice < contas.size() ; cIndice++) { if (cConta == contas.at(cIndice).getNumConta()) { flag = true; contaSelecionada = cIndice; } } if (flag == true) { do { mostraSubMenu2(); escolha = obtemEscolha2(escolha); queroSair = processaEscolha2(escolha, queroSair); } while(!queroSair); } else { cout << "-> Conta Inexistente.\n"; system("pause"); } } //*************************************************************************************** //* Função "mostraSubMenu2()" //*************************************************************************************** //* Entradas: não tem. //* Saidas: não tem. //*************************************************************************************** void mostraSubMenu2() { system("cls"); system("color 7"); cout<<"***************************************************************"<<endl; cout<<"* *"<<endl; cout<<"* Dados a Alterar *"<<endl; cout<<"* *"<<endl; cout<<"* 1. Morada *"<<endl; cout<<"* 2. Contacto Telefónico *"<<endl; cout<<"* 0. Sair *"<<endl; cout<<"* *"<<endl; cout<<"***************************************************************"<<endl; cout<<endl; } //*************************************************************************************** //* Função "obtemEscolha2()" //*************************************************************************************** //* Entradas: "escolha" (char). //* Saidas: "escolha" (char). //*************************************************************************************** char obtemEscolha2(char escolha) { cout<<"Qual a sua escolha (0-2): "; cin>>escolha; fflush(stdin); return escolha; } //*************************************************************************************** //* Função "processaEscolha2()" //*************************************************************************************** //* Entradas: "escolha" (char), "queroSair" (booleano). //* //* Saidas: "queroSair" (booleano). //*************************************************************************************** bool processaEscolha2(char escolha, bool queroSair) { switch(escolha) { case '1': system("cls"); cout<<"*************************************************************************"<<endl; cout<<"* *"<<endl; cout<<"* Alteraçao de Morada *"<<endl; cout<<"* *"<<endl; cout<<"*************************************************************************"<<endl; cout<<endl<<endl; cout<<"Dados em Sistema: "<<endl; contas[contaSelecionada].mostraMorada(); contas[contaSelecionada].mostraCPostal(); contas[contaSelecionada].mostraLocalidade(); cout<<endl; cout<<"Novos Dados:"<<endl; contas[contaSelecionada].leMorada(); contas[contaSelecionada].leCPostal(); contas[contaSelecionada].leLocalidade(); system("pause"); break; case '2': system("cls"); cout<<"*************************************************************************"<<endl; cout<<"* *"<<endl; cout<<"* Alteraçao de Telefone *"<<endl; cout<<"* *"<<endl; cout<<"*************************************************************************"<<endl; cout<<endl<<endl; cout<<"Dados em Sistema: "<<endl; contas[contaSelecionada].mostraContacto(); cout<<endl; cout<<"Novos Dados:"<<endl; contas[contaSelecionada].leContacto(); system("pause"); break; case '0': queroSair = processaSaida1(queroSair); break; default: processaEscolhaInvalida(); } fflush(stdin); return queroSair; } //*************************************************************************************** //* Função "novoMovimento()" //*************************************************************************************** //* Entradas: não tem //* Saidas: não tem //*************************************************************************************** void novoMovimento() { int cConta; char escolha = '\0'; bool queroSair = false; bool flag = false; cout<<endl; cout<<"Número da Conta: "; cin>>cConta; fflush(stdin); for (int cIndice=0; cIndice < contas.size() ; cIndice++) { if (cConta == contas.at(cIndice).getNumConta()) { flag = true; contaSelecionada = cIndice; } } if (flag == true) { if (contas.at(contaSelecionada).getCodigoEstado() == 2) { cout<<"Conta Fechada. Nao é possível efetuar movimentos."; cout<<endl; system("pause"); } else { do { mostraSubMenu3(); escolha = obtemEscolha3(escolha); queroSair = processaEscolha3(escolha, queroSair); } while(!queroSair); } } else { cout<<"-> Conta Inexistente.\n"; system("pause"); } } //*************************************************************************************** //* Função "mostraSubMenu3()" //*************************************************************************************** //* Entradas: não tem. //* Saidas: não tem. //*************************************************************************************** void mostraSubMenu3() { system("cls"); system("color 7"); cout<<"***************************************************************"<<endl; cout<<"* *"<<endl; cout<<"* Movimentos *"<<endl; cout<<"* *"<<endl; cout<<"* 1. Novo Débito *"<<endl; cout<<"* 2. Novo Crédito *"<<endl; cout<<"* 0. Sair *"<<endl; cout<<"* *"<<endl; cout<<"***************************************************************"<<endl; cout<<endl; } //*************************************************************************************** //* Função "obtemEscolha3()" //*************************************************************************************** //* Entradas: "escolha" (char). //* Saidas: "escolha" (char). //*************************************************************************************** char obtemEscolha3(char escolha) { cout<<"Qual a sua escolha (0-2): "; cin>>escolha; fflush(stdin); return escolha; } //*************************************************************************************** //* Função "processaEscolha3()" //*************************************************************************************** //* Entradas: "escolha" (char), "queroSair" (booleano). //* //* Saidas: "queroSair" (booleano). //*************************************************************************************** bool processaEscolha3(char escolha, bool queroSair) { switch(escolha) { case '1': if (contas[contaSelecionada].getCodigoConta() == 2) { cout<<"Conta Poupança. Nao é permitido efetuar débitos."; cout<<endl; system("pause"); } else novoDebito(); system("pause"); break; case '2': novoCredito(); system("pause"); break; case '0': queroSair = processaSaida1(queroSair); break; default: processaEscolhaInvalida(); } fflush(stdin); return queroSair; } //*************************************************************************************** //* Função "novoDebito()" //*************************************************************************************** //* Entradas: não tem //* Saidas: não tem //*************************************************************************************** void novoDebito() { system("cls"); float saldoConta; movimento = "Levantamento"; cout<<"*************************************************************************"<<endl; cout<<"* *"<<endl; cout<<"* Novo Débito *"<<endl; cout<<"* *"<<endl; cout<<"*************************************************************************"<<endl; cout<<endl<<endl; cout << "Valor a Debitar: "; cin >> debito; fflush(stdin); valor = debito; saldoConta = contas[contaSelecionada].getSaldo(); saldoConta = saldoConta - debito; contas[contaSelecionada].setSaldo(saldoConta); cout<<endl; contas[contaSelecionada].mostraSaldo(); cout<<endl; emiteComprovativo(); } //*************************************************************************************** //* Função "novoCredito()" //*************************************************************************************** //* Entradas: não tem //* Saidas: não tem //*************************************************************************************** void novoCredito() { float saldoConta; movimento = "Depósito"; system("cls"); cout<<"*************************************************************************"<<endl; cout<<"* *"<<endl; cout<<"* Novo Crédito *"<<endl; cout<<"* *"<<endl; cout<<"*************************************************************************"<<endl; cout<<endl<<endl; cout << "Valor a Creditar: "; cin >> credito; fflush(stdin); valor = credito; saldoConta = contas[contaSelecionada].getSaldo(); saldoConta = saldoConta + credito; contas[contaSelecionada].setSaldo(saldoConta); cout<<endl; contas[contaSelecionada].mostraSaldo(); cout<<endl; emiteComprovativo(); } //*************************************************************************************** //* Função "emiteComprovativo()" //*************************************************************************************** //* Entradas: não tem //* Saidas: não tem //*************************************************************************************** void emiteComprovativo() { string data = ""; data = contas[contaSelecionada].getDataConta(); system("cls"); cout<<endl; cout<<"*************************************************************************"<<endl; cout<<endl; cout<<"Data: "<<data<<endl; contas[contaSelecionada].mostraNumConta(); contas[contaSelecionada].mostraNome(); cout<<endl; cout<<endl; cout<<movimento<<" :\t\t"<<fixed<<setprecision(2)<<valor<<" Euros."<<endl; cout<<endl; cout<<endl; cout<<endl; cout<<"Total:\t\t\t"<<fixed<<setprecision(2)<<valor<<" Euros."<<endl; cout<<endl; cout<<"*************************************************************************"<<endl; cout<<endl; cout<<"Para imprimir o comprovativo prima ctrl + P."<<endl; } //*************************************************************************************** //* Função "fechaConta()" //*************************************************************************************** //* Entradas: não tem //* Saidas: não tem //*************************************************************************************** void fechaConta() { int cConta; bool flag = false; string estado = "Fechada"; int codigoEstado = 2; int saldo = 0; cout << "Número da Conta: "; cin >> cConta; fflush(stdin); for (int cIndice=0; cIndice < contas.size() ; cIndice++) { if (cConta == contas.at(cIndice).getNumConta()) { flag = true; if(contas.at(cIndice).getCodigoEstado() == 2) { cout<<"A conta já está fechada."; cout<<endl; system("pause"); } else { contas[cIndice].setEstado(estado); contas[cIndice].setCodigoEstado(codigoEstado); contas[cIndice].setSaldo(saldo); cout<<"Conta fechada com sucesso!"; cout<<endl; system("pause"); } } } if (flag == false) { cout << "-> Conta Inexistente.\n"; system("pause"); } } //*************************************************************************************** //* Função "listarContas()" //*************************************************************************************** //* Entradas: não tem //* Saidas: não tem //*************************************************************************************** void listarContas() { int cConta; float somarSaldo; float saldoConta; for (int cIndice=0; cIndice < contas.size() ; cIndice++) { saldoConta = contas[cIndice].getSaldo(); somarSaldo = somarSaldo + saldoConta; contas[cIndice].mostraNumConta(); contas[cIndice].mostraNome(); } cout<<endl; cout<<"Valor Total dos Saldos: "<<somarSaldo<<endl; system("pause"); } //*************************************************************************************** //* Função "emiteNIB()" //*************************************************************************************** //* Entradas: não tem //* Saidas: não tem //*************************************************************************************** void emiteNIB() { int valor; int conta; int length = 1; int zeros; int cConta; bool flag = false; int codigoBanco; int codigoBalcao; int codigoSeguranca; cout << "Número da Conta: "; cin >> cConta; fflush(stdin); for (int cIndice=0; cIndice < contas.size() ; cIndice++) { if (cConta == contas.at(cIndice).getNumConta()) { flag = true; contaSelecionada = cIndice; } } if (flag == true) { if (contas.at(contaSelecionada).getCodigoEstado() == 2) { cout<<"Conta Fechada. Nao é possível efetuar movimentos."; cout<<endl; system("pause"); } else { system("cls"); codigoBanco = contas[contaSelecionada].getCodigoBanco(); codigoBalcao = contas[contaSelecionada].getCodigoBalcao(); codigoSeguranca = contas[contaSelecionada].getCodigoSeguranca(); conta = contas[contaSelecionada].getNumConta(); valor = conta; while ( valor /= 10 ) length++; zeros = 11-length; cout<<endl; cout<<"*************************************************************************"<<endl; cout<<endl; contas[contaSelecionada].mostraNumConta(); contas[contaSelecionada].mostraNome(); cout<<endl; cout<<endl; cout<<"\t\tNIB: "<<codigoBanco<<" "<< codigoBalcao<<" "; cout<<setfill('0')<<setw(zeros)<<conta<<" "; if (codigoSeguranca < 10) cout<<"0"; cout<<codigoSeguranca; cout<<endl; cout<<"\t\tIBAN: PT50 "<<codigoBanco<<" "<< codigoBalcao<<" "; cout<<setfill('0')<<setw(zeros)<<conta<<" "; if (codigoSeguranca < 10) cout<<"0"; cout<<codigoSeguranca; cout<<endl; cout<<endl; cout<<"*************************************************************************"<<endl; cout<<endl; cout<<"Para imprimir o comprovativo prima ctrl + P."<<endl; system("pause"); } } if (flag == false) { cout << "-> Conta Inexistente.\n"; system("pause"); } } //*************************************************************************************** //* Função "gravaFicheiro()" //*************************************************************************************** void gravaFicheiro(char fConta[]) { Conta conta; ofstream fContas; fContas.open("C:\\0810 - C++\\Contas.txt", ios::out); for (int cIndice=0; cIndice < contas.size() ; cIndice++) { fContas<<contas[cIndice].numConta<<","<<contas[cIndice].codigoBanco<<","; fContas<<contas[cIndice].balcao<<","<<contas[cIndice].codigoBalcao<<","; fContas<<contas[cIndice].codigoSeguranca<<","<<contas[cIndice].nome<<","; fContas<<contas[cIndice].morada<<","<<contas[cIndice].cPostal<<","; fContas<<contas[cIndice].localidade<<","<<contas[cIndice].contacto<<","; fContas<<contas[cIndice].dataNascimento<<","<<contas[cIndice].docIdentificacao<<","; fContas<<contas[cIndice].numDocIdentificacao<<","<<contas[cIndice].NIF<<","; fContas<<contas[cIndice].tipoConta<<","<<contas[cIndice].codigoConta<<","; fContas<<contas[cIndice].estado<<","<<contas[cIndice].codigoEstado<<","; fContas<<contas[cIndice].saldo<<endl; } fContas.close(); cout<<endl; } //*************************************************************************************** //* Função "leFicheiro()" //*************************************************************************************** void leFicheiro(char fConta[]) { Conta conta = Conta(); string linha, campo; int cont; ifstream fContas; fContas.open("Contas.txt", std::ios::in); if (fContas.fail()) { cout << "Ficheiro Inexistente" << endl; system("pause"); exit(1); } while(!fContas.eof()) { getline(fContas, linha, '\n'); //cout << linha << "\n"; cont = 0; for(int i=0; i < linha.size(); i++){ if(linha[i]!=','){ campo += linha[i]; }else{ cont++; if(cont == 1){ // primeiro campo ID cout << "TESTE" << endl; conta.setNumConta(atoi(campo.c_str())); // atribui ao objeto atoi() pra conveter a string de C (c_str()) para int cout << conta.getNumConta(); // verifica se está lá } if(cont == 2){ cout << "TESTE" << endl; conta.setCodigoBanco(atoi(campo.c_str())); cout << conta.getCodigoBanco(); } if(cont == 3){ cout << "TESTE" << endl; conta.setBalcao(campo); cout << conta.getBalcao(); } if(cont == 4){ cout << "TESTE" << endl; conta.setCodigoBalcao(atoi(campo.c_str())); cout << conta.getCodigoBalcao(); } if(cont == 5){ cout << "TESTE" << endl; conta.setCodigoSeguranca(atoi(campo.c_str())); cout << conta.getCodigoSeguranca(); } if(cont == 6){ // sexto campo nome cout << "TESTE" << endl; conta.setNome(campo); // nome é string, não precisa converter cout << conta.getNome(); } if(cont == 7){ cout << "TESTE" << endl; conta.setMorada(campo); cout << conta.getMorada(); } if(cont == 8){ cout << "TESTE" << endl; conta.setCPostal(campo); cout << conta.getCPostal(); } if(cont == 9){ cout << "TESTE" << endl; conta.setLocalidade(campo); cout << conta.getLocalidade(); } if(cont == 10){ cout << "TESTE" << endl; conta.setContacto(atoi(campo.c_str())); cout << conta.getContacto(); } if(cont == 11){ cout << "TESTE" << endl; conta.setDataNascimento(campo); cout << conta.getDataNascimento(); } if(cont == 12){ cout << "TESTE" << endl; conta.setDocIdentificacao(campo); cout << conta.getDocIdentificacao(); } if(cont == 13){ cout << "TESTE" << endl; conta.setNumDocIdentificacao(campo); cout << conta.getNumDocIdentificacao(); } if(cont == 14){ cout << "TESTE" << endl; conta.setNIF(atoi(campo.c_str())); cout << conta.getNIF(); } if(cont == 15){ cout << "TESTE" << endl; conta.setTipoConta(campo); cout << conta.getTipoConta(); } if(cont == 16){ cout << "TESTE" << endl; conta.setCodigoConta(atoi(campo.c_str())); cout << conta.getCodigoConta(); } if(cont == 17){ cout << "TESTE" << endl; conta.setEstado(campo); cout << conta.getEstado(); } if(cont == 18){ cout << "TESTE" << endl; conta.setCodigoEstado(atoi(campo.c_str())); cout << conta.getCodigoEstado(); } if(cont == 19){ cout << "TESTE" << endl; conta.setSaldo(strtof(campo.c_str(), NULL)); cout << conta.getSaldo(); } // Debugging cout << endl << "Campo atual [" << cont << "] - Conteúdo: " << campo; // limpa campo para o próximo ciclo campo = ""; cout << endl; } } contas.push_back(conta); } system("pause"); } Link to comment Share on other sites More sharing options...
HappyHippyHippo Posted November 21, 2015 at 06:35 PM Report Share #589945 Posted November 21, 2015 at 06:35 PM vamos por partes responde às perguntas colocadas nos comentários do teu código: getline(fContas, linha, '\n'); // o que está a ler do ficheiro aqui ? (relaciona com o código de leitura do ficheiro) cont = 0; for(int i=0; i < linha.size(); i++){ // qual o significado de linha.size em termos de termo de paragem do ciclo ? IRC : sim, é algo que ainda existe >> #p@p Portugol Plus Link to comment Share on other sites More sharing options...
Recommended Posts
Create an account or sign in to comment
You need to be a member in order to leave a comment
Create an account
Sign up for a new account in our community. It's easy!
Register a new accountSign in
Already have an account? Sign in here.
Sign In Now