Projeto 4 - Aplicativo de pizzaria
Componentes: Iohana Linzmeyer
Objetivos: O objetivo do projeto é apresentar um aplicativo para a compra de uma pizza contendo informações como os sabores da pizza, o tamanho, o valor, a entrega entre outras coisas.
Metodologia de desenvolvimento: Foi realizado o código usando a programação orientada a objetos contendo os requisitos como encapsulamento, herança e etc.
Projeto 4 - código fonte
class Cliente:
def __init__(self, nome, telefone, endereco):
self.nome = nome
self.telefone = telefone
self.endereco = endereco
def fazer_pedido(self, pizzas):
pedido = Pedido(self, pizzas)
return pedido
class Pizza:
def __init__(self, tamanho):
self.__tamanho = tamanho
self.__sabores = []
self.__valor_base = {'P': 20.0, 'M': 30.0, 'G': 40.0}
self.__valor_adicional = 5.0
self.__formas_pagamento = ['Dinheiro', 'Cartão de crédito', 'Cartão de débito', 'Pix']
self.__opcoes_retirada = ['Balcão', 'Entrega em casa']
self.__valor_entrega = 10.0
def add_sabor(self, sabor):
if len(self.__sabores) < self.__max_sabores():
self.__sabores.append(sabor)
return True
return False
def rmv_sabor(self, sabor):
if sabor in self.__sabores:
self.__sabores.remove(sabor)
def __max_sabores(self):
if self.__tamanho == 'P':
return 2
elif self.__tamanho == 'M':
return 3
elif self.__tamanho == 'G':
return 4
return 0
def calc_total(self):
valor_total = self.__valor_base[self.__tamanho]
if len(self.__sabores) > self.__max_sabores():
return None
valor_total += len(self.__sabores) * self.__valor_adicional
return valor_total
def calc_entrega(self, opcao_retirada):
return self.__valor_entrega if opcao_retirada == 'Entrega em casa' else 0.0
def get_sabores_disponiveis(self):
return [
'4 queijos', 'Pepperoni', 'Napolitana', 'Lombinho', 'Alho e óleo',
'Palmito', 'Camarão', 'Bacon', 'California', 'Vegetariana'
]
def get_pagamento(self):
return self.__formas_pagamento
def get_retirada(self):
return self.__opcoes_retirada
def get_tamanho(self):
return self.__tamanho
def get_sabores(self):
return self.__sabores
def descricao_tipo(self):
return f"Esta é uma pizza normal de tamanho {self.__tamanho}"
class PizzaSalgada(Pizza):
def __init__(self, tamanho):
super().__init__(tamanho)
def get_sabores_disponiveis(self):
return super().get_sabores_disponiveis()
def descricao_tipo(self):
return f"Esta é uma pizza salgada de tamanho {self.get_tamanho()}"
class PizzaDoce(Pizza):
def __init__(self, tamanho):
super().__init__(tamanho)
self.__sabores_disponiveis = [
'Chocolate', 'Prestígio', 'Romeu e Julieta', 'Sensação', 'Beijinho'
]
def get_sabores_disponiveis(self):
return self.__sabores_disponiveis
def descricao_tipo(self):
return f"Esta é uma pizza doce de tamanho {self.get_tamanho()}"
class Pedido:
def __init__(self, cliente, pizzas):
self.cliente = cliente
self.pizzas = pizzas
self.total_pizza = sum(pizza.calc_total() for pizza in pizzas)
self.frete = None
def calcular_total(self, distancia_km):
frete = self.calcular_frete(distancia_km)
self.frete = frete
self.total = self.total_pizza + frete
@staticmethod
def calcular_frete(distancia_km):
return 10.0 * distancia_km
# Menu interativo
def exibir_menu_pizza():
print("===== Bem-vindo à Pizzaria =====")
tipo_pizza = input("Escolha o tipo de pizza (Normal/Salgada/Doce): ").capitalize()
tamanho = input("Escolha o tamanho da pizza (P/M/G): ").upper()
if tipo_pizza == "Salgada":
pizza_cliente = PizzaSalgada(tamanho)
elif tipo_pizza == "Doce":
pizza_cliente = PizzaDoce(tamanho)
else:
pizza_cliente = Pizza(tamanho)
print("\nSabores disponíveis:")
for i, sabor in enumerate(pizza_cliente.get_sabores_disponiveis(), 1):
print(f"{i}. {sabor}")
while True:
sabor = input("\nEscolha um sabor pelo número (ou digite 'sair' para terminar): ")
if sabor.lower() == 'sair':
break
if not sabor.isdigit() or int(sabor) < 1 or int(sabor) > len(pizza_cliente.get_sabores_disponiveis()):
print("Escolha inválida, tente novamente.")
else:
if pizza_cliente.add_sabor(pizza_cliente.get_sabores_disponiveis()[int(sabor) - 1]):
print("Sabor adicionado com sucesso!")
else:
print("Não é possível adicionar mais sabores para o tamanho escolhido.")
valor_total = pizza_cliente.calc_total()
print("\nFormas de pagamento disponíveis:")
for i, forma in enumerate(pizza_cliente.get_pagamento(), 1):
print(f"{i}. {forma}")
forma_pagamento = input("Escolha a forma de pagamento pelo número: ")
print("\nOpções de retirada:")
for i, opcao in enumerate(pizza_cliente.get_retirada(), 1):
print(f"{i}. {opcao}")
opcao_retirada = input("Escolha a opção de retirada pelo número: ")
valor_entrega = pizza_cliente.calc_entrega(pizza_cliente.get_retirada()[int(opcao_retirada) - 1])
observacao_cliente = input("Alguma observação para o pedido? ")
print("\n===== Resumo do Pedido =====")
print(f"Tamanho da pizza: {pizza_cliente.get_tamanho()}")
print(f"Sabores escolhidos: {pizza_cliente.get_sabores()}")
print(f"Valor total da pizza: R$ {valor_total:.2f}")
print(f"Valor da entrega: R$ {valor_entrega:.2f}")
print(f"Forma de pagamento: {pizza_cliente.get_pagamento()[int(forma_pagamento) - 1]}")
print(f"Opção de retirada: {pizza_cliente.get_retirada()[int(opcao_retirada) - 1]}")
print(f"Observação do cliente: {observacao_cliente}")
print(f"Descrição do tipo de pizza: {pizza_cliente.descricao_tipo()}")
exibir_menu_pizza()