• 0
Sign in to follow this  
RodrigoAraIF

Como armazenar valores diferentes de uma mesma variável em C++?

Question

Estou criando um sistema bancário em c++

(é um trabalho do meu curso, que exige que eu use essa linguagem)

na última etapa, preciso que o programa mostre um extrato com todas as movimentações da conta,

mas quando eu faço os depósitos na conta, ocorre um erro.

por exemplo, o saldo inicial era 0

depositei 10

em seguida mais 20

no extrato aparece:

depósitos feitos:

2
Valor dos depósitos:

20

20

ou seja, preciso de alguma forma imprimir o primeiro e segundo valor, e ele só está reconhecendo o segundo.

alguém pode me ajudar? 

Share this post


Link to post
Share on other sites

11 answers to this question

Recommended Posts

  • 0

Nossa! >_< Seu código é extenso hehe
Por favor... use o botão <> para dar formato ao texto ou pode conter erros, pois a pagina usa certas combinações de caracteres que coincidem com partes do código em c e podem desaparecer. Ademais o código é mais fácil de entender, coisa que lhe ajudará a obter ajuda mais rápido.
A3UZPtDORPWsDHZ_c2AGpA.png

Share this post


Link to post
Share on other sites
  • 0
#include <iostream>
#include <conio.h>
#include <fstream> /// fluxo de dados de arquivos
#include <stdio.h>
#include <string.h>
#include <stdlib.h>
#include <stdio.h>
#include <locale.h> ///Para a função que aceita caracteres especiais
#define M 100 ///define M como 100(mesmo q M=100)

using namespace std;

///Criação da struct
struct dados{
    int numdaconta;
    int numdaagencia;
    char nomedotitular[30];
    long long cpf;
    float saldoinicial;
};

//Variáveis globais
char arq[100];
char extrato[100];
int opcao;
int contar=0;///variável para preencher a struct vetor
dados p[M];///struct com vetor, M é o valor máximo de contas
ofstream fout;///Objeto para escrever
ifstream fin;///Objeto de leitura
int conta, agencia;///Variáveis para comparar agência e conta corrente


///Função para cadastro
int cadastro(dados p[]){
    cout<< "Número da Conta: ";
    cin>> p[contar].numdaconta;
    fout<< "Numero da Conta: "<< p[contar].numdaconta<<endl;

    cout<< "Número da Agência: ";
    cin>> p[contar].numdaagencia;
    fout<< "Número da Agência: "<< p[contar].numdaagencia<<endl;

    cout<< "Nome do Titular: ";
    cin>> p[contar].nomedotitular;
    fout<< "Nome do Titular: "<< p[contar].nomedotitular<<endl;

    cout<< "CPF: ";
    cin>> p[contar].cpf;
    fout<< "CPF: "<<p[contar].cpf<<endl;

    cout<< "Saldo inicial: ";
    cin>> p[contar].saldoinicial;
    fout<< "Saldo inicial: "<<p[contar].saldoinicial<<endl;
        if(p[contar].saldoinicial>=0){
                fout << p[contar].saldoinicial << endl;
                cout << "Conta cadrastada com sucessso!\n";

        }
        else{
            ///Pus a repetição pra repetir sempre q o saldo for menor q 0
            while(p[contar].saldoinicial<0){
            cout << "Digite novamente:\n";
            cin >> p[contar].saldoinicial;
            }
            fout << p[contar].saldoinicial;
        }

    ///Fechando o arquivo
    fout.close();
    contar++;
    return 0;
}

///Função para verificar saldo
int saldo(dados p[]){
    cout<< "Número da conta: ";
    cin>> conta;
    cout<< "Número da agência: ";
    cin>> agencia;
    for(int i=0; i < contar; i++){
    if(conta==p.numdaconta && agencia == p.numdaagencia){
        cout<< "Número da Conta: "<< p.numdaconta<<endl;
        cout<< "Número da Agência: "<< p.numdaagencia<<endl;
        cout<< "Nome do Titular: "<< p.nomedotitular<<endl;
        cout<< "CPF: "<<p.cpf<<endl;
        cout<< "Saldo: "<<p.saldoinicial;
        }
        else{
            cout<< "\t*** Número da conta e agência são inválidos! ***\n"<< endl;
        }
    }
    return 0;
}

