class PainelAtendimento:
    def __init__(self):
        self.fila = Fila()
        self.removidas = []

    def obtem_senha(self):
        if self.fila.is_empty():
            nova_senha = 0
            self.fila.enqueue(0)
        else:
            nova_senha = self.fila.front() + len(self.fila)
            self.fila.enqueue(nova_senha)
        return nova_senha

    def chama_proxima_senha(self):
        if self.fila.is_empty():
            senha_atendida = None
        else:
            proxima_senha = self.fila.front()
            self.removidas.append(proxima_senha)
            senha_atendida = proxima_senha
            self.fila.dequeue()
        return senha_atendida

    def mostra_senhas_chamadas(self):
        if len(self.removidas) == 0:
            return None
        else:
            return self.removidas

    def run(self):
        while True:
            try:
                print("Olá, bem-vindo(a) ao painel de atendimento! \n")
                opcao = int(
                    input(
                        "Escolha uma das opções abaixo:\n 1 - Obter senha.\n 2 - Chamar próxima senha.\n 3 - Mostar as senhas chamadas.\n 4 - Encerrar sistema.\n"
                    ))
                if opcao == 1:
                    senha = self.obtem_senha()
                    print(f"Sua senha é: {senha}\n")
                elif opcao == 2:
                    proxima_senha = self.chama_proxima_senha()
                    if proxima_senha == None:
                        print(
                            "Ainda não há nenhuma senha salva, ou todas já foram chamadas. Por gentileza cadastre uma senha.\n"
                        )
                    else:
                        print(f"A senha chamada foi: {proxima_senha}.\n")
                elif opcao == 3:
                    removidas = self.mostra_senhas_chamadas
                    if removidas == None:
                        print("Nenhuma senha foi removida até o momento.\n")
                    else:
                        print(f"As senhas chamadas foram: {self.removidas}.\n")
                elif opcao == 4:
                    print("Obrigada por utilizar o sistema!!")
                    break
            except:
                print("Opção inválida, tente novamente!")
예제 #2
0
 def test_str_n_elements_queue(self):
     """Uma fila com n elementos imprime todos os elementos"""
     """Nossa implementação insere no começo e retira no final,
     mas também é possível inserir no final e retirar no começo"""
     fila = Fila()
     fila.enqueue(1)
     fila.enqueue(2)
     fila.enqueue(3)
     fila.enqueue(4)
     self.assertEqual(str(fila), "[4, 3, 2, 1]")
예제 #3
0
 def test__eq__n_elements_queues(self):
     """Duas filas com os mesmos elementos são iguais"""
     x = randint(100, 500)
     fila1 = Fila()
     fila2 = Fila()
     for i in range(0, x):
         element = randint(0, self.MAX_VALUE)
         fila1.enqueue(element)
         fila2.enqueue(element)
         self.assertEqual(fila1, fila2)
     self.assertEqual(fila1, fila2)
예제 #4
0
 def test_enqueue_dequeue_1(self):
     """teste de integração pipeline de filas"""
     fila1 = Fila()
     fila2 = Fila()
     fila3 = Fila()
     fila4 = Fila()
     for i in range(0, self.max):
         fila1.enqueue(i)
         fila2.enqueue(fila1.dequeue())
         fila3.enqueue(fila2.dequeue())
         fila4.enqueue(fila3.dequeue())
         self.assertEqual(i, fila4.dequeue())
예제 #5
0
class TesteFila(unittest.TestCase):
    def setUp(self):
        """Esse método é invocado antes de cada Teste. Prepara o ambiente"""
        self.MAX_VALUE = 10000
        self.fila_vazia = Fila()
        self.x = randint(0, maxsize)
        self.fila_um = Fila()
        self.fila_um.enqueue(self.x)
        self.max = randint(100, 500)
        self.fila = Fila()
        self.fila.enqueue(self.x)
        self.fila_limite = Fila(self.max)
        self.python_deque = deque()
        for i in range(0, self.max):
            element = randint(0, self.MAX_VALUE)
            self.python_deque.append(element)
            self.fila_limite.enqueue(element)

    def test_construtor(self):
        """O construtor deve receber um valor max ou None"""
        self.assertIsInstance(self.fila_um, Fila)
        self.assertIsInstance(self.fila_vazia, Fila)
        self.assertIsInstance(self.fila, Fila)
        self.assertIsInstance(self.fila_limite, Fila)

    def test_bool_false(self):
        """Uma Fila Vazia retorna False"""
        self.assertFalse(bool(self.fila_vazia))
        self.assertFalse(self.fila_vazia)
        self.assertFalse(self.fila_vazia.__bool__())

    def test_bool_true(self):
        """Uma Fila com 1 elemento  retorna True"""
        self.assertTrue(bool(self.fila_um))
        self.assertTrue(self.fila_um)
        self.assertTrue(self.fila_um.__bool__())

    def test_empty_queue(self):
        """Uma Fila Vazia retorna True para is_empty"""
        self.assertTrue(self.fila_vazia.is_empty())

    def test_not_empty_queue(self):
        """Uma Fila Não Vazia retorna False para is_empty"""
        self.assertFalse(self.fila_um.is_empty())

    def test_len_empty_queue(self):
        """Uma Fila Vazia tem tamanho 0"""
        self.assertEqual(len(self.fila_vazia), 0)

    def test_len_one_element_queue(self):
        """Uma Fila com 1 elemento tem tamanho 1"""
        self.assertEqual(len(self.fila_um), 1)

    #Este Teste só funciona quando enqueue tiver sido implementado
    def test_len_arbitrary_size_queue(self):
        """Uma Fila com n elementos tem tamanho n"""
        self.assertEqual(len(self.fila_limite), self.max)

    def test_first_empty_queue(self):
        """Uma Fila vazia retorna uma Exceção quando first é invocado"""
        with self.assertRaises(Exception):
            self.fila_vazia.first()

    def test_first_one_element_queue(self):
        """Uma Fila com 1 elemento retorna o elemento com first"""
        self.assertEqual(self.fila_um.first(), self.x)

    def test_first_n_elements_queue(self):
        """Uma Fila com n elementos retorna o primeiro a ter sido inserido com first"""
        self.assertEqual(self.fila_limite.first(), self.python_deque.popleft())

    def test_first_doesnt_change_queue_len(self):
        """O método first é idempotente e não altera o tamanho da fila"""
        size = len(self.fila_limite)
        self.assertEqual(len(self.fila_limite), size)
        self.fila_limite.first()
        self.fila_limite.first()
        self.fila_limite.first()
        self.fila_limite.first()
        self.fila_limite.first()
        self.assertEqual(len(self.fila_limite), size)

    def test_last_empty_queue(self):
        """Uma Fila vazia retorna uma Exceção quando last é invocado"""
        with self.assertRaises(Exception):
            self.fila_vazia.last()

    def test_last_one_element_queue(self):
        """Uma Fila com 1 elemento retorna o elemento com last"""
        self.assertEqual(self.fila_um.last(), self.x)

    def test_last_n_elements_queue(self):
        """Uma Fila com n elementos retorna o último a ter sido inserido com last"""
        self.assertEqual(self.fila_limite.last(), self.python_deque.pop())

    def test_last_doesnt_change_queue_len(self):
        """O método last é idempotente e não altera o tamanho da fila"""
        size = len(self.fila_limite)
        self.assertEqual(len(self.fila_limite), size)
        self.fila_limite.last()
        self.fila_limite.last()
        self.fila_limite.last()
        self.fila_limite.last()
        self.fila_limite.last()
        self.assertEqual(len(self.fila_limite), size)

    def test__eq__empty_queues(self):
        """Duas filas vazias são iguais"""
        self.assertEqual(Fila(), Fila())
        #o argumento é a capacidade da fila
        self.assertEqual(Fila(5), Fila(10))

    def test__eq__n_elements_queues(self):
        """Duas filas com os mesmos elementos são iguais"""
        x = randint(100, 500)
        fila1 = Fila()
        fila2 = Fila()
        for i in range(0, x):
            element = randint(0, self.MAX_VALUE)
            fila1.enqueue(element)
            fila2.enqueue(element)
            self.assertEqual(fila1, fila2)
        self.assertEqual(fila1, fila2)

    def test_str_empty_queue(self):
        """Uma fila vazia deve ser representada pela string []"""
        self.assertEqual(str(self.fila_vazia), "[]")

    def test_str_one_element_queue(self):
        """Uma fila com somente um elemento x deve ser representada por [x]"""
        self.assertEqual(str(self.fila_um), "[" + str(self.x) + "]")

    def test_str_n_elements_queue(self):
        """Uma fila com n elementos imprime todos os elementos"""
        """Nossa implementação insere no começo e retira no final,
        mas também é possível inserir no final e retirar no começo"""
        fila = Fila()
        fila.enqueue(1)
        fila.enqueue(2)
        fila.enqueue(3)
        fila.enqueue(4)
        self.assertEqual(str(fila), "[4, 3, 2, 1]")

    def test_clear_remove_all_elements(self):
        """clear remove todos os elementos da fila"""
        self.assertEqual(len(self.fila_vazia), 0)
        self.assertNotEqual(len(self.fila_um), 0)
        self.assertNotEqual(len(self.fila_limite), 0)

        self.fila_vazia.clear()
        self.fila_um.clear()
        self.fila_limite.clear()

        self.assertEqual(len(self.fila_vazia), 0)
        self.assertEqual(len(self.fila_um), 0)
        self.assertEqual(len(self.fila_limite), 0)

    def test_enqueue(self):
        """enqueue aumenta o tamanho da fila em 1"""
        element = randint(0, self.MAX_VALUE)
        self.assertEqual(len(self.fila_vazia), 0)
        self.assertEqual(len(self.fila_um), 1)
        self.fila_vazia.enqueue(element)
        self.fila_um.enqueue(element)
        self.assertEqual(len(self.fila_vazia), 1)
        self.assertEqual(len(self.fila_um), 2)

    def test_enqueue_full_queue(self):
        """enqueue numa lista cheia gera um erro"""
        with self.assertRaises(Exception):
            element = randint(0, self.MAX_VALUE)
            self.fila_limite.enqueue(element)

    def test_dequeue(self):
        """dequeue diminui o tamanho da fila em 1"""
        self.assertEqual(len(self.fila_um), 1)
        self.fila_um.dequeue()
        self.assertEqual(len(self.fila_um), 0)
        self.assertEqual(self.fila_um, Fila())

        size = len(self.fila_limite)
        self.fila_limite.dequeue()
        self.assertEqual(len(self.fila_limite), size - 1)

    def test_dequeue_empty_queue(self):
        """dequeue numa lista vazia gera um erro"""
        with self.assertRaises(Exception):
            self.fila_vazia.dequeue()

    def test_enqueue_dequeue_1(self):
        """teste de integração pipeline de filas"""
        fila1 = Fila()
        fila2 = Fila()
        fila3 = Fila()
        fila4 = Fila()
        for i in range(0, self.max):
            fila1.enqueue(i)
            fila2.enqueue(fila1.dequeue())
            fila3.enqueue(fila2.dequeue())
            fila4.enqueue(fila3.dequeue())
            self.assertEqual(i, fila4.dequeue())