Este projeto é um Sistema de Informação desenvolvido para gerenciar e disponibilizar o cardápio diário do Restaurante Universitário. O sistema permite o cadastro de refeições (almoço e jantar), gerenciamento de itens categorizados e publicação do cardápio para visualização.
Projeto desenvolvido como requisito avaliativo para a disciplina de Programação Orientada a Objetos do curso de Ciência da Computação.
- Gestão de Cardápios: Criação de cardápios ao adicionar itens em novas datas.
- Controle de Itens: Adição, classificação e remoção de itens.
- Categorização: Classificação dos itens via Enums (Prato Principal, Vegetariano, Salada, Sobremesa, etc.).
- Publicação: Controle de visibilidade do cardápio ("Publicado" ou "Rascunho").
- Persistência em Memória: Armazenamento volátil de dados durante a execução da aplicação.
O projeto segue estritamente o padrão arquitetural MVC (Model-View-Controller) e os princípios da Orientação a Objetos.
- Linguagem: Java (JDK 21)
- Interface Gráfica: JavaFX (Construção programática de UI)
- Paradigma: Orientação a Objetos (Encapsulamento, Herança, Polimorfismo).
Model: Contém as Regras de Negócio e Entidades.- Principais classes:
CardapioDiario,ItemCardapio. - Enums:
TipoPrato,TipoRefeicao.
- Principais classes:
View: Camada de apresentação.TelaConfigCardapio: Interface administrativa construída com componentes JavaFX (BorderPane,ListView,DatePicker).
Controller: Intermediário que processa as ações do usuário.ControleRU: Gerencia a lógica de ID único, validação de dados e chamadas ao repositório.
Para atender aos requisitos exigidos na disciplina, foram implementados os seguintes padrões:
- Onde: Classe
ConfiguracoesAplicacao. - Objetivo: Garantir que as configurações globais do sistema (como o link do boleto) tenham uma única instância acessível por toda a aplicação.
- Onde: Interface
RepositorioCardapioe classeMemoriaRepositorioCardapio. - Objetivo: Abstrair a camada de acesso a dados. Isso desacopla o
Controllerda forma como os dados são salvos (neste caso, em umHashMap), facilitando a migração futura para um banco de dados real (SQL).
| Requisito | Implementação no Código |
|---|---|
| Sistema de Informação | Gestão completa de fluxo de cardápios (CRUD). |
| Armazenamento de Dados | Implementado via HashMap<LocalDate, CardapioDiario>. |
| Classes e Interfaces | Interface ISistemaRU definindo o contrato do sistema. |
| Tipagem Forte | Uso de Enum para TipoPrato (Principal, Vegetariano...) e TipoRefeicao. |
| Encapsulamento | Atributos privados protegidos e modificados apenas via métodos de negócio. |
| Tratamento de Erros | Uso de Objects.requireNonNull e alertas visuais na interface. |
| Perfil | Ações Principais |
|---|---|
| Administrador | Gerencia o cardápio por data; Adiciona, remove e categoriza itens (TipoPrato); Define a publicação (Publicado/Rascunho). |
| Usuário/Aluno | Consulta e visualiza apenas os cardápios que estão Publicados; Navega entre datas. |
- Gestão de Itens: Adicionar e remover pratos do cardápio do dia.
- Controle de Datas: Planejar cardápios futuros navegando entre datas usando o
DatePicker. - Categorização: Classificar pratos usando o
TipoPrato(Principal, Vegetariano, Salada, etc.). - Publicação: Definir o status do cardápio (
PublicadoouRascunho) via checkbox. O sistema impede a publicação de cardápios vazios.
- Consulta por Data: Pesquisar o cardápio (Almoço/Jantar) de qualquer dia, sendo a pesquisa disparada automaticamente pela mudança de data no
DatePicker. - Visibilidade Controlada: O sistema exibe o aviso "Cardápio não divulgado" se o flag
publicadoestiver comofalse.
- MVC (Model-View-Controller): Separação estrita das responsabilidades em três pacotes diferentes.
- Orientação a Objetos (OO): Uso de classes (
ItemCardapio,CardapioDiario), Encapsulamento (atributos privados e métodos de acesso) e Polimorfismo (implementação de interfaces). - Tipagem Forte: Uso de Interfaces (
ISistemaRU,RepositorioCardapio) e Enums (TipoRefeicao,TipoPrato).
- Repository Pattern: Utilizado para desacoplar a lógica de negócio do armazenamento de dados.
- O
MemoriaRepositorioCardapiousa umMapestático para garantir que o estado da memória seja único e compartilhado entre todas as telas.
- O
- Singleton Pattern: Implementado na classe
ConfiguracoesAplicacaopara garantir que as configurações globais (como o link do boleto) possuam uma única instância.
O projeto está organizado em três camadas principais para garantir o desacoplamento e a facilidade de manutenção.
Contém as classes que representam os dados e regras de negócio:
CardapioDiario– Entidade principal (data, estado de publicação, itens do almoço e jantar).ItemCardapio– Representa cada prato ou alimento individual.TipoRefeicao– Enum que define se o item é ALMOCO ou JANTAR.TipoPrato– Enum para categorização (PRINCIPAL, VEGETARIANO, SALADA, etc.).RepositorioCardapio– Interface do repositório.MemoriaRepositorioCardapio– Implementação usandoHashMappara persistência.ConfiguracoesAplicacao– Singleton responsável por configurações globais.
Coordena a comunicação entre View e Model:
ISistemaRU– Interface que define as operações do sistema.ControleRU– Implementação oficial das regras de negócio e controle.
Interface gráfica com o usuário:
TelaConfigCardapio– Tela administrativa para cadastro e vizualização dos itens.Main– Inicializador do ciclo de vida da aplicação JavaFX.
- Onde: Classe
ConfiguracoesAplicacao. - Por que: Garante que exista uma única instância de configurações globais (como links externos) acessível por toda a aplicação.
- Onde: Interface
RepositorioCardapioe classeMemoriaRepositorioCardapio. - Por que: Abstrai a lógica de acesso aos dados, permitindo trocar a forma de armazenamento (ex: para Banco de Dados SQL) sem quebrar o restante do sistema.
src/
├─ Model/
│ ├─ CardapioDiario.java
│ ├─ ItemCardapio.java
│ ├─ TipoRefeicao.java
│ ├─ TipoPrato.java
│ ├─ RepositorioCardapio.java
│ ├─ MemoriaRepositorioCardapio.java
│ └─ ConfiguracoesAplicacao.java
│
├─ Controller/
│ ├─ ISistemaRU.java
│ └─ ControleRU.java
│
├─ View/
│ ├─ TelaConfigCardapio.java
│ └─ TelaUsuario.java
│
└─ Main.java
Este projeto utiliza Java 21 e JavaFX. Como o JavaFX foi descontinuado do JDK padrão, é necessário configurar as bibliotecas manualmente para rodar o projeto.
- Java JDK 21 instalado.
- IntelliJ IDEA (ou IDE de sua preferência).
- JavaFX SDK 21 (Download necessário).
- Acesse o site oficial da Gluon: https://gluonhq.com/products/javafx/
- Na seção "Downloads", filtre por:
- Version: 21 (LTS)
- Type: SDK
- OS: Seu sistema operacional (Windows/Mac/Linux)
- Baixe e extraia o arquivo
.zipem uma pasta segura (Ex:C:\Java\javafx-sdk-21).
- Abra o projeto e vá em File > Project Structure > Libraries.
- Clique no + (Java) e selecione a pasta
libdentro do SDK que você baixou. - Clique em Apply.
Passo Crítico: Sem isso o projeto não roda (
Runtime components are missing).
- Localize a classe
Main.java(View). - Tente rodar uma vez (vai falhar) para criar a configuração.
- Vá em Run > Edit Configurations...
- Selecione a classe
Main. - Em Modify Options, ative "Add VM Options".
- Cole o comando abaixo no campo que apareceu (ajuste o caminho conforme seu PC):
bash --module-path "C:\Caminho\Para\javafx-sdk-21\lib" --add-modules javafx.controls,javafx.fxml
- Jamily Barbosa de Oliveira
- Samile Riquele
- Sarah Maria Rocha de Oliveira
