Solucionado (ver solução)
Solucionado
(ver solução)
1
resposta

Mão na massa: a equipe do bistrô

class Funcionario {
  String nome;
  double salario;
  String cargo;
  String descricao;

  Funcionario(this.nome, this.salario, this.cargo, this.descricao);

  void exibirDados() {
    print("\n $nome");
    print("   Cargo: $cargo");
    print("   Salário: R\$ ${salario.toStringAsFixed(2)}");
    print("   Descrição: $descricao");
  }

  double calcularImpostos() { // Valores aleatórios 
    // Simulação simplificada de impostos (INSS + FGTS)
    double inss = salario * 0.20; // 20% INSS
    double fgts = salario * 0.28; // 28% FGTS
    return inss + fgts;
  }
}

class Gerente extends Funcionario {
  Gerente(String nome, double salario, String descricao)
      : super(nome, salario, "Gerente", descricao);

  @override
  void exibirDados() {
    print("\n $nome");
    print("   Cargo: $cargo (Supervisão Geral)");
    print("   Salário: R\$ ${salario.toStringAsFixed(2)}");
    print("   Descrição: $descricao");
  }
}

class Cozinheiro extends Funcionario {
  Cozinheiro(String nome, double salario, String descricao)
      : super(nome, salario, "Cozinheiro", descricao);

  @override
  void exibirDados() {
    print("\n $nome");
    print("   Cargo: $cargo (Chef de Cozinhaia)");
    print("   Salário: R\$ ${salario.toStringAsFixed(2)}");
    print("   Descrição: $descricao");
  }
}

class Garcom extends Funcionario {
  Garcom(String nome, double salario, String descricao)
      : super(nome, salario, "Garçom", descricao);

  @override
  void exibirDados() {
    print("\n $nome");
    print("   Cargo: $cargo (Atendimento ao Cliente)");
    print("   Salário: R\$ ${salario.toStringAsFixed(2)}");
    print("   Descrição: $descricao");
  }
}

class GerenciadorEquipe {
  List<Funcionario> equipe = [];

  void contratarFuncionario(Funcionario funcionario) {
    equipe.add(funcionario);
    print(" ${funcionario.nome} contratado(a) como ${funcionario.cargo}");
  }

  void listarEquipe() {
    print("\n${"=" * 50}"); // um teste para "esticar a linha"
    print("                 EQUIPE DO BISTRÔ");
    print("=" * 50);

    for (var funcionario in equipe) {
      funcionario.exibirDados();
    }
  }

  double calcularFolhaPagamento() {
    double total = 0;
    for (var funcionario in equipe) {
      total += funcionario.salario;
    }
    return total;
  }

  void exibirResumo() {
    print("\n-----------------------------------------------");
    print("              RESUMO FINANCEIRO");
    print("------------------------------------------------");

    double totalSalarios = calcularFolhaPagamento();
    double totalImpostos = 0;

    for (var funcionario in equipe) {
      totalImpostos += funcionario.calcularImpostos();
    }

    print("Total de funcionários: ${equipe.length}");
    print("Folha de pagamento mensal: R\$ ${totalSalarios.toStringAsFixed(2)}");
    print("Impostos e encargos (INSS + FGTS): R\$ ${totalImpostos.toStringAsFixed(2)}");
    print("Custo total mensal: R\$ ${(totalSalarios + totalImpostos).toStringAsFixed(2)}");
  }
}

void main() {
  print("\n       SISTEMA DE GERENCIAMENTO - BISTRÔ\n");

  var gerenciador = GerenciadorEquipe();

    print("---------------- CONTRATAÇÕES ----------------\n");

  gerenciador.contratarFuncionario(Gerente(
    "Roberto Mendes",
    5500.0,
    "Responsável pela gestão da equipe e controle operacional do bistrô",
  ));

  gerenciador.contratarFuncionario(Cozinheiro(
    "Carlos Silva",
    3500.0,
    "Prepara pratos quentes, massas e especialidades da casa",
  ));

  gerenciador.contratarFuncionario(Garcom(
    "Julia Oliveira",
    2100.0,
    "Atende clientes, anota pedidos e garante o bom serviço de mesa",
  ));

  // Exibindo a equipe
  gerenciador.listarEquipe();

  // Exibindo resumo financeiro
  gerenciador.exibirResumo();
}

Matricule-se agora e aproveite até 50% OFF

O maior desconto do ano para você evoluir com a maior escola de tecnologia

QUERO APROVEITAR
1 resposta
solução!

Olá José Antônio, tudo bem?

Parabéns por compartilhar seu projeto da equipe do bistrô! O seu código ficou excelente e muito bem organizado.

Gostei muito de ver como você aplicou os conceitos de Orientação a Objetos da aula. Você usou a herança perfeitamente, criando as classes Gerente, Cozinheiro e Garcom a partir da classe base Funcionario.

Além disso, mandou muito bem no polimorfismo! A classe GerenciadorEquipe trata todos os objetos da mesma forma (como Funcionario) na lista equipe, e o uso do @override no método exibirDados para customizar a impressão de cada cargo ficou ótimo.

Ótimo trabalho! Continue assim!

Bons estudos!

Sucesso

Imagem da comunidade