Jump to content

Ficheiros em C++


nelicquele

Recommended Posts

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

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
Link to comment
Share on other sites

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 account

Sign in

Already have an account? Sign in here.

Sign In Now
×
×
  • Create New...

Important Information

By using this site you accept our Terms of Use and Privacy Policy. We have placed cookies on your device to help make this website better. You can adjust your cookie settings, otherwise we'll assume you're okay to continue.