from typing import List

# Classe Pedido
class Pedido:
    nome: str
    telefone: int
    nr_contrato: int

    def __init__(self, nome=None, telefone=None, nr_contrato=None):
        self.nome = nome
        self.telefone = telefone
        self.nr_contrato = nr_contrato

    def __str__(self):
        return f"Nome: {self.nome}, Telefone: {self.telefone}, Contrato: {self.nr_contrato}"

# Classe ProdigiFila (implementação da fila circular)
class ProdigiFila:
    inicio: int
    fim: int
    dimensao: int
    elementos: List[Pedido]

    def __init__(self, num_elementos=10):
        self.inicio = 0
        self.fim = 0
        self.dimensao = 0
        self.tamanho_max = num_elementos
        self.elementos = [None] * num_elementos  # Lista inicializada com posições vazias

    # Mostrar todos os pedidos
    def prodigiShowList(self):
        if self.dimensao == 0:
            print("A fila está vazia!")
            return
        n = 1
        i = self.inicio
        while n <= self.dimensao:
            print(f"{n}. {self.elementos[i]}")
            i = (i + 1) % self.tamanho_max
            n += 1

    # Adicionar um novo pedido ao fim da fila
    def prodigiAppend(self, pedido):
        if self.dimensao == self.tamanho_max:
            print("Fila cheia! Não é possível adicionar mais pedidos.")
            return
        self.elementos[self.fim] = pedido
        self.fim = (self.fim + 1) % self.tamanho_max
        self.dimensao += 1
        print("Pedido registado com sucesso.")

    # Remover e devolver o pedido do início da fila
    def prodigiPop(self):
        if self.dimensao == 0:
            print("A fila está vazia! Não há pedidos para atender.")
            return None
        pedido = self.elementos[self.inicio]
        self.elementos[self.inicio] = None
        self.inicio = (self.inicio + 1) % self.tamanho_max
        self.dimensao -= 1
        return pedido

    # Ver o próximo pedido da fila sem remover
    def prodigiPeek(self):
        if self.dimensao == 0:
            print("A fila está vazia!")
            return None
        return self.elementos[self.inicio]

# Função para mostrar o menu
def mostra_menu():
    print("\n=== Menu de Comandos ===")
    print("1. Listar pedidos")
    print("2. Registar pedido")
    print("3. Atender pedido")
    print("4. Mostrar próximo pedido")
    print("5. Sair")

# Função principal
def main():
    listaPedidos = ProdigiFila()

    while True:
        mostra_menu()
        escolha = input("Escolha uma opção (1-5): ")

        if escolha == '1':
            if listaPedidos.dimensao != 0:
                print("\nLista de pedidos:")
                listaPedidos.prodigiShowList()
            else:
                print("Lista de pedidos vazia!")

        elif escolha == '2':
            nome = input("Nome do cliente: ")
            telefone = input("Telefone do cliente: ")
            nr_contrato = input("Número do contrato: ")
            pedido = Pedido(nome, telefone, nr_contrato)
            listaPedidos.prodigiAppend(pedido)

        elif escolha == '3':
            pedido_atendido = listaPedidos.prodigiPop()
            if pedido_atendido:
                print(f"Pedido atendido: {pedido_atendido}")

        elif escolha == '4':
            proximo_pedido = listaPedidos.prodigiPeek()
            if proximo_pedido:
                print(f"Próximo pedido: {proximo_pedido}")

        elif escolha == '5':
            print("Terminando o programa. Adeus!")
            break

        else:
            print("Opção inválida. Escolha por favor 1-5.")

# Chamamos a função principal
main()

Embed on website

To embed this program on your website, copy the following code and paste it into your website's HTML: