from srcs.exceptions import EstoqueVazioError, ProdutoNaoEncontradoError, ProdutoNaoExisteError, QuantidadeInvalidaError
class Estoque:
"""Gerencia o estoque de produtos."""
def __init__(self):
"""Inicializa um novo estoque vazio."""
self._estoque = {}
def adicionar_produto(self, produto, quantidade):
"""Adiciona um produto ao estoque.
Args:
produto (str): O nome do produto.
quantidade (int): A quantidade do produto.
Raises:
QuantidadeInvalidaError: Se a quantidade for menor ou igual a zero.
"""
if quantidade <= 0:
raise QuantidadeInvalidaError("Qunatidade deve ser maior quer zero")
self._estoque[produto] = quantidade
def atualizar_produto(self, produto, nova_quantidade):
"""Atualiza a quantidade de um produto no estoque.
Args:
produto (str): O nome do produto a ser atualizado.
nova_quantidade (int): A nova quantidade do produto.
Raises:
ProdutoNaoExisteError: Se o produto não existir no estoque.
"""
if not produto in self._estoque:
raise ProdutoNaoExisteError("Produto não existe no estoque")
self._estoque[produto] = nova_quantidade
@property
def visualizar_estoque(self):
"""Retorna o dicionário de estoque.
Returns:
dict: O estoque atual.
Raises:
EstoqueVazioError: Se o estoque estiver vazio.
"""
if not self._estoque:
raise EstoqueVazioError("\nEstoque vazio")
return self._estoque
def remover_produto(self, produto):
"""Remove um produto do estoque.
Args:
produto (str): O nome do produto a ser removido.
Raises:
ProdutoNaoEncontradoError: Se o produto não for encontrado no estoque.
"""
if not produto in self._estoque:
raise ProdutoNaoEncontradoError(" Produto não encontrado")
del self._estoque[produto]
class EstoqueError(Exception):
"""Classe base para exceções de estoque."""
pass
class EstoqueVazioError(EstoqueError):
"""Exceção para quando o estoque está vazio."""
pass
class ProdutoNaoEncontradoError(EstoqueError):
"""Exceção para quando um produto não é encontrado."""
pass
class ProdutoNaoExisteError(EstoqueError):
"""Exceção para quando um produto não existe no estoque."""
pass
class QuantidadeInvalidaError(EstoqueError):
"""Exceção para quantidade de produto inválida."""
pass
from srcs.exceptions import EstoqueError
from srcs.estoque import Estoque
def menu():
"""Exibe o menu de opções do controle de estoque.
Returns:
None
"""
print("\n Controle de Estoque")
print("\n1. Adicionar produto")
print("2. Atualizar produto")
print("3. Ver estoque")
print("4. Remover produto")
print("5. sair")
def main():
"""Função principal que gerencia o controle de estoque.
Raises:
ValueError: Se a opção ou quantidade não for um número válido.
EstoqueError: Para erros relacionados à lógica de estoque.
"""
estoque = Estoque()
while True:
try:
menu()
opcao = int(input("\nEscolha uma opção: "))
if opcao == 5:
print("Saindo...")
break
match opcao:
case 1:
nome = input("Nome do produto: ")
qtd = int(input("Quantidade: "))
estoque.adicionar_produto(nome, qtd)
print("Produto adicionado com sucesso.")
case 2:
nome = input("Nome do produto: ")
qtd = int(input("Nova quantidade: "))
estoque.atualizar_produto(nome, qtd)
print("Produto atualizado.")
case 3:
print("\nEstoque Atual")
print("\n".join(f"{p} - {q}" for p, q in estoque.visualizar_estoque.items()))
case 4:
nome = input("Nome do produto a remover: ")
estoque.remover_produto(nome)
print("Produto removido.")
case _:
print("Opção inválida. Digite entre 1 e 5.")
# --- TRATAMENTO DE ERROS ---
except ValueError:
print("Erro: Digite apenas números válidos!")
except EstoqueError as erro:
print(erro)
if __name__ == '__main__':
main()