Projeto 5 - Instituíte

Componentes: Gustavo Henrique Alves, Pedro Eduardo Kohlbeck Siqueira

Objetivos: Neste trabalho nós criamos um programa em python com o intuito de realizar inscrições de alunos e professores em escolas, o usuário poderá cadastrar alunos e professores em suas respectivas classes, pegar suas informações e alterá-las se desejar. Esses indivíduos serão adicionados a uma escola a escolha e será registrado como um integrante da tal utilizando uma lista de professores ou alunos existente na respectiva classe da escola. Esses dados serão armazenados na escola e futuramente os mesmos poderão ser lidos ou alterados, a escolha do usuário.

Metodologia de desenvolvimento:  Para a criação do código, utilizamos um bloco de notas para criar um esboço, contendo todas as classes e seus respectivos atributos e métodos, por conta da facilidade de modificação; o desenvolvimento foi feito com a linguagem de programação Python, a qual foi escolhido pelo professor. Durante o processo da criação do código, foi separado para cada aluno da equipe as classes, escolhida de forma aleatória, para que cada aluno pudesse participar de forma ativa. Foi criado também uma regra de nomenclatura, métodos responsáveis pelo retorno de dados possui ‘Get’, junto a oque a função retornaria, (GetNome – Retorna o nome do indivíduo), da mesma forma funções com ‘Set’, a frente do nome da função, aplicaria ao dado escolhido um certo valor (SetNome – Atualiza o dado Nome do indivíduo). Para a nomenclatura das classes foi escolhido deixar a palavra ‘Classe’ a frente da respectiva classe. As classes ClasseAluno e ClasseProfessor ficaram separadas, por conta da facilidade de desenvolvimento.

Projeto 5 - código fonte

# Classe Pessoa

class ClassePessoa:

    __Nome = None

    __Idade = None

    __Sexo = None

   

    def __init__(self, Nome : str, Idade : int,Sexo : str):

        self.__Nome = Nome

        self.__Idade = Idade

        self.__Sexo = Sexo

   

    def GetNome(self) -> str:

        return self.__Nome

   

    def SetNome(self, Nome):

        self.__Nome = Nome

        return True

   

    def GetIdade(self) -> int:

        return self.__Idade

   

    def SetIdade(self, Idade):

        self.__Idade = Idade

        return True


    def GetSexo(self) -> str:

        return self.__Sexo


    def SetSexo(self, sexo):

        self.__Sexo = sexo

        return Trueimport Pessoa



# Classes Professor e Aluno


import pessoa


def RetornarProfessor(Professores, Instituicoes):

    print("Lista de professores...")

    if len(Professores) == 0:

        print("Lista de professores vazia")

        return False

    for i in range(len(Professores)):

        print(f"\t{i} | Nome: ", Professores[i].GetNome())

   

    item = int(input("Escolha um dos item acima: "))

   

    if item > len(Professores):

        print("Opção invalida!")

   

    opcao = 0

   

    while opcao != -1:

        print("\t1 = Atualizar dados")

        print("\t2 = Retornar dados")

        print("\t-1 = Sair")

        opcao = int(input("Opcao: "))

        if opcao == -1:

            break

       

        if opcao == 1:

            print("\t1 = Salario")

            print("\t2 = Nome")

            print("\t3 = Grau Escolar")

            print("\t4 = Adicionar à Instituição")

            sel = int(input("Opcao: "))

           

            if sel == 1:

                salario = input("Digite o novo salario: ")

                Professores[item].SetSalario(salario)

            if sel == 2:

                nome = input("Digite o novo nome: ")

                Professores[item].SetNome(nome)

            if sel == 3:

                grau = input("Digite o novo Grau Escolar: ")

                Professores[item].SetGrauEscolar(grau)

            if sel == 4:

                if len(Instituicoes) == 0:

                    print("Lista de instituições vazia")

                    pass

               

                for j in range(len(Instituicoes)):

                    print(F"{j} | Nome: ", Instituicoes[j].GetNome())

                inst = int(input("Selecione a instituição: "))

                if inst > len(Instituicoes):

                    print("Instituição invalida!")

                    continue

                Professores[item].SetInstituicao(Instituicoes[inst])

                Instituicoes[inst].UpdateProfessores(Professores[item])


        if opcao == 2:

            print("Nome: ", Professores[item].GetNome())

            x = Professores[item].GetInstitucao()

            if x != None:

                print("Instituição\t", x.GetNome())

            print("Salario:\t", Professores[item].GetSalario())

            print("GrauEscolar:\t", Professores[item].GetGrauEscolar())

   

    return True


class ClasseProfessor(Pessoa.ClassePessoa):

    __Salario = None

    __GrauEscolar = None

    __Instituicao = None

   

    def __init__(self,Nome : str, Idade : int, Sexo : strSalario : float, GrauEscolar : str, Concursado : bool):

        super().__init__(Nome, Idade, Sexo)

        self.__Salario = Salario

        self.__GrauEscolar = GrauEscolar

        self.__Concursado = Concursado

        self.__Instituicao = None

   

    def GetSalario(self) -> float:

        return self.__Salario

   

    def SetSalario(self, SalarioNovo):

        self.__Salario = SalarioNovo

        return True

   

    def GetGrauEscolar(self) -> str:

        return self.__GrauEscolar

   

    def SetGrauEscolar(self, GrauNovo):

        self.__GrauEscolar = GrauNovo

        return True

   

    def SetInstituicao(self, InstituicaoNova):

        self.__Instituicao = InstituicaoNova

        return True

   

    def GetInstitucao(self):

        return self.__Instituicaoimport Pessoa


class ClasseAluno(Pessoa.ClassePessoa):

    __Matricula = None

    __Notas = []

    __Media = 0.0

    __Fase = None


    def __init__(self,Nome : str, Idade : int, Sexo : strMat : str, Fase : str):

        super().__init__(Nome, Idade, Sexo)

        self.__Matricula = Mat

        self.__Fase = Fase

        self.__Notas = []

        self.__Media = 0.0


    def SetMatricula(self, matricula):

        self.__Matricula = matricula

        return True


    def GetMatricula(self) -> str:

        return self.__Matricula


    def SetNota(self, nota):

        self.__Notas.append(nota)

        soma = 0

        for e in self.__Notas:

            soma += e

        self.__Media = soma/len(self.__Notas)

        return True


    def GetNota(self):

        return self.__Notas


    def SetFase(self, fase):

        self.__Fase = fase


    def GetMedia(self):

        return self.__Media

       

       

# Classes Institução, EscolaPublica e EscolaPrivada


#! /usr/bin/python3

class Instituicao:

    __Nome = None

    __NotaInstitucional = None

    __Alunos = []

    __Professores = []

    __Turmas = []


    def __init__(self):

        self.__Nome = None

        self.__NotaInstitucional = None

        self.__Alunos = []

        self.__Professores = []

        self.__Turmas = []


    def SetNome(self, Nome : str) -> bool:

        self.__Nome = Nome

        return True

   

    def GetNome(self):

        return self.__Nome

   

    def SetNota(self, Nota : float) -> bool:

        self.__NotaInstitucional = Nota

        return True

   

    def GetNota(self) -> float:

        return self.__NotaInstitucional

   

    def GetAlunos(self) -> []:

        return self.__Alunos

   

    def UpdateAlunos(self, Aluno) -> bool:

        self.__Alunos.append(Aluno)

        return True

   

    def GetProfessores(self) -> []:

        return self.__Professores

   

    def UpdateProfessores(self, Professor) -> bool:

        self.__Professores.append(Professor)

        return True


class EscolaPublica(Instituicao):

    __Tipo = None

    __Fundo = None

    __Diretor = None

   

    def __init__(self, Tipo : str, Fundo : int, Diretor : str):

        self.__Tipo = Tipo

        self.__Fundo = Fundo

        self.__Diretor = Diretor


    def GetTipo(self):

        return self.__Tipo

   

    def SetTipo(self, Tipo : str):

        self.__Tipo = Tipo

        return True

   

    def GetFundos(self):

        return self.__Fundo

   

    def SetFundos(self, Fundos : int):

        self.__Fundo = Fundos

        return True

   

    def GetDiretor(self):

        return self.__Diretor

   

    def SetDiretor(self, Diretor : str):

        self.__Diretor = Diretor

        return True



class EscolaPrivada(Instituicao):

    __CNPJ = None

    __Dono = None

   

    def __init__(self, CNPJ : str, Dono : str):

        self.__CNPJ = CNPJ

        self.__Dono = Dono

   

    def GetCNPJ(self) -> str:

        return self.__CNPJ

   

    def GetDono(self) -> str:

        return self.__Dono

   

    def SetDono(self, NovoDono : str):

        self.__Dono = NovoDono

        return True

       


# Arquivo APP, utilizando as classes e funções dos arquivos separados


#! /usr/bin/python3

from Classes import EscolaPublica, EscolaPrivada

from Professor import ClasseProfessor

from Aluno import ClasseAluno


Instituicoes = []

Professores = []

Alunos = []



def mostrar_professores():

    print("Lista de Professores:")

    for i, professor in enumerate(Professores):

        print(f"{i} | Nome: {professor.GetNome()}")

    item = int(input("Escolha um dos itens acima: "))

    print("\t1 = Atualizar dados")

    print("\t2 = Retornar dados")

    opcao = int(input("Escolha uma opcao: "))

    if opcao == 1:

        print("\t1 = Salario")

        print("\t2 = Nome")

        print("\t3 = Grau Escolar")

        print("\t4 = Adicionar à Instituição")

        opcao = int(input("Opcao: "))


        if opcao == 1:

            salario = input("Digite o novo salario: ")

            Professores[item].SetSalario(salario)

        elif opcao == 2:

            nome = input("Digite o novo nome: ")

            Professores[item].SetNome(nome)

        elif opcao == 3:

            grau = input("Digite o novo Grau Escolar: ")

            Professores[item].SetGrauEscolar(grau)

        elif opcao == 4:

            if Instituicoes:

                for j, instituicao in enumerate(Instituicoes):

                    print(f"{j} | Nome: {instituicao.GetNome()}")

                inst = int(input("Selecione a instituição: "))

                Instituicoes[inst].UpdateProfessores(Professores[item])

            else:

                print("Lista de instituições vazia")

    elif opcao == 2:

        print("Nome:", Professores[item].GetNome())

        print("\tSalario:", Professores[item].GetSalario())

        print("\tGrau Escolar:", Professores[item].GetGrauEscolar())



def adicionar_professor():

    nome = input("Digite o nome: ")

    idade = input("Digite a idade: ")

    sexo = input("Digite o Sexo: ")

    salario = float(input("Digite o salario: "))

    grau = input("Digite o grau escolar: ")

    concursado = bool(input("Concursado: 1 para sim, 0 para não: "))


    professor = ClasseProfessor(nome, idade, sexo, salario, grau, concursado)

    Professores.append(professor)


    print("\tAdicionar à Instituição")

    if Instituicoes:

        for j, instituicao in enumerate(Instituicoes):

            print(f"{j} | Nome: {instituicao.GetNome()}")

        inst = int(input("Selecione a instituição: "))

        Instituicoes[inst].UpdateProfessores(professor)

    else:

        print("Lista de instituições vazia")



def mostrar_alunos():

    print("Lista de Alunos:")

    for i, aluno in enumerate(Alunos):

        print(f"{i} | Nome: {aluno.GetNome()}")

    item = int(input("Escolha um dos itens acima: "))

    print("\t1 = Atualizar dados")

    print("\t2 = Retornar dados")

    opcao = int(input("Escolha uma opcao: "))

    if opcao == 1:

        print("\t1 = Adicionar Nota")

        print("\t2 = Nome")

        print("\t3 = Fase")

        opcao = int(input("Opcao: "))


        if opcao == 1:

            qtd = int(input("Digite a quantidade de notas: "))

            for i in range(qtd):

                nota = float(input("Digite a nota: "))

                Alunos[item].SetNota(nota)

        elif opcao == 2:

            nome = input("Digite o novo nome: ")

            Alunos[item].SetNome(nome)

        elif opcao == 3:

            fase = input("Digite o nova fase: ")

            Alunos[item].SetFase(fase)

    elif opcao == 2:

        print("Nome:", Alunos[item].GetNome())

        print("\tMatricula:", Alunos[item].GetMatricula())

        print("\tNotas:", Alunos[item].GetNota())

        print("\tMedia:", Alunos[item].GetMedia())



def adicionar_aluno():

    nome = input("Digite nome: ")

    idade = input("Digite a idade: ")

    sexo = input("Digite o Sexo: ")

    matricula = input("Digite a matrícula do aluno: ")

    fase = input("Digite a fase atual: ")


    aluno = ClasseAluno(nome, idade, sexo, matricula, fase)

    acao = int(input("Deseja adicionar alguma nota? Digite 1 para sim, ou 0 para não: "))


    if acao == 1:

        quantidade_notas = int(input("Digite a quantidade de notas: "))

        for i in range(quantidade_notas):

            nota = float(input(f"Digite a nota {i + 1}: "))

            aluno.SetNota(nota)

    elif acao == 0:

        pass

    else:

        print("Opção inválida. Por favor, digite 1 para sim ou 0 para não.")

    Alunos.append(aluno)



def mostrar_instituicoes():

    print("Lista de Instituições:")

    for i, instituicao in enumerate(Instituicoes):

        print(f"{i} | Nome: {instituicao.GetNome()}")

    item = int(input("Escolha um dos itens acima: "))

    print("\t1 = Atualizar dados")

    print("\t2 = Retornar dados")

    opcao = int(input("Escolha uma opcao: "))

    if opcao == 1:

        print("\t1 = Nome")

        print("\t2 = Nota")

        if isinstance(Instituicoes[item], EscolaPublica):

            print("\t3 = Tipo")

            print("\t4 = Fundo")

            print("\t5 = Diretor")

        elif isinstance(Instituicoes[item], EscolaPrivada):

            print("\t6 = CNPJ")

            print("\t7 = Dono")

        opcao = int(input("Opcao: "))


        if opcao == 1:

            nome = input("Digite o novo nome: ")

            Instituicoes[item].SetNome(nome)

        elif opcao == 2:

            nota = input("Digite o nova nota: ")

            Instituicoes[item].SetNota(nota)

        elif opcao == 3 and isinstance(Instituicoes[item], EscolaPublica):

            tipo = input("Digite o novo tipo: ")

            Instituicoes[item].SetTipo(tipo)

        elif opcao == 4 and isinstance(Instituicoes[item], EscolaPublica):

            fundo = input("Digite o novo fundo: ")

            Instituicoes[item].SetFundo(fundo)

        elif opcao == 5 and isinstance(Instituicoes[item], EscolaPublica):

            diretor = input("Digite o novo diretor: ")

            Instituicoes[item].SetDiretor(diretor)

        elif opcao == 6 and isinstance(Instituicoes[item], EscolaPrivada):

            cnpj = input("Digite o novo CNPJ: ")

            Instituicoes[item].SetCnpj(cnpj)

        elif opcao == 7 and isinstance(Instituicoes[item], EscolaPrivada):

            dono = input("Digite o novo dono: ")

            Instituicoes[item].SetDono(dono)

    elif opcao == 2:

        print("Nome:", Instituicoes[item].GetNome())

        print("\tNota:", Instituicoes[item].GetNota())

        if isinstance(Instituicoes[item], EscolaPublica):

            print("\tTipo:", Instituicoes[item].GetTipo())

            print("\tFundo:", Instituicoes[item].GetFundo())

            print("\tDiretor:", Instituicoes[item].GetDiretor())

        elif isinstance(Instituicoes[item], EscolaPrivada):

            print("\tCNPJ:", Instituicoes[item].GetCnpj())

            print("\tDono:", Instituicoes[item].GetDono())



def adicionar_instituicao():

    nome = input("Digite nome da instituição: ")

    nota = input("Digite a nota da instituição: ")

    types = int(input("Instituição é pública ou privada: (digite 1 para pública e 2 para privada): "))

    inst = Classes.Instituicao()

    inst.SetNome(nome)

    inst.SetNota(nota)


    if types == 1:

        tipo = input("Digite o tipo da escola: (municipal ou estadual) ")

        fundo = input("Quantidade de fundo da instituição: ")

        diretor = input("Nome do diretor: ")

        pub = EscolaPublica(tipo, fundo, diretor)

        Instituicoes.append(pub)

    elif types == 2:

        cnpj = input("Digite o CNPJ da instituição: ")

        dono = input("Digite o nome do dono da instituição: ")

        priv = EscolaPrivada(cnpj, dono)

        Instituicoes.append(priv)

    else:

        print("Digite uma opção válida...")



def start_menu():

    while True:

        print("Menu:")

        print("\t0 = Retornar Professores")

        print("\t1 = Adicionar Professor")

        print("\t2 = Retornar Alunos")

        print("\t3 = Adicionar Alunos")

        print("\t4 = Retornar Instituicao")

        print("\t5 = Adicionar Instituicao")

        print("\t-1 = Sair")


        sel = int(input("Opção: "))

        if sel == -1:

            print("Saindo...")

            break


        if sel == 0:

            mostrar_professores()

        elif sel == 1:

            adicionar_professor()

        elif sel == 2:

            mostrar_alunos()

        elif sel == 3:

            adicionar_aluno()

        elif sel == 4:

            mostrar_instituicoes()

        elif sel == 5:

            adicionar_instituicao()

        else:

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



if __name__ == "__main__":

    print("Hello, Main!")


    # Criar duas instituições

    EscolaA = EscolaPublica("Estadual", 1555, "Carlos")

    EscolaB = EscolaPrivada("12234", "Jose")


start_menu()