Jump to content
  • Revista PROGRAMAR: Já está disponível a edição #60 da revista programar. Faz já o download aqui!

Sign in to follow this  
.milu.

Problema com ficheiros e vectores

Recommended Posts

.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 ??

Share this post


Link to post
Share on other 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...

Share this post


Link to post
Share on other sites

Create an account or sign in to comment

You need to be a member in order to leave a comment

Create an account

Sign up for a new account in our community. It's easy!

Register a new account

Sign in

Already have an account? Sign in here.

Sign In Now
Sign in to follow this  

×

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.