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

Ajuda no Dev-c++

Discussão em 'Programação' iniciada por GustavoHCardoso, 18 de Outubro de 2008. (Respostas: 2; Visualizações: 4167)

  1. Código:
    #include <cstdlib>
    #include <iostream>
    #include <string.h>
    using namespace std;
    FILE* fp;
    int num_funcionarios;
    Funcionario* arv;
    struct Funcionario
    {
        Funcionario* esq;
        int matricula;
        char nome[25];
        int carga_horaria;
        int jornada;
        float valor_hora;
        float valor_extra;
        Funcionario* dir;
    };
    struct _FProt
    {
        int mat;
        char nome[25];
        int ch;
        int jorn;
        float vh;
        float ve;
    };
    void Inicia(Funcionario*& arv)
    {
        arv = NULL;
    }
    void Transfere(Funcionario*& arv, _FProt* novo)
    {
        arv->matricula = novo->mat;
        strcpy(arv->nome, novo->nome);
        arv->carga_horaria = novo->ch;
        arv->jornada = novo->jorn;
        arv->valor_hora = novo->vh;
        arv->valor_extra = novo->ve;
        novo = NULL;
    }
    bool Insere(Funcionario*& arv, _FProt* novo)
    {
        if(novo == NULL)
        {
            return false;
        } else if(arv == NULL) {
            arv = new Funcionario;
            Transfere(arv, novo);
            arv->esq = NULL;
            arv->dir = NULL;
            return true;
        } else if(novo->mat < arv->matricula) {
            Insere(arv->esq, novo);
        } else if(novo->mat > arv->matricula) {
            Insere(arv->dir, novo);
        } else if(novo->mat == arv->matricula) {
            return false; //já existe
        }
    }
    Funcionario* Pesquisa(Funcionario* arv, int matricula)
    {
        if(arv == NULL)
        {
            return NULL;
        } else {
            if(arv->matricula != matricula)
            {
                if(arv->esq == NULL && arv->dir == NULL)
                {
                    return NULL;
                } else {
                    if(matricula < arv->matricula)
                    {
                        return Pesquisa(arv->esq, matricula);
                    } else if(matricula > arv->matricula) {
                        return Pesquisa(arv->dir, matricula);
                    }
                }
            } else {
                return arv;
            }
        }
    }
    void Deleta(Funcionario*& arv, int matricula)
    {
        if(arv == NULL)
        {
            return;
        } else if(arv->matricula == matricula) {
     
            if(arv->esq != NULL)
            {
                if(arv->dir != NULL)
                {
                    arv->esq->dir = arv->dir;
                } else {
                    arv->esq->dir = NULL;
                }
            }
            arv = NULL;
            delete arv;
        } else {
            if(arv->esq == NULL && arv->dir == NULL)
            {
                return;
            } else if(matricula < arv->matricula) {
                Deleta(arv->esq, matricula);
            } else if(matricula > arv->matricula) {
                Deleta(arv->dir, matricula);
            }
        }
    }
    bool Altera(Funcionario* arv, int matricula, _FProt* alterar)
    {
        if(arv == NULL || alterar == NULL)
        {
            return false;
        } else {
            Funcionario* alvo = Pesquisa(arv, matricula);
            if(alvo == NULL)
            {
                return false;
            } else {
                Transfere(alvo, alterar);
                return true;
            }
        }
    }
    Funcionario* Prox(Funcionario* arv)
    {
        if(arv->dir != NULL)
        {
            return arv->dir;
        } else {
            return NULL;
        }
    }
    _FProt* Cria(int matricula, char nome[25], int carga_horaria, int jornada,
                                            float valor_hora, float valor_extra)
    {
        _FProt* temp = new _FProt;
        temp->mat = matricula;
        strcpy(temp->nome, nome);
        temp->ch = carga_horaria;
        temp->jorn = jornada;
        temp->vh = valor_hora;
        temp->ve = valor_extra;
        return temp;
    }
    _FProt* Arv2File(Funcionar* arv)
    {
        if(arv == NULL)
        {
            return NULL;
        } else {
            return Cria(arv->matricula, arv->nome, arv->carga_horaria, arv->jornada,
                                                 arv->valor_hora, arv->valor_extra);
        }
    }
    void Save_Changes();
    void Search();
    void Insert();
    void Delete();
    void Edit();
    int main(int argc, char *argv[])
    {
        Inicia(arv);
     
        if((fp = fopen("funcionarios.bin", "rb")) == NULL)
        {
            cout << "Arquivo nao existe- tentando criar";
            if((fp = fopen("funcionarios.bin", "wb")) == NULL) {
                cout << "Erro ao tentar criar arquivo.";
                system("PAUSE");
                return 1;
            } else {
                num_funcionarios = 0;
                fwrite(num_funcionarios, sizeof(int), 1, fp);
            }
        } else {
            fread(&num_funcionarios, sizeof(int), 1, fp);
            _FProt func;
            while(!feof(fp))
            {
                fread(&func, size_of(func), 1, fp);
                Insere(arv, func);
            }
        }
     
        fclose(fp);
     
        cout << "Seja bem-vindo ao programa! Por favor, siga as instrucoes:\n";
        cout << "Digite X para sair;\n";
        cout << "Digite P para Procurar por funcionarios;\n";
        cout << "Digite I para Inserir funcionarios;\n";
        cout << "Digite D para Deletar funcionarios;\n";
        cout << "Digite E para Editar um cadastro;\n\n";
     
        char c;
        while(cout << "O que deseja? " && cin >> c && (c != 'x' && c != 'X'))
        {
            cout << "\n";
            if(c == 'p' || c == 'P')
            {
                Search();
            } else if(c == 'i' || c == 'I') {
                Insert();
            } else if(c == 'd' || c == 'D') {
                Delete();
            } else if(c == 'e' || c == 'E') {
                Edit();
            } else {
                cout << "Comando inválido!\n";
            }
        }
        /*_FProt* prot = Cria(elementos[2], "Cara", 8, 8, 100.0f, 50.0f);
     
        for(int i = 0; i < 5; i++)
        {
            Insere(arv, Cria(elementos[i], "Cara", 8, 8, 100.0f, 50.0f));
        }
     
        Funcionario* p = Pesquisa(arv, 3);
        if(p != NULL)
        {
            cout << "O funcionário " << p->matricula << " existe na empresa.\n";
        }
     
        Altera(arv, p->matricula, Cria(3, "Gerente Cara", 8, 8, 100.0f, 50.0f));
     
        cout << "Funcionário 03 promovido! " << p->nome << " " << p->matricula << "\n";
        p = NULL;
        Deleta(arv, 4);
        p = Pesquisa(arv, 4);
        if(p == NULL)
        {
            cout << "Funcionário 04 demitido!\n";
        }
        */
        Save_Changes();
        delete arv;
        return EXIT_SUCCESS;*/
    }
    void Save_Changes()
    {
        if((fp = fopen("funcionarios.bin", "wb")) == NULL)
        {
            cout << "Erro ao tentar salvar arquivo.";
            return;
        } else {
            fwrite(num_funcionarios, sizeof(int), 1, fp);
            Funcionario* elemento;
            if(arv != NULL)
            {
                elemento = arv;
                fwrite(Arv2File(arv), sizeof(_FProt), 1, fp);
                while((elemento = Next(elemento)) != NULL)
                {
                    fwrite(Arv2File(elemento), sizeof(_FProt), 1, fp);
                }
            }
            fclose(fp);
        }
    }
    

    Os erros estão listados abaixo da pra alguem ajudar?

     
    Última edição: 18 de Outubro de 2008
  2. Ronnie_03

    Ronnie_03 Power Member

    Eu nã percebo muito de c++, mas vi mais ou menos e alguns erros são: do tipo "expected ";" before...", ou seja, no fim de cada instrução tens de colocar o ;.

    Vou ver melhor e ver se te consigo indicar mais alguns.

    EDIT: Em qualquer programa em c++ tens de ter a função main que é do tipo int, ou seja, tens de construir a função int main(), que retorna um inteiro (normalmente mete-se return 0 ;. O programa começa a ser executado a partir desta função e depois vai executando as outras quando forem necessárias.

    Acho que também tens uma função e variáveis que não estão declaradas.

    Quanto ao resto não percebo e por isso não posso ajudar.

    Acho que uma boa ideia seria leres os erros.

    Cumps
     
    Última edição: 19 de Outubro de 2008

Partilhar esta Página