Solucionado (ver solução)
Solucionado
(ver solução)
2
respostas

Total de Bonificação Incorreto

O código abaixo não indica corretamente a soma das bonificações.

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;


namespace ByteBank.Funcionarios
{
    public class Funcionario
    {

        public static int TotalFuncionarios { get; private set; }

        public string Nome { get; set; }
        public string CPF { get; private set; }
        public double Salario { get; protected set; }

        public Funcionario(double salario, string cpf)
        {
            Salario = salario;
            CPF = cpf;
            TotalFuncionarios++;
        }

        public virtual double AumentaSalario()
        {
            return Salario *= 1.1;
        }


        public virtual double GetBonificacao()
        {
            return Salario * 0.1;
        }
    }
}
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;

namespace ByteBank.Funcionarios
{
    public class Diretor : Funcionario
    {

        public Diretor(double salario, string cpf) : base(salario, cpf) {}

        public override double AumentaSalario()
        {
            return Salario *= 1.15;
        }
        public override double GetBonificacao()
        {
            return Salario + base.GetBonificacao();
        }


    }

}
using ByteBank.Funcionarios;
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;

namespace ByteBank
{
    public class GerenciadorBonificacao
    {

        private double _totalBonificacao;

        public void Registrar(Funcionario funcionario)
        {
            _totalBonificacao += funcionario.GetBonificacao();
        }

        public double GetTotalBonificacao()
        {
            return _totalBonificacao;
        }


    }
}
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using ByteBank.Funcionarios;


namespace ByteBank
{
    class Program
    {
        static void Main(string[] args)
        {
            Funcionario sam = new Funcionario(2000, "159.357.486-82");
            Diretor adm = new Diretor(5000, "578.165.167-71"); //pode-se usar Funcionario e Diretor() pois Diretor é "filha" de Funcionario
            GerenciadorBonificacao gerenciador = new GerenciadorBonificacao();

            Console.WriteLine("O cpf de Sam é: " + sam.CPF);
            Console.WriteLine("O cpf de Adm é: " + adm.CPF);


            sam.Nome = "Sam";
            //sam.CPF = "159.357.486-82";
            //sam.Salario = 2000;
            gerenciador.Registrar(sam);
            sam.AumentaSalario();

            Console.WriteLine();
            Console.WriteLine("Salário Sam: " + sam.Salario);
            Console.WriteLine("A bonificação do funcionário Sam é de: " + sam.GetBonificacao());

            adm.Nome = "Adm";
            //adm.CPF = "578.165.167-71";
            //adm.Salario = 5000;
            gerenciador.Registrar(adm);
            adm.AumentaSalario();

            Console.WriteLine();
            Console.WriteLine("Salário Adm: " + adm.Salario);
            Console.WriteLine("A bonificação do diretor Adm é de: " + adm.GetBonificacao());

            Console.WriteLine();
            Console.WriteLine("A soma das bonificações é de: " + gerenciador.GetTotalBonificacao());

            Console.WriteLine();
            Console.WriteLine("Número de Funcionários: " + Funcionario.TotalFuncionarios);

            Console.ReadLine();
        }
    }
}

Ele compila normalmente, porém notei que há provavelmente um erro na classe GerenciadorBonificacao, já que quando o altero deixando o diretor com Salario = 0, o valor de GetTotalBonificacao é igual a 5000. Caso esteja como nesse código, o resultado de GetTotalBonificacao será 5700

2 respostas
solução!

Olá Nícolas, tudo bem?

Fiz o teste com o código que você compartilhou, na verdade o retorno de GetTotalBonificacao, com o salário do Diretor = R$ 0, retorna o esperado que é zero.

Meu código no main:

static void Main(string[] args)
        {

            Diretor adm = new Diretor(0, "578.165.167-71");
            GerenciadorBonificacao gerenciador = new GerenciadorBonificacao();

            Console.WriteLine("O cpf de Adm é: " + adm.CPF);

            adm.Nome = "Adm";

            gerenciador.Registrar(adm);
            adm.AumentaSalario();

            Console.WriteLine();
            Console.WriteLine("Salário Adm: " + adm.Salario);
            Console.WriteLine("A bonificação do diretor Adm é de: " + adm.GetBonificacao());

            Console.WriteLine();
            Console.WriteLine("A soma das bonificações é de: " + gerenciador.GetTotalBonificacao());

            Console.WriteLine();
            Console.WriteLine("Número de Funcionários: " + Funcionario.TotalFuncionarios);

            Console.ReadLine();            
        }      

Obtive R$ 0 de Salário, R$ 0 de bonificações e R$ 0 de total de bonificações.

Espero ter ajudado, mas caso tenha ficado com alguma dúvida fique tranquilo para perguntar.

Abraços e bons estudos!

Certo, muito obrigado!