Turma Online 33 | Semana 5 | 2024 | Professora Camila Ribeiro
Antes de começar, vamos organizar nosso setup.
- Fork esse repositório
- Clone o fork na sua máquina (Para isso basta abrir o seu terminal e digitar
git clone url-do-seu-repositorio-forkado) - Entre na pasta do seu repositório (Para isso basta abrir o seu terminal e digitar
cd nome-do-seu-repositorio-forkado) - Abra o VSCode e na pasta Projeto abra o arquivo main
Antes de começar a codar vamos dar uma olhada no modulo print_reprograma
Nessa aula vamos fazer um terminal de vendas (PDV), o pdv é responsavel por adicionar todos os produtos em uma compra e depois mostrar tudo o que foi vendido
Para isso vamos por partes. 💜
O que veremos na aula de hoje?
- P01/Imprimir Cabeçalho
- P02/Imprimir Rodapé
- P03/Sair do Sistema
- P04/Tratar erro
- P05/Imprimir Ajuda
- P06/Nova Compra
- P07/Imprimir Compra Mocada
- P08/Adicionar Produto
- P09/Fechar Compra
- P10/Encerar Caixa
- P11/Mudar Quantidade
Vamos começar imprimindo o cabeçalho, bem leve
import print_reprograma as pr
def imprimir_cabecalho():
"""Imprime o cabeçalho do PDV."""
pr.limpar() # Limpa a tela do terminal
pr.retangulo(
'{reprograma}\nProjeto Guiado 1\nTerminal de Vendas',
sv=1,
tamanho=100,
margem=10,
cor_texto='azul negrito',
cor_barra='magenta'
)
pr.separador(120, cor_texto='ciano')
# Chama a função para imprimir o cabeçalho
imprimir_cabecalho()Explicação:
- Importar
print_reprograma:import print_reprograma as pr: Importa o móduloprint_reprogramae o renomeia comoprpara facilitar o uso.
- Definir a função
imprimir_cabecalho():def imprimir_cabecalho():: Define uma função chamadaimprimir_cabecalho."""Imprime o cabeçalho do PDV.""": Documentação da função, explicando sua finalidade.
- Chamar funções do
print_reprograma:pr.limpar(): Chama a funçãolimpar()do móduloprint_reprogramapara limpar a tela do terminal.pr.retangulo(...): Chama a funçãoretangulo()para imprimir um retângulo com o texto do cabeçalho. Veja as opções de personalização:sv=1: Define se o texto deve ser centralizado (1) ou alinhado à esquerda (0).tamanho=100: Define a largura do retângulo.margem=10: Define a margem em torno do texto.cor_texto='azul negrito': Define a cor e o estilo do texto.cor_barra='magenta': Define a cor da barra do retângulo.
pr.separador(120, cor_texto='ciano'): Chama a funçãoseparador()para imprimir uma linha separadora com a corciano.
- Chamar a função
imprimir_cabecalho():imprimir_cabecalho(): Chama a funçãoimprimir_cabecalhopara executar o código dentro dela e imprimir o cabeçalho.
Observações:
- Você pode personalizar o cabeçalho da forma que desejar, alterando o texto, as cores, o tamanho e a margem.
- O módulo
print_reprogramaoferece diversas funções para formatar e organizar a saída no terminal. Explore as funções disponíveis na documentação do módulo.
Lembre-se:
- Certifique-se de que o módulo
print_reprogramaesteja instalado no seu ambiente Python. Se não estiver, use o comandopip install print-reprogramano terminal. - Você pode usar a função
imprimir_cabecalho()em outros pontos do seu código para exibir o cabeçalho sempre que necessário.
Nesse ponto vamos imprimir o rodapé e tambem vamos pegar o caracter do comando
import print_reprograma as pr
# ... (código do cabeçalho) ...
def imprimir_rodape():
"""Imprime o rodapé do PDV e retorna a opção do usuário."""
pr.imprimir('[H] Ajuda ', '[Q] Sair ', caracter='═', tamanho=115, alinhar='fim', end='╣')
return input().lower()
# ... (restante do código) ...Explicação:
-
Importar
print_reprograma:import print_reprograma as pr: Importa o móduloprint_reprogramae o renomeia comoprpara facilitar o uso.
-
Chamar
pr.imprimir()para o rodapé:pr.imprimir('[H] Ajuda ', '[Q] Sair ', caracter='═', tamanho=115, alinhar='fim', end='╣'): Chama a funçãoimprimir()do móduloprint_reprogramapara imprimir o rodapé com as seguintes opções:'[H] Ajuda ': O texto que será exibido à esquerda.'[Q] Sair ': O texto que será exibido à direita.caracter='═': O caractere que será usado para criar a linha do rodapé.tamanho=115: A largura da linha do rodapé.alinhar='fim': Alinha os textos à direita.end='╣': Define o caractere que será usado para finalizar a linha do rodapé.
-
Obter a opção do usuário:
opcao = input().lower(): Solicita ao usuário que digite uma opção e converte a entrada para letras minúsculas.
-
Exibir a opção digitada:
pr.imprimir(opcao): Imprime a opção digitada pelo usuário usando a funçãoimprimir().
Observações:
- Você pode personalizar o rodapé da forma que desejar, alterando o texto, os caracteres, a largura e o alinhamento.
- O módulo
print_reprogramaoferece diversas funções para formatar e organizar a saída no terminal. Explore as funções disponíveis na documentação do módulo.
Nesse parte vamos montar o sistema em si, ele não vai parar até que o comando seja 'q'
import print_reprograma as pr
# ... (funções imprimir_cabecalho() e imprimir_rodape() - já definidas) ...
def menu():
"""Exibe o menu principal do PDV."""
opcao = ''
while opcao != 'q':
imprimir_cabecalho()
opcao = imprimir_rodape()
menu()Explicação:
-
Funções
imprimir_cabecalho()eimprimir_rodape(): Essas funções já foram definidas anteriormente, e você pode reutilizá-las aqui. -
Função
menu():def menu():: Define a funçãomenu, que representa o menu principal do PDV.opcao = '': Inicializa a variávelopcaocom um valor vazio.while opcao != 'q':: Inicia um loopwhileque continua a executar enquantoopcaofor diferente de 'q'.imprimir_cabecalho(): Chama a funçãoimprimir_cabecalho()para exibir o cabeçalho do PDV.opcao = imprimir_rodape(): Chama a funçãoimprimir_rodape()para exibir o rodapé e obter a opção digitada pelo usuário. A opção digitada é armazenada na variávelopcao.
menu(): Chama a funçãomenu()para iniciar a execução do menu principal.
Como funciona:
- O loop
whilecontinua a executar até que o usuário digiteq(ouQ) e pressione Enter. - A cada iteração do loop:
- O cabeçalho do PDV é exibido.
- O rodapé do PDV é exibido, solicitando ao usuário que escolha uma opção.
- A opção digitada pelo usuário é armazenada na variável
opcao. - Se
opcaofor igual aq, o loop é encerrado e o programa termina.
Um ponto principal de todos os sistemas é tratar o erro
import print_reprograma as pr
# ... (funções imprimir_cabecalho(), imprimir_rodape() - já definidas) ...
def menu():
"""Exibe o menu principal do PDV."""
opcao = ''
erro = '' # Inicializa a variável erro com uma string vazia
while opcao != 'q':
imprimir_cabecalho()
if erro != '': # Verifica se há algum erro a ser exibido
pr.imprimir(erro, tamanho=120, alinhar='centro', cor_texto='vermelho negrito')
pr.separador(120, cor_texto='ciano')
erro = '' # Reseta a variável erro para uma string vazia
opcao = imprimir_rodape()
menu()Explicação:
-
Variável
erro:erro = '': Inicializa uma variável chamadaerrocom uma string vazia. Essa variável será usada para armazenar mensagens de erro que podem ocorrer durante a execução do programa.
-
Tratamento de Erros no Loop
while:if erro != '':: Verifica se a variávelerrocontém algum valor. Se sim, significa que ocorreu um erro e a mensagem de erro deve ser exibida.pr.imprimir(erro, tamanho=120, alinhar='centro', cor_texto='vermelho negrito'): Exibe a mensagem de erro usando a funçãoimprimir()do móduloprint_reprograma.pr.separador(120, cor_texto='ciano'): Imprime uma linha separadora.
erro = '': Reseta a variávelerropara uma string vazia após exibir a mensagem de erro. Isso garante que a próxima iteração do loop não exiba a mesma mensagem de erro novamente.
Imprimir a tela de ajuda com todos os comandos disponiveis no sistema
import print_reprograma as pr
# ... (funções imprimir_cabecalho(), imprimir_rodape(), imprimir_ajuda() - já definidas) ...
def menu():
"""Exibe o menu principal do PDV."""
opcao = ''
erro = ''
tela = '' # Inicializa a variável tela com uma string vazia
while opcao != 'q':
imprimir_cabecalho()
if erro != '':
pr.imprimir(erro, tamanho=120, alinhar='centro', cor_texto='vermelho negrito')
pr.separador(120, cor_texto='ciano')
erro = ''
if tela == '':
pr.pular_linha(quantidade=4)
elif tela == 'ajuda':
imprimir_ajuda()
tela = ''
opcao = imprimir_rodape()
if opcao == 'h':
tela = 'ajuda'
else:
erro = 'A opção selecionada não existe no sistema'
menu()Explicação:
-
Variável
tela:tela = '': Inicializa uma variável chamadatelacom uma string vazia. Essa variável será usada para controlar qual tela deve ser exibida (a tela principal do menu ou a tela de ajuda).
-
Função
imprimir_ajuda():def imprimir_ajuda():: Define a funçãoimprimir_ajuda, que exibe a tela de ajuda do PDV.- A função usa a função
imprimir()do móduloprint_reprogramapara exibir os comandos disponíveis e informações relevantes.
-
Gerenciamento de Tela no Loop
while:if tela == '':: Verifica se a variáveltelaestá vazia. Se sim, significa que a tela principal do menu deve ser exibida.pr.pular_linha(quantidade=4): Insere um espaço em branco na tela.
elif tela == 'ajuda':: Verifica se a variáveltelaé igual a 'ajuda'. Se sim, significa que a tela de ajuda deve ser exibida.imprimir_ajuda(): Chama a funçãoimprimir_ajuda()para exibir a tela de ajuda.tela = '': Reseta a variáveltelapara uma string vazia, retornando para a tela principal do menu.
opcao = imprimir_rodape(): Chama a funçãoimprimir_rodape()para exibir o rodapé e obter a opção digitada pelo usuário.if opcao == 'h':: Verifica se a opção digitada pelo usuário é 'h'. Se sim, a tela de ajuda deve ser exibida.tela = 'ajuda': Define a variáveltelacomo 'ajuda' para indicar que a próxima iteração do loop deve exibir a tela de ajuda.
else:: Se a opção digitada pelo usuário não for 'h', é exibido um erro.erro = 'A opção selecionada não existe no sistema': Define a mensagem de erro.
Fazer o fluxo de nova compra
import print_reprograma as pr
# ... (funções imprimir_cabecalho(), imprimir_rodape(), imprimir_ajuda() - já definidas) ...
def imprimir_compra():
"""Imprime a tela de compra do PDV."""
pr.pular_linha(quantidade=2)
pr.imprimir("## Nova Compra ##", cor_texto='ciano negrito')
pr.imprimir("**Opções:**", cor_texto='amarelo')
pr.imprimir("- **[A]** - Adicionar produto", cor_texto='verde')
pr.imprimir("- **[F]** - Fechar Compra", cor_texto='verde')
pr.imprimir("- **[V]** - Voltar para o menu principal", cor_texto='verde')
pr.pular_linha(quantidade=2)
def menu():
"""Exibe o menu principal do PDV."""
opcao = ''
erro = ''
tela = ''
while opcao != 'q':
imprimir_cabecalho()
if erro != '':
pr.imprimir(erro, tamanho=120, alinhar='centro', cor_texto='vermelho negrito')
pr.separador(120, cor_texto='ciano')
erro = ''
if tela == '':
pr.pular_linha(quantidade=4)
elif tela == 'ajuda':
imprimir_ajuda()
tela = ''
elif tela == 'compra':
imprimir_compra()
tela = ''
opcao = imprimir_rodape()
if opcao == 'h':
tela = 'ajuda'
elif opcao == 'n':
tela = 'compra'
else:
erro = 'A opção selecionada não existe no sistema'
menu()Explicação:
-
Função
imprimir_compra():def imprimir_compra():: Define a funçãoimprimir_compra, que exibe a tela de compra do PDV.- A função usa a função
imprimir()do móduloprint_reprogramapara exibir as opções disponíveis para a tela de compra.
-
Gerenciamento de Tela no Loop
while:elif tela == 'compra':: Verifica se a variáveltelaé igual a 'compra'. Se sim, significa que a tela de compra deve ser exibida.imprimir_compra(): Chama a funçãoimprimir_compra()para exibir a tela de compra.tela = '': Reseta a variáveltelapara uma string vazia, retornando para a tela principal do menu.
elif opcao == 'n':: Verifica se a opção digitada pelo usuário é 'n'. Se sim, a tela de compra deve ser exibida.tela = 'compra': Define a variáveltelacomo 'compra' para indicar que a próxima iteração do loop deve exibir a tela de compra.
Imprimir compras mocadas (o termo mocado é quando é um valor fixo que vamos usar só para teste)
import print_reprograma as pr
from datetime import datetime
compra_moc = [
{'codigo': 1, 'nome': 'Book - Computer Fundamentals & Office Tools For Smart Students - Volume 1', 'valor': 10.00, 'quantidade': 1},
{'codigo': 2, 'nome': 'Book - Computer Fundamentals & Office Tools For Smart Students - Volume 2', 'valor': 10.00, 'quantidade': 2},
{'codigo': 3, 'nome': 'Book - Web Programming Languages For Smart Students', 'valor': 10.00, 'quantidade': 3}
]
def imprime_compra(compra):
"""Imprime uma compra mockada."""
if len(compra) > 0:
total = 0
pr.imprimir('codigo', tamanho=6, alinhar='centro', end='|')
pr.imprimir('produto', tamanho=83, alinhar='centro', end='|')
pr.imprimir('qtd', tamanho=3, alinhar='centro', end='|')
pr.imprimir('valor un.', tamanho=12, alinhar='centro', end='|')
pr.imprimir('valor', tamanho=12, alinhar='centro')
for produto in compra:
total += produto['valor'] * produto['quantidade']
imprimir_produto(produto)
pr.separador(120, caracter='-')
pr.imprimir('Subtotal', tamanho=107, alinhar='fim', end='|')
pr.imprimir('R$', str(round(total, 2)), tamanho=12, alinhar='fim')
else:
pr.imprimir('Sem itens na lista ainda', tamanho=120, alinhar='center')
pr.pular_linha()
pr.pular_linha()
def imprimir_produto(produto):
"""Imprime um produto da compra."""
pr.imprimir(str(produto['codigo']), tamanho=6, alinhar='fim', caracter='0', end='|')
pr.imprimir(produto['nome'], tamanho=83, caracter='.', end='|')
pr.imprimir(str(produto['quantidade']), tamanho=3, caracter='0', alinhar='fim', end='|')
pr.imprimir('R$', str(round(produto['valor'], 2)), tamanho=12, alinhar='fim', end='|')
pr.imprimir('R$', str(round(produto['valor'] * produto['quantidade'], 2)), tamanho=12, alinhar='fim')
# ... (resto do código) ...Explicação:
-
compra_moc:- Uma lista de dicionários que representa uma compra mockada (de exemplo). Cada dicionário representa um produto, com as chaves
codigo,nome,valorequantidade.
- Uma lista de dicionários que representa uma compra mockada (de exemplo). Cada dicionário representa um produto, com as chaves
-
imprime_compra(compra):- Esta função recebe uma lista de dicionários de produtos (como
compra_moc) como argumento. - Verifica se a compra está vazia: Se a lista estiver vazia (
len(compra) > 0), exibe uma mensagem "Sem itens na lista ainda". - Calcula o total: Se houver itens na lista, a função itera sobre cada produto, calcula o valor total do produto (
produto['valor'] * produto['quantidade']) e acumula o total. - Imprime o cabeçalho da compra:
pr.imprimir('codigo', ...): Imprime o cabeçalho da tabela, com colunas para código, nome, quantidade, valor unitário e valor total.
- Imprime cada produto: Chama a função
imprimir_produto(produto)para imprimir os detalhes de cada produto da compra. - Imprime o subtotal: Exibe o subtotal da compra.
- Esta função recebe uma lista de dicionários de produtos (como
-
imprimir_produto(produto):- Esta função recebe um dicionário que representa um produto e imprime os seus detalhes na tabela.
Como usar:
- Chame a função
imprime_compra():- Para exibir a compra mockada, chame a função
imprime_compra(compra_moc).
- Para exibir a compra mockada, chame a função
Exemplo de uso:
# ... (resto do código) ...
def menu():
# ... (código do menu) ...
elif tela == 'compra_mockada': # Adicione uma nova opção 'compra_mockada' ao menu
imprime_compra(compra_moc) # Exiba a compra mockada
tela = ''
# ... (resto do código) ...Adicionar um novo produto dinamicamente na lista de compra
import print_reprograma as pr
from datetime import datetime
produtos = [
# ... (Lista de produtos - já definida) ...
]
def produto_codigo(codigo):
"""Retorna o produto com o código especificado."""
for produto in produtos:
if produto['codigo'] == codigo:
return produto
return None # Retorna None se o produto não for encontrado
def novo_produto(produto, quantidade):
"""Cria um novo produto para a compra, com a quantidade especificada."""
return {
'codigo': produto['codigo'],
'nome': produto['nome'],
'valor': produto['valor'],
'quantidade': quantidade
}
# ... (resto do código) ...
def menu():
"""Exibe o menu principal do PDV."""
opcao = ''
erro = ''
tela = ''
compra = []
while opcao != 'q':
imprimir_cabecalho(erro)
if tela == '':
pr.pular_linha(quantidade=4)
elif tela == 'ajuda':
imprimir_ajuda()
tela = ''
elif tela == 'compra':
imprime_compra(compra)
opcao = imprimir_rodape()
if opcao == 'h':
tela = 'ajuda'
elif opcao == 'n':
tela = 'compra'
else:
try:
codigo = int(opcao)
produto = produto_codigo(codigo)
if produto:
compra.append(novo_produto(produto, 1))
else:
erro = 'Produto não encontrado.'
except ValueError:
erro = 'A opção selecionada não existe no sistema'
menu()Explicação:
-
produto_codigo(codigo):- Busca um produto na lista
produtoscom base nocodigofornecido. - Se o produto for encontrado, a função retorna o dicionário do produto.
- Se o produto não for encontrado, a função retorna
None.
- Busca um produto na lista
-
novo_produto(produto, quantidade):- Cria um novo dicionário representando um produto para a compra, incluindo a
quantidade.
- Cria um novo dicionário representando um produto para a compra, incluindo a
-
menu():- Tratamento de entrada:
- Tenta converter a opção digitada pelo usuário para um inteiro (
int(opcao)). - Se a conversão for bem-sucedida, procura o produto com o código correspondente usando
produto_codigo(codigo). - Se o produto for encontrado, adiciona o produto à
compracom a quantidade 1. - Se o produto não for encontrado, define uma mensagem de erro:
erro = 'Produto não encontrado.' - Se a conversão para inteiro falhar, define uma mensagem de erro:
erro = 'A opção selecionada não existe no sistema'.
- Tenta converter a opção digitada pelo usuário para um inteiro (
- Tratamento de entrada:
Fechar a compra e mostrar o total e o total a pagar (o total a pagar é o total com desconto que será calculado mais pra frente)
import print_reprograma as pr
from datetime import datetime
produtos = [
# ... (Lista de produtos - já definida) ...
]
def produto_codigo(codigo):
"""Retorna o produto com o código especificado."""
for produto in produtos:
if produto['codigo'] == codigo:
return produto
return None # Retorna None se o produto não for encontrado
def novo_produto(produto, quantidade):
"""Cria um novo produto para a compra, com a quantidade especificada."""
return {
'codigo': produto['codigo'],
'nome': produto['nome'],
'valor': produto['valor'],
'quantidade': quantidade
}
def imprime_compra_fechada(compra, total):
"""Imprime a compra fechada, mostrando o total e o total a pagar."""
total_compra = 0
pr.imprimir('codigo', tamanho=6, alinhar='centro', end='|')
pr.imprimir('produto', tamanho=83, alinhar='centro', end='|')
pr.imprimir('qtd', tamanho=3, alinhar='centro', end='|')
pr.imprimir('valor un.', tamanho=12, alinhar='centro', end='|')
pr.imprimir('valor', tamanho=12, alinhar='centro')
for produto in compra:
imprimir_produto(produto)
total_compra += produto['valor'] * produto['quantidade']
pr.separador(120, caracter='-')
pr.imprimir('Total', tamanho=107, alinhar='fim', end='|')
pr.imprimir('R$', str(round(total_compra, 2)), tamanho=12, alinhar='fim')
pr.imprimir('Total a pagar', tamanho=107, alinhar='fim', end='|')
pr.imprimir('R$', str(round(total, 2)), tamanho=12, alinhar='fim', cor_texto='verde negrito')
pr.limpar_formatacao()
pr.pular_linha()
pr.pular_linha()
# ... (resto do código) ...
def menu():
"""Exibe o menu principal do PDV."""
opcao = ''
erro = ''
tela = ''
compra = []
compras = []
while opcao != 'q':
imprimir_cabecalho(erro)
if tela == '':
pr.pular_linha(quantidade=4)
elif tela == 'ajuda':
imprimir_ajuda()
tela = ''
elif tela == 'compra':
imprime_compra(compra)
elif tela == 'fechar':
imprime_compra_fechada(compra, total)
opcao = imprimir_rodape()
if opcao == 'h':
tela = 'ajuda'
elif opcao == 'n':
tela = 'compra'
elif opcao == 'f':
total = calcula_total_desconto(compra)
tela = 'fechar'
elif 'p' in opcao:
compras.append({'itens': compra, 'total': total, 'data': datetime.now()})
compra = []
tela = ''
else:
try:
codigo = int(opcao)
produto = produto_codigo(codigo)
if produto:
compra.append(novo_produto(produto, 1))
else:
erro = 'Produto não encontrado.'
except ValueError:
erro = 'A opção selecionada não existe no sistema'
def calcula_total_desconto(compra):
"""Calcula o total da compra com desconto (implemente a regra de desconto aqui)."""
total = 0
for produto in compra:
total += (produto['valor'] * produto['quantidade'])
# Adicione a lógica para aplicar o desconto aqui.
return total
menu()Explicação das mudanças:
-
imprime_compra_fechada(compra, total):- Imprime a compra fechada, mostrando o total e o total a pagar, com o total a pagar em verde e negrito para destacar.
- Utiliza a função
pr.limpar_formatacao()para remover a formatação de cores e negrito aplicada ao total a pagar. - Imprime a data da compra atual usando
datetime.now().
-
calcula_total_desconto(compra):- Calcula o total da compra, mas você precisa implementar a lógica para aplicar o desconto aqui.
- Substitua o comentário
# Adicione a lógica para aplicar o desconto aqui.pela sua regra de desconto (por exemplo, 10% de desconto).
-
menu():- Adiciona um novo estado
tela = 'fechar'para exibir a compra fechada. - Quando o usuário digita
'f', a compra é fechada, o total com desconto é calculado e a tela 'fechar' é exibida. - Quando o usuário digita
'p', a compra é salva na listacomprascom a data atual e a tela volta para o menu principal.
- Adiciona um novo estado
Encerrar o caixa, vamos totalizar todas a comprar mostrando o total que foi vendido naquele caixa
import print_reprograma as pr
from datetime import datetime
produtos = [
# ... (Lista de produtos - já definida) ...
]
def produto_codigo(codigo):
"""Retorna o produto com o código especificado."""
for produto in produtos:
if produto['codigo'] == codigo:
return produto
return None # Retorna None se o produto não for encontrado
def novo_produto(produto, quantidade):
"""Cria um novo produto para a compra, com a quantidade especificada."""
return {
'codigo': produto['codigo'],
'nome': produto['nome'],
'valor': produto['valor'],
'quantidade': quantidade
}
def imprime_fechamento_caixa(compras):
"""Imprime o fechamento do caixa, mostrando todas as compras."""
pr.imprimir('Data', tamanho=89, alinhar='centro', end='|')
pr.imprimir('Qt.', tamanho=9, alinhar='centro', end='|')
pr.imprimir('valor', tamanho=20, alinhar='centro')
total = 0
for compra in compras:
total += compra['total']
pr.imprimir(compra['data'].strftime("%d/%m/%Y %H:%M:%S "),tamanho=89,end='|',alinhar='fim')
pr.imprimir(str(len(compra['itens'])),tamanho=9,end='|',alinhar='centro')
pr.imprimir('R$',str(round(compra['total'],2)),tamanho=20,alinhar='fim')
pr.separador(120,caracter='-')
pr.imprimir('Total de compras do caixa', tamanho=99, alinhar='fim', end='|')
pr.imprimir('R$',str(round(total, 2)), tamanho=20, alinhar='fim')
# ... (resto do código) ...
def menu():
"""Exibe o menu principal do PDV."""
opcao = ''
erro = ''
tela = ''
compra = []
compras = []
while opcao != 'q':
imprimir_cabecalho(erro)
if tela == '':
pr.pular_linha(quantidade=4)
elif tela == 'ajuda':
imprimir_ajuda()
tela = ''
elif tela == 'compra':
imprime_compra(compra)
elif tela == 'fechar':
imprime_compra_fechada(compra, total)
elif tela == 'encerar':
imprime_fechamento_caixa(compras)
compras = []
tela = ''
pr.pularDesenvolvido com 💜