int main()
{

    float soma,valordeposito=0, valorsaque=0,novosaldo,saldoatual,qtddeposito=0, qtdsaque=0;///Variáveis para depósito e saque

    /*char novonome[30];///Variável para novo nome
    long long novocpf;///Variável para novo cpf*/

    setlocale(LC_ALL, "Portuguese");///Para aceitar caracteres especiais
    do{
    ///Menu
    cout<<endl <<"\t*** Menu de Opções *** ";
    cout<< "\n----------------------------------------";
    cout<< "\n1 - Cadastrar Conta Corrente           |"
        << "\n2 - Alterar dados de uma Conta Corrente|"
        << "\n3 - Excluir Conta Corrente             |"
        << "\n4 - Consultar Saldo                    |"
        << "\n5 - Fazer Depósito                     |"
        << "\n6 - Realizar Saque                     |"
        << "\n7 - Mostrar todas contas e saldos      |"
        << "\n8 - Emitir extrato da conta            |"
        << "\n9 - Sair                               |"
        << "\n----------------------------------------"
        << endl;

    ///O usuário irá escolher a opção
    cin>> opcao;

    if(opcao == 1){
        cout<<"Login De Acesso: ";
        cin>>arq;
        strcat(arq, ".txt");
        fout.open(arq);
            if(!fout){
                cout<<"Erro ao escrever dados no arquivo";
                return 0;
            }
        ///Se o arquivo abrir normalmente
        else{
            cadastro(p);
            }
        system("pause");
        system("CLS");///Para limpar a tela
        }

    if(opcao == 2){
        cout<< "Número da conta: ";
        cin>> conta;
        cout<< "Número da agência: ";
        cin>> agencia;
        for(int i=0; i < contar; i++){
        if(conta==p.numdaconta && agencia == p.numdaagencia){
            cout<< "Login de acesso: ";
            cin>> arq;
            strcat(arq,".txt");
            fout.open(arq);
            if(!fout){
                cout<< "Erro ao abrir o arquivo!";
                return 0;
                }
                else{
                    fout<< "Número da Conta: "<< p.numdaconta<<endl;
                    fout<< "Número da Agência: "<< p.numdaagencia<<endl;

                    cout<< "Novo nome do Titular: ";
                    cin>> p.nomedotitular;
                    fout<< "Nome do Titular: " << p.nomedotitular<< endl;

                    cout<< "Novo CPF: ";
                    cin>>p.cpf;
                    fout<< "CPF: "<< p.cpf<< endl;

                    fout<< "Saldo inicial: "<<p.saldoinicial<<endl;
                }
            }
            fout.close();
        }
    }

    ///Excluindo arquivo
    if(opcao == 3){
        cout<< "Número da conta: ";
        cin>> conta;
        cout<< "Número da agência: ";
        cin>> agencia;
        for(int i=0; i < contar; i++){
    if(conta==p.numdaconta && agencia == p.numdaagencia){
            cout<< "Login de acesso: ";
            cin>> arq;
            strcat(arq,".txt");
            fout.open(arq);
            if(!fout){
                cout<< "Erro ao abrir o arquivo!";
                return 0;
                }
            else{
                fout<< "Conta apagada com sucesso!";
                fout.close();
                cout<< "Conta apagada com sucesso!";
                }
            }
        }
    }

    ///Opção 4
    else
    if(opcao == 4){
        saldo(p);
        }

    ///Opção 5
    else
    if(opcao == 5){
        cout<< "Número da conta: ";
        cin>> conta;
        cout<< "Número da agência: ";
        cin>> agencia;
        for(int i=0; i < contar; i++){

        if(conta==p.numdaconta && agencia == p.numdaagencia){
            cout<< "Login de acesso: ";
            cin>> arq;
            strcat(arq,".txt");
            fout.open(arq);
            if(!fout){
                cout<< "Erro ao abrir o arquivo!";
                return 0;
            }
            else{
                cout<< "Número da Conta: "<< p.numdaconta<< endl;
                cout<< "Número da Agência: "<< p.numdaagencia<< endl;
                cout<< "Nome do Titular: "<< p.nomedotitular<< endl;


                saldoatual = p.saldoinicial + valordeposito;///Incluindo o valor do depósito

                cout<< "CPF: "<<p.cpf<< endl;

                if(saldoatual == 0){
                    cout<<"saldo: 0"<<endl;///quando a variável possui valor igual a 0,
                                           ///é impresso "nan" ao mandar imprimí-la
                }
                else{
                cout<< "Saldo: "<<saldoatual<< endl;
                }
                cout<< "Quanto deseja depositar? ";
                cin>> valordeposito;

                if(valordeposito < 0){
                    cout<< endl<< "\t*** Valor inválido! (Tente Novamente) ***";
                }
                else{

                    novosaldo= saldoatual;///Somando saldos

                    }

                    qtddeposito ++;
                    cout<< "Depósito feito com sucesso!";
                    cout<< endl<<"Agora você tem: "<< novosaldo<< "$"<< endl;
                    fout<< "Número da Conta: "<< p.numdaconta<< endl;
                    fout<< "Número da Agência: "<< p.numdaagencia<< endl;
                    fout<< "Nome do Titular: "<< p.nomedotitular<< endl;
                    fout<< "CPF: "<<p.cpf<< endl;
                    fout<< "Saldo: "<<novosaldo;

            }


        }
            else{
                cout<< "\t*** Número da conta e agência são inválidos! ***\n"<< endl;
            }

        fout.close();

        }
    }

    ///Opção 6
    else
    if(opcao == 6){
        cout<< "Número da conta: ";
        cin>> conta;
        cout<< "Número da agência: ";
        cin>> agencia;

        for(int i=0; i < contar; i++){
        saldoatual = p.saldoinicial - valorsaque;
        if(conta==p.numdaconta && agencia == p.numdaagencia){
            cout<< "Login de acesso: ";
            cin>> arq;
            strcat(arq,".txt");
            fout.open(arq);
            if(!fout){
                cout<< "Erro ao abrir o arquivo!";
                return 0;
            }
            else{
                cout<< "Número da Conta: "<< p.numdaconta<< endl;
                cout<< "Número da Agência: "<< p.numdaagencia<< endl;
                cout<< "Nome do Titular: "<< p.nomedotitular<< endl;
                cout<< "CPF: "<<p.cpf<< endl;
                cout<< "Saldo: "<<novosaldo<< endl;

                cout<< "Quanto deseja sacar? ";
                cin>> valorsaque;

                if(valorsaque < 0){
                    cout<< endl<< "\t*** Valor inválido! (Tente Novamente) ***";
                }
                else{

                    qtdsaque ++;
                    cout<< "Saque feito com sucesso!";
                    cout<< endl<<"Agora você tem: "<< saldoatual<< "$"<< endl;
                    fout<< "Número da Conta: "<< p.numdaconta<< endl;
                    fout<< "Número da Agência: "<< p.numdaagencia<< endl;
                    fout<< "Nome do Titular: "<< p.nomedotitular<< endl;
                    fout<< "CPF: "<<p.cpf<< endl;
                    fout<< "Saldo: "<<novosaldo;
                }
            }
        }
            else{
                cout<< "\t*** Numero da conta e agência são inválidos! ***\n"<< endl;
            }
        }
        fout.close();
    }

    ///Opção 7
    if(opcao == 7){
        for(int i=0; i<contar; i++){
            cout<< "Número da Conta: ";
            cout << p.numdaconta << endl;
            cout<< "Número da Agência: ";
            cout << p.numdaagencia << endl;
            cout<< "Nome do Titular: ";
            cout << p.nomedotitular << endl;
            cout<< "CPF: ";
            cout<< p.cpf << endl;
            cout<< "Saldo inicial: ";
            cout<< p.saldoinicial << endl;
        }
        if(contar == 0){
            cout<< "\t*** Não há contas! ***\n";
        }
    }

    ///Opção 8
    if(opcao == 8){


            cout<< "Número da conta: ";
            cin>> conta;
            cout<< "Número da agência: ";
            cin>> agencia;
            for(int i=0; i < contar; i++){
            if(conta==p.numdaconta && agencia == p.numdaagencia){
            cout<< "Login de acesso: ";
            cin>> arq;
            }
            else{
                cout<< "\t*** Número da conta e agência são inválidos! ***\n"<< endl;
            }


            int resp;///Opções para a operação a seguir:

            cout<< "Digite 1 para salvar seu extrato."
                <<endl
                << "Digite 2 para visualizar o extrato."
                <<endl;

            cin>> resp;

                if(resp == 1){

                    cout<<"Digite novamente seu login de acesso: "<<endl;
                    cin>>extrato;
                    strcat(extrato, "extrato.txt");

                    fout.open(extrato);
                    fout<< "Número da Conta: "<< p.numdaconta<<endl;
                    fout<< "Número da Agência: "<< p.numdaagencia<<endl;
                    fout<< "Nome do Titular: " << p.nomedotitular<< endl;
                    fout<< "CPF: "<< p.cpf<< endl;
                    fout<< "Saldo inicial: "<<p.saldoinicial<<endl;
                    fout<< "Depósitos: "<<endl;

                    for(int i=0; i<qtddeposito;i++){
                    fout<<valordeposito<<endl;
                    }

                    fout<<"Saques: "<<endl;

                    for(int i=0; i<qtdsaque;i++){
                    fout<< valorsaque<<endl;
                    }

                    fout<< "Saldo Final: "<<endl;
                    fout<< novosaldo<<endl;

                    if(!fout){
                    cout<<"Erro ao escrever dados no arquivo"<<endl;
                    return 0;
                    }
                    else{
                        cout<<"Extrato salvo com sucesso"<<endl;
                    }

                }
                else
                if(resp == 2){

                    cout<< "Número da Conta: "<< p.numdaconta<<endl;
                    cout<< "Número da Agência: "<< p.numdaagencia<<endl;
                    cout<< "Nome do Titular: " << p.nomedotitular<< endl;
                    cout<< "CPF: "<< p.cpf<< endl;
                    cout<< "Saldo inicial: "<<p.saldoinicial<<endl;
                    cout<< "Depósitos: "<<endl;
                    for(int i=0; i<qtddeposito;i++){
                    cout<<valordeposito<<endl;
                    }

                    cout<<"Saques: "<<endl;

                    for(int i=0; i<qtdsaque;i++){
                    cout<<valorsaque<<endl;
                    }

                    ///cout<< valorsaque<< "$"<<endl;
                    cout<< "Saldo Final: "<<endl;
                    cout<< novosaldo<<endl;


                }
                else{
                    cout<< "Opção Inválida!" <<endl;
                }
            fout.close();

            system("pause");

        }
    }

    if(opcao == 9){
        cout<< "\t*** Obrigado e volte sempre ***"<< endl;
        return 0;
        }

    if(opcao >9){
        cout<<"\t*** Opção Inválida! ***\n";
        }

    }

    while(opcao != 9);

    return 0;
}

obrigado pela dica, é porque sou novo por aqui e estou desesperado por ajuda, pois tenho até terça para entregar o código funcionando

Share this post


Link to post
Share on other sites
  • 0

Seu programa tem uns quantos erros que por desgraça para corrigir me obrigaria a praticamente reescrever-lhe por completo.

Não está mal o conceito, da para entender claramente o que você quer fazer, mas tem varios falhos tanto quanto a funcionalidade se refere como em lógica.

Outro grande problema que tem é a falta de organização que tem. Não deve ser escrito tudo dentro de main, melhor usar funções(por não dizer classes), separar o código fica mais fácil encontrar erros pois são menores as porcões de código.

Vou lhe comentar o maior problema que você tem. Ao abrir um arquivo, logo depois de escrever nele ou ler, ou realizar qualquer operação nele, tenha de costume fechar o arquivo com com a função close, pois ela atua como o "salvar dados" dos editores. mesmo que você tenha que abrir o arquivo para cada operação, é recomendado fechar o arquivo, se tiver que inserir dados para 10 usuários, você precisa abrir editar e fechar dez vezes. É totalmente errado você abrir um arquivo com open editar e voltar a abrir com open sem ter fechado o anterior arquivo.

 

Share this post


Link to post
Share on other sites
  • 0

Os modos de abertura também influenciam muito como atua os "filepointers":
5a5a8d81aaebe_Openmode.jpg.f7954954d67929c048c6a33d1c3ca5fe.jpg

dependendo de como você abre o arquivo ele vai ter um comportamento diferente

dependendo de como você abre o arquivo ele vai ter um comportamento diferente

Share this post


Link to post
Share on other sites
  • 0

Por isso você precisa saber qual estrutura vai ter o arquivo.
Alguns pontos como:
Onde guardo os dados referentes a um depósito? No mesmo arquivo? Em um arquivo diferente? Lembre que você pode usar um segundo arquivo com a seguinte estrutura:
+10
-5
+55.67
...

Ou inclusive pode estar no mesmo arquivo.

Outro ponto que não acho bem é que o usuário escolha o numero da sua conta, isso deveria ser automático. E nem que os arquivos tenham a contra senha como nome, pois podem dar-se casos de repetir 2 contrassenhas, mas nunca se repetirá por exemplo, o numero de conta+agencia, ou a carteira de identidade, cpf, etc.

você pode criar um arquivo com os dados tipo

nome      numero      senha    cpf               arquivo    
raul      001         007      123.456.789-0     raul 123.456.789-0.txt
marcos    002         123      123.456.790-0     marcos 123.456.790-0.txt

Ao buscar um usuário, por exemplo raul, lhe remitiria a um arquivo tipo:
raul 123.456.789-0.txt

+5
-10
+100.98
-55.10


O primeiro arquivo se chama arquivo de índices, e facilita na busca de dados.

 

são somente ideias claro... só para ter uma base. Sorte.

são somente ideias claro... só para ter uma base. Sorte.

Edited by vangodp

Share this post


Link to post
Share on other sites
  • 0

Procure arrumar esses pontos do seu programa, caso não consiga, podemos trabalhar nas partes mais criticas que são alterar e ler desde o arquivo, acredito que lhe ajudando nessas partes você seja capaz de terminar o programa.

Edited by vangodp

Share this post


Link to post
Share on other sites

Join the conversation

You can post now and register later. If you have an account, sign in now to post with your account.

Guest
Answer this question...

×   Pasted as rich text.   Paste as plain text instead

  Only 75 emoji are allowed.

×   Your link has been automatically embedded.   Display as a link instead

×   Your previous content has been restored.   Clear editor

×   You cannot paste images directly. Upload or insert images from URL.

Sign in to follow this