Jump to content

Search the Community

Showing results for tags 'c++'.



More search options

  • Search By Tags

    Type tags separated by commas.
  • Search By Author

Content Type


Forums

  • Bem-vindos ao Portugal-a-Programar
    • Sugestões, Críticas ou Dúvidas relativas ao P@P
    • Acerca do P@P
  • Comunidade a Trabalhar
    • Wiki P@P
    • Apresentação de Projectos de Programação
    • Downloads
  • Revista PROGRAMAR
    • Revista PROGRAMAR
  • Desenvolvimento Geral
    • C
    • C++
    • Java
    • Haskell
    • Pascal
    • Python
    • Bases de Dados
    • Dispositivos Móveis
    • Outras Linguagens
  • Desenvolvimento Orientado para Web
    • PHP
    • HTML
    • CSS
    • Javascript
    • Outras Linguagens de WebDevelopment
    • Desenvolvimento Web
  • Desenvolvimento .NET
    • C#
    • Visual Basic .NET
    • ASP.NET
    • WPF & SilverLight
  • Software e Sistemas Operativos
    • Software de Produtividade
    • Sistemas Operativos
    • Apresentação de Software
  • Informática
    • Interfaces Visuais
    • Computação Gráfica
    • Algoritmia e Lógica
    • Segurança e Redes
    • Hardware
    • Electrónica
    • Automação Industrial
    • Matemática
    • Dúvidas e Discussão de Programação
    • Notícias de Tecnologia
  • Outras Áreas
    • Dúvidas Gerais
    • Discussão Geral
    • Eventos
    • Anúncios de Emprego
    • Tutoriais
    • Snippets / Armazém de Código
  • Arquivo Morto
    • Projectos Descontinuados
    • System Empires

Blogs

  • Blog dos Moderadores
  • Eventos
  • Notícias de Tecnologia
  • Blog do Staff
  • Revista PROGRAMAR
  • Projectos
  • Wiki

Categories

  • Revista PROGRAMAR
  • Tutoriais
  • Textos Académicos
  • Exercícios Académicos
    • Exercícios c/ Solução
    • Exercícios s/ Solução
  • Bibliotecas e Aplicações
  • Outros

Find results in...

Find results that contain...


Date Created

  • Start

    End


Last Updated

  • Start

    End


Filter by number of...

Found 1,702 results

  1. seuqram

    [Resolvido] SDL_net server-client

    Boa Tarde. Há poucos dias resolvi começar a fazer um servidor-client a utilizar o SDL_net. Tenho que ter um protocolo rápido (UDP), onde pode haver perdas, e outro protocolo à parte, que confirme todos os pacotes. O problema está no segundo. Eu achei muito desafiador fazer esse protocolo através de um sistema baseado no UDP (enviar até receber um feed-back) mas eu estou com receio de que isso possa ficar muito pesado e assim, não o possa utilizar. O sistema consiste num buffer no client que guarda os pacotes que ainda não foram confirmados dentro de um vetor de string. Eu testei enviar uns 200 pacotes por segundo o que até 30 segundos pareceu tudo normal... Depois, de repente, a conexão é interrompida (o servidor continua ativo). Desligando e tentando ligar o servidor, diz "não foi capaz de se ligar ao port" (o port está no "3114"). Tenho que desligar o servidor e ligá-lo outra vez para volta a dar. Eu, no codigo, quando envio os pacotes, tenho sempre o canal como -1, ou seja não uso canais individuais para os enviar. Será que se fazendo uso deles, isto irá ficar mais rápido? Provavelmente estou a fazer alguma coisa de mal no sistema, será que há modelos de tranformação de UDP->TCP melhores que o buffer/feed-back? Será que eu devo utilizar os protocolos do SDL_net, TCP e UDP juntos sem andar a inventar coisas? Ou esta pode ser mesmo uma limitação do meu computador/router? Cumprimentos.
  2. Boa tarde. Gostaria de uma pequena ajuda aqui neste problema. O objectivo é guardar o output do comando system("set userprofile") numa string. O código que tenho para já é este. #include<iostream> #include<Windows.h> #include<tchar.h> using namespace std; void main(){ _tsetlocale(LC_ALL, _T("portuguese")); char caminho[100] = system("set userprofile"); cout << "Caminho: " << caminho; system("pause"); } Já fiz varias pesquisas no entanto não consigo encontrar o método correto. Obrigado
  3. Olá malta estou aqui a fazer um mini projecto de c++, onde estou a criar um bloco de notas, e mais tarde vou usar para programar(ideia maluca mas pronto), e queria que o utilizador no inicio coloca-se no inicio o caminho e o nome do ficheiro exemplo : /home/fmc/ficheiro.txt Como faço?E ste código está a criar um ficheiro como default, e não inserido pelo utilizador! #include <iostream> #include <fstream> using namespace std; bool e_letra(char a) //confirma se é letra { bool saida; if ((a>='a' && a<='z') || (a>='A' && a<='Z') ) //Se for alguma letra saida=true; else saida=false; return saida; } bool e_numero(char a) //confirma se é numero { bool saida; if (a>='1' && a<='9') //se for algum numero saida=true; else saida=false; return saida; } bool e_espaco(char a) { bool saida; if (a == ' ' || a=='\t' || a== '\r' || a == '\n') //se for algum tipo de espaço saida=true; else saida=false; return saida; } void texto(){ //variáveis char entrada; unsigned numero_letras=0,numero_numeros=0,numero_outros=0,numero_espacos; ofstream esc; esc.open("saida.txt"); //Texto inicial cout << "Escreve, para parar *" << endl; do{ entrada = (char) cin.get(); //Para recolher espaços esc << entrada; if (e_letra(entrada)) //Se for letra, adiciona uma na variavel letra numero_letras++; else if (e_numero(entrada)) //Se não for letra e se for numero adc uma a variavel num numero_numeros++; else if (e_espaco(entrada)) numero_espacos++; else //Se não for nenhuma das anteriores é caracter especial numero_outros++; } while(entrada!='*'); // repetir até chegar o caracter * esc.close(); cout << "Saiu porcausa que escrever o caracter '*', e esse foi ignorado" << endl; //Mensagem de aviso cout << numero_letras << " letra" << (numero_letras!=1 ? "s":"") << endl; cout << numero_numeros << " numero" << (numero_numeros!=1 ? "s":"") << endl; cout << numero_espacos << " espaço" << (numero_espacos!=1 ? "s":"") << endl; cout << numero_outros << " outro" << (numero_outros!=1 ? "s":"") << " caracter" << (numero_outros!=1 ? "es":"") << endl; } int main() { texto(); return 0; }
  4. Miguelowski

    Sobrecarga do Operador ==

    Tenho uma classe Tabuleiro Tabuleiro::Tabuleiro() { int i; Nc = 3; Nl = 3; Matriz = new char*[Nl]; for (i = 0; i < Nl; i++){ Matriz[i] = new char[Nc]; } Inicia(); } Tabuleiro::Tabuleiro(int mnc, int mnl) { int i; Nc = mnc; Nl = mnl; Matriz = new char*[Nl]; for (i = 0; i < Nl; i++){ Matriz[i] = new char[Nc]; } Inicia(); } Tabuleiro::~Tabuleiro() { for (int i = 0; i < Nl; i++){ delete Matriz[i]; } delete Matriz; } void Tabuleiro::Inicia(){ cout << "\n"; int i, j; for (i = 0; i < Nl; i++){ for (j = 0; j < Nc; j++){ Matriz[i][j] = '.'; } } } Como faço a sobrecarga do operador == para verificar se o tabuleiro inicial e igual ao tabuleiro depois de preenchido? alguem me sabe dizer se ficaria assim? bool tabuleiro::operator == (const Tabuleiro T) const { bool igual= true; . if(tabuleiro !=T) igual=false; return igual; }
  5. Miguelowski

    Substituir funçao no metodo friend

    Tenho esta funçao: voidTabuleiro::Show(){ int i = 0, j; cout << " Jogo do Galo\n"; for (i = 0; i < Nc; i++){ cout << " " << i + 1; } cout << "\n"; for (i = 0; i < Nl; i++){ cout << i + 1 << " "; for (j = 0; j < Nc-1; j++){ cout << Matriz[j] << " | "; } cout << Matriz[Nc-1]; cout << "\n"; if (i < Nl - 1){ cout << " -------"; for (j = 0; j < Nc - 1; j++){ cout << "|-------"; } cout<<"\n"; } } cout << "\n"; } E este metodo friend ostream & operator << (ostream &os, constTabuleirot) { os << t.Nc << "/" << t.Nl <<endl; returnos; } istream & operator >> (istream &is, Tabuleiro &t) { cout << "Numero de colunas: "; is >> t.Nc; cout << "Numero de linhas: "; is >> t.Nl; returnis; } Como posso substituir a funçao Show pelo metodo friend de modo ao friend retornar Show?
  6. Bernardo Vieira

    Classe derivada de duas bases

    Bom, antes de mais vou explicar o problema por alto. Eu tenho uma class base (vamos chamar-lhe Base) e depois tenho várias outra classes derivadas (Derivadas 1,2,3,...) com essa base em comum. Até aqui tudo bem. No entanto, eu queria usar como base dessas classes derivadas(Derivadas 1,2,3,...) , outras classes (Extra 1,2,3,...) que também têm como base a mesma classe das derivadas. O problema é que não posso porque teoricamente estou a incluir a base 3 vezes. Vou deixar um pequeno exemplo, talvez para ajudar a perceber melhor (o exemplo está errado) Alguém me consegue sugerir uma alternativa ? Ou isto é só uma ideia estúpida e eu devo procurar outra maneira de fazer isto ? class base { public: base() { } ~base() { } virtual void saida() { cout << "base" << endl; } }; class extra1 : public base { public: extra1() { } ~extra1() { } void saida() { cout << "extra1" << endl; } }; class extra2 : public base { public: extra2() { } ~extra2() { } void saida() { cout << "extra2" << endl; } }; class derivada : public extra1, public extra2 { public: derivada() { } ~derivada() { } }; int main() { base* b = new derivada; b->saida(); return 0; }
  7. AndreLopes20

    Programa sobre gestão de salas de cinema

    Boa tarde, preciso mesmo da vossa ajuda , ando a elaborar um trabalho sobre gestao de salas de cinema na qual tivemos que criar uma estrutura para criar as reservas dos bilhetes ... neste trabalho criamos tambem um menu com varias opções e uma delas é a reserva de bilhetes , só que nao consigo ligar a estruturas das reservas ao menu alguem me consegue ajudar neste problema ? O trabalho é feito em linguagem de Programação C++ Obrigado
  8. ricardomgferreira

    Função Char para verificar caracter a caracter

    Bom dia sou novo em c++, porém estou a fazer um programa para comparar 2 arrays do tipo char. O que preciso é de saber o tipo de caracter q está no array valor (se é numero ou letra) e comparar com o do array mask. Se o caracter for um número e q seja igual nos dois arrays... grava no array mask o resultado do array valor mas com # no fim Se o caracter for uma letra e q seja igual nos dois arrays... grava no array mask o resultado do array valor mas com @ no fim Se o caracter for diferente nos dois arrays... grava no array mask o resultado do array valor mas com % no fim. O que fiz por agora foi isto: CHAR CompareCharacter(CString valor, CString *mask) { int i; int quantos = 0; for(i=0;i<valor.GetLength;i++) { if (valor == mask) quantos++; } } Caso me possam ajudar agradecia
  9. Miguelowski

    Como criar classe

    Como posso fazer uma classe onde o utilizador adicione 10 players e o utilizador escolhe quantos normais e quantos expert quer?
  10. Tenho uma classe jogador onde são escritos o nome dos jogadores cada vez que alguem quer jogar. Queria criar um vetor de 10 lugares que consoante alguem jogasse o seu nome fosse guardado no vetor...como faço? uma classe vetor ou faço uma classe onde crio o vetor la dentro? Jogador.h #pragma once #include <string.h> #include <iostream> #include "Tabuleiro.h" #include <ctype.h> #include "Pessoa.h" using namespace std; class Jogador : public Pessoa { private: char simbolo; int id; int JogosT; int vitorias; int vitorias2; int EXP; float MinutosJogo; public: Jogador(); friend ostream & operator <<(ostream &os, Jogador J); friend istream & operator >>(istream &is, Jogador &J); void SetSimbolo(char); char GetSimbolo() { return simbolo; } void Setid(int d) { id = d; } int Getid() { return id; } virtual void SetEXP(int y) { EXP = y; } virtual int GetEXP() { return EXP; } void Setjt(int s) { JogosT = s; } int Getjt() { return JogosT; } void SetMin(float r) { MinutosJogo = r; } float GetMin() { return MinutosJogo; } void Setvic(int a) { vitorias = a; } int Getvic() { return vitorias; } void Setvic2(int h) { vitorias2 = h; } int Getvic2() { return vitorias2; } void Random_Simbolo(); void Testar(); virtual bool Jogada(Tabuleiro *T); virtual void JogadaPC(Tabuleiro *T); ~Jogador(); }; Jogador.cpp #include "stdafx.h" #include "Jogador.h" #include "Ponto.h" #include "Tabuleiro.h" #include <sstream> Jogador::Jogador() { id = 0; JogosT = 0; vitorias = 0; vitorias2 = 0; MinutosJogo = 0; EXP = 0; } ostream & operator << (ostream &os, Jogador J) { cout << endl << "-Nome: " << J.GetNome() << endl; cout << "-Simbolo: " << J.GetSimbolo() << endl; return os; } istream & operator >> (istream &is, Jogador &J) { string aux; cout << endl << "Nome do jogador: "; getline(cin, aux); J.SetNome(aux); return is; } void Jogador::SetSimbolo(char a) { simbolo = a; } void Jogador::Testar(){ string g; cout << endl << "Nome do jogador: "; getline(cin, g); SetNome(g); }
  11. JohnNox

    C++ ,Protocolo I2C

    Boa tarde, Alguém me poderia arranjar o código para protocolo de comunicação I2C entre 2 arduinos (um master, e um slave) em C++..
  12. krykz

    [Duvidas] DLL + messagebox

    Boas, Eu sou novato na programação em c++,(só conheço os básicos) e gostava de começar a criar DLL . Como seria o código para ao injectar a dll num processo qualquer ela retribuiria uma messagebox com o texto (como por exemplo Hello World) . Cumps
  13. Edu123

    trabalho de programação

    Olá. Eu tenho um trabalho para a cadeira de programação e precisava de ajuda com uma coisa; Já fiz as estruturas e queria, de certa forma, "integrá-las" como submenus (junto diagrama). Podem me ajudar? obrigado. http://postimg.org/image/po3mj3n6b/
  14. Leudassdf

    Regex para validar um string

    Boas pessoal, Actualmente tenho a seguinte expressão para validar strings mas o meu problema é que a mesma é muito lenta. regex e("(\\w+ ?)+ *$"); return regex_match(conteudo, e); Gostaria de saber se alguem me consegue arranjar uma expressão mais eficiente. A expressão deve: Impedir um espaço no inicio e no fim Impedir mais que um espaço entre palavras Impedir virgulas Cumprimentos, Leandro
  15. FMC

    [Resolvido] Duvida de C++

    Olá Comunidade P@P, Tenho aqui uma dúvida sobre C++! Eu na escola ando a aprender Pascal, e a pouco tempo eu aprendi a usar o goto(x,y) que para quem não sabe serve para começa a escrever ou a ler numa determinada posição no programa. Mas a minha dúvida é: Se é possível, fazer o mesmo em C++, e se ter como fazer? Sei que a dúvida pode ser um bocado estúpida, mas já a algum tempo que programo C++ e nunca usei e nem pensem em usar, e já pesquisei na Internet e em alguns livros e nada! Obrigado pela vossa paciência! Abraços, FMC!
  16. pnuno

    Editar String depois do cout

    Bom dia. Estou com um pequeno problema no meu código, podem ajudar-me por favor? Depois de usar a função getline(ficheiro, string) e fazer o cout da string, não consigo "mexer" com ela. E como isto é um jogo, o objectivo depois de imprimir o nível é de jogar nesse nível. Ele imprime, mas não me permite qualquer acção sobre ele. Outra pequena dúvida: quando eu faço #define LEVEL_ONE 1 significa que depois, posso premir a tecla 1, que o programa "chama" o LEVEL_ONE certo? Acontece que não resulta. Será que a tecla 1 está representada por algum conjunto de algarismos? Se sim, podem dizer-me onde posso arranjar essa informação por favor? Muito Obrigado Função: //NIVEL 1 case 1: { string s; ifstream fichTeste("N1.txt"); if(fichTeste.is_open()) { //file opened successfully so we are here cout << "Ficheiro aberto!" << endl; for (int i=0; i<m_nRows; i++){ if(!fichTeste.eof()) { getline(fichTeste, s); //cout << s << endl; for(int j=0;j< s.length(); j++) { for (int j=0;j<s.length(); j++) m_arrBoard[i][j]=s[j]; } } } cout<< "imprimindo" << endl << endl; for(int i=0; i< m_nRows; i++) { for(int j=0; j<m_nColumns; j++) { cout << m_arrBoard[i][j]; } cout << endl; } DrawGraphBoard(); fichTeste.close(); } else //file could not be opened { cout << "File could not be opened." << endl; } cout << endl; } break;
  17. JakeBass

    nº de casas decimais

    podem-me dar alguma dica para definir o nº de casas decimais? queria fazer isto sem utilizar strings ou funções pre-definidas. int calculatePi(int n_digits) { long double scale = 1; for( int a = 1; a < n_digits; a = a + 1 ) { int d_factor = pow(10, a); scale = scale / d_factor; } long double value = (pi / scale) * scale; return value; }
  18. Hulle

    Sobre a biblioteca Windows.h

    Estava eu querendo colocar em pratica o que tenho estudado ultimamente sobre a linguagem C++ em um jogo RPG no console mesmo, mas percebi que fazer um caractere se mover na tela utilizando as setas é mais dificil do que eu pensava, eu vi um exemplo e o autor usava a biblioteca windows.h para isso, com funções do tipo: HANDLE CONSOLE_SCREEN_BUFFER_INFO; SetConsoleCursorPosition ReadConsoleInput Então se alguem puder me dar uma mão para entender melhor essas funções da biblioteca windows.h ficaria grato
  19. Anonymouskiller

    Duvidas OpenGL

    O que acham da biblioteca OpenGL? , Acham que é uma das melhores bibliotecas para desenvolver uma interface grafica se nao qual é?
  20. Anderson Soares

    Dúvidas com if e for

    Olá amigos, Estou desenvolvendo meu primeiro sistema em C++, e estou com uma dúvida no código. É um sistema de vendas de passagem de ônibus, onde eu preciso adicionar um if e um for (no case 4), onde os lugares 1 e 2 sejam reservados para pessoas >=60 anos. E outro if para estudantes que pagaram meia passagem. Alguém pode me ajudar? #include <stdio.h> #include <string.h> int main() { int a[12][3], l, c, menu, soma, qtd, idade, lugar, t, qa; qtd = 0; idade = 0; soma = 0; qa = 0; menu = 0; t = 0; for (l=0;l<12;l++) { for (c=0;c<3;c++) { qtd++; a[l][c] = qtd; } } while (menu!=6) { printf("\n**********menu***********"); printf("\n*1-vendidas *"); printf("\n*2-vagas na janela *"); printf("\n*3-vagas no corredor *"); printf("\n*4-vender passagem *"); printf("\n*5-total arrecadado *"); printf("\n*6-sair *"); printf("\n*************************"); printf("\nopcao: "); scanf("%d", &menu); system("cls"); switch (menu) { case 1: for (l=0;l<12;l++) { for (c=0;c<3;c++) { if (a[l][c]==0) { printf("[ v] "); } else { printf("[ %d] ", a[l][c]); } } printf("\n"); } break; case 2: for (l=0;l<12;l++) { for (c=0;c<3;c++) { if (a[l][c]==0) { printf("[ v ]"); } else if (c==0 || c==3) { printf("[ %d] ", a[l][c]); } else if (c==1 || c==2) { printf("[ ] "); } } printf("\n"); } break; case 3: for (l=0;l<12;l++) { for (c=0;c<3;c++) { if (a[l][c]==0) { printf("[ v] "); } else if (c==1 || c==2) { printf("[ %d] ", a[l][c]); } else if (c==0 || c==3) { printf("[ ] "); } } printf("\n"); } break; case 4: volta: printf("\nDigite a idade:"); scanf("%d", &idade); printf("\nvalor da passagem 15R$"); printf("\ndigite o lugar: "); scanf("%d", &lugar); if (lugar>=1 && lugar<=36) { soma++; qa++; for (l=0;l<12;l++) { for(c=0;c<3;c++) { if (a[l][c]==lugar) { a[l][c]=0; } } } } else { printf("\nlugares de 1 a 36\n"); goto volta; } break; case 5: printf("\nvalor da passagem 15R$"); for (l=0;l<12;l++) { for (c=0;c<3;c++) { if (a[l][c]==0) { t = soma * 15; } } } printf("\npassagens vendidas %d", qa); printf("\ntotal %dR$\n", t); break; default : printf("\ndigite uma opcao valida\n"); break; } } }
  21. Muito boa noite a todos. Já vai algum tempo que não participo no forum, pois tenho andado ocupado com coisas... no entanto, espero que tudo esteja pelo melhor com toda a gente! Estive e fazer um programa para encontrar números primos no qual resolvi usar funções para treinar, no entanto o código está-me a dar um comportamento estranho, o qual nem previa, nem consigo descobrir a causa. O código é o que segue: #include <iostream> using namespace std; int checkPrime(int); int main() { int n,i,a; cout << "insira o numero o qual pretende saber se é ou não número primo: \n"; cin >> n; i=checkPrime(n); if (i==0) cout << i << " não é um número primo!\n"; else cout << i << " É um número primo!\n"; return 0; } int checkPrime(int a) { int i,p=0; for(i=2;i<=a/2;i++) { if(a==2) return p=1; else if(a%i==0) return p; else return p=1; } } O comportamento estranho é que me está a dar sempre independentemente do número n que coloque é este: insira o numero o qual pretende saber se é ou não número primo: n 1 É um número primo! Ou seja independetemente do numero n que coloque diz-me sempre que inseri 1!!! Agradecia imenso a vossa ajuda neste caso. Abraço a todos e boa noite mais uma vez!
  22. RodrigoGameiro

    Qual linguagem devo começar por aprender?

    Eu estou interessado em aprender a programar, mas sem nenhum conhecimento, procurei algumas linguagens e as que mais gostei foram: C(tenho um livro, se for importante),C++ ,C#, Python e Java. A minha questão é, destas cinco linguagens, qual será melhor para desenvolver programas úteis?
  23. Whiteangel

    Erro instalação Dev-C++

    Fiz a instalação do Dev - C++ no meu pc, mas não consigo compilar nenhum código, o código não tem erros porque noutros softwares consigo compilar, o erro que me dá no Dev-C++ é no ficheiro Makefile.win, já vi na net como resolver, mas ainda não consegui, podem dar uma ajuda? O meu erro é como este: https://anuragpatil.wordpress.com/2009/08/04/dev-c-makefile-win-build-error-main-o-error-1/
  24. Vasco127

    Problema algoritmico - Labirinto

    Olá Para uma cadeira de programação tenho de realizar um projecto que consiste no seguinte: Um grupo de ratos de laboratório foi treinado para fugir de um labirinto. O labirinto é composto por células, podendo cada célula estar, ou não, ligada a outra célula. Entre cada duas células interligadas podem existir obstáculos, implicando um atraso temporal no percurso a executar entre as células interligadas. Algumas interligações só permitem percursos unidirecionais. Apenas uma das células do labirinto permite que os ratos saiam do mesmo. Deve admitir-se que cada um dos ratos, depois de treinado num determinado labirinto, tem a capacidade de percorrer o caminho mais curto (ótimo) que lhe permite sair do labirinto, quando colocado aleatoriamente numa determinada célula. Pretende-se realizar uma experiência que consiste no seguinte:  é colocado um rato treinado em cada uma das células do labirinto  um cronómetro inicia uma contagem decrescente  quando o cronómetro chega a zero, conta-se o número de ratos que atingiu a saída do labirinto. O problema em resumo: deve ler-se a descrição do labirinto e o valor inicial do cronómetro (entradas ou inputs) e calcular o número de ratos que atinge a saída do labirinto (saída ou output). Deve ainda assumir-se que cada célula pode albergar um número arbitrário de ratos. Especificação das entradas: as células do labirinto estão numeradas sequencialmente de 1, 2, …, N, em que N é o número total de células. Pode assumir-se N ≤ 100. As primeiras três linhas de entrada contêm:  N, o número de células do labirinto  E, o número da célula de saída do labirinto  T, o valor inicial do cronómetro A quarta linha de entrada contém o número M de interligações do labirinto. Cada uma das seguintes M linhas especifica uma interligação à custa de três números inteiros:  Dois números de células A e B (pertencentes ao intervalo 1, …, N)  O número inteiro de unidades temporais que demora a percorrer a interligação entre a célula A e B De notar que cada interligação entre A e B só deverá ser considerada bidirecional se existir outra linha especificando a interligação entre B e A. Exemplo de entradas: 4 2 1 8 1 2 1 1 3 1 2 1 1 2 4 1 3 1 1 3 4 1 4 2 1 4 3 1 Métodos de Programação 1 (MP1) MIETI 1º ano 2015/2016 4 Especificação da saída (ou output): consiste numa única linha com um número inteiro que representa o número de ratos que atingiu a saída E do labirinto ao fim de T unidades de tempo. Exemplo de saída (tendo em conta as entradas indicadas no exemplo anterior): 3 Já comecei a desenvolver o algoritmo. As minhas dúvidas são as seguintes : Como definir as interligaçoes ? Em que situaçoes terá de se usar vetores\matrizes ?. Gostaria que alguem pudesse esclarecer. Obrigado pela ajuda Aqui está o que já foi desenvolvido: Var N,T,M,R:inteiro; a1,a2,b1,b2,a3,b3:inteiro; Inicio R=1; Escrever " Introduza o numero de celulas esxistentes " Ler N Escrever " Introduza o numero da celula de saida" Ler E Escrever " Introduza o valor inicial cronometro" Ler T Escrever " Introduza o numero de interligaçoes existentes" Ler M Escrever " Introduza valor celula de partida" Ler a1 Escrever " Introduza valor celula de chegada" Ler a2 Escrver "Introduza tempo que demora interligaçao" Ler a3 Se a2==E&& a3==T&&R <=N Escrever " Numero de ratos que saiu "
  25. nelicquele

    Ajuda com Ficheiros C++

    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"); }
×
×
  • 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.