Este projeto consiste na Atividade Final da disciplina de Projeto de Programação, ministrada pelo Prof. M.Sc. Yúri Faro Dantas de Sant'Anna. O objetivo é simular um ambiente real de Frente de Loja (Ponto de Venda - PDV) através de uma aplicação Desktop utilizando Java Swing.
O grande diferencial deste sistema é a ausência de um Sistema Gerenciador de Banco de Dados (SGBD). Toda a persistência de dados (Catálogo de Produtos, Histórico de Vendas e Cadastro de Clientes) foi arquitetada "do zero" utilizando manipulação avançada de arquivos de texto transacionais (.csv) com as bibliotecas modernas de alta velocidade do pacote java.nio.file (NIO.2).
De acordo com as regras de negócio exigidas, o sistema possui os seguintes módulos:
- 📦 Gestão de Produtos: Permite listar, cadastrar e alterar produtos. Cada produto no catálogo possui um Código de Barras validador e uma imagem associada.
- 👥 Gestão de Clientes (com Consumidor Final): Cadastro completo de clientes utilizando validação de CPF. O sistema suporta compras rápidas gerando automaticamente o perfil dinâmico de "Consumidor Final" associando um ID numérico por baixo dos panos para manter a integridade.
- 🛒 Frente de Caixa (Módulo de Vendas): Leitura de código de barras para inserção no carrinho (
ProdutoVenda), vinculação de cliente pelo CPF validado, cálculo dinâmico de subtotais e sumarização de formas de pagamento. - 📊 Relatórios e Histórico: Mecanismo de parseamento reverso que lê o arquivo
vendas.csv, cruza as chaves estrangeiras comclientes.csveprodutos.csv, e remonta o histórico perfeitamente detalhado na tela. Arquivos são atualizados dinamicamente a cada conclusão de venda.
Este projeto foi construído fugindo do "código espaguete", adotando rigorosos padrões corporativos de desenvolvimento:
- Padrão de Camadas (Model, DAO, Service, View/Controller): O sistema está perfeitamente modularizado. Telas (Views) não tocam em arquivos; DAOs não fazem cálculos; e os Models são agentes ativos.
- Engenharia Defensiva e "Fail Fast": A camada de
Serviceatua como um "bunker" de segurança. Regras de negócio são validadas imediatamente e, em caso de erro, exceções (IllegalArgumentException) são lançadas impedindo o processamento falho. - Proteção de Memória (Try-with-resources): DAOs implementados com
FileWritere Try-with-resources garantindo que nenhum vazamento de memória (Memory Leak) ocorra durante a gravação de arquivos. - Princípio "Tell, Don't Ask" (Diga, não pergunte): Forte uso de encapsulamento defensivo. Variáveis não possuem "Setters" indiscriminados. O cálculo do subtotal da venda é feito pela própria classe do carrinho acessando a classe embutida de Produto.
A estruturação segue a regra corporativa de empacotamento para segurança e controle de acesso:
src/
└── com/pointofsale/
├── model/ # Entidades de abstração real
├── dao/ # Data Access Objects
├── service/ # Validadores de regras de negócio
├── controller/ # Event Listeners
├── util/ # Utilitários globais
└── view/ # Telas, Painéis e Interface Gráfica
dados/
├── produtos.csv # Persistência do Catálogo
├── clientes.csv # Persistência de Clientes
└── vendas.csv # Registro anonimizado/referenciado de Transações
🛠️ Como Executar o Projeto
Certifique-se de ter o Java JDK 8 ou superior instalado em sua máquina.
Clone este repositório:
Abra o projeto em sua IDE favorita (IntelliJ IDEA, Eclipse, NetBeans, etc).
Execute a classe Main (geralmente localizada na raiz do pacote view ou app).
(Nota): Os arquivos de banco de dados (.csv) na pasta dados/ serão criados automaticamente pelo sistema na primeira execução caso não existam.
👨💻 Autores
Anderson Hugo - Estudante de Ciência da Computação
Pedro Guilherme - Estudante de Ciência da Computação
***