Add existing file

This commit is contained in:
RinBa 2025-06-10 10:57:45 -03:00
parent 6fd5a06e55
commit 1453856789
10 changed files with 228 additions and 0 deletions

5
main.py Normal file
View File

@ -0,0 +1,5 @@
from visao.interface_texto import InterfaceTexto
if __name__ == "__main__":
interface = InterfaceTexto()
interface.executar()

19
modelo/adocao.py Normal file
View File

@ -0,0 +1,19 @@
from modelo.entidade import Entidade
class Adocao(Entidade):
def __init__(self, id_, adotante):
super().__init__(id_)
self.adotante = adotante
self.itens = []
def adicionar_item(self, item):
self.itens.append(item)
def remover_item(self, item):
self.itens.remove(item)
def __str__(self):
texto = f"{super().__str__()} | Adotante: {self.adotante}\n"
for item in self.itens:
texto += f" {item}\n"
return texto

6
modelo/entidade.py Normal file
View File

@ -0,0 +1,6 @@
class Entidade:
def __init__(self, id_):
self.id = id_
def __str__(self):
return f"ID: {self.id}"

7
modelo/item_adocao.py Normal file
View File

@ -0,0 +1,7 @@
class ItemAdocao:
def __init__(self, pet, data):
self.pet = pet
self.data = data
def __str__(self):
return f"Pet: [{self.pet}] | Data: {self.data}"

9
modelo/pessoa.py Normal file
View File

@ -0,0 +1,9 @@
from modelo.entidade import Entidade
class Pessoa(Entidade):
def __init__(self, id_, nome):
super().__init__(id_)
self.nome = nome
def __str__(self):
return f"{super().__str__()} | Nome: {self.nome}"

10
modelo/pet.py Normal file
View File

@ -0,0 +1,10 @@
from modelo.entidade import Entidade
class Pet(Entidade):
def __init__(self, id_, nome, especie):
super().__init__(id_)
self.nome = nome
self.especie = especie
def __str__(self):
return f"{super().__str__()} | Nome: {self.nome} | Espécie: {self.especie}"

View File

@ -0,0 +1,10 @@
from persistencia.persistente import Persistente
from modelo.pessoa import Pessoa
from modelo.pet import Pet
from modelo.adocao import Adocao
class BancoDeDados:
def __init__(self):
self.pessoas = Persistente()
self.pets = Persistente()
self.adocoes = Persistente()

2
persistencia/excecoes.py Normal file
View File

@ -0,0 +1,2 @@
class EntidadeNaoEncontradaException(Exception):
pass

View File

@ -0,0 +1,29 @@
from persistencia.excecoes import EntidadeNaoEncontradaException
class Persistente:
def __init__(self):
self.lista = []
def inserir(self, obj):
self.lista.append(obj)
def alterar(self, id_, novo_obj):
antigo = self.buscar_por_id(id_)
self.lista.remove(antigo)
self.lista.append(novo_obj)
def remover(self, id_):
obj = self.buscar_por_id(id_)
self.lista.remove(obj)
def buscar_por_id(self, id_):
for obj in self.lista:
if obj.id == id_:
return obj
raise EntidadeNaoEncontradaException(f"ID não encontrado: {id_}")
def listar_todos(self):
return self.lista
def __str__(self):
return "\n".join(str(obj) for obj in self.lista)

131
visao/interface_texto.py Normal file
View File

@ -0,0 +1,131 @@
from modelo.pessoa import Pessoa
from modelo.pet import Pet
from modelo.adocao import Adocao
from modelo.item_adocao import ItemAdocao
from persistencia.banco_dados import BancoDeDados
from persistencia.excecoes import EntidadeNaoEncontradaException
class InterfaceTexto:
def __init__(self):
self.bd = BancoDeDados()
self.proximo_id = 1
def executar(self):
while True:
print("\n=== Menu Principal ===")
print("1. Pessoas")
print("2. Pets")
print("3. Adoções")
print("0. Sair")
op = input("Escolha: ")
if op == "1":
self.menu_entidade("Pessoa")
elif op == "2":
self.menu_entidade("Pet")
elif op == "3":
self.menu_adocao()
elif op == "0":
break
def menu_entidade(self, tipo):
while True:
print(f"\n=== Menu {tipo} ===")
print("1. Inserir")
print("2. Alterar")
print("3. Apagar")
print("4. Visualizar por ID")
print("5. Visualizar todos")
print("0. Voltar")
op = input("Escolha: ")
try:
if tipo == "Pessoa":
self.operacoes_pessoa(op)
elif tipo == "Pet":
self.operacoes_pet(op)
except Exception as e:
print("Erro:", e)
if op == "0":
break
def operacoes_pessoa(self, op):
if op == "1":
nome = input("Nome: ")
self.bd.pessoas.inserir(Pessoa(self.proximo_id, nome))
self.proximo_id += 1
elif op == "2":
id_ = int(input("ID: "))
nome = input("Novo nome: ")
self.bd.pessoas.alterar(id_, Pessoa(id_, nome))
elif op == "3":
id_ = int(input("ID: "))
self.bd.pessoas.remover(id_)
elif op == "4":
id_ = int(input("ID: "))
print(self.bd.pessoas.buscar_por_id(id_))
elif op == "5":
print(self.bd.pessoas)
def operacoes_pet(self, op):
if op == "1":
nome = input("Nome do pet: ")
especie = input("Espécie: ")
self.bd.pets.inserir(Pet(self.proximo_id, nome, especie))
self.proximo_id += 1
elif op == "2":
id_ = int(input("ID: "))
nome = input("Novo nome: ")
especie = input("Nova espécie: ")
self.bd.pets.alterar(id_, Pet(id_, nome, especie))
elif op == "3":
id_ = int(input("ID: "))
self.bd.pets.remover(id_)
elif op == "4":
id_ = int(input("ID: "))
print(self.bd.pets.buscar_por_id(id_))
elif op == "5":
print(self.bd.pets)
def menu_adocao(self):
while True:
print("\n=== Menu Adoções ===")
print("1. Nova Adoção")
print("2. Visualizar por ID")
print("3. Visualizar todas")
print("0. Voltar")
op = input("Escolha: ")
if op == "1":
self.nova_adocao()
elif op == "2":
id_ = int(input("ID da adoção: "))
print(self.bd.adocoes.buscar_por_id(id_))
elif op == "3":
print(self.bd.adocoes)
elif op == "0":
break
def nova_adocao(self):
try:
id_pessoa = int(input("ID do adotante: "))
pessoa = self.bd.pessoas.buscar_por_id(id_pessoa)
adocao = Adocao(self.proximo_id, pessoa)
self.proximo_id += 1
while True:
print("1. Adicionar pet")
print("0. Finalizar")
opc = input("Escolha: ")
if opc == "1":
id_pet = int(input("ID do pet: "))
pet = self.bd.pets.buscar_por_id(id_pet)
data = input("Data da adoção: ")
adocao.adicionar_item(ItemAdocao(pet, data))
elif opc == "0":
break
self.bd.adocoes.inserir(adocao)
except EntidadeNaoEncontradaException as e:
print("Erro:", e)