Desafio #5

October 18, 2017

Processando as informações da empresa:

Considere, como exemplo, o seguinte arquivo funcionarios.json, com o seguinte conteúdo:

{
    "funcionarios":[
        {
            "id":0,
            "nome":"Marcelo",
            "sobrenome":"Silva",
            "salario":3200.00,
            "area":"SM"
        },
        {
            "id":1,
            "nome":"Washington",
            "sobrenome":"Ramos",
            "salario":2700.00,
            "area":"UD"
        },
        {
            "id":2,
            "nome":"Sergio",
            "sobrenome":"Pinheiro",
            "salario":2450.00,
            "area":"SD"
        },
        {
            "id":3,
            "nome":"Bernardo",
            "sobrenome":"Costa",
            "salario":3700.00,
            "area":"SM"
        },
        {
            "id":4,
            "nome":"Cleverton",
            "sobrenome":"Farias",
            "salario":2750.00,
            "area":"SD"
        },
        {
            "id":5,
            "nome":"Abraão",
            "sobrenome":"Campos",
            "salario":2550.00,
            "area":"SD"
        },
        {
            "id":6,
            "nome":"Letícia",
            "sobrenome":"Farias",
            "salario":2450.00,
            "area":"UD"
        },
        {
            "id":7,
            "nome":"Fernando",
            "sobrenome":"Ramos",
            "salario":2450.00,
            "area":"SD"
        },
        {
            "id":8,
            "nome":"Marcelo",
            "sobrenome":"Farias",
            "salario":2550.00,
            "area":"UD"
        },
        {
            "id":9,
            "nome":"Fabio",
            "sobrenome":"Souza",
            "salario":2750.00,
            "area":"SD"
        },
        {
            "id":10,
            "nome":"Clederson",
            "sobrenome":"Oliveira",
            "salario":2500.00,
            "area":"SD"
        }
    ],
    "areas":[
        {
            "codigo":"SD",
            "nome":"Desenvolvimento de Software"
        },
        {
            "codigo":"SM",
            "nome":"Gerenciamento de Software"
        },
        {
            "codigo":"UD",
            "nome":"Designer de UI/UX"
        }
    ]
}

Feito isto, utilize a linguagem de programação de sua preferência (e quaisquer bibliotecas que sejam necessárias) e escreva um programa que leia o nome de um arquivo JSON como parâmetro – que seguirá os mesmos moldes do arquivo funcionarios.json listado acima – e imprima as informações solicitadas a seguir, baseado no conteúdo do arquivo lido.

Condições

Em todos os casos abaixo, assuma:

  • Todos os cálculos envolvendo salários (mínimo, máximo, média) são feitos em ponto flutuante.
  • Todas as impressões de salário feitas em duas casas decimais, sem formatação (ex: 1234.56)
  • “Nome completo” == Nome + espaço + Sobrenome (Ex: João Silva)
  • “Nome da área” é o nome da área, não o código.
  • A listagem não precisa estar ordenada.

Questões

1. Quem mais recebe e quem menos recebe na empresa e a média salarial da empresa.

Calcular e imprimir o nome completo do(s) funcionário(s) com o(s) maior(es) e menor(res) salário(s) na empresa inteira, bem como o salário médio. Em caso de empate (mais de um funcionário nas posições de maior ou menor salário), imprimir todos os funcionários nessas posições que tem o mesmo salário.

Formato (máximo)

global_max|<Nome Completo>|<Salário>

Formato (mínimo)

global_min|<nome completo>|<salário>

Formato (média)

global_avg|<média salarial>

Exemplo:

global_min|José Ruela|800.00
global_min|José Mané|800.00
global_max|Bernardo Costa|3700.00
global_avg|1400.23

2. Quem mais recebe e quem menos recebe em cada área e a média salarial em cada área.

Calcular e imprimir o nome completo do(s) funcionário(s) com o(s) maior(es) e menor(res) salário(s) por área da empresa empresa, bem como o salário médio (também por área). Em caso de empate (mais de um funcionário nas posições de maior ou menor salário em uma determinada área), imprimir todos os funcionários nessas posições que tem o mesmo salário, em cada área.

Formato (máximo)

area_max|<nome da área>|<nome completo>|<salário máximo>

Formato (mínimo)

area_min|<nome da área>|<nome completo>|<salário>

Formato (média)

area_avg|<nome da área>|<salário médio>

Exemplo:

area_max|Gerenciamento de Software|Bernardo Costa|3700.00
area_max|Gerenciamento de Software|Richie Rich|3700.00
area_max|Recrutamento|Hugh Hefner|3700.00
area_min|Gerenciamento de Software|Marcelo Souza|1200.00
area_min|Gerenciamento de Software|João Lenão|1200.00
area_avg|Gerenciamento de Software|3450.00
area_avg|Recrutamento|3000.00

3. Área(s) com o maior e menor número de funcionários

Calcular a imprimir as áreas com o maior e menor número de funcionários. Em caso de empate (mais de uma área com o mesmo número máximo ou mínimo de funcionários), todas as áreas dentro daquele critério devem ser impressas.

Formato (área(s) com o maior número de funcionários):

most_employees|<nome da área>|<número de funcionários>

Formato (área(s) com o menor número de funcionários)

least_employees|<nome da área>|<número de funcionários>

Exemplos:

least_employees|Gerenciamento de Software|2
least_employees|Limpeza|2
most_employees|Recursos Humanos|10
most_employees|Engenharia|30

4. Maiores salários para funcionários com o mesmo sobrenome

Para cada sobrenome com mais de um funcionário, listar o(s) funcionário(s) que recebem o maior salário. Assim como nos itens anteriores, se mais de um funcionário com o mesmo sobrenome tiver o maior salário, listar todos estes.

Formato:

last_name_max|<sobrenome do funcionário>|<nome completo>|<salário>

Exemplo:

last_name_max|Farias|Cleverton Farias|2750.00
last_name_max|Farias|Paulo César|2750.00

Exemplo de saída esperada para o arquivo funcionarios.json dado acima como exemplo:

global_max|Bernardo Costa|3700.00
global_min|Sergio Pinheiro|2450.00
global_min|Letícia Farias|2450.00
global_min|Fernando Ramos|2450.00
global_avg|2731.82
area_max|Gerenciamento de Software|Bernardo Costa|3700.00
area_min|Gerenciamento de Software|Marcelo Silva|3200.00
area_avg|Gerenciamento de Software|3450.00
area_max|Designer de UI/UX|Washington Ramos|2700.00
area_min|Designer de UI/UX|Letícia Farias|2450.00
area_avg|Designer de UI/UX|2566.67
area_max|Desenvolvimento de Software|Cleverton Farias|2750.00
area_max|Desenvolvimento de Software|Fabio Souza|2750.00
area_min|Desenvolvimento de Software|Sergio Pinheiro|2450.00
area_min|Desenvolvimento de Software|Fernando Ramos|2450.00
area_avg|Desenvolvimento de Software|2575.00
most_employees|Desenvolvimento de Software|6
least_employees|Gerenciamento de Software|2
last_name_max|Ramos|Washington Ramos|2700.00
last_name_max|Farias|Cleverton Farias|2750.00

comments powered by Disqus