1. Este site usa cookies. Ao continuar a usar este site está a concordar com o nosso uso de cookies. Saber Mais.

O meu teste de C++

Discussão em 'Programação' iniciada por Noctural, 9 de Julho de 2009. (Respostas: 20; Visualizações: 2055)

  1. 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: 10 de Julho de 2009
  2. Baderous

    Baderous Banido

    Tens alguma dúvida em concreto?
     
  3. Bem...acho que dá para ter os minimos...vamos ver!
    Cumprimentos
     
  4. Baderous

    Baderous Banido

    Mas nós nem sabemos o enunciado, o que é suposto fazermos com esse código? Encaixilhá-lo e pendurá-lo por cima da cama?
     
  5. 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
     
  6. Fanador

    Fanador Power Member

    Tu estás num curso profissional de informatica? ou é ensino superior?
     
  7. Estou num curso das novas oportunidades, instalação e manutenção de sistemas informáticos. Vou acabar em Novembro.
    Cumprimentos
     
  8. rtxs

    rtxs Power Member

    estou impressionado, nos cursos novas oportunidades ja se faz linhas de codigo assim, hmmm ta a comecar a ficar uma bocado mais dificil...
     
  9. XeniX

    XeniX Power Member

    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...
     
  10. 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
     
  11. 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?
     
  12. 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
     
  13. XeniX

    XeniX Power Member


    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?
     
  14. 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
     
  15. BlueShark

    BlueShark Power Member

    está bom. não se esqueça de comentar o código
     
  16. esteves

    esteves Power Member

    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: 10 de Julho de 2009
  17. Obrigado pelas dicas...em programação existe esta vertente ou seja, podemos sempre de maneiras várias conseguir o mesmo objectivo.

    Cumprimentos
     
  18. esteves

    esteves Power Member

    mas compila???? porque o que referi pensava que fosse erro de codigo.
     
  19. J03l

    J03l Power Member

    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;
    ?
     
  20. Ronnie_03

    Ronnie_03 Power Member

    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
     

Partilhar esta Página