Trilha de Especialização Pedagógica — Curso 25: Sistemas Desktop com Python & POO
- Visão Geral da Trilha: 📚 Módulo Sistemas com Python
- Catálogo Geral de Projetos: 🏗️ Catálogo de Projetos
- ➡️ Nível Introdutório (este guia): 10 Miniprojetos em 4 Degraus Lineares
- Nível Intermediário: 🚀 10 Projetos Integradores em 4 Fases · 📊 Relatório de Complexidade
Este documento foi totalmente estruturado considerando a realidade de alunos que estudaram apenas a sintaxe básica de Python até funções em simuladores web, sem experiência prévia com IDEs (VS Code / PyCharm), Orientação a Objetos, bancos de dados relacionais ou interfaces visuais.
A proposta adota uma metodologia em 4 degraus lineares, onde o aluno nunca é exposto a conceitos avançados (como DAO, Dataclasses, Type Hints estritos ou Padrões de Projeto complexos) de forma abrupta. A evolução ocorre gradualmente e de forma palpável dentro de cada projeto.
flowchart LR
D1["🪜 DEGRAU 1\nImperativo & Arquivos\nFunções, Listas/Dicts,\n.txt ou .json (CLI)"] --> D2["🪜 DEGRAU 2\nPrimeira Classe POO\nApenas __init__ e\nmétodos para agrupar"]
D2 --> D3["🪜 DEGRAU 3\nBanco SQLite Nativo\nTabelas simples com\nCREATE, INSERT, SELECT"]
D3 --> D4["🪜 DEGRAU 4\nInterface Sem HTML\nDesktop (Tkinter) ou\nWeb (Streamlit)"]
style D1 fill:#fffde7,stroke:#fbc02d,stroke-width:2px
style D2 fill:#e3f2fd,stroke:#1976d2,stroke-width:2px
style D3 fill:#e8f5e9,stroke:#388e3c,stroke-width:2px
style D4 fill:#f3e5f5,stroke:#7b1fa2,stroke-width:2px
input() e loop while) usando funções puras, listas, dicionários e salvando dados em arquivos .txt (com open() e split()) ou .json (com json.dump() e json.load()).__init__ e métodos simples para alterar atributos, substituindo os dicionários soltos.sqlite3, cria uma tabela com CREATE TABLE e substitui o arquivo de texto/JSON por comandos SQL básicos (INSERT, SELECT, UPDATE e DELETE).| # | Projeto | Identificador da Pasta | Negócio Local (Pequena Cidade) | Degrau 1 (Imperativo) | Degrau 2 (Primeira Classe) | Degrau 3 (SQLite Nativo) | Degrau 4 (Interface Visual) |
|---|---|---|---|---|---|---|---|
| 01 | Lista de Compras & Tarefas | sistemas_python_intro_01_lista_tarefas |
Uso pessoal e afazeres | Menu while + tarefas.txt |
Classe Tarefa (__init__) |
SQLite: 1 tabela (tarefas) |
Desktop: Tkinter com botões e lista |
| 02 | Caderno de Fiado da Mercearia | sistemas_python_intro_02_fiado_padaria |
Comércio de bairro / Padaria | Funções + fiado.json |
Classes Cliente e Conta |
SQLite: 2 tabelas (clientes, debitos) |
Web: Streamlit com tabela e totalizadores |
| 03 | Controle de Estoque da Cantina | sistemas_python_intro_03_estoque_cantina |
Cantina escolar / Lanchonete | Dicionários + estoque.txt |
Classe Produto (vender, repor) |
SQLite: 1 tabela com controle de saldo | Desktop: CustomTkinter com cards coloridos |
| 04 | Livro Caixa de Prestador de Serviço | sistemas_python_intro_04_caixa_autonomo |
Eletricista, encanador, pedreiro | Listas de dicionários + .json |
Classe Lancamento (receita/despesa) |
SQLite: Tabela de entradas e saídas | Web: Streamlit com filtros por data |
| 05 | Empréstimo de Livros da Biblioteca | sistemas_python_intro_05_biblioteca_livros |
Biblioteca comunitária / Escolar | Dicionários aninhados + .txt |
Classes Livro e Emprestimo |
SQLite: 2 tabelas relacionadas (1:N) | Desktop: Tkinter com abas de cadastro |
| 06 | Cadastro & Agendamento de Pet Shop | sistemas_python_intro_06_petshop_agenda |
Banho e tosa / Clínica de bairro | Dicionários em agenda.json |
Classes Tutor e Pet |
SQLite: 2 tabelas com chave estrangeira | Desktop: CustomTkinter com horário/agenda |
| 07 | Orçamento de Oficina Mecânica | sistemas_python_intro_07_oficina_mecanica |
Oficina de motos e carros | Listas de peças em orcamento.json |
Classes Peca, Servico e Orcamento |
SQLite: Tabelas de peças e orçamentos | Web: Streamlit com impressão de recibo |
| 08 | Caderno de Campo de Produtor Rural | sistemas_python_intro_08_campo_rural |
Pequena horta ou sítio local | Registro sequencial em campo.txt |
Classes Talhao e Colheita |
SQLite: Histórico de safras e custos | Web: Streamlit com resumo de produtividade |
| 09 | Chamados de Manutenção Predial | sistemas_python_intro_09_manutencao_predial |
Zeladoria de condomínio / Escola | Dicionários com status em .json |
Classe Chamado (abrir, concluir) |
SQLite: Tabela com status e observações | Web: Streamlit com cards por status |
| 10 | Catalogador de Arquivos & Backups | sistemas_python_intro_10_backup_arquivos |
Escritório de contabilidade / Advocacia | Funções de cópia e log em .txt |
Classe GerenciadorBackup |
SQLite: Tabela de histórico de backups | Desktop: CustomTkinter com barra de progresso |
flowchart LR
A["Degrau 1\nwhile + tarefas.txt"] --> B["Degrau 2\nclass Tarefa"] --> C["Degrau 3\ntabela tarefas (SQLite)"] --> D["Degrau 4\nTkinter Desktop"]
1 - Adicionar, 2 - Listar, 3 - Concluir, salvando cada item em uma linha do arquivo tarefas.txt separando por vírgula (Comprar pão,Pendente).Tarefa com atributos descricao e concluida e o método marcar_como_feita().tarefas.db com a tabela tarefas (id INTEGER PRIMARY KEY AUTOINCREMENT, descricao TEXT, concluida INTEGER) e usa INSERT INTO e SELECT * FROM.Entry), um botão “Adicionar” e uma lista de itens (Listbox).RF01: Permitir cadastrar uma tarefa digitando um texto.RF02: Exibir a lista de tarefas salvas.RF03: Permitir marcar uma tarefa como concluída.RNF01: Os dados não podem sumir quando o programa for fechado (persistência em disco).flowchart LR
A["Degrau 1\nfunções + fiado.json"] --> B["Degrau 2\nclass Cliente & Conta"] --> C["Degrau 3\ntabelas clientes & debitos"] --> D["Degrau 4\nStreamlit Web"]
fiado.json usando json.dump().Cliente com os atributos nome, telefone e saldo_devedor, além dos métodos adicionar_compra(valor) e pagar_conta(valor).clientes (id, nome, telefone) e compras_fiado (id, cliente_id, valor, data) no SQLite com relacionamento 1:N.RF01: Cadastrar o nome e telefone do cliente.RF02: Adicionar um novo valor à conta do cliente.RF03: Registrar quando o cliente pagar parte ou o total da conta.RNF01: O sistema deve alertar se o valor do pagamento for maior que a dívida atual.flowchart LR
A["Degrau 1\ndicts + estoque.txt"] --> B["Degrau 2\nclass Produto"] --> C["Degrau 3\ntabela produtos (SQLite)"] --> D["Degrau 4\nCustomTkinter Desktop"]
cadastrar_produto(), dar_baixa_venda() e listar_baixo_estoque() lendo e escrevendo em estoque.txt.Produto contendo nome, preco, quantidade_estoque e o método repor(quantidade).produtos no SQLite e faz consultas com filtros (SELECT * FROM produtos WHERE quantidade_estoque < 5).RF01: Cadastrar produto com nome, preço de venda e quantidade inicial.RF02: Registrar venda e diminuir a quantidade em estoque.RF03: Listar produtos que estão com menos de 5 unidades.RNF01: Não permitir registrar venda se a quantidade em estoque for zero.flowchart LR
A["Degrau 1\nlist[dict] + caixa.json"] --> B["Degrau 2\nclass Lancamento"] --> C["Degrau 3\ntabela lancamentos (SUM)"] --> D["Degrau 4\nStreamlit Web"]
caixa.json.Lancamento com tipo (‘Entrada’ ou ‘Saída’), descricao, valor e data.lancamentos no SQLite e uso de funções agregadoras do SQL (SELECT SUM(valor) FROM lancamentos WHERE tipo = 'Entrada').RF01: Lançar uma receita informando descrição e valor.RF02: Lançar uma despesa informando descrição e valor.RF03: Exibir o saldo atual (Receitas menos Despesas).RNF01: Garantir que valores monetários não sejam digitados como texto vazio ou letras.flowchart LR
A["Degrau 1\nfunções + livros.txt"] --> B["Degrau 2\nclass Livro & Emprestimo"] --> C["Degrau 3\nForeign Key 1:N (SQLite)"] --> D["Degrau 4\nTkinter com Abas"]
Livro e a classe Emprestimo, aprendendo a associar um leitor ao livro.livros e emprestimos no SQLite, praticando a primeira chave estrangeira (FOREIGN KEY (livro_id) REFERENCES livros(id)).RF01: Cadastrar livros com título e autor.RF02: Registrar empréstimo informando o nome do leitor e a data limite de entrega.RF03: Registrar a devolução e liberar o livro para novo empréstimo.RNF01: O sistema não pode permitir emprestar um livro que já esteja emprestado.flowchart LR
A["Degrau 1\ndicts + agenda.json"] --> B["Degrau 2\nclass Tutor & Pet"] --> C["Degrau 3\nSQLite Relacional"] --> D["Degrau 4\nCustomTkinter Desktop"]
agenda.json.Tutor (nome, telefone) e da classe Pet (nome, espécie, raça, porte).tutores, pets e agendamentos no SQLite.RF01: Cadastrar o dono do animal e vincular um ou mais animais a ele.RF02: Agendar um horário de banho ou tosa para um pet específico.RF03: Listar todos os atendimentos marcados para uma determinada data.RNF01: O número de telefone do tutor deve ser validado para conter apenas números.flowchart LR
A["Degrau 1\nscript + orcamento.json"] --> B["Degrau 2\nclass Peca & Orcamento"] --> C["Degrau 3\ntabelas orcamentos & itens"] --> D["Degrau 4\nStreamlit Web (Recibo)"]
orcamento.json.ItemPeca, Servico e Orcamento com o método calcular_total().orcamentos e itens_orcamento no SQLite.RF01: Informar o modelo do veículo e o nome do cliente.RF02: Adicionar peças e seus respectivos valores unitários.RF03: Adicionar o valor da mão de obra do mecânico.RF04: Exibir o valor total somado e permitir salvar o orçamento.RNF01: O orçamento gerado deve ficar gravado para consulta posterior.flowchart LR
A["Degrau 1\nsequencial + campo.txt"] --> B["Degrau 2\nclass Talhao & Safra"] --> C["Degrau 3\ntabela safras (SQLite)"] --> D["Degrau 4\nStreamlit Web Dashboard"]
campo.txt.Talhao e da classe RegistroSafra.safras (id, nome_cultura, data_plantio, previsao_colheita, custo_total).RF01: Cadastrar um lote/talhão e a cultura plantada (milho, café, mandioca, hortaliças).RF02: Anotar gastos com insumos vinculados ao lote.RF03: Informar a colheita realizada (quantidade de sacas/quilos produzidos).RNF01: O sistema deve alertar se a data de colheita for anterior à data de plantio.flowchart LR
A["Degrau 1\nstatus + chamados.json"] --> B["Degrau 2\nclass Chamado"] --> C["Degrau 3\ntabela chamados (SQLite)"] --> D["Degrau 4\nStreamlit Web (Cards)"]
chamados.json.Chamado com métodos para mudar o status (iniciar_reparo(), finalizar_reparo()).chamados (id, local, descricao, solicitante, status, data_abertura) no SQLite. Uso de documentos JSON para observações adicionais.RF01: Abrir chamado informando o local e o problema encontrado.RF02: Alterar o status do chamado conforme o técnico for atendendo.RF03: Fechar o chamado informando o que foi feito para resolver.RNF01: Não permitir fechar um chamado sem descrever a solução.flowchart LR
A["Degrau 1\nshutil + backup_log.txt"] --> B["Degrau 2\nclass GerenciadorBackup"] --> C["Degrau 3\ntabela historico (SQLite)"] --> D["Degrau 4\nCustomTkinter com Progresso"]
shutil e grava logs em backup_log.txt.GerenciadorBackup com os métodos executar_copia() e verificar_arquivos().historico_backups (id, pasta_origem, pasta_destino, data_hora, total_arquivos, status).RF01: Escolher a pasta onde estão os documentos de trabalho.RF02: Escolher o local de destino do backup.RF03: Copiar os arquivos e gravar a data e hora em que a cópia foi realizada no banco de dados.RNF01: O sistema deve alertar caso o disco de destino não tenha espaço ou a pasta de origem não exista.gantt
title Cronograma Pedagógico Semanal (16 Semanas)
dateFormat YYYY-MM-DD
section Fase 1
Semanas 01-03 : Setup PyCharm/VS Code, CLI & Arquivos .txt/.json (Degrau 1) : 2026-02-01, 21d
section Fase 2
Semanas 04-07 : Primeiros Passos em POO, __init__ e Métodos (Degrau 2) : 2026-02-22, 28d
section Fase 3
Semanas 08-11 : Banco de Dados SQLite Nativo & Comandos SQL (Degrau 3) : 2026-03-22, 28d
section Fase 4
Semanas 12-15 : Interfaces Visuais com Tkinter / Streamlit (Degrau 4) : 2026-04-19, 28d
section Encerramento
Semana 16 : Apresentação Final, Demonstração e Avaliação : 2026-05-17, 7d
.py no computador local e constroem o Degrau 1 (menus imperativos com while, funções e arquivos .txt/.json).__init__ e criando métodos simples para alterar esses atributos). Construção do Degrau 2.INSERT, SELECT, UPDATE, DELETE) e uso da biblioteca nativa sqlite3 no Python. Construção do Degrau 3.| ⬅️ Voltar aos Projetos Práticos | 🚀 Ver 10 Projetos Intermediários | 📚 Voltar ao Módulo Sistemas com Python | 🏠 Página Inicial do Portal |