# Programa de Bônus para Clube
Vou criar um sistema de bônus para um clube, onde os membros acumulam pontos por suas atividades e podem trocá-los por recompensas.
“`python
import json
import datetime
from typing import Dict, List, Optional
class Membro:
def __init__(self, id_membro: int, nome: str, nivel: str = “Bronze”):
self.id_membro = id_membro
self.nome = nome
self.nivel = nivel
self.pontos = 0
self.historico = []
def adicionar_pontos(self, pontos: int, motivo: str):
“””Adiciona pontos ao membro e registra no histórico”””

self.pontos += pontos
self.historico.append({
‘data’: datetime.datetime.now().strftime(“%d/%m/%Y %H:%M”),
‘pontos’: pontos,
‘motivo’: motivo,
‘saldo’: self.pontos
})
# Atualizar nível baseado nos pontos
self.atualizar_nivel()
def resgatar_pontos(self, pontos: int, recompensa: str):
“””Resgata pontos por uma recompensa”””
if pontos > self.pontos:
return False, “Pontos insuficientes”
self.pontos -= pontos
self.historico.append({
‘data’: datetime.datetime.now().strftime(“%d/%m/%Y %H:%M”),
‘pontos’: -pontos,
‘motivo’: f”Resgate: {recompensa}”,
‘saldo’: self.pontos
})
# Atualizar nível após resgate
self.atualizar_nivel()
return True, f”Resgate realizado! Você resgatou {recompensa}”
def atualizar_nivel(self):
“””Atualiza o nível do membro baseado nos pontos acumulados”””
if self.pontos >= 5000:
self.nivel = “Diamante”
elif self.pontos >= 2000:
self.nivel = “Ouro”
elif self.pontos >= 500:
self.nivel = “Prata”
else:
self.nivel = “Bronze”
def obter_info(self):
“””Retorna informações do membro”””
return {
‘id’: self.id_membro,
‘nome’: self.nome,
‘nivel’: self.nivel,
‘pontos’: self.pontos,
‘historico’: self.historico[-10:] # Últimas 10 transações
}
class ProgramaBonus:
def __init__(self):
self.membros: Dict[int, Membro] = {}
self.recompensas = {
100: “Café grátis”,
250: “Camiseta do clube”,
500: “Ingresso para evento”,
1000: “Jantar especial”,
2000: “Fim de semana em resort”,
5000: “Viagem internacional”
}
self.proximo_id = 1
def cadastrar_membro(self, nome: str) -> Membro:
“””Cadastra um novo membro no programa”””
membro = Membro(self.proximo_id, nome)
self.membros[self.proximo_id] = membro
self.proximo_id += 1
return membro
def buscar_membro(self, id_membro: int) -> Optional[Membro]:
“””Busca um membro pelo ID”””
return self.membros.get(id_membro)
def listar_recompensas(self):
“””Lista todas as recompensas disponíveis”””
print(“\n” + “=”*50)
print(“RECOMPENSAS DISPONÍVEIS”)
print(“=”*50)
for pontos, recompensa in sorted(self.recompensas.items()):
print(f” {pontos:5d} pontos: {recompensa}”)
print(“=”*50)
def listar_membros(self):
“””Lista todos os membros cadastrados”””
print(“\n” + “=”*50)
print(“MEMBROS DO CLUBE”)
print(“=”*50)
for membro in self.membros.values():
info = membro.obter_info()
print(f”ID: {info[‘id’]} | {info[‘nome’]:20} | Nível: {info[‘nivel’]:10} | Pontos: {info[‘pontos’]}”)
print(“=”*50)
def exibir_menu(self):
“””Exibe o menu principal”””
print(“\n” + “=”*50)
print(“PROGRAMA DE BÔNUS – CLUBE EXCLUSIVO”)
print(“=”*50)
print(“1. Cadastrar novo membro”)
print(“2. Adicionar pontos a um membro”)
print(“3. Resgatar recompensa”)
print(“4. Consultar informações do membro”)
print(“5. Listar todos os membros”)
print(“6. Listar recompensas disponíveis”)
print(“7. Sair”)
print(“=”*50)
def executar(self):
“””Executa o programa principal”””
print(“Bem-vindo ao Programa de Bônus do Clube!”)
# Cadastro de alguns membros de exemplo
membros_exemplo = [“Ana Silva”, “Carlos Santos”, “Mariana Oliveira”]
for nome in membros_exemplo:
self.cadastrar_membro(nome)
# Adiciona pontos aleatórios para exemplo
import random
membro = self.membros[self.proximo_id – 1]
pontos_iniciais = random.randint(100, 1500)
membro.adicionar_pontos(pontos_iniciais, “Pontos iniciais”)
while True:
self.exibir_menu()
opcao = input(“\nDigite a opção desejada: “)

if opcao == “1”:
self.cadastrar_novo_membro()
elif opcao == “2”:
self.adicionar_pontos_membro()
elif opcao == “3”:
self.resgatar_recompensa()
elif opcao == “4”:
self.consultar_membro()
elif opcao == “5”:
self.listar_membros()
elif opcao == “6”:
self.listar_recompensas()
elif opcao == “7”:
print(“\nObrigado por usar o Programa de Bônus do Clube!”)
break
else:
print(“\nOpção inválida! Tente novamente.”)
def cadastrar_novo_membro(self):
“””Interface para cadastrar novo membro”””
print(“\n” + “-“*40)
print(“CADASTRO DE NOVO MEMBRO”)
print(“-“*40)
nome = input(“Digite o nome do novo membro: “).strip()
if nome:
membro = self.cadastrar_membro(nome)
print(f”\n✅ Membro cadastrado com sucesso!”)
print(f”ID: {membro.id_membro} | Nome: {membro.nome}”)
print(“Bem-vindo ao clube!”)
else:
print(“\n❌ Nome inválido!”)
def adicionar_pontos_membro(self):
“””Interface para adicionar pontos a um membro”””
print(“\n” + “-“*40)
print(“ADICIONAR PONTOS”)
print(“-“*40)
try:
id_membro = int(input(“Digite o ID do membro: “))
membro = self.buscar_membro(id_membro)
if not membro:
print(f”\n❌ Membro com ID {id_membro} não encontrado!”)
return
print(f”\nMembro encontrado: {membro.nome}”)
print(f”Pontos atuais: {membro.pontos} | Nível atual: {membro.nivel}”)
pontos = int(input(“\nQuantos pontos deseja adicionar? “))
motivo = input(“Motivo da adição de pontos (ex: Participação evento): “).strip()
if pontos <= 0:
print("\n❌ Quantidade de pontos deve ser positiva!")
return
membro.adicionar_pontos(pontos, motivo)
print(f"\n✅ {pontos} pontos adicionados com sucesso!")
print(f"Novo saldo: {membro.pontos} pontos")
print(f"Novo nível: {membro.nivel}")
except ValueError:
print("\n❌ Valor inválido! Digite um número.")
def resgatar_recompensa(self):
"""Interface para resgatar recompensa"""
print("\n" + "-"*40)
print("RESGATAR RECOMPENSA")
print("-"*40)
self.listar_recompensas()
try:
id_membro = int(input("\nDigite o ID do membro: "))
membro = self.buscar_membro(id_membro)
if not membro:
print(f"\n❌ Membro com ID {id_membro} não encontrado!")
return
print(f"\nMembro: {membro.nome}")
print(f"Pontos disponíveis: {membro.pontos}")
print(f"Nível atual: {membro.nivel}")
pontos_recompensa = int(input("\nDigite a quantidade de pontos da recompensa desejada: "))
if pontos_recompensa not in self.recompensas:
print(f"\n❌ Recompensa de {pontos_recompensa} pontos não encontrada!")
return
recompensa = self.recompensas[pontos_recompensa]
print(f"\nRecompensa selecionada: {recompensa}")
print(f"Custo: {pontos_recompensa} pontos")
confirmacao = input(f"\nConfirmar resgate? (S/N): ").strip().upper()
if confirmacao == "S":
sucesso, mensagem = membro.resgatar_pontos(pontos_recompensa, recompensa)
if sucesso:
print(f"\n✅ {mensagem}")
print(f"Saldo restante: {membro.pontos} pontos")
else:
print(f"\n❌ {mensagem}")
else:
print("\nResgate cancelado.")
except ValueError:
print("\n❌ Valor inválido! Digite um número.")
def consultar_membro(self):
"""Interface para consultar informações do membro"""
print("\n" + "-"*40)
print("CONSULTAR MEMBRO")
print("-"*40)
try:
id_membro = int(input("Digite o ID do membro: "))
membro = self.buscar_membro(id_membro)
if not membro:
print(f"\n❌ Membro com ID {id_membro} não encontrado!")
return
info = membro.obter_info()
print("\n" + "="*50)
print(f"INFORMAÇÕES DO MEMBRO")
print("="*50)
print(f"ID: {info['id']}")
print(f"Nome: {info['nome']}")
print(f"Nível: {info['nivel']}")
print(f"Pontos: {info['pontos']}")
if info['historico']:
print("\nÚLTIMAS TRANSAÇÕES:")
print("-"*50)
for transacao in info['historico']:
sinal = "+" if transacao['pontos'] > 0 else “”
print(f”{transacao[‘data’]}: {sinal}{transacao[‘pontos’]} pontos”)
print(f” Motivo: {transacao[‘motivo’]}”)
print(f” Saldo após: {transacao[‘saldo’]} pontos”)
print()
else:
print(“\nNenhuma transação registrada.”)
print(“=”*50)
except ValueError:
print(“\n❌ Valor inválido! Digite um número.”)
# Executar o programa
if __name__ == “__main__”:
programa = ProgramaBonus()
programa.executar()
“`
## Funcionalidades do Programa de Bônus:
### 1. **Sistema de Níveis**
– Bronze: 0-499 pontos
– Prata: 500-1999 pontos
– Ouro: 2000-4999 pontos
– Diamante: 5000+ pontos
### 2. **Recursos Principais**
– Cadastro de membros
– Acumulação de pontos por atividades
– Resgate de pontos por recompensas
– Histórico completo de transações
– Atualização automática de níveis
### 3. **Recompensas Disponíveis**
– 100 pontos: Café grátis
– 250 pontos: Camiseta do clube
– 500 pontos: Ingresso para evento
– 1000 pontos: Jantar especial
– 2000 pontos: Fim de semana em resort
– 5000 pontos: Viagem internacional
### 4. **Menu Interativo**
– Interface amigável via terminal
– Validação de entradas
– Feedback claro das operações
## Como Usar:
1. Execute o programa
2. Use o menu para navegar entre as opções
3. Cadastre membros e atribua pontos por participação em eventos, compras, etc.
4. Os membros podem resgatar pontos por recompensas
5. Consulte o histórico e status de cada membro
O sistema é totalmente funcional e pode ser expandido com:
– Persistência em banco de dados
– Interface web ou mobile
– Sistema de indicações com bônus
– Relatórios e estatísticas
– Integração com sistemas de pagamento

