Controle de estoque e venda desenvolvido em Python utilizando as bibliotecas Tkinter para a interface gráfica, SQLite para o armazenamento de dados, Datetime para registro das vendas (horário da venda), Time para um relógio funcional e Pillow (PIL) para a inserção de Imagens.
- Adicionar produtos ao estoque.
- Editar informações de produtos existentes, incluindo a capacidade de modificar a quantidade em estoque ou remover produtos do registro.
- Visualizar o estoque atual.
- Alertas de estoque baixo.
- Interface gráfica intuitiva para os funcionários das lojas.
- Venda de Produtos
- Consulta de vendas (com o horário da venda)
- Python
- Tkinter (para a interface gráfica)
- SQLite (para o armazenamento e gerenciamento dos dados do estoque)
- Pillow (PIL) (para manipulação de imagens)
- Time e Datetime (Registro de horário e Relógio funcional)
- Este projeto teve sua origem e grande parte de seu desenvolvimento concebidos em um repositório anterior, de minha autoria, intitulado Exercicios e Projetos em Python. O histórico de commits permanecem registrada neste repositório precursor, fornecendo um contexto para o desenvolvimento subsequente. Portanto, os marcos iniciais e a essência fundacional do projeto residem nesse repositório anterior, refletindo o processo criativo e a evolução do conceito até sua atual forma refinada. Entretanto, também está disponível em um repositório próprio intitulado Sistema de Avaliações em Python
O código fonte em Python representa um sistema que simula avaliações, oferecendo uma gama de funcionalidades essenciais para uma experiência de usuário completa e segura. Vou detalhar suas principais características e destacar suas medidas de segurança e validação:
-
Banco de Dados SQLite com Prevenção contra SQL Injection: Utilizando um banco de dados SQLite3, o programa armazena localmente informações, como dados dos alunos, senhas, questões da prova e pontuações. Além disso, implementa medidas eficazes para prevenir ataques de SQL Injection, garantindo a integridade dos dados.
-
Interface Gráfica com Tkinter: Desenvolvido com Tkinter, o programa oferece uma interface gráfica intuitiva e agradável, facilitando a interação do usuário em todas as etapas do processo, desde o cadastro até a visualização das pontuações.
-
Cadastro Seguro com Validações: A função de cadastro foi projetada com validações abrangentes para garantir a integridade dos dados. Além de evitar campos vazios, o sistema realiza verificações minuciosas para detectar e prevenir a inserção de caracteres especiais, protegendo contra possíveis vulnerabilidades como injeção de SQL.
-
Cálculo Automático de Pontuações: Após a conclusão da prova, o programa realiza o cálculo automático da pontuação do aluno, baseando-se nas respostas fornecidas de forma precisa e confiável.
-
Exibição de Respostas e Gabaritos: A exibição das respostas corretas e do gabarito é feita de maneira segura, garantindo que apenas os alunos autorizados tenham acesso a essas informações após a conclusão da prova. Além disso, há um passo a passo de como solucionar cada questão.
-
Manipulação de Imagens com PIL: Para uma experiência visual aprimorada, o programa utiliza a biblioteca PIL para manipular e exibir imagens, como o logo da instituição, garantindo uma apresentação visual atraente e profissional.
-
Cadastro de Questões: O código possui uma função que permite adicionar questões ao banco de dados.
Em resumo, este código implementa um sistema completo de simulador de avaliações, desde o cadastro de alunos até a realização e correção de provas, utilizando uma interface gráfica simples e agradável.
- SQL Injection: é uma técnica maliciosa utilizada por hackers para explorar vulnerabilidades em sistemas de bancos de dados. Imagine que um banco de dados é como uma gaveta cheia de informações organizadas em fichas. Com o SQL Injection, um invasor consegue inserir códigos maliciosos, como se fossem notas falsas, na caixa de busca dessa gaveta. Assim, ele pode enganar o sistema e obter acesso não autorizado a dados confidenciais ou até mesmo manipular, editar ou excluir informações importantes. É como se alguém conseguisse acesso à sua gaveta de informações secretas, mexesse em papéis importantes e até mesmo adicionasse ou removesse alguns, tudo sem você perceber. Por isso, é essencial que os sistemas tenham medidas de segurança para prevenir esse tipo de ataque.
- PIL: (Python Imaging Library) é uma biblioteca de processamento de imagens para Python. Com o PIL, os desenvolvedores podem realizar uma ampla variedade de operações em imagens, como abrir, editar, converter formatos, redimensionar, cortar, aplicar filtros, entre outras. Essa biblioteca é especialmente útil para aplicações que lidam com manipulação de imagens, como processamento de fotos digitais, reconhecimento de padrões, processamento de documentos, entre outros. O PIL oferece uma interface fácil de usar para realizar essas operações de forma eficiente, permitindo aos desenvolvedores criar e personalizar imagens de maneira flexível e poderosa.
- Tkinter: Tkinter é uma biblioteca padrão do Python usada para criar interfaces gráficas de usuário (GUI). Com Tkinter, os desenvolvedores podem criar janelas, botões, caixas de texto e outros elementos de interface de forma intuitiva. É uma ferramenta versátil que simplifica o desenvolvimento de aplicativos com uma interface de usuário interativa. Tkinter fornece uma maneira eficiente de criar aplicativos desktop com Python, permitindo aos desenvolvedores concentrarem-se na lógica do programa enquanto a biblioteca cuida da apresentação visual.
- Biblioteca de Filmes
- Criação de Classe e Instanciação de Objetos
- Calculadora utilizando Classe
- Calculadora de IMC
- Regex no Python
- Interface Visual com TKinter
- Utilizando um Banco de Dados local com SQLite3
Este é um programa em Python para gerenciar uma biblioteca de filmes. Ele oferece funcionalidades para adicionar, editar, excluir e exibir filmes na lista, permitindo ao usuário organizar sua coleção de filmes de forma simples e eficiente.
-
Adicionar Filme: Permite ao usuário adicionar um novo filme à lista, inserindo o nome do filme, gênero, nota e uma revisão ou comentários sobre o filme.
-
Exibir Filmes: Exibe todos os filmes presentes na lista, mostrando o nome do filme, gênero, nota e revisão.
-
Editar Filme: Permite ao usuário editar as informações de um filme existente na lista, incluindo o gênero, nota e revisão.
-
Excluir Filme: Permite ao usuário excluir um filme da lista, inserindo o nome do filme que deseja remover.
-
Sair: Encerra o programa
---| Bem vindo a sua Biblioteca de filmes! |---
--> Faça sua escolha:
|Adicionar (1)
|Editar (2)
|Excluir (3)
|Exibir (4)
|Sair (0)
Escolha: 1
Insira o Nome do filme: Interestelar
Insira o Gênero/Temática do filme: Sci-Fi
Insira a Nota do filme: 9.5
Insira sua Review/Comentários do filme: Um filme incrível que explora as possibilidades do universo.
(Filme adicionado na lista com sucesso!)
------------------------------
--> Faça sua escolha:
|Adicionar (1)
|Editar (2)
|Excluir (3)
|Exibir (4)
|Sair (0)
Escolha: 2
----------------------------------------
1)
Nome: Interestelar,
Genero: Sci-Fi,
Nota: 9.5,
Review: Um filme incrível que explora as possibilidades do universo.
----------------------------------------
Digite o nome do filme que deseja Editar: Interestelar
Insira o novo Gênero/Temática do filme: Sci-Fi, Drama
Insira a nova Nota do filme: 9.7
Insira a nova Review do filme: Uma jornada emocionante através do tempo e do espaço.
(Filme editado com sucesso!)
----------------------------------------
Resultado:
Nome: Interestelar,
Genero (Editado): Sci-Fi, Drama,
Nota (Editada): 9.7,
Review (Editada): Uma jornada emocionante através do tempo e do espaço.
----------------------------------------
--> Faça sua escolha:
|Adicionar (1)
|Editar (2)
|Excluir (3)
|Exibir (4)
|Sair (0)
Escolha: 3
----------------------------------------
1)
Nome: Interestelar,
Genero: Sci-Fi, Drama,
Nota: 9.7,
Review: Uma jornada emocionante através do tempo e do espaço.
----------------------------------------
Digite o nome do filme que deseja Excluir: Interestelar
(O Filme escolhido foi Removido.)
--> Faça sua escolha:
|Adicionar (1)
|Editar (2)
|Excluir (3)
|Exibir (4)
|Sair (0)
Escolha: 4
(Lista Vazia...)
--> Faça sua escolha:
|Adicionar (1)
|Editar (2)
|Excluir (3)
|Exibir (4)
|Sair (0)
Escolha: 0
(Saindo...)
Este código é uma implementação em Python de uma classe "Guitarra", que permite criar objetos representando guitarras com diferentes características, como tamanho da corda, formato, afinação e captadores. A classe Guitarra possui métodos para tocar a guitarra e afiná-la.
Além da definição da classe Guitarra, o código também demonstra como criar objetos dessa classe e interagir com eles, solicitando informações do usuário para criar uma guitarra personalizada e exibindo informações sobre as guitarras criadas.
Operação | Descrição |
---|---|
Adição | Permite ao usuário somar dois números. |
Subtração | Permite ao usuário subtrair um número do outro. |
Multiplicação | Permite ao usuário multiplicar dois números. |
Divisão | Permite ao usuário dividir um número pelo outro. Se o segundo número for zero, exibe uma mensagem de erro. |
Potência | Permite ao usuário calcular a potência de um número, elevando-o a uma potência especificada. |
Raiz Quadrada | Permite ao usuário calcular a raiz quadrada de um número. Se o número for negativo, exibe uma mensagem de erro. |
Sair | Permite ao usuário encerrar o programa. |
---------------- Calculadora ----------------
Selecione a operação:
1. Adição
2. Subtração
3. Multiplicação
4. Divisão
5. Potência
6. Raiz Quadrada
7. Sair
Digite a opção (1-7): 4 #Usuário Escolheu Divisão
Digite o primeiro número: 10
Digite o segundo número: 0
Erro! Divisão por zero não é permitida.
Selecione a operação:
1. Adição
2. Subtração
3. Multiplicação
4. Divisão
5. Potência
6. Raiz Quadrada
7. Sair
Digite a opção (1-7): 5 #Usuário escolheu Potência
Digite a base: 2
Digite o expoente: 3
Resultado: 8.0
Selecione a operação:
1. Adição
2. Subtração
3. Multiplicação
4. Divisão
5. Potência
6. Raiz Quadrada
7. Sair
Digite a opção (1-7): 6 #Raiz Quadrada
Digite o número: 9
Resultado: 3.0
Selecione a operação:
1. Adição
2. Subtração
3. Multiplicação
4. Divisão
5. Potência
6. Raiz Quadrada
7. Sair
Digite a opção (1-7): 7
Encerrando o programa...
- Adição:
Selecione a operação:
1. Adição
2. Subtração
3. Multiplicação
4. Divisão
5. Potência
6. Raiz Quadrada
7. Sair
Digite a opção (1-7): 1
Digite o primeiro número: 10
Digite o segundo número: 5
Resultado: 15.0
- Subtração:
Selecione a operação:
1. Adição
2. Subtração
3. Multiplicação
4. Divisão
5. Potência
6. Raiz Quadrada
7. Sair
Digite a opção (1-7): 2
Digite o primeiro número: 20
Digite o segundo número: 8
Resultado: 12.0
- Multiplicação:
Selecione a operação:
1. Adição
2. Subtração
3. Multiplicação
4. Divisão
5. Potência
6. Raiz Quadrada
7. Sair
Digite a opção (1-7): 3
Digite o primeiro número: 6
Digite o segundo número: 4
Resultado: 24.0
- Divisão:
Selecione a operação:
1. Adição
2. Subtração
3. Multiplicação
4. Divisão
5. Potência
6. Raiz Quadrada
7. Sair
Digite a opção (1-7): 4
Digite o primeiro número: 50
Digite o segundo número: 5
Resultado: 10.0
- Potência:
Selecione a operação:
1. Adição
2. Subtração
3. Multiplicação
4. Divisão
5. Potência
6. Raiz Quadrada
7. Sair
Digite a opção (1-7): 5
Digite a base: 3
Digite o expoente: 4
Resultado: 81.0
- Raiz Quadrada:
Selecione a operação:
1. Adição
2. Subtração
3. Multiplicação
4. Divisão
5. Potência
6. Raiz Quadrada
7. Sair
Digite a opção (1-7): 6
Digite o número: 64
Resultado: 8.0
Estes são exemplos de como cada operação funciona e o que é exibido para o usuário após a entrada dos números. O usuário pode continuar realizando operações ou sair do programa conforme necessário.
class Calculadora:
def __init__(self):
self.resultado = None
def adicao(self, x, y):
self.resultado = x + y
return self.resultado
def subtracao(self, x, y):
self.resultado = x - y
return self.resultado
def multiplicacao(self, x, y):
self.resultado = x * y
return self.resultado
def divisao(self, x, y):
if y == 0:
print("Erro! Divisão por zero não é permitida.")
self.resultado = None
else:
self.resultado = x / y
return self.resultado
def potencia(self, x, y):
self.resultado = x ** y
return self.resultado
def raiz_quadrada(self, x):
if x < 0:
print("Erro! Não é possível calcular a raiz quadrada de um número negativo.")
self.resultado = None
else:
self.resultado = math.sqrt(x)
return self.resultado
Este código Python apresenta duas versões de uma calculadora de Índice de Massa Corporal (IMC) que permite ao usuário inserir os nomes e pesos das pessoas, calculando seus respectivos IMCs e classificando-os de acordo com os padrões de classificação de IMC. Ambas as versões do código permitem a entrada de múltiplas pessoas, fornecendo uma descrição breve dos resultados ao final da entrada dos dados.
- Utilização de listas para armazenar nomes, pesos e IMCs.
- Utilização de um loop While para permitir a entrada contínua de dados até que o usuário decida parar.
- Cálculo do IMC utilizando a fórmula: IMC = peso / (altura ^ 2).
- Utilização de estruturas condicionais If, Elif e Else para classificar os IMCs em categorias: Magro, Saudável, Sobrepeso e Obeso.
- Utilização de um loop For para percorrer os dados inseridos e determinar a pessoa com o maior e menor IMC.
- Utilização de variáveis para armazenar o maior e menor IMC, bem como os respectivos nomes das pessoas.
Digite o nome da pessoa: João
Digite o peso da pessoa (em kg): 70
Digite a altura da pessoa (em metros): 1.75
Nome: João, IMC: 22.86
Classificação: Saudável
Deseja adicionar outra pessoa? (Sim/Não): sim
Digite o nome da pessoa: Maria
Digite o peso da pessoa (em kg): 55
Digite a altura da pessoa (em metros): 1.60
Nome: Maria, IMC: 21.48
Classificação: Saudável
Deseja adicionar outra pessoa? (Sim/Não): não
Pessoa com o maior IMC:
Nome: João, IMC: 22.86
Pessoa com o menor IMC:
Nome: Maria, IMC: 21.48
import re
# String contendo os dados das duas pessoas
dados = """
Nome: pedro dos santos Data nascimento: 01/01/2000
cpf: 123.456.789-00 Endereço: rua exemplo
loja 3
Valor dos serviços: R$ 1.200,00
Tipo de contrato: Mei
--------------------------------------------------------------
Nome: ana Data nascimento: 01-01-2010
cpf: 123.456.789-00 Endereço: exemplo rua
Valor dos serviços: R$ 1200
Tipo de contrato: clt
"""
# Exibir todos os nomes
nomes = re.findall(r'Nome: ([^\n]+)', dados)
# Remover as informações depois do nome (data de nascimento)
nomes = [nome.split()[0] for nome in nomes]
print("Nomes:", nomes)
# Exibir as datas de nascimento
datas_nascimento = re.findall(r'Data nascimento: (\d{2}/\d{2}/\d{4}|\d{2}-\d{2}-\d{4})', dados)
print("Datas de Nascimento:", datas_nascimento)
# Exibir os endereços
enderecos = re.findall(r'Endereço: ([^\n]+)', dados)
print("Endereços:", enderecos)
# Exibir os salários
salarios = re.findall(r'Valor dos serviços: R\$ (\d{1,3}(?:[.,]\d{3})*(?:[.,]\d{2}))', dados)
print("Salários:", salarios)
- a -> Procura a Letra A
- . -> Procura qualquer coisa (menos pular linha)
- \d -> Procura um digito (\D procura o que não for um digito)
- \w -> alfanumérico (\W não alfanumérico)
- [abc] -> Procura A, B ou C
- \n -> Pular linha
- "+" -> Pega o Máximo possível (1 a infinito)
- "*" -> Pega o Máximo (zero a infinito)
- {n} -> Pega N coisas
- | -> Comando OU
- (?=...) -> Positive Lookahead
- (?<=...) -> Positive Lookbehind
- ( ) -> Agrupa