Ir para o conteúdo
  • Revista PROGRAMAR: Já está disponível a edição #60 da revista programar. Faz já o download aqui!

.milu.

Problema com ficheiros e vectores

Mensagens Recomendadas

.milu.

estou a fazer um programa + ou - simples de uma empresa, e assim escrevi este codigo para que os funcionarios pudessem fazer login no programa, em que "funcionarios" é um vector que guarda os dados relativos aos funcionarios da empresa.

void Funcionario:: login_funcionario()
{
  string nome;
  string password;

  cout << "Digite o seu nome" << endl;
  cin.ignore();
  getline(cin, nome);

  cout << endl;
  for (unsigned int i = 0; i < funcionarios.size(); i++)
        {

     if(funcionarios[i]->getNome() == nome)
     {
      cout << "Introduza a sua password" << endl;            
      getline(cin, password);                                                                                    
      cout << endl;                                                                                              
      if(funcionarios[i]->getPassword() == password)                                                                 
      {                                                                                                          
                                                                                                          
       Pessoa::area_funcionario();                                                                 
       cout << endl;                                                                                             
                                                                                                  
       }                                                                                                         
                                                                                                           
      else{                                                                                                      
cout << "A password que introduziu está errada. Esta área é reservada aos funcionarios." << endl; 
cout << "Carregue em Enter para voltar ao menu anterior."<<endl;
getchar();                                                                                               
system("clear");                                                                                         
menu();                                                                                                  
      }                                                                                                          
     }                                                                                                           
       else{                                                                                                     
 cout << "Nome nao encontrado. Esta área é reservada aos funcionarios."<< endl;                   
 cout << "Carregue em Enter para voltar ao menu anterior."<<endl;
 getchar();                                                                                              
 system("clear");                                                                                        
 menu();                                                                                    
   }
}
}

no entanto, ao "desligar" o programa, os dados dos funcionarios iam "à vida", tendo que se criar funcionarios sempre que se operava com o programa.. por isso, decidi guardar os dados dos funcionarios num ficheiro, da seguinte maneira:

void Funcionario:: gravarDadosFuncionarios()
{
ofstream cl("Funcionarios.txt");

   for (unsigned int i = 0; i < funcionarios.size(); i++)
     {
	cl << "[Funcionario]\n" << funcionarios[i]->getNome()
	<< endl << funcionarios[i]->getPassword() 
                << endl << funcionarios[i]->getEmail()
	<< endl << funcionarios[i]->getFuncao()
	<< endl << funcionarios[i]->getZona() << endl;
            

      }

cl.close();
return;


}

.. fazendo depois load dos mesmos:

void Funcionario::loadDadosFuncionarios() //carrega os dados dos funcionarios
{
     
              string nome;
              string password;
              string funcao;
              string email;
              int zona;
		  string aux;
              
              	ifstream f_funcionarios("Funcionarios.txt", ios::in);

if (!f_funcionarios.is_open())
{
	cout << "Nao abriu o ficheiro Funcionarios.txt" << endl;
}

string entrada;

while (!f_funcionarios.eof())
	{

		getline(f_funcionarios, entrada);

         	if (entrada == "[Funcionario]")
		{
                        		getline(f_funcionarios,nome);
                        		getline(f_funcionarios,password);
                        		getline(f_funcionarios,funcao);
                        		getline(f_funcionarios,email);
                        		getline(f_funcionarios,aux); 
							zona = atoi(aux.c_str());


			Funcionario *temp = new Funcionario(nome, password, funcao, email, zona);
			funcionarios.push_back(temp);

		}
	}

f_funcionarios.close();
}

no entanto, a partir do momento em que criei esta parte dos ficheiros.. a parte do login deixou de funcionar.. e pelo que descobri fazendo cout ao longo do codigo, foi que na funçao login, ele considera sempre "funcionarios.size()" = 0 , mesmo quando existem funcionarios no ficheiro.. portanto suponho que o problema esteja no LOAD .. mas nao consigo descobrir onde :s

podem-me ajudar ??

Partilhar esta mensagem


Ligação para a mensagem
Partilhar noutros sites
Tuntankamon

O meu C++ anda muito enferrujado, mas acho que uma técnica boa para saberes o que tens de ler, é na primeira linha do ficheiro indicares a quantidade de estruturas é que vais guardar, o que depois na leitura te irá ajudar...

Mas como estás a utilizar um ciclo podes sempre utilizar uma variável que incrementa por cada leitura...

Partilhar esta mensagem


Ligação para a mensagem
Partilhar noutros sites

Crie uma conta ou ligue-se para comentar

Só membros podem comentar

Criar nova conta

Registe para ter uma conta na nossa comunidade. É fácil!

Registar nova conta

Entra

Já tem conta? Inicie sessão aqui.

Entrar Agora

×

Aviso Sobre Cookies

Ao usar este site você aceita os nossos Termos de Uso e Política de Privacidade. Este site usa cookies para disponibilizar funcionalidades personalizadas. Para mais informações visite esta página.