Skip to content

EnricoNSilva/FEIFood

Repository files navigation

🍔 FEIFood - Projeto de CCM310

Status

Projeto prático da disciplina de Programação Orientada a Objetos (CCM310), lecionada pela Prof. Dra. Gabriela Biondi. O objetivo é construir uma plataforma de pedidos de alimentos inspirada no iFood, aplicando os conceitos de MVC, JDBC e Orientação a Objetos.


📦 Entregáveis do Projeto

Este projeto cumpre todos os entregáveis solicitados no Projeto_FEIFood.pdf:

  • Código Fonte (GitHub): Este repositório contém o código-fonte completo e o histórico de commits.

  • Relatório (README.md): Este documento serve como o relatório de 3-5 páginas exigido.

  • Vídeo de Demonstração (YouTube): O vídeo de 3-5 minutos, que demonstra todo o fluxo da aplicação e a atualização do banco de dados, pode ser assistido no link abaixo:

  • Arquivo .jar e Javadoc: O arquivo .jar executável e a pasta javadoc gerada estão incluídos no arquivo .zip submetido na plataforma Moodle, conforme solicitado.


🔧 Tecnologias Utilizadas

Para a construção deste projeto, foram utilizadas as seguintes tecnologias e padrões:

  • Java (Swing): Para a criação de todas as interfaces gráficas (GUI).
  • PostgreSQL: Como sistema gestor de banco de dados (SGBD).
  • JDBC: Para fazer a conectividade entre a aplicação Java e o banco de dados.
  • Padrão MVC (Model-View-Controller): Para a organização e arquitetura do código.
  • NetBeans IDE: Como ambiente de desenvolvimento.
  • Git & GitHub: Para controlo de versão e entrega.

🚀 Funcionalidades Implementadas

O projeto (individual) cumpre todos os requisitos funcionais, incluindo as 4 operações do CRUD (Create, Read, Update, Delete) solicitadas pela professora:

  • 1. Gestão de Usuário (CRUD - Create, Read):

    • Cadastro de Novo Usuário: O utilizador pode criar uma nova conta (Nome, Email, Senha, CPF). O sistema valida campos vazios e duplicação de email/CPF.
    • Login de Usuário: O sistema autentica o utilizador e cria uma sessão global (SessaoUsuario).
  • 2. Busca de Alimentos (CRUD - Read):

    • Listagem Completa: Ao entrar na tela principal, todos os alimentos são carregados na tabela.
    • Busca por Nome: O utilizador pode pesquisar alimentos por nome (ex: "Pizza").
    • Filtro por Tipo: O utilizador pode filtrar os resultados por "Comida" ou "Bebida".
    • Listar Informações: A tabela principal exibe todas as informações relevantes (Nome, Preço, Porção, Descrição, Avaliação).
  • 3. Gestão do Carrinho (CRUD na Memória):

    • Adicionar Itens: O utilizador pode selecionar um item da busca e adicioná-lo ao carrinho.
    • Agrupamento de Itens: O carrinho (Carrinho.java) agrupa itens iguais, incrementando a quantidade (ex: "Lasanha | Qtd: 3").
    • Remover Itens: O utilizador pode remover uma unidade de um item do carrinho.
    • Esvaziar Carrinho: O utilizador pode limpar todos os itens do carrinho de uma só vez (cumprindo a lógica de "excluir pedidos" do carrinho atual).
  • 4. Finalização de Pedido (CRUD - Create):

    • Criar Pedido: Ao "Finalizar Pedido", o sistema executa uma transação no PedidoDAO que salva o "cabeçalho" na tabela pedido e todos os itens (com quantidade) na tabela pedido_itens.
    • Proteção de Clique Duplo: O botão "Finalizar" é desabilitado no momento do clique para prevenir a criação de pedidos duplicados.
  • 5. Avaliação de Pedido (CRUD - Update):

    • Avaliar Pedido: Imediatamente após finalizar, o utilizador é levado à tela de avaliação.
    • Salvar Avaliação: O sistema faz um UPDATE na tabela pedido, salvando a nota_avaliacao (0-5 estrelas) e o comentario_avaliacao.
  • 6. Histórico de Pedidos (CRUD - Read, Delete):

    • Ler Histórico: O utilizador pode abrir uma nova tela que faz um SELECT no banco e exibe todos os seus pedidos antigos, ordenados por data.
    • Cancelar Pedido (Delete): O utilizador pode selecionar um pedido do histórico e "cancelá-lo". Esta ação executa uma transação de DELETE (apagando primeiro de pedido_itens e depois de pedido) para cumprir 100% o requisito "D" do CRUD.

Nota sobre o Escopo: As funcionalidades de administrador e estatísticas, solicitadas em projetos realizados em dupla, não foram implementadas nesta versão, que é um projeto individual.


📚 Requisitos de Avaliação Cumpridos

O projeto foi estruturado para cumprir os principais critérios de avaliação:

  • Conceitos de Orientação a Objetos: O projeto implementa Herança e Polimorfismo, conforme o diagrama de classes. Alimento é uma classe abstract, enquanto Comida e Bebida herdam dela. O AlimentoDAO atua como uma "Factory" que decide qual objeto criar.
  • Interface: A classe Bebida implementa a interface Imposto_Alcool, usando uma flag is_alcoolico do banco de dados para calcular o imposto de forma limpa.
  • Padrão MVC: O código é estritamente separado nos pacotes model, view, controller e dao, como ensinado no Exemplo_BD.pdf.
  • Segurança (SQL Injection): Todas as consultas ao banco de dados, sem exceção (incluindo INSERT, SELECT, UPDATE e DELETE), utilizam PreparedStatement (?) para prevenir ataques de SQL Injection.

▶️ Como Executar

Para executar este projeto, siga os passos:

  1. Configuração do Banco de Dados:

    1. Certifique-se de que o PostgreSQL está instalado e em execução.
    2. No pgAdmin4, crie um novo banco de dados chamado feifood_db.
    3. Execute o script database_script.sql (incluído no repositório) para criar todas as 5 tabelas.
    4. Execute o script PopulateEstabelecimentoAlimento.sql (incluído no repositório) para popular o banco com 10 estabelecimentos e 100 alimentos.
  2. Configuração do Projeto (NetBeans):

    1. Abra o projeto no NetBeans.
    2. Adicione o arquivo .jar do driver JDBC do PostgreSQL (postgresql-42.7.8.jar) às "Bibliotecas" do projeto.
    3. !! IMPORTANTE !! Abra o arquivo br.com.feifood.dao.Conexao.java e altere a senha na linha Connection conexao = ... para a senha do seu superusuário "postgres".
  3. Execução:

    1. Clique com o botão direito no projeto > "Propriedades" > "Executar".
    2. Defina a Classe Principal como br.com.feifood.view.TelaLogin (ou view.Login).
    3. Clique em "Limpar e Construir" (Clean and Build).
    4. O arquivo FEIFood.jar funcional estará na pasta dist/. Execute-o (juntamente com a pasta dist/lib).

⚙️ Arquitetura do Sistema

  • /view: Contém todas as classes JFrame Form (telas).
  • /model: Contém as classes "POJO" (Usuario, Estabelecimento, Alimento, Comida, Bebida, Pedido, Pedido_Itens) e a interface (Imposto_Alcool).
  • /controller: Contém as classes de "cérebro" (ControleLogin, ControleCadastro, ControlePrincipal, ControlePedido, ControleAvaliacao, ControleHistorico).
  • /dao: Contém as classes que executam SQL (Conexao, UsuarioDAO, AlimentoDAO, PedidoDAO).
  • /utils: Contém classes de apoio globais (Carrinho, SessaoUsuario, FormatadorPreco).

👨‍💻 Autoria

Feito por EnricoNSilva.

About

Sistema desktop de delivery com interface gráfica (JFrame) em Java, aplicando boas práticas de Orientação a Objetos.

Topics

Resources

Stars

0 stars

Watchers

0 watching

Forks

Releases

No releases published

Packages

 
 
 

Contributors

Languages