Ir para conteúdo
Fórum Script Brasil
  • 0

AJUDA - map c++


jfmacarini

Pergunta

Olá, tenho este exercício de map para resolver, o código está tudo certo, menos a parte de ler arquivo! Consigo gravar normalmentel, mas na hora de ler o arquivo gerado em bloco de notas para o executável não tem jeito.

Gostaria apenas de arrumar a classe ler_jogador(), para trazer de forma correta as informaçoes do bloco de notas gerado, pois não consigo ler para o programinha que é bem simples

 

#include <cstdlib>
#include <iostream>
#include <fstream>
#include <map>
#include "func_pessoa.h"
#include <sstream>
#include<string.h>

using namespace std;
 
map<string,pessoa> map_escalacao;
map<string,pessoa>::iterator it;
     
void gravar_jogador(){
     fstream arq;
            char arquivo_char[80];
            string arquivo_ler;
            
            std::stringstream Resultado;
            arquivo_ler = "dados_jogador" + Resultado.str() + ".txt";
            strcpy(arquivo_char, arquivo_ler.c_str());
            arq.open(arquivo_char, ios::out | ios::app);
            
           for(it = map_escalacao.begin(); it != map_escalacao.end(); it++){  
              arq << it->first << "\t" <<  it->second.getnome()<<"\n";
           }
        
            cout << "Gravando..." << endl;
            
            cout << "Dados gravados com sucesso em dados_jogador" << Resultado.str() << endl;
        
            arq.close();
            }
            
void ler_jogador(){

    
    string chave, nome;
   
    
    fstream arq("dados_jogador.txt",ios::in);
    if(arq.fail() == 1){
      cout << "O arquivo a ser lido não esta gravado em disco" << endl;
      return;
    }
    
    int i = 0;
    while(!arq.eof()){
       arq >> chave >> nome;
       map_escalacao[chave] = pessoa(num,nome);
    }
    arq.close();

    //apresenta os dados do arquivo
    //for(int i = 0; i < 3; i++){
     //   pList[i].imprimir();
   // }
     

void menu(){
    system("cls");//limpa os dados do console 
    cout << "---- ESCALACAO PROSPERA E.C ----\n\n" << endl;
    cout << "1 - Limpar escalacao" << endl;//
    cout << "2 - Inserir jogador" << endl;//
    cout << "3 - Remover pelo numero" << endl;
    cout << "4 - Remover pelo nome do jogador" << endl;
    cout << "5 - Localizar pelo numero" << endl;
    cout << "6 - Localizar pelo nome" << endl;
    cout << "7 - Listar jogadores" << endl;
    cout << "8 - GRAVAR" << endl;
    cout << "0 - Sair" << endl;
}


int main()
{
    ler_jogador();
       
    
    int opcao,subst;
    bool nr_localizado;
    string num,nome;

    
    
    while(true){
       menu();
       cout << "\nNumero da acao desejada:";
       cin >> opcao;
       
       //define a escolha do usuário
       if(opcao == 0){
           break;
       }else if(opcao == 1){
           map_escalacao.clear();
       }else if(opcao == 2){
           //solicita ao usuários os dados
           cout << "Nome: ";
           cin >> nome;
           cout << "Numero: ";
           cin >> num;
           
           //verifica se o número do telefone já existe no mapa
           it = map_escalacao.find(num);
           if(it != map_escalacao.end()){
               cout << "O numero informado já esta na escalaçao" << endl;
               cout << "1 - Substituir\n2 - Cancelar\nOpcao: " << endl;
               cin >> subst;
               if(subst != 1){
                   //o dado não será substituido     
                   continue;
               }
           }
           
           //insere o dado no mapa, se existir, irá substituir
           map_escalacao[num] = pessoa(nome);
           
       }else if(opcao == 3){
           cout << "Desconvocar numero: ";
           cin >> num;
           int nrDel = map_escalacao.erase(num);
           if(nrDel > 0){
              cout << "O Jogador foi Desconvocado" << endl;
           }else{
              cout << "O Jogador não existe" << endl;
           }
                 
       }else if(opcao == 4){
           cout << "Nome a desconvocar: ";
           cin >> nome;
           if(!map_escalacao.empty()){
               nr_localizado = false;                    
               for(it = map_escalacao.begin(); it != map_escalacao.end(); it++){
                   if(nome == it->second.getnome()){
                      it->second.imprimir();
                      cout << "Desconvocando..." << endl;
                      map_escalacao.erase(it->first);
                      nr_localizado = true;
                      break;
                   }
               }
               
               if(!nr_localizado){
                   cout << "O " << nome << " não foi localizado" << endl;
               }
               
           }else{
               cout << "A escalacao não possui jogadores" << endl;
           }
             
       }else if(opcao == 5){
           cout << "Numero a localizar: ";
           cin >> num;
           it = map_escalacao.find(num);
           if(it != map_escalacao.end()){
              cout << "Dados jogador" << endl;
              it->second.imprimir();      
           }else{
              cout << "Numero não encontrado" << endl;
           }
      
       }else if(opcao == 6){
           cout << "Nome: ";
           cin >> nome;
            
           if(!map_escalacao.empty()){
               nr_localizado = false;                    
               for(it = map_escalacao.begin(); it != map_escalacao.end(); it++){
                   if(nome == it->second.getnome()){
                      cout << "Dados jogador" << endl;
                      it->second.imprimir();
                      nr_localizado = true;
                      break;
                   }
               }
               
               if(!nr_localizado){
                   cout << "O " << nome << " não foi localizado" << endl;
               }
           }else{
               cout << "A escalacao não possui jogadores convocados" << endl;
           }
             
       }else if(opcao == 7){
           if(!map_escalacao.empty()){
               cout << "Jogadores: " << endl;
               for(it = map_escalacao.begin(); it != map_escalacao.end(); it++){
                      cout << "Numero: " << it->first;
                      it->second.imprimir();
                      cout << "" << endl;
               }
               
           }else{
               cout << "A escalacao não possui jogadores" << endl;
           }
             
       
             
       }else if(opcao == 8){
            gravar_jogador();
           
                 
       }else{             
           cout << "A opcao informada e invalida" << endl;
       }
       system("PAUSE");
    }//#end while
    
    return 0;
}

 

resto  do programa

 

#include <string>
#include <iostream>

using namespace std;

//declaração da classe pessoa
class pessoa{
   private:
      string nome;

   public:
      pessoa();
      pessoa(string nome);
      ~pessoa();
      string getnome();
      void setnome(string nome);
      void imprimir();
};

//implementação das funções da classe pessoa
pessoa::pessoa(){}

pessoa::pessoa(string nome){
  this->nome = nome;

}
pessoa::~pessoa(){}

string pessoa::getnome(){
   return nome;
}
void pessoa::setnome(string nome){
   this->nome = nome;
}


//apresenta os dados da pessoa no console
void pessoa::imprimir(){
  cout << " Nome: " << nome << endl;
}

 

Desculpe a péssima formatação

Editado por jfmacarini
formatação
Link para o comentário
Compartilhar em outros sites

0 respostass a esta questão

Posts Recomendados

Até agora não há respostas para essa pergunta

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.

Visitante
Responder esta pergunta...

×   Você colou conteúdo com formatação.   Remover formatação

  Apenas 75 emoticons são permitidos.

×   Seu link foi incorporado automaticamente.   Exibir como um link em vez disso

×   Seu conteúdo anterior foi restaurado.   Limpar Editor

×   Você não pode colar imagens diretamente. Carregar ou inserir imagens do URL.



  • Estatísticas dos Fóruns

    • Tópicos
      152,2k
    • Posts
      652k
×
×
  • Criar Novo...