O meu teste de C++

Noctural

Membro
Código:
#include <cstdlib>
#include <iostream>
#include <fstream>
#define MAXNOME 30
using namespace std;


// Defini‡ao da estrutura empregado
typedef struct empregado
  
  {
    
    char prinome[MAXNOME];
    char apelido[MAXNOME];
    int num_empregado;
    float ordenado;
  
  };

void inicializaEmpregado(empregado* p)

{

int k;

for(k=0;k<MAXNOME;k++) p->prinome[k]='\0';

for(k=0;k<MAXNOME;k++) p->apelido[k]='\0';

p->num_empregado=0;p->ordenado=0;

} 

void leDados(empregado* p)

{

cout<<"Qual o primeiro nome: ";
cin>>(*p).prinome;

cout<<"Qual o apelido: ";
cin>>p->apelido;

cout<<"Qual o numero do empregado: ";
cin>>(*p).num_empregado;

cout<<"Qual o ordenado do empregado: ";
cin>>(*p).ordenado;

} 

int leDados(empregado* p, char *nomeficheiro)

{
    
ifstream fichLeitura;

char buffer[MAXNOME];

for (int k=0;k<MAXNOME;k++) buffer[k]='\0';

inicializaEmpregado(p);

fichLeitura.open(nomeficheiro);

if (!fichLeitura)
   
{

cout<<"Ficheiro com Erro! \n";

return(1);//Erro
   
}

do 

{

inicializaEmpregado(p);

fichLeitura.getline((*p).prinome,MAXNOME,'\n');

cout<<"Nome lido: "<<(*p).prinome<<endl;

fichLeitura.getline((*p).apelido,MAXNOME,'\n');

cout<<"Apelido lido: "<<(*p).apelido<<endl;

fichLeitura.getline(buffer,MAXNOME,'\n');

(*p).num_empregado=atoi(buffer);

cout<<"Numero do empregado lido: "<<(*p).num_empregado<<endl;

fichLeitura.getline(buffer,MAXNOME,'\n');

(*p).ordenado=atof(buffer);

cout<<"Ordenado lido: "<<(*p).ordenado<<endl;

} 

while (!fichLeitura.eof()&& fichLeitura.good()&&fichLeitura.peek()!=EOF);

cout<<endl;

fichLeitura.close();

return(0);

}

void corrigeDados(empregado *p)

{

(*p).prinome[0]=toupper((*p).prinome[0]);

(*p).apelido[0]=toupper((*p).apelido[0]);

} 

char *qualFicheiro()

{

char *nomeficheiro=NULL;

nomeficheiro=new char [MAXNOME];

for(int k=0;k<MAXNOME;k++) *(nomeficheiro+k)='\0';

cout<<"Qual o nome do ficheiro: ";
cin>>nomeficheiro;

return(nomeficheiro);

} 

int guardaDados(empregado p,char *nomeficheiro)

{

ofstream fichEscrita;

fichEscrita.open(nomeficheiro,ios::app);

if(!fichEscrita)

{

cout <<"Impossivel abrir ficheiro.\n";

return 1;//Erro

}

cout<<"Escrita de dados no ficheiro "<<nomeficheiro<<".\n";

fichEscrita << p.prinome<<"\n";

fichEscrita << p.apelido<<"\n";

fichEscrita << p.num_empregado<<"\n";

fichEscrita << p.ordenado<<"\n";

cout<<"Dados escritos no ficheiro.\n";

fichEscrita.close();

return 0;

} 

void mostraDados(empregado p)

{

cout<<endl;

cout<<"O empregado com o nome "<<p.prinome<<" "<<p.apelido;

cout<<"Numero "<<p.num_empregado<<" e recebe ";

cout<<p.ordenado<<"Euros.\n";

cout<<endl;

} 

char *pedeCampoPesquisa()

{

char* nome="";

nome=new char [MAXNOME];

for(int k=0;k<MAXNOME;k++) *(nome+k)='\0';

cout<<"Nome a pesquisar: ";
cin>>nome;

return(nome);

}

int pesquisaCampo(char *nome, empregado *p, char *nomeficheiro)

{

ifstream fichLeitura;

char buffer[MAXNOME];

for (int k=0;k<MAXNOME;k++) buffer[k]='\0';

inicializaEmpregado(p);

fichLeitura.open(nomeficheiro);

if (!fichLeitura)

{

cout <<"Impossivel abrir Ficheiro!\n";

return(1); //Erro

}

do

{

inicializaEmpregado(p);

fichLeitura.getline(buffer,MAXNOME,'\n'); 

if (strcmp(buffer,nome)==0)
    
{

strcpy((*p).prinome,buffer);

cout<<"Nome lido: "<<(*p).prinome<<endl;

fichLeitura.getline((*p).apelido,MAXNOME,'\n');

cout<<"Apelido lido: "<<(*p).apelido<<endl;


fichLeitura.getline(buffer,MAXNOME,'\n');

(*p).num_empregado=atoi(buffer);

cout<<"Numero do empregado lido: "<<(*p).num_empregado<<endl;

fichLeitura.getline(buffer,MAXNOME,'\n');

(*p).ordenado=atof(buffer);

cout<<"Ordenado lido: "<<(*p).ordenado<<endl;

mostraDados((*p));
     
}

else

{

fichLeitura.ignore(MAXNOME,'\n');

fichLeitura.ignore(MAXNOME,'\n');

fichLeitura.ignore(MAXNOME,'\n');

fichLeitura.ignore(MAXNOME,'\n');

}

} 

while

(!fichLeitura.eof()&& fichLeitura.good()&&fichLeitura.peek()!=EOF);

cout<<endl;

    
fichLeitura.close();

return(0);

} 

char querSair()

{

char resposta='\0';

cout<<"Quer repetir (s/n) ? ";
cin>>resposta;

if ((resposta=='n') || (resposta=='N'))
   
{

cout<<"Volte Sempre.\n";

return ('s');

}

else return ('n');

} 

int main()

{

empregado p; char *nomeficheiro="", *nome="";

char sair='\0';

do

{

system("CLS");    

inicializaEmpregado(&p);

leDados(&p);

corrigeDados(&p);

nomeficheiro=qualFicheiro(); 

guardaDados(p,nomeficheiro);

leDados(&p,nomeficheiro);

nome=pedeCampoPesquisa();

pesquisaCampo(nome,&p,nomeficheiro);

sair=querSair();

} 
 
while(sair=='n');

system("PAUSE");

return 0;

}
 
Última edição pelo moderador:
Tens toda a razão...
1- Receber número de empregados do utilizador e iniciar o vector
2- Receber os dados do utilizador e guardá los
3- Guardar os dados num ficheiro
4- Ler o mesmo ficheiro e apresentar os dados lidos

Cumprimentos
 
Estou num curso das novas oportunidades, instalação e manutenção de sistemas informáticos. Vou acabar em Novembro.
Cumprimentos
 
estou impressionado, nos cursos novas oportunidades ja se faz linhas de codigo assim, hmmm ta a comecar a ficar uma bocado mais dificil...
 
OMFG!
Agora posta-se código sem nenhuma razão?
Não tens dúvidas, não é para o repositório de código, se já o compilaste, testas-te e ele dá, qual é o teu objectivo?
It's the apocalypse...
 
O objectivo é justamente mostrar a todos os interessados o tipo de material ou de matéria que se dá nestes tipos de cursos.
Além disso e olhando outras intervenções, vejo que há comentários bem diferenciados, mantendo os mesmos as "mesmas" linhas de pensamento.

Cumprimentos
 
Eu acabei o curso profissional TGPSI (técnico de programação de sistemas informáticos) e fiz coisas parecidas com ficheiros, se bem que tinha um professor bem ****** que fazia uns testes mesmo enervantes... Nesse teu curso também se aprende pointers em c++ mais aprofundadamente?
 
Nem por isso...dá se um "cheirinho" mas nada de muito cultural nesse aspecto. Temos o básico, se é que se pode dizer assim.
Cumprimentos
 
O objectivo é justamente mostrar a todos os interessados o tipo de material ou de matéria que se dá nestes tipos de cursos.

Cumprimentos


Ahh ok. Só agora é que reparei nas letras escritas a limão nos teus dois primeiros posts... Realmente, porque é que eu não percebi logo...
Mas deixa lá...

Também estou surpreendido com o facto de um curso das novas oportunidades ensinar c++.
Já agora vocês também aprendem classes e memória dinâmica?
 
As classes vêm no programa mas de uma forma muito "por alto", infelizmente não as vamos aprofundar.
Já agora e complementando o assunto, ao nível da programação nestes cursos, a malta vai poder contar com C, C++, HTML e JAVA.
Cumprimentos
 
1º -
na struck nao te falta dar o nome para poderes chamar??

ou seja por teres escrito "struck empregado" ele não vai a estrutura como empregado ao usares como parametro ao chamares uma funcao.
para dares o nome tens de por a frente da chaveta final } e antes do ;

ou teres escrito empregado nessa posição apenas deste um nome a estrutura e serve para caso queiras usar uma estrutura ou uma classe contendo essa estrutura.

Dica o nome a frente da struck e o nome entre } e o ; tem de ser diferentes. =)

2º - na função ledados

escreves empregado *p como parametro de entrada. ao usares (*p) dentro da funcao tas a chamar um apontador do apontador usa só p (ele ja vai ter a conetacao de apontador)

edit: reparei que usas noutras funções o mesmo método...
3º -
Se tiver errado corrigem me =P
 
Última edição:
Obrigado pelas dicas...em programação existe esta vertente ou seja, podemos sempre de maneiras várias conseguir o mesmo objectivo.

Cumprimentos
 
typedef struct empregado
{

char prinome[MAXNOME];
char apelido[MAXNOME];
int num_empregado;
float ordenado;
};
só olhei para o inicio e noto logo algo estranho!
estás a usar um typedef para atribuir um nome mais simples a alguma coisa, neste caso uma estrutura mas não lhe estás a indicar o nome que queres!
não deveria ser algo deste tipo:
Código:
typedef struct empregado nomequequeres;
struct empregado
  {
   //...
  };
ou:
Código:
typedef struct empregado
  {
    //...
  }nomequequeres;
?
 
Neste caso acho que o typedef está mesmo a mais, porque não tem lógica querer mudar o nome da estrutura (empregado), uma vez que ao declarar a estrutura já se dá o nome que quer.
Pelo menos eu falo por mim, que sempre declarei uma estrutura desta maneira:

Código:
struct nome_da_estrutura
{
};

Cumps
 
Back
Topo