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();
}