Componentes: Caio D. Dolfini, Mateus H. Muehlbauer e Andrey R. Leber.
Objetivos: Nosso trabalho consiste em criar um sistema de cadastro para facilitar a identificação rápida de crianças em um evento, focado na segurança.
Metodologia de desenvolvimento: Nos fizemos reuniões com todos integrantes do grupo e fizemos pelo Visual Studio Code.
from time import sleep
class Pessoa:
#construtor
def __init__(self, nome: str, telefone: str):
#atributos privados (encapsulamento)
self._nome = nome
self._telefone = telefone
#metodos get
def get_nome(self):
return self._nome
def get_telefone(self):
return self._telefone
#metodos set
def set_nome(self, novo_nome):
self._nome = novo_nome
def set_telefone(self, novo_telefone):
self._telefone = novo_telefone
#polimorfismo(base)
def exibir_detalhes(self):
#exibe detalhes da pessoa
return f"Nome: {self._nome} | Tel.Contato: {self._telefone}"
class Crianca(Pessoa):
#heranca, herda de pessoa e add dados p/ identificacao da crianca
#construtor da classe filha
def __init__(self, nome: str, telefone: str, nome_mae: str, idade: int):
#chama construtor da classe pai
super().__init__(nome, telefone)
self._nome_mae = nome_mae
self._idade = idade
#gera id
self._id = self._nome.lower().replace(" ", "_") + str(idade)
#metodos get
def get_nome_mae(self):
return self._nome_mae
def get_idade(self):
return self._idade
def get_id(self):
return self._id
#metodos set
def set_nome_mae(self, novo_nome_mae):
self._nome_mae = novo_nome_mae
def set_idade(self, novo_idade):
self._idade = novo_idade
#polimorfismo
def exibir_detalhes(self):
#chama classe pai
detalhes_base = super().exibir_detalhes()
return (f"{detalhes_base} | Nome da mãe: {self._nome_mae} | Idade: {self._idade} anos | ID: {self._id}")
#classe de gerenciamento (CRUD)
class GerenciadorCrianca:
def __init__(self):
self._cadastro = []
#metodo CRUD
def cadastrar_crianca(self):
print("\n--- CADASTRO DA CRIANCA ---")
nome = input("Nome da criança: ")
idade = input("Idade: ")
nome_mae = input("Nome da mãe/responsável: ")
telefone = input("Telefone para contato (mãe/responsável): ")
try:
idade_int = int(idade)
nova_crianca = Crianca(nome, telefone, nome_mae, idade_int)
self._cadastro.append(nova_crianca)
print(f"\n[SUCESSO] Criança `{nome}` cadastrado(a)")
except ValueError:
print("\n[ERRO] A idade deve ser um numero inteiro")
except Exception as e:
print(f"[ERRO] Ocorreu um erro no cadastro: {e}")
def listar_criancas(self):
#lista as criancas cadastradas, usando metodo polimorfico
print("\n--- LISTA DE CRIANÇAS CADASTRADAS ---")
if not self._cadastro:
print("Nenhuma Criança cadastrada")
return
for i, crianca in enumerate(self._cadastro):
#uso do metodo poliforrmico
detalhes = crianca.exibir_detalhes()
print(f"[{i+1:02d}] {detalhes}")
print("---------------------------------------")
def alterar_crianca(self):
#altera dados da crianca cadastrada
self.listar_criancas()
if not self._cadastro:
return
try:
indice = int(input("Digite o número do registro que deseja alterar: ")) - 1
if 0 <= indice < len(self._cadastro):
crianca = self._cadastro[indice]
print(f"\nAlterando: {crianca.get_nome()}")
#define novos valores usando metodo set
novo_nome = input(f"Novo nome da criança (Atual: {crianca.get_nome()}): ")
crianca.set_nome(novo_nome if novo_nome else crianca.get_nome())
nova_idade = input(f"Nova Idade (Atual: {crianca.get_idade()}): ")
if nova_idade.isdigit():
crianca.set_idade(int(nova_idade))
novo_nome_mae = input(f"Novo nome da mãe (Atual: {crianca.get_nome_mae()}): ")
crianca.set_nome_mae(novo_nome_mae if novo_nome_mae else crianca.get_nome_mae())
novo_tel = input(f"Novo Telefone (Atual: {crianca.get_telefone()}): ")
crianca.set_telefone(novo_tel if novo_tel else crianca.get_telefone())
print("\n[SUCESSO] Cadastro alterado.")
else:
print("[ERRO] Índice inválido. ")
except ValueError:
print("[ERRO] Entrada inválida. Digite um número.")
def excluir_crianca(self):
self.listar_criancas()
if not self._cadastro:
return
try:
indice = int(input("Digite o número do registro que deseja excluir: ")) - 1
if 0 <= indice < len(self._cadastro):
crianca_removida = self._cadastro.pop(indice)
print(f"\n[SUCESSO] Criança '{crianca_removida.get_nome()}' removida.")
else:
print("[ERRO] Índice inválido")
except ValueError:
print("[ERRO] Entrada inválida. Digite um número.")
def buscar_crianca(self):
#busca um registro por id ou nome e exibe detalhes
termo = input("Digite o nome ou ID da criança para busca: ").lower()
encontrada = False
print("\n--- RESULTADOS DA BUSCA ---")
for crianca in self._cadastro:
if termo in crianca.get_nome().lower() or termo in crianca.get_id().lower():
print(crianca.exibir_detalhes())
encontrada = True
if not encontrada:
print(f"[AVISO] Criança com o termo '{termo}' não encontrada.")
print("---------------------------")
#interface e execucao do programa(menu principal)
def menu_principal():
#exibe menu de opcoes
cadastro = GerenciadorCrianca() #objeto de gerenciamento
while True:
print("\n" * 2)
print("=========================================================")
print("| SINE: Cadastro de crianças |")
print("=========================================================")
print("| [1] Cadastrar Criança |")
print("| [2] Listar todas as Crianças |")
print("| [3] Alterar Cadastro |")
print("| [4] Excluir Cadastro |")
print("| [5] Buscar Criança por Nome/ID |")
print("| [0] Sair Do Programa |")
print("=========================================================")
opcao = input("Escolha uma opção: ")
if opcao == '1' :
cadastro.cadastrar_crianca()
elif opcao == '2':
cadastro.listar_criancas()
elif opcao == '3':
cadastro.alterar_crianca()
elif opcao == '4':
cadastro.excluir_crianca()
elif opcao =='5':
cadastro.buscar_crianca()
elif opcao == '0':
print("\nEncerrando o SINE.")
break
else:
print("\n[AVISO]Opção inválida. Tente novamente.")
sleep(1) #Pausa para facilitar a leitura da mensagem de sucesso/erro
#bloco principal da execucao
if __name__ =="__main__":
menu_principal()