From ca2d02130923ed8a93c7b9ebf90c6f3f1f9b51c3 Mon Sep 17 00:00:00 2001 From: "Lidiane M. Gomes" Date: Fri, 5 Jul 2024 16:29:46 -0300 Subject: [PATCH] Projeto e readme atualizados --- exercicios/para-sala/README.md | 66 ++++- .../print_reprograma.cpython-312.pyc | Bin 0 -> 9272 bytes exercicios/para-sala/ola-mundo.py | 8 + exercicios/para-sala/projeto.py | 280 ++++++++++++++++++ 4 files changed, 341 insertions(+), 13 deletions(-) create mode 100644 exercicios/para-sala/__pycache__/print_reprograma.cpython-312.pyc create mode 100644 exercicios/para-sala/ola-mundo.py create mode 100644 exercicios/para-sala/projeto.py diff --git a/exercicios/para-sala/README.md b/exercicios/para-sala/README.md index f2bccd3..daa599d 100644 --- a/exercicios/para-sala/README.md +++ b/exercicios/para-sala/README.md @@ -1,17 +1,57 @@ -# Exercício de Sala 🏫 +# Terminal de Vendas +_Projeto Guiado_ -## Nome do Exercicio +Este é um sistema simples de terminal de vendas escrito em Python. -- Explicação do exercício: Lorem ipsum dolor sit amet, consectetur adipiscing elit. Aliquam leo nibh, tempus sed rhoncus et, ultrices vitae orci. -Donec erat mauris, laoreet in tortor vel, eleifend suscipit nibh. Lorem ipsum dolor sit amet, consectetur adipiscing elit. -Aliquam leo nibh, tempus sed rhoncus et, ultrices vitae orci. Donec erat mauris, laoreet in tortor vel, eleifend suscipit nibh. ---- +## Descrição -Terminou o exercício? Dá uma olhada nessa checklist e confere se tá tudo certinho, combinado?! +O sistema permite realizar vendas de produtos pré-definidos e possui funcionalidades básicas como adicionar produtos à compra, calcular descontos baseados em regras específicas e fechar a compra. -- [ ] Fiz o fork do repositório. -- [ ] Clonei o fork na minha máquina (`git clone url-do-meu-fork`). -- [ ] Resolvi o exercício. -- [ ] Adicionei as mudanças. (`git add .` para adicionar todos os arquivos, ou `git add nome_do_arquivo` para adicionar um arquivo específico) -- [ ] Commitei a cada mudança significativa ou na finalização do exercício (`git commit -m "Mensagem do commit"`) -- [ ] Pushei os commits na minha branch (`git push origin nome-da-branch`) +## Funcionalidades + +- **Adicionar produtos à compra:** Informe o código do produto para adicionar à lista de compra. +- **Fechar compra:** Finaliza a compra atual, calculando o total a ser pago com possíveis descontos. +- **Encerrar caixa:** Mostra o fechamento do caixa atual, exibindo todas as compras realizadas desde o último encerramento. +- **Ajuda:** Fornece um resumo das principais operações disponíveis no sistema. +- **Sair:** Finaliza a execução do sistema. + +## Requisitos + +- Python 3.x instalado. + +## Como usar + +1. **Clone o repositório:** + ```bash + git clone + cd terminal-vendas + ``` + +2. **Execute o programa:** + ```bash + python terminal_vendas.py + ``` + +3. **Operação:** + - Siga as instruções apresentadas no terminal para interagir com o sistema. + - Utilize os códigos dos produtos listados para adicioná-los à compra. + - Ao fechar a compra, o sistema calculará automaticamente o total e qualquer desconto aplicável. + +## Exemplo de Uso + +- **Adicionar produto à compra:** + ``` + [Digite o código do produto] >> 1 + [Digite o código do produto] >> 5 + [Digite o código do produto] >> 12 + ``` + +- **Fechar a compra:** + ``` + [H] Ajuda [Q] Sair ══════════════════════════🎬 F + ``` + +- **Encerrar caixa:** + ``` + [H] Ajuda [Q] Sair ══════════════════════════🎬 E + ``` diff --git a/exercicios/para-sala/__pycache__/print_reprograma.cpython-312.pyc b/exercicios/para-sala/__pycache__/print_reprograma.cpython-312.pyc new file mode 100644 index 0000000000000000000000000000000000000000..03a09196cf9896b6f7353c7788591a40ff3ac0d7 GIT binary patch literal 9272 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 V6(DKe#``y9p6}d*k@b(O{{^?%=c)hz literal 0 HcmV?d00001 diff --git a/exercicios/para-sala/ola-mundo.py b/exercicios/para-sala/ola-mundo.py new file mode 100644 index 0000000..bc35d2b --- /dev/null +++ b/exercicios/para-sala/ola-mundo.py @@ -0,0 +1,8 @@ +import print_reprograma as pr + +pr.cor('magenta') +pr.imprimir('Olá mundo!') +pr.separador(30, cor_texto='azul') +pr.retangulo('Texto dentro de um retângulo.', cor_barra='amarelo', cor_texto='vermelho') +pr.limpar_formatacao() +pr.imprimir('Olá mundo!') \ No newline at end of file diff --git a/exercicios/para-sala/projeto.py b/exercicios/para-sala/projeto.py new file mode 100644 index 0000000..f0f92e0 --- /dev/null +++ b/exercicios/para-sala/projeto.py @@ -0,0 +1,280 @@ +import sys +sys.path.append('../../material') +import print_reprograma as pr +from datetime import datetime + +produtos = [ + {'codigo': 1, 'nome': 'Matrix', 'valor': 10.00}, + {'codigo': 2, 'nome': 'Interestelar', 'valor': 10.00}, + {'codigo': 3, 'nome': 'Inception', 'valor': 10.00}, + {'codigo': 4, 'nome': 'The Dark Knight', 'valor': 10.00}, + {'codigo': 5, 'nome': 'Pulp Fiction', 'valor': 15.00}, + {'codigo': 6, 'nome': 'Fight Club', 'valor': 15.00}, + {'codigo': 7, 'nome': 'The Shawshank Redemption', 'valor': 15.00}, + {'codigo': 8, 'nome': 'Forrest Gump', 'valor': 15.00}, + {'codigo': 9, 'nome': 'The Godfather', 'valor': 15.00}, + {'codigo': 10, 'nome': 'Schindler\'s List', 'valor': 15.00}, + {'codigo': 11, 'nome': 'Goodfellas', 'valor': 15.00}, + {'codigo': 12, 'nome': 'The Silence of the Lambs', 'valor': 15.00}, + {'codigo': 13, 'nome': 'Star Wars: Episode IV - A New Hope', 'valor': 5.00}, + {'codigo': 14, 'nome': 'The Lord of the Rings: The Fellowship of the Ring', 'valor': 10.00}, + {'codigo': 15, 'nome': 'The Matrix Reloaded', 'valor': 15.00}, + {'codigo': 16, 'nome': 'The Matrix Revolutions', 'valor': 15.00}, + {'codigo': 17, 'nome': 'The Dark Knight', 'valor': 10.00}, + {'codigo': 18, 'nome': 'Inception', 'valor': 10.00}, + {'codigo': 19, 'nome': 'Fight Club', 'valor': 12.00}, + {'codigo': 20, 'nome': 'The Shawshank Redemption', 'valor': 15.00}, + {'codigo': 21, 'nome': 'The Godfather', 'valor': 18.00}, + {'codigo': 22, 'nome': 'Schindler\'s List', 'valor': 12.00}, + {'codigo': 23, 'nome': 'Goodfellas', 'valor': 15.00}, + {'codigo': 24, 'nome': 'Star Wars: Episode IV - A New Hope', 'valor': 15.00}, + {'codigo': 25, 'nome': 'The Lord of the Rings: The Fellowship of the Ring', 'valor': 18.00}, + {'codigo': 26, 'nome': 'The Matrix', 'valor': 20.00}, + {'codigo': 27, 'nome': 'Interstellar', 'valor': 15.00}, + {'codigo': 28, 'nome': 'The Dark Knight Rises', 'valor': 18.00}, + {'codigo': 29, 'nome': 'Pulp Fiction', 'valor': 15.00}, + {'codigo': 30, 'nome': 'Forrest Gump', 'valor': 12.00}, + {'codigo': 31, 'nome': 'Inception', 'valor': 10.00}, + {'codigo': 32, 'nome': 'The Godfather', 'valor': 10.00}, + {'codigo': 33, 'nome': 'Fight Club', 'valor': 12.00}, + {'codigo': 34, 'nome': 'The Shawshank Redemption', 'valor': 15.00}, + {'codigo': 35, 'nome': 'The Dark Knight', 'valor': 15.00}, + {'codigo': 36, 'nome': 'The Lord of the Rings: The Two Towers', 'valor': 10.00}, + {'codigo': 37, 'nome': 'Star Wars: Episode V - The Empire Strikes Back', 'valor': 15.00}, + {'codigo': 38, 'nome': 'Forrest Gump', 'valor': 12.00}, + {'codigo': 39, 'nome': 'Goodfellas', 'valor': 10.00}, + {'codigo': 40, 'nome': 'Pulp Fiction', 'valor': 10.00}, + {'codigo': 41, 'nome': 'The Matrix', 'valor': 10.00}, + {'codigo': 42, 'nome': 'Fight Club', 'valor': 12.00}, + {'codigo': 43, 'nome': 'The Shawshank Redemption', 'valor': 10.00}, + {'codigo': 44, 'nome': 'The Godfather', 'valor': 10.00}, + {'codigo': 45, 'nome': 'Schindler\'s List', 'valor': 10.00}, + {'codigo': 46, 'nome': 'Inception', 'valor': 10.00}, + {'codigo': 47, 'nome': 'The Dark Knight', 'valor': 10.00}, + {'codigo': 48, 'nome': 'The Lord of the Rings: The Return of the King', 'valor': 10.00}, + {'codigo': 49, 'nome': 'Star Wars: Episode VI - Return of the Jedi', 'valor': 10.00}, + {'codigo': 50, 'nome': 'Forrest Gump', 'valor': 10.00}, + {'codigo': 51, 'nome': 'Pulp Fiction', 'valor': 10.00}, + {'codigo': 52, 'nome': 'Fight Club', 'valor': 10.00}, + {'codigo': 53, 'nome': 'The Shawshank Redemption', 'valor': 10.00}, + {'codigo': 54, 'nome': 'The Godfather', 'valor': 10.00}, + {'codigo': 55, 'nome': 'Schindler\'s List', 'valor': 10.00}, + {'codigo': 56, 'nome': 'Goodfellas', 'valor': 10.00}, + {'codigo': 57, 'nome': 'Inception', 'valor': 10.00}, + {'codigo': 58, 'nome': 'The Dark Knight', 'valor': 10.00}, + {'codigo': 59, 'nome': 'The Lord of the Rings: The Fellowship of the Ring', 'valor': 10.00}, + {'codigo': 60, 'nome': 'Star Wars: Episode IV - A New Hope', 'valor': 10.00}, + {'codigo': 61, 'nome': 'The Matrix', 'valor': 10.00}, + {'codigo': 62, 'nome': 'Interstellar', 'valor': 10.00}, + {'codigo': 63, 'nome': 'The Dark Knight Rises', 'valor': 10.00}, + {'codigo': 64, 'nome': 'Pulp Fiction', 'valor': 10.00}, + {'codigo': 65, 'nome': 'Forrest Gump', 'valor': 10.00}, + {'codigo': 66, 'nome': 'Inception', 'valor': 10.00}, + {'codigo': 67, 'nome': 'The Godfather', 'valor': 10.00}, + {'codigo': 68, 'nome': 'Fight Club', 'valor': 10.00}, + {'codigo': 69, 'nome': 'The Shawshank Redemption', 'valor': 10.00}, + {'codigo': 70, 'nome': 'The Dark Knight', 'valor': 10.00}, + {'codigo': 71, 'nome': 'The Lord of the Rings: The Two Towers', 'valor': 10.00}, + {'codigo': 72, 'nome': 'Star Wars: Episode V - The Empire Strikes Back', 'valor': 10.00}, + {'codigo': 73, 'nome': 'Forrest Gump', 'valor': 10.00}, + {'codigo': 74, 'nome': 'Goodfellas', 'valor': 10.00}, + {'codigo': 75, 'nome': 'Pulp Fiction', 'valor': 10.00}, + {'codigo': 76, 'nome': 'The Matrix', 'valor': 10.00}, + {'codigo': 77, 'nome': 'Fight Club', 'valor': 10.00}, + {'codigo': 78, 'nome': 'The Shawshank Redemption', 'valor': 10.00}, + {'codigo': 79, 'nome': 'The Godfather', 'valor': 10.00}, + {'codigo': 80, 'nome': 'Schindler\'s List', 'valor': 10.00}, + {'codigo': 81, 'nome': 'Inception', 'valor': 10.00}, + {'codigo': 82, 'nome': 'The Dark Knight', 'valor': 10.00}, + {'codigo': 83, 'nome': 'The Lord of the Rings: The Return of the King', 'valor': 10}, + {'codigo': 84, 'nome': 'Star Wars: Episode VI - Return of the Jedi', 'valor': 10.00}, + {'codigo': 85, 'nome': 'Forrest Gump', 'valor': 10.00}, + {'codigo': 86, 'nome': 'Pulp Fiction', 'valor': 10.00}, + {'codigo': 87, 'nome': 'Fight Club', 'valor': 10.00}, + {'codigo': 88, 'nome': 'The Shawshank Redemption', 'valor': 10.00}, + {'codigo': 89, 'nome': 'The Godfather', 'valor': 10.00}, + {'codigo': 90, 'nome': 'Schindler\'s List', 'valor': 10.00}, + {'codigo': 91, 'nome': 'Inception', 'valor': 10.00}, + {'codigo': 92, 'nome': 'The Dark Knight', 'valor': 10.00}, + {'codigo': 93, 'nome': 'The Lord of the Rings: The Fellowship of the Ring', 'valor': 10.00}, + {'codigo': 94, 'nome': 'Star Wars: Episode IV - A New Hope', 'valor': 10.00}, + {'codigo': 95, 'nome': 'The Matrix', 'valor': 10.00}, + {'codigo': 96, 'nome': 'Interstellar', 'valor': 10.00}, + {'codigo': 97, 'nome': 'The Dark Knight Rises', 'valor': 10.00}, + {'codigo': 98, 'nome': 'Pulp Fiction', 'valor': 10.00}, + {'codigo': 99, 'nome': 'Forrest Gump', 'valor': 10.00}, + {'codigo': 100, 'nome': 'Inception', 'valor': 10.00}, +] + +def produto_codigo(codigo): + for produto in produtos: + if produto['codigo'] == codigo: + return produto + return None + +def novo_produto(produto, quantidade): + return { + 'codigo':produto['codigo'], + 'nome':produto['nome'], + 'valor':produto['valor'], + 'quantidade':quantidade + } + +def imprime_fechamento_caixa(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 + total_desconto = 0 + for compra in compras: + total += compra['total'] + total_desconto += compra['desconto'] # Acumular o desconto de cada compra + 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') + pr.imprimir('Total de descontos aplicados', tamanho=99, alinhar='fim', end='|') + pr.imprimir('- R$',str(round(total_desconto, 2)), tamanho=20, alinhar='fim', cor_texto= 'vermelho negrito') + +def imprime_compra_fechada(compra,total, desconto): + 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') + #imprimir o valor do desconto + if desconto > 0: + pr.imprimir('Desconto aplicado', tamanho=107, alinhar='fim', end='|') + pr.imprimir('- R$', str(round(desconto, 2)), tamanho=12, alinhar='fim', cor_texto='vermelho negrito') + + 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() + +def imprime_compra(compra): + 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: + imprimir_produto(produto) + total += produto['valor'] * produto['quantidade'] + 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): + 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') + +def imprimir_cabecalho(erro): + pr.limpar() + 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') + if(erro != ''): + pr.imprimir(erro,tamanho=120,alinhar='centro',cor_texto='vermelho negrito') + pr.separador(120,cor_texto='ciano') + erro = '' + +def imprimir_ajuda(): + pr.pular_linha(quantidade=2) + pr.imprimir('[H] >> Ajuda com o Sistema',alinhar='centro',tamanho=120) + pr.imprimir('[Q] >> Sair da Tela ou Sistema',alinhar='centro',tamanho=120) + pr.imprimir('[N] >> Cria uma Nova Compra',alinhar='centro',tamanho=120) + pr.imprimir('[F] >> Fechar a Compra',alinhar='centro',tamanho=120) + pr.imprimir('[P] >> Confirmar que a compra foi paga',alinhar='centro',tamanho=120) + pr.imprimir('[nnn] >> Adicionar o codigo do produto a compra',alinhar='centro',tamanho=120) + pr.imprimir('[Xnn] >> Muda a quantidade de itens adicionado',alinhar='centro',tamanho=120) + pr.imprimir('[E] >> Encerar caixa',alinhar='centro',tamanho=120) + pr.pular_linha(quantidade=2) + +def imprimir_rodape(): + pr.imprimir('[H] Ajuda ','[Q] Sair ',caracter='═',tamanho=115,alinhar='fim',end='🎬 ') + + return input().lower() + +def menu(): + 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': + total, desconto = calcula_total_desconto(compra) + imprime_compra_fechada(compra, total, desconto) + elif tela == 'encerar': + imprime_fechamento_caixa(compras) + compras = [] + tela = '' + pr.pular_linha(quantidade=2) + opcao = imprimir_rodape() + if opcao == 'h': + tela = 'ajuda' + elif opcao == 'n': + tela = 'compra' + elif opcao == 'f': + total = calcula_total_desconto(compra) + tela = 'fechar' + elif opcao == 'e': + tela = 'encerar' + elif 'p' in opcao: + compras.append({'itens': compra, 'total': total, 'data': datetime.now(), 'desconto': desconto}) + compra = [] + tela = '' + else: + try: + codigo = int(opcao) + produto = produto_codigo(codigo) + compra.append(novo_produto(produto, 1)) + except ValueError: + erro = 'A opção selecionada não existe no sistema' + except TypeError: + erro = 'O código do produto não existe' + +def calcula_total_desconto(compra): + total = 0 + for produto in compra: + total += (produto['valor'] * produto['quantidade']) + desconto = 0 + if total >= 100: + desconto = total * 0.1 # calcula o valor do desconto + total *= 0.9 # multiplicando o total por 0.9 + else: #verificar desconto para combos + for codigo in set([item['codigo'] for item in compra]): + quantidade_codigo = sum([item['quantidade'] for item in compra if item ['codigo']]) + if quantidade_codigo > 1: + desconto += (produto_codigo(codigo)['valor'] * (quantidade_codigo - 1)) * 0.5 + + return total, desconto + +menu() \ No newline at end of file