diff --git a/main.py b/main.py new file mode 100644 index 0000000..b7922ed --- /dev/null +++ b/main.py @@ -0,0 +1,5 @@ +from visao.interface_texto import InterfaceTexto + +if __name__ == "__main__": + interface = InterfaceTexto() + interface.executar() diff --git a/modelo/adocao.py b/modelo/adocao.py new file mode 100644 index 0000000..f1faa50 --- /dev/null +++ b/modelo/adocao.py @@ -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 diff --git a/modelo/entidade.py b/modelo/entidade.py new file mode 100644 index 0000000..d270323 --- /dev/null +++ b/modelo/entidade.py @@ -0,0 +1,6 @@ +class Entidade: + def __init__(self, id_): + self.id = id_ + + def __str__(self): + return f"ID: {self.id}" diff --git a/modelo/item_adocao.py b/modelo/item_adocao.py new file mode 100644 index 0000000..6858906 --- /dev/null +++ b/modelo/item_adocao.py @@ -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}" diff --git a/modelo/pessoa.py b/modelo/pessoa.py new file mode 100644 index 0000000..4cd7c27 --- /dev/null +++ b/modelo/pessoa.py @@ -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}" diff --git a/modelo/pet.py b/modelo/pet.py new file mode 100644 index 0000000..f586cc8 --- /dev/null +++ b/modelo/pet.py @@ -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}" diff --git a/persistencia/banco_dados.py b/persistencia/banco_dados.py new file mode 100644 index 0000000..1f78fc0 --- /dev/null +++ b/persistencia/banco_dados.py @@ -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() diff --git a/persistencia/excecoes.py b/persistencia/excecoes.py new file mode 100644 index 0000000..b3deda3 --- /dev/null +++ b/persistencia/excecoes.py @@ -0,0 +1,2 @@ +class EntidadeNaoEncontradaException(Exception): + pass diff --git a/persistencia/persistente.py b/persistencia/persistente.py new file mode 100644 index 0000000..95f62f2 --- /dev/null +++ b/persistencia/persistente.py @@ -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) diff --git a/visao/interface_texto.py b/visao/interface_texto.py new file mode 100644 index 0000000..1413274 --- /dev/null +++ b/visao/interface_texto.py @@ -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)