Projeto 3 - Gerenciamento de Funcionários 

Componentes: Rian Anthony Santos Ribeiro 

Objetivos: O objetivo deste projeto é desenvolver um sistema de gerenciamento de funcionários para diferentes departamentos dentro de uma empresa. 

O sistema permite realizar o cadastro desses funcionários, Inclusão de novos, permitindo definir se são funcionários gerais ou gerentes. Exibição dos funcionários cadastrados por departamento, modificação dos dados dos funcionários existentes, remoção de funcionários do sistema e verificação de usuários por meio de um sistema de login para garantir que apenas usuários autorizados e criados pelo administrador possam acessar e modificar os dados. 

Metodologia de desenvolvimento:  A metodologia de desenvolvimento utilizada foi a Programação Orientada a Objetos, com a linguagem python. A POO é um paradigma de programação que utiliza "objetos" para representar dados e métodos, promovendo a modularidade, reutilização de código e manutenção.

Passos de Desenvolvimento:

Definição das Classes:

Pessoa: Classe base que representa uma pessoa com atributos nome, idade e endereço.

Funcionario: Subclasse de Pessoa, que adiciona o atributo salário.

Gerente: Subclasse de Funcionario, que adiciona o atributo departamento.

Departamento: Classe que representa um departamento, contendo uma lista de funcionários e métodos para gerenciar essa lista.

Encapsulamento:

Uso de atributos privados (prefixados com __) e métodos públicos (get e set) para acessar e modificar esses atributos.

Herança:

Funcionario herda de Pessoa.

Gerente herda de Funcionario.

Composição:

A classe Departamento contém uma lista de objetos do tipo Funcionario (ou suas subclasses).

Implementação das Funcionalidades:

Métodos para cadastrar, listar, alterar e excluir funcionários.

Função para verificar login dos usuários.

Interface de Usuário:

Implementação de um menu interativo via console para interagir com o sistema, permitindo operações de criar, ler, alterar e deletar funcionários. 

Projeto 3 - código fonte

class Pessoa:

    def __init__(self, nome, idade, endereco):

        self.__nome = nome

        self.__idade = idade

        self.__endereco = endereco

    

    def get_nome(self):

        return self.__nome

    

    def set_nome(self, nome):

        self.__nome = nome

    

    def get_idade(self):

        return self.__idade

    

    def set_idade(self, idade):

        self.__idade = idade

    

    def get_endereco(self):

        return self.__endereco

    

    def set_endereco(self, endereco):

        self.__endereco = endereco

    

    def exibir_informacoes(self):

        return f"Nome: {self.__nome}, Idade: {self.__idade}, Endereço: {self.__endereco}"


class Funcionario(Pessoa):

    def __init__(self, nome, idade, endereco, salario):

        super().__init__(nome, idade, endereco)

        self.__salario = salario

    

    def get_salario(self):

        return self.__salario

    

    def set_salario(self, salario):

        self.__salario = salario

    

    def exibir_informacoes(self):

        return f"{super().exibir_informacoes()}, Salário: {self.__salario}"


class Gerente(Funcionario):

    def __init__(self, nome, idade, endereco, salario, departamento):

        super().__init__(nome, idade, endereco, salario)

        self.__departamento = departamento

    

    def get_departamento(self):

        return self.__departamento

    

    def set_departamento(self, departamento):

        self.__departamento = departamento

    

    def exibir_informacoes(self):

        return f"{super().exibir_informacoes()}, Departamento: {self.__departamento}"


class Departamento:

    def __init__(self, nome):

        self.__nome = nome

        self.__funcionarios = []

    

    def adicionar_funcionario(self, funcionario):

        if isinstance(funcionario, Funcionario):

            self.__funcionarios.append(funcionario)

    

    def remover_funcionario(self, nome):

        for i, funcionario in enumerate(self.__funcionarios):

            if funcionario.get_nome() == nome:

                del self.__funcionarios[i]

                return True

        return False

    

    def listar_funcionarios(self):

        return [funcionario.exibir_informacoes() for funcionario in self.__funcionarios]

    

    def get_nome(self):

        return self.__nome

    

    def set_nome(self, nome):

        self.__nome = nome


usuarios_senhas = {

    'usuario1': 'senha123',

    'usuario2': 'abc123',

    'usuario3': 'abc321',

}


def verificar_login(usuario, senha):

    if usuario in usuarios_senhas and usuarios_senhas[usuario] == senha:

        return True

    else:

        return False


def cadastrar_funcionario():

    print("Cadastro de novo funcionário:")

    nome = input("Nome do funcionário: ")

    print(f"Funcionário '{nome}' cadastrado com sucesso!")


def cadastrar_funcionario(departamentos):

    nome = input("Nome: ")

    idade = int(input("Idade: "))

    endereco = input("Endereço: ")

    salario = float(input("Salário: "))

    tipo = input("Tipo (Funcionario/Gerente): ")

    

    if tipo.lower() == "gerente":

        departamento_nome = input("Departamento para adicionar o gerente: ")

        funcionario = Gerente(nome, idade, endereco, salario, departamento_nome)

        

    else:

        funcionario = Funcionario(nome, idade, endereco, salario)

        departamento_nome = input("Departamento para adicionar o funcionário: ")


    for departamento in departamentos:

        if departamento.get_nome() == departamento_nome:

            departamento.adicionar_funcionario(funcionario)

            print("Funcionário cadastrado com sucesso!")

            return

    print("Departamento não encontrado.")

   

def listar_funcionarios(departamentos):

    for departamento in departamentos:

        print(f"Departamento: {departamento.get_nome()}")

        for info in departamento.listar_funcionarios():

            print(info)


def alterar_funcionario(departamentos):

    nome = input("Nome do funcionário a alterar: ")

    for departamento in departamentos:

        for funcionario in departamento._funcionarios:

            if funcionario.get_nome() == nome:

                novo_nome = input("Novo Nome: ")

                nova_idade = int(input("Nova Idade: "))

                novo_endereco = input("Novo Endereço: ")

                novo_salario = float(input("Novo Salário: "))

                funcionario.set_nome(novo_nome)

                funcionario.set_idade(nova_idade)

                funcionario.set_endereco(novo_endereco)

                funcionario.set_salario(novo_salario)

                print("Dados do funcionário alterados com sucesso!")

                return

    print("Funcionário não encontrado.")


def excluir_funcionario(departamentos):

    nome = input("Nome do funcionário a excluir: ")

    for departamento in departamentos:

        if departamento.remover_funcionario(nome):

            print("Funcionário excluído com sucesso!")

            return

    print("Funcionário não encontrado.")


def main():

    

    usuarios = []

    x = []

    departamentos = [

        Departamento("Recursos Humanos"),

        Departamento("Vendas"),

        Departamento("TI"),

        Departamento("Financeiro")

        ]

    

    while True:

    

        usuario = input("Digite o nome de usuário: ")

        senha = input("Digite a senha: ")

        

        if verificar_login(usuario, senha):

            print("Login bem-sucedido!\n")

            usuarios.append(usuario)

            break

        else:

            print("Usuário ou senha incorretos. Tente novamente.\n")

        

    while True:


        print("\nMenu")

        print("-" * 30)

        print("1. Cadastrar Funcionário")

        print("-" * 30)

        print("2. Listar Funcionários")

        print("-" * 30)

        print("3. Alterar Funcionário")

        print("-" * 30)

        print("4. Excluir Funcionário")

        print("-" * 30)

        print("5. Sair")

        print("-" * 30)

        

        opcao = int(input("Escolha uma opção: "))

        

        if opcao == 1:

           cadastrar_funcionario(departamentos)

        elif opcao == 2:

           listar_funcionarios(departamentos)

        elif opcao == 3:

           alterar_funcionario(departamentos)

        elif opcao == 4:

            excluir_funcionario(departamentos)

        elif opcao == 5:

            break

        else:

            print("Opção inválida, tente novamente.")


if __name__ == "__main__":

    main()