Ir ao conteúdo
  • Cadastre-se
DONG YOL

C Desenvolva um programa capaz de obter os dados de pessoas que trabalha

Recommended Posts

       Olá, Pessoal estou com um trabalho final para entregar mas não faço a minina ideia de como faze-lô se alguém puder me ajudar com dicas seria de bastante ajuda.

       PS:Ainda não tenho um código por hora para postar, tentei mais não saiu nada. 

 

Desenvolva um programa capaz de obter os seguintes dados de pessoas que trabalham em uma empresa: (a) nome; (b) grau de estudo: 1, 2, 3, 4 ou 5; (c) quantidade de línguas que fala; (d) cargo que ocupa: 1º, 2º, 3º ou 4º nível; (e) seu índice de produtividade: entre 0 e 1,0. Baseado nisto, o programa deve atender aos seguintes requisitos:

1) Os dados das pessoas devem ser tratados por uma struct chamada Funcionario.

2) A estrutura Funcionario também deve comportar o salário do funcionário, a ser calculado a pedido do usuário.

3) O usuário informará quantas pessoas trabalham na empresa, o que implica em alocar uma quantia de memória apropriada (n) para ‘variáveis’ do tipo Funcionario.

4) O cálculo do salário será feito segundo um conjunto de fatores, sendo um primeiro fator a formação. Este fator deve ser calculado em uma função que retorna o fatorial do grau de instrução da pessoa (1º, 2º, 3º, 4º ou 5º grau).

5) Outro fator será chamado de poliglota e será calculado por uma função que recebe a quantidade de línguas faladas pela pessoa e a eleva ao cubo, retornando isto como resultado.

6) Há ainda o fator salário base que varia conforme o nível da pessoa. Por exemplo, nível 1 (R$ 1.000,00), nível 2 (R$ 1.500,00), nível 3 (R$ 2.000,00) e assim por diante. O fator salário base é calculado em uma função que recebe como parâmetro o nível e retorna o salário base.

7) O salário será calculado, em uma função, pela seguinte regra: Se Índice de Produtividade > 0,7 então Salário = (Salário base + (Formação*100) + (Poliglota*100)) + (Salário base* Índice de Produtividade).
Se Índice de Produtividade entre 0,4 e 0,7 então Salário = (Salário base + (Formação*100) + (Poliglota*100))
Se Índice de Produtividade < 0,4 então Salário = (Salário base + (Formação*100) + (Poliglota*100)) - (Salário base* (0,4 - Índice de Produtividade))

8) O programa deve ainda disponibilizar, também por uma função, a quantidade de funcionários que ganham acima da média.

9) Alterar os dados de um funcionário (informado pelo usuário através do nome.); Dentro da opção de Alterar, será necessário incluir um novo menu solicitando qual dos campos se deseja alterar (identificar os campos por número como opções do menu) e o usuário pode escolher somente um campo por vez, mas o menu deve permanecer enquanto o usuário não escolher a opção de sair do modo de edição.

10) Por fim, o programa permitirá ao usuário escolher entre funcionalidades (cadastro, cálculo de salário, quantidade maior que a média, e edição e visualização das informações de um determinado funcionário). O usuário poderá escolher as funcionalidades por meio de um menu, podendo repeti-las até que ele deseje sair do programa

  • Curtir 1

Compartilhar este post


Link para o post
Compartilhar em outros sites

@DONG YOL      esse programa seria para alguém que já tenha muito experiência ,   pois struct é bem complicado de entender  , então  creio que seja melhor fazer aos poucos ,  comece por pegar os dados das pessoas ,  e para isso primeiro crie a struct  e dentro  da função main coloque um do / while  e dentro pegue os dados usando scanf ou gets e pergunte se quer pegar os dados de outra pessoa ,  se digitar n   então sair do loop .   faça essa parte e poste aqui para podermos ver como está e em que podemos ajudar  .

Compartilhar este post


Link para o post
Compartilhar em outros sites

#include <stdio.h>
#include <stdlib.h>

  int main()
  {

  struct funcionario{
    char nome[50];
    int grau_de_estudo;
    int linguas_faladas;
    int cargo;
    float indice_produt;
    float salario;
   };
    struct funcionario novo;
      char ch;

    do{
      do{
         printf("\n digite o nome do funcionario:");
         gets(novo.nome);
         printf("\n grau de estudo:");
         gets("%i", &novo.grau_de_estudo);
         fflush(stdin);
         printf("\n quantas linguas faladas:");
         gets("%i", &novo.linguas_faladas);
         fflush(stdin);
         printf("\n informe o cargo que ocupa:");
         gets("%i", &novo.cargo);
         fflush(stdin);
         printf("\n informe o indice de produtividade:");
         gets("%f", &novo.indice_produt);
         fflush(stdin);
         printf("\n informe o salario do funcionario:");
         gets("%f", &novo.salario);
         fflush(stdin);

          printf(\n deseja cadastrar outro funcionario);
          scanf("%c", &ch);
          if((ch!='s')&&(ch!='n')){
            printf("\n erro");

         }while((ch!='n')&&(ch!='s'));
         }while(ch!='n');
  }


system("pause");
    return 0;
}

           foi o que tentei fazer não consigo testar porque estou usando o code blocks a pouco tempo e ainda não sei mexer direito.

adicionado 21 minutos depois
21 minutos atrás, DONG YOL disse:

#include <stdio.h>
#include <stdlib.h>

  int main()
  {

  struct funcionario{
    char nome[50];
    int grau_de_estudo;
    int linguas_faladas;
    int cargo;
    float indice_produt;
    float salario;
   };
    struct funcionario novo;
      char ch;

    do{
      do{
         printf("\n digite o nome do funcionario:");
         gets(novo.nome);
         printf("\n grau de estudo:");
         gets("%i", &novo.grau_de_estudo);
         fflush(stdin);
         printf("\n quantas linguas faladas:");
         gets("%i", &novo.linguas_faladas);
         fflush(stdin);
         printf("\n informe o cargo que ocupa:");
         gets("%i", &novo.cargo);
         fflush(stdin);
         printf("\n informe o indice de produtividade:");
         gets("%f", &novo.indice_produt);
         fflush(stdin);
         printf("\n informe o salario do funcionario:");
         gets("%f", &novo.salario);
         fflush(stdin);

          printf(\n deseja cadastrar outro funcionario);
          scanf("%c", &ch);
          if((ch!='s')&&(ch!='n')){
            printf("\n erro");

         }while((ch!='n')&&(ch!='s'));
         }while(ch!='n');
  }


system("pause");
    return 0;
}

           foi o que tentei fazer não consigo testar porque estou usando o code blocks a pouco tempo e ainda não sei mexer direito.

 

adicionado 25 minutos depois

#include <stdio.h>
#include <stdlib.h>

  int main()
  {

  struct funcionario{
    char nome[50];
    int grau_de_estudo;
    int linguas_faladas;
    int cargo;
    float indice_produt;
    float salario;
   };
    struct funcionario novo;
      char ch;

    do{
      do{
         printf("\n digite o nome do funcionario:");
         fgets(novo.nome, sizeof(novo.nome),stdin);
         printf("\n grau de estudo:");
         scanf("%i", &novo.grau_de_estudo);
         fflush(stdin);
         printf("\n quantas linguas faladas:");
         scanf("%i", &novo.linguas_faladas);
         fflush(stdin);
         printf("\n informe o cargo que ocupa:");
         scanf("%i", &novo.cargo);
         fflush(stdin);
         printf("\n informe o indice de produtividade:");
         scanf("%f", &novo.indice_produt);
         fflush(stdin);
         printf("\n informe o salario do funcionario:");
         scanf("%f", &novo.salario);
         fflush(stdin);

          printf("\n deseja cadastrar outro funcionario");
          scanf("%c", &ch);
          if((ch!='s')&&(ch!='n')){
            printf("\n erro");

         }while((ch!='n')&&(ch!='s'));
         }while(ch!='n');
  }

    return 0;
}

              esse foi o que criei ignore os outros por favor.

  • Amei 1

Compartilhar este post


Link para o post
Compartilhar em outros sites

Para o fórum [ i ] sem espaços é a tag para deixar o texto em itálico, então eles somem, e o texto está em itálico a partir do primeiro lugar onde deveria estar um [ i ].

 

Leia minha assinatura abaixo para ver como postar códigos no fórum sem que este tipo de problema aconteça.

  • Curtir 2

Compartilhar este post


Link para o post
Compartilhar em outros sites

@DONG YOL     você pode editar sua postagem , se quiser , e deletar essas duas  partes  repetida do seu código , deixando apenas aquela que está no meio que está certa ,      seu código está bom , precisa uma melhor organização , como o struct precisa ficar fora da main , precisa de um contador e o struct precisa ter várias  posições pois senão nele só poderá guardar os dados de uma só pessoa , e o contador contará quantas pessoas foram cadastradas ,  e no final para mostrar o que foi guardado você pode colocar um laço de repetição , imprimindo todos os dados guardados , então essa parte do código ficaria assim  :

#include <stdio.h>
#include <ctype.h>
#include <stdlib.h>
struct funcionario{
    char nome[50];
    int grau_de_estudo;
    int linguas_faladas;
    int cargo;
    float indice_produt;
    float salario;
};
int cont,i;
int main(){
    struct funcionario novo[100];
    char ch;
    do{
        fflush(stdin);
        printf("Digite O Nome Do Funcionario:");
        gets(novo[cont].nome);
        printf("Grau De Estudo:");
        fflush(stdin);
        scanf("%d", &novo[cont].grau_de_estudo);
        fflush(stdin);
        printf("Quantas Linguas Faladas:");
        scanf("%d", &novo[cont].linguas_faladas);
        fflush(stdin);
        printf("Informe O Cargo Que Ocupa:");
        scanf("%d", &novo[cont].cargo);
        fflush(stdin);
        printf("I(nforme O Indice De Produtividade:");
        scanf("%f", &novo[cont].indice_produt);
        fflush(stdin);
        printf("\n Informe O Salario Do Funcionario:");
        scanf("%f", &novo[cont].salario);
        cont++;
        do{
            fflush(stdin);
            printf("\n deseja cadastrar outro funcionario S/N ");
            scanf("%c", &ch);
            if((toupper(ch)!='S')&&(toupper(ch)!='N')){
                printf("\n erro");
            }
        }while(toupper(ch)!='N' && toupper(ch)!='S');
    }while(toupper(ch)!='N');
    system("pause");
    for(i=0;i<cont;i++){
        printf("====================================\n");
        printf("Nome --------: %s    \n",novo[i].nome           );
        printf("Grau --------: %d    \n",novo[i].grau_de_estudo );
        printf("Linguas -----: %d    \n",novo[i].linguas_faladas);
        printf("Cargo -------: %d    \n",novo[i].cargo          );
        printf("Indice ------: %.2f  \n",novo[i].indice_produt  );
        printf("Salario -----: %.2f\n\n",novo[i].salario        );
    }
    return 0;
}

 

  • Obrigado 1

Compartilhar este post


Link para o post
Compartilhar em outros sites

muito obrigado por arrumar essa parte do código para mim . Seria possível você me dizer mais dicas de como termino esse programa. Abraço. 

adicionado 1 minuto depois

@isrnick Agradeço pela ajuda irei ler sim a assinatura obrigada.

  • Curtir 1
  • Obrigado 1

Compartilhar este post


Link para o post
Compartilhar em outros sites

@DONG YOL    no enunciado pede para usar três funções , a do poliglota que pega a quantidade de línguas e retorna esse valor ao cubo ,  e a que calcula o salario base de acordo com o nível do cargo , e  a fatorial que pega o grau de estudo e faz a fatorial ,  então a mais fácil é a do poliglota , faça ela se possível as outras duas também , e poste aqui . 

Compartilhar este post


Link para o post
Compartilhar em outros sites

@DONG YOL    posta o rascunho mesmo  ,  não tem problema se estiver errado não .    e para fazer essa função do poliglota , você cria a função e coloca uma variável para receber o parâmetro enviado , e dentro da função você multiplica , esse valor recebido , por ele  mesmo e retorna esse resultado ;

Compartilhar este post


Link para o post
Compartilhar em outros sites
15 horas atrás, devair1010 disse:

@DONG YOL    posta o rascunho mesmo  ,  não tem problema se estiver errado não .    e para fazer essa função do poliglota , você cria a função e coloca uma variável para receber o parâmetro enviado , e dentro da função você multiplica , esse valor recebido , por ele  mesmo e retorna esse resultado ;

 

#include <stdio.h>
#include <ctype.h>
#include <stdlib.h>

 struct funcionario{
    char nome[50];
    int grau_de_estudo;
    int linguas_faladas;
    int cargo;
    float indice_produt;
    float salario;
};
int cont,i;
int main(){
    struct funcionario novo[100];
    char ch;
    do{
        fflush(stdin);
        printf("Digite O Nome Do Funcionario:");
        gets(novo[cont].nome);
        printf("Grau De Estudo 1,2,3,4,5 :");
        fflush(stdin);
        scanf("%d", &novo[cont].grau_de_estudo);
        fflush(stdin);
        printf("Quantas Linguas Faladas:");
        scanf("%d", &novo[cont].linguas_faladas);
        fflush(stdin);
        printf("Informe O Cargo Que Ocupa 1o,2o,3o,4o :");
        scanf("%d", &novo[cont].cargo);
        fflush(stdin);
        printf("Informe O Indice De Produtividade entre 0 e 1,0 :");
        scanf("%f", &novo[cont].indice_produt);
        fflush(stdin);
        printf("\n Informe O Salario Do Funcionario:");
        scanf("%f", &novo[cont].salario);
        cont++;
        do{
            fflush(stdin);
            printf("\n deseja cadastrar outro funcionario S/N ");
            scanf("%c", &ch);
            if((toupper(ch)!='S')&&(toupper(ch)!='N')){
                printf("\n erro");
            }
        }while(toupper(ch)!='N' && toupper(ch)!='S');
    }while(toupper(ch)!='N');
    system("pause");
    for(i=0;i<cont;i++){
        printf("====================================\n");
        printf("Nome --------: %s    \n",novo[i].nome           );
        printf("Grau --------: %d    \n",novo[i].grau_de_estudo );
        printf("Linguas -----: %d    \n",novo[i].linguas_faladas);
        printf("Cargo -------: %d    \n",novo[i].cargo          );
        printf("Indice ------: %.2f  \n",novo[i].indice_produt  );
        printf("Salario -----: %.2f\n\n",novo[i].salario        );
    }


    int formacao(int novo[i].gra_de_estudos){
       if(num < 0){
        return -1;
       }else if(novo[i].grau_de_estudo ==  0){
           return 1;
       }else{
       return (novo[i].grau_de_estudo * formacao(n - 1));
       }
    }
        int main(){
        int novo[i].grau_de_estudo;
          if(n < 0){
            printf("\n nao foi possivel calcular o fatorial %d", novo[i].grau_de_estudo);
        }else {
              printf("o fatorial de %d eh %d", novo[i].grau_de_estudo, formacao(novo[i].grau_de_estudo));
          }
      }

     int cubo(novo[i].linguas_faladas){
         int poliglota;
         poliglota = novo[i].linguas_faladas*3;
        return(poliglota);
     }
       int main(){
       int poliglota, novo[i].linguas_faladas;
          poliglota = cubo(novo[i].linguas_faladas);
       printf("poliglota = %d", poliglota);

       }

       void salario_base(float novo[i].cargo){
           if(novo[i].cargo == 1){
              printf("salario = %.2f", novo[i].salario);
            }
           if(novo[i].cargo == 2){
              printf("salario = %.2f", novo[i].salario);
           }
           if(if(novo[i].cargo == 3){
              printf("salario = %.2f", novo[i].salario);
           }
           if(novo[i].cargo == 4){
              printf("salario = %.2f", novo[i].salario);
           }else{
           return(novo[i].salario);
           }
       }
          int main(void){
             float salario_base, novo[i].salario;
          salario_base = novo[i].salario;
          printf("salario_base %.2f", salario_base);          
          
          
          }

    return 0;
}

Cara juro que tentei .Espero  que acredite.   

  • Obrigado 1

Compartilhar este post


Link para o post
Compartilhar em outros sites

@DONG YOL    seu código está bom , precisa uma melhor organização ,  e a função int main só pode aparecer no código uma única vez , não pode repeti-la e nem fazer chamadas a main ,  e as funções geralmente ficam no início antes da main , mas se você quiser colocar elas no final depois da main pode também , mas precisa declarar todas elas no início , e aqui ainda fica faltando as opções 8 9 e 10 , então essa parte do seu código com algumas modificações ficaria assim  :

#include <stdio.h>
#include <ctype.h>
#include <stdlib.h>
struct funcionario{
    char  nome[50];
    int   grau_de_estudo;
    int   linguas_faladas;
    int   cargo;
    float indice_produt;
    float salario;
};
int poliglota(int r){
    r*=r;
    return r;
}
int fatorial(int f){
    int w=f;
    if(f>1){
        while(f>1){
            w=w*(f-1);
            f--;
        }
    }
    else{
        w=1;
    }
    return w;
}
int salario_base(int b){
    int w;
    if(b==1)w=1000;
        else
            if(b==2)
                w=1500;
            else
                if(b==3)
                    w=2000;
                else
                    if(b==4)
                        w=2500;
    return w;
}
int cont,i,q,salario;
int main(){
    printf("Informe A Quantidade De Funcionarios ");
    scanf("%d",&q);
    struct funcionario novo[q];
    char ch;
    do{
        fflush(stdin);
        printf("Digite O Nome Do Funcionario: ");
        gets(novo[cont].nome);
        printf("Grau De Estudo   < 1 2 3 4 5 >: ");
        scanf("%d", &novo[cont].grau_de_estudo);
        fflush(stdin);
        printf("Quantas Linguas Faladas: ");
        scanf("%d", &novo[cont].linguas_faladas);
        fflush(stdin);
        printf("Informe O Nivel Do Cargo Que Ocupa  < 1 2 3 4 >: ");
        scanf("%d", &novo[cont].cargo);
        fflush(stdin);
        printf("Informe O Indice De Produtividade < Entre 0 e 1 >: ");
        scanf("%f", &novo[cont].indice_produt);
        if(novo[cont].indice_produt > 0.7)
            novo[cont].salario=(salario_base(novo[cont].cargo)+(fatorial(novo[cont].grau_de_estudo)*100)+
            (poliglota(novo[cont].linguas_faladas)*100))+(salario_base(novo[cont].cargo)*novo[cont].indice_produt);
        else
            if(novo[cont].indice_produt > 0.4 && novo[cont].indice_produt < 0.7){
                novo[cont].salario=salario_base(novo[cont].cargo)+fatorial(novo[cont].grau_de_estudo)*100+
                poliglota(novo[cont].linguas_faladas*100);
            }
            else
                if(novo[cont].indice_produt < 0.4){
                    novo[cont].salario=salario_base(novo[cont].cargo)+fatorial(novo[cont].grau_de_estudo)*100+
                    poliglota(novo[cont].linguas_faladas*100)-salario_base(novo[cont].cargo)*0.4 - novo[cont].indice_produt;
                }
        cont++;
        do{
            fflush(stdin);
            printf("\n deseja cadastrar outro funcionario S/N ");
            scanf("%c", &ch);
            if((toupper(ch)!='S')&&(toupper(ch)!='N')){
                printf("\n erro");
            }
        }while(toupper(ch)!='N' && toupper(ch)!='S');
    }while(toupper(ch)!='N');
    system("pause");
    for(i=0;i<cont;i++){
        printf("====================================\n");
        printf("Nome --------: %s    \n",novo[i].nome           );
        printf("Grau --------: %d    \n",novo[i].grau_de_estudo );
        printf("Linguas -----: %d    \n",novo[i].linguas_faladas);
        printf("Cargo -------: %d    \n",novo[i].cargo          );
        printf("Indice ------: %.2f  \n",novo[i].indice_produt  );
        printf("Salario -----: %.2f\n\n",novo[i].salario        );
    }
    return 0;
}

 

Compartilhar este post


Link para o post
Compartilhar em outros sites

Crie uma conta ou entre para comentar

Você precisar ser um membro para fazer um comentário

Criar uma conta

Crie uma nova conta em nossa comunidade. É fácil!

Crie uma nova conta

Entrar

Já tem uma conta? Faça o login.

Entrar agora





Sobre o Clube do Hardware

No ar desde 1996, o Clube do Hardware é uma das maiores, mais antigas e mais respeitadas publicações sobre tecnologia do Brasil. Leia mais

Direitos autorais

Não permitimos a cópia ou reprodução do conteúdo do nosso site, fórum, newsletters e redes sociais, mesmo citando-se a fonte. Leia mais

×