import json
import os
from datetime import datetime, timedelta
ARQUIVO = 'produtos.json'
def carregar_produtos():
if os.path.exists(ARQUIVO):
with open(ARQUIVO, 'r', encoding='utf-8') as file:
try:
produtos = json.load(file)
for produto in produtos:
produto['validade'] = datetime.strptime(produto['validade'], '%d/%m/%Y')
return produtos
except json.JSONDecodeError:
print("Erro ao decodificar o arquivo JSON.")
return []
return []
def salvar_produtos(produtos):
produtos_a_salvar = []
for produto in produtos:
produtos_a_salvar.append({
'nome': produto['nome'],
'validade': produto['validade'].strftime('%d/%m/%Y')
})
with open(ARQUIVO, 'w', encoding='utf-8') as file:
json.dump(produtos_a_salvar, file, ensure_ascii=False, indent=4)
def adicionar_produto(produtos):
nome = input("Digite o nome do produto: ").strip()
while True:
data_validade = input("Digite a data de validade (DD/MM/AAAA): ").strip()
try:
validade = datetime.strptime(data_validade, '%d/%m/%Y')
break
except ValueError:
print("Formato de data inválido. Por favor, tente novamente.")
produtos.append({'nome': nome, 'validade': validade})
salvar_produtos(produtos)
print(f"Produto '{nome}' adicionado com sucesso!\n")
def listar_produtos(produtos):
if not produtos:
print("Nenhum produto cadastrado.\n")
return
print("Lista de Produtos:")
print("{:<30} {:<15} {:<10}".format("Nome", "Validade", "Status"))
print("-" * 55)
hoje = datetime.now()
for produto in produtos:
nome = produto['nome']
validade = produto['validade']
status = ""
if validade < hoje:
status = "Vencido"
elif validade <= hoje + timedelta(days=7):
status = "Vencendo"
else:
status = "Ok"
print("{:<30} {:<15} {:<10}".format(nome, validade.strftime('%d/%m/%Y'), status))
print()
def verificar_vencimentos(produtos):
hoje = datetime.now()
vencidos = [p for p in produtos if p['validade'] < hoje]
vencendo = [p for p in produtos if hoje <= p['validade'] <= hoje + timedelta(days=7)]
if vencidos:
print("Produtos Vencidos:")
for p in vencidos:
print(f"- {p['nome']} (Vencido em {p['validade'].strftime('%d/%m/%Y')})")
else:
print("Nenhum produto vencido.")
print()
if vencendo:
print("Produtos Vencendo em até 7 dias:")
for p in vencendo:
dias_restantes = (p['validade'] - hoje).days
print(f"- {p['nome']} (Vence em {dias_restantes} dias, em {p['validade'].strftime('%d/%m/%Y')})")
else:
print("Nenhum produto vencendo em breve.")
print()
def remover_produto(produtos):
nome = input("Digite o nome do produto que deseja remover: ").strip()
encontrados = [p for p in produtos if p['nome'].lower() == nome.lower()]
if not encontrados:
print(f"Produto '{nome}' não encontrado.\n")
return
produtos = [p for p in produtos if p['nome'].lower() != nome.lower()]
salvar_produtos(produtos)
print(f"Produto '{nome}' removido com sucesso!\n")
return produtos
def menu():
produtos = carregar_produtos()
while True:
print("===== Verificador de Data de Validade de Produtos =====")
print("1. Adicionar Produto")
print("2. Listar Produtos")
print("3. Verificar Vencimentos")
print("4. Remover Produto")
print("5. Sair")
opcao = input("Escolha uma opção: ").strip()
if opcao == '1':
adicionar_produto(produtos)
elif opcao == '2':
listar_produtos(produtos)
elif opcao == '3':
verificar_vencimentos(produtos)
elif opcao == '4':
produtos = remover_produto(produtos) or produtos
elif opcao == '5':
print("Saindo do programa. Até mais!")
break
else:
print("Opção inválida. Por favor, tente novamente.\n")
if __name__ == "__main__":
menu()