RodrigoAraIF Postado Janeiro 13, 2018 Denunciar Share Postado Janeiro 13, 2018 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? Citar Link para o comentário Compartilhar em outros sites More sharing options...
0 vangodp Postado Janeiro 13, 2018 Denunciar Share Postado Janeiro 13, 2018 Exponha o código para que seja possível analisar. Citar Link para o comentário Compartilhar em outros sites More sharing options...
0 RodrigoAraIF Postado Janeiro 13, 2018 Autor Denunciar Share Postado Janeiro 13, 2018 (editado) . Editado Janeiro 13, 2018 por RodrigoAraIF Citar Link para o comentário Compartilhar em outros sites More sharing options...
0 vangodp Postado Janeiro 13, 2018 Denunciar Share Postado Janeiro 13, 2018 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. Citar Link para o comentário Compartilhar em outros sites More sharing options...
0 RodrigoAraIF Postado Janeiro 13, 2018 Autor Denunciar Share Postado Janeiro 13, 2018 #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 Citar Link para o comentário Compartilhar em outros sites More sharing options...
0 vangodp Postado Janeiro 13, 2018 Denunciar Share Postado Janeiro 13, 2018 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. Citar Link para o comentário Compartilhar em outros sites More sharing options...
0 RodrigoAraIF Postado Janeiro 13, 2018 Autor Denunciar Share Postado Janeiro 13, 2018 Obrigado, ficarei atento e tentarei resolver Citar Link para o comentário Compartilhar em outros sites More sharing options...
0 vangodp Postado Janeiro 13, 2018 Denunciar Share Postado Janeiro 13, 2018 Os modos de abertura também influenciam muito como atua os "filepointers": 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 Citar Link para o comentário Compartilhar em outros sites More sharing options...
0 RodrigoAraIF Postado Janeiro 13, 2018 Autor Denunciar Share Postado Janeiro 13, 2018 vou acabar por reescrever o código, realmente há muitos erros e vou estudar os modos de abertura também Citar Link para o comentário Compartilhar em outros sites More sharing options...
0 vangodp Postado Janeiro 13, 2018 Denunciar Share Postado Janeiro 13, 2018 (editado) 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. Editado Janeiro 13, 2018 por vangodp Citar Link para o comentário Compartilhar em outros sites More sharing options...
0 RodrigoAraIF Postado Janeiro 13, 2018 Autor Denunciar Share Postado Janeiro 13, 2018 obrigado mais uma vez, seguirei suas dicas. Citar Link para o comentário Compartilhar em outros sites More sharing options...
0 vangodp Postado Janeiro 14, 2018 Denunciar Share Postado Janeiro 14, 2018 (editado) 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. Editado Janeiro 14, 2018 por vangodp Citar Link para o comentário Compartilhar em outros sites More sharing options...
Pergunta
RodrigoAraIF
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?
Link para o comentário
Compartilhar em outros sites
11 respostass a esta questão
Posts Recomendados
Participe da discussão
Você pode postar agora e se registrar depois. Se você já tem uma conta, acesse agora para postar com sua conta.