https://github.com/calebeaf02/hotelaria_unb_tp1
Gestão hoteleira em C++: Domínios, Entidades, POO.
https://github.com/calebeaf02/hotelaria_unb_tp1
controladores cpp crud gerenciador hotel interfaces poo unb
Last synced: 24 days ago
JSON representation
Gestão hoteleira em C++: Domínios, Entidades, POO.
- Host: GitHub
- URL: https://github.com/calebeaf02/hotelaria_unb_tp1
- Owner: CalebeAF02
- Created: 2025-09-20T13:41:48.000Z (9 months ago)
- Default Branch: main
- Last Pushed: 2025-11-24T01:08:26.000Z (7 months ago)
- Last Synced: 2026-01-26T18:06:34.442Z (5 months ago)
- Topics: controladores, cpp, crud, gerenciador, hotel, interfaces, poo, unb
- Language: C++
- Homepage:
- Size: 4.4 MB
- Stars: 2
- Watchers: 1
- Forks: 0
- Open Issues: 0
-
Metadata Files:
- Readme: README.md
- Changelog: CHANGELOG.md
- Authors: AUTHORS.md
Awesome Lists containing this project
README
# 🏨 Hotelaria_UnB_TP1
Projeto acadêmico em **C++**, desenvolvido na Universidade de Brasília (UnB), com foco em **Programação Orientada a
Objetos (POO)**, **arquitetura modular**, **persistência com SQLite** e **documentação automatizada com Doxygen**.
O sistema simula um **gerenciador de hotel**, permitindo:
- Cadastro e login de **hóspedes** e **gerentes**
- Gerenciamento de **quartos**, **reservas**, **solicitações** e **hotéis**
- Validação de dados diretamente nas classes de domínio
- Navegação por menus interativos via **interface de terminal (CLI)**
- Separação por pacotes funcionais: apresentação, serviço, persistência e fábrica
---
## 🚀 Funcionalidades Atuais
- Interface de terminal com menus dinâmicos
- CRUD completo de gerentes
- Fluxo de hóspedes com registro de hospedagem e consulta de status
- Validação embutida nos domínios com tratamento de exceções
- Persistência local com banco SQLite (`hotel.db`)
- Documentação gerada automaticamente em `docs/html` e `docs/latex`
- Script `gerar_documentacao.bat` para automatizar a geração da documentação
- Modo de desenvolvimento com acesso rápido via `SistemaHacker`
---
## 🧭 Linha do Tempo de Funcionalidades
| Etapa | Funcionalidade | Descrição |
|-------|---------------------|------------------------------------------------------|
| 1️⃣ | Tela Inicial | Escolha entre gerente ou hóspede |
| 2️⃣ | Acesso como Gerente | Menu com opções de criar, logar e gerenciar |
| 3️⃣ | Criar Gerente | Cadastro com validação de nome, email, ramal e senha |
| 4️⃣ | Login de Gerente | Verificação no banco com feedback de sucesso ou erro |
| 5️⃣ | Central de Serviços | Acesso às operações CRUD de gerentes |
| 6️⃣ | Ler Gerentes | Listagem formatada dos gerentes cadastrados |
| 7️⃣ | Remover Gerente | Exclusão por email com confirmação |
| 8️⃣ | Acesso como Hóspede | Menu com opções de hospedagem e status |
| 9️⃣ | Criar Solicitação | Interface para registrar interesse em hospedagem |
| 🔟 | Ver Status | Consulta ao status da solicitação feita |
| 🔜 | Atualizar Gerente | (Em desenvolvimento) Edição de dados do gerente |
---
## 🧭 Fluxo de Navegação
- Gerente:
- Login via autenticação persistente
- Acesso à central de serviços
- CRUD de gerentes, hotéis, quartos, reservas
- Avaliação de solicitações de hospedagem
- Hóspede:
- Registro de solicitação de hospedagem
- Consulta de status por email
- Hacker:
- Criação automática de gerente para testes
- Acesso direto à central de serviços
---
## 📸 Exemplos Visuais da Interface
### 🏁 Tela Inicial do Sistema

### 🛏️ Menu para Hospedagem

### 🧑💼 Menu Inicial do Gerente

### Tentativa de Login com Erro

### 👤 Cadastro de Novo Gerente

### 🔐 Login de Gerente com Sucesso

### 🧠 Central de Serviços

### 🧭 Menu CRUD de Gerentes

### 📋 Lista de Gerentes

---
## 📂 Estrutura do Projeto
Hotelaria_UnB_TP1/
├── docs/ #Documentação gerada (HTML/LaTeX/Imagens)
├── include/ #Headers (.hpp) da aplicação
│ ├── HACKER/
│ │ └── SistemaHacker.hpp
│ └── sistema/
│ ├── banco/
│ │ └── BancoDeDados.hpp
│ ├── objetos/
│ │ ├── dominios/ #Tipos de valor com validação (Nome, Email, Senha, etc.)
│ │ ├── entidades/ #Pessoa, Gerente, Hospede, Hotel, Quarto, Reserva, SolicitacaoHospedagem
│ │ ├── entidades_dto/ #DTOs correspondentes
│ │ └── sub_sistema/
│ │ ├── ControladoraPersistenciaSolicitacaoHospedagem.hpp
│ │ ├── pacote_acesso/
│ │ │ ├── InterfaceApresentacaoAcessoGerente.hpp
│ │ │ ├── InterfaceApresentacaoAcessoHospede.hpp
│ │ │ └── modulo_apresentacao_acesso/
│ │ │ ├── ControladoraApresentacaoAcessoGerente.hpp
│ │ │ └── ControladoraApresentacaoAcessoHospede.hpp
│ │ ├── pacote_autenticavel/
│ │ │ ├── InterfaceApresentacaoAutenticavel.hpp
│ │ │ ├── InterfacePersistenciaAutenticavel.hpp
│ │ │ ├── InterfaceServicoAutenticavel.hpp
│ │ │ ├── modulo_apresentacao_autenticavel/
│ │ │ │ └── ControladoraApresentacaoAutenticavel.hpp
│ │ │ ├── modulo_persistencia_autenticavel/
│ │ │ │ └── ControladoraPersistenciaAutenticavel.hpp
│ │ │ └── modulo_servico_autenticavel/
│ │ │ └── ControladoraServicoAutenticavel.hpp
│ │ ├── pacote_fabrica/
│ │ │ ├── InterfaceFabricaGerenciavel.hpp
│ │ │ └── modulo_apresentacao_fabrica/
│ │ │ └── FabricaGerenciavel.hpp
│ │ ├── pacote_gerente/
│ │ │ ├── InterfaceApresentacaoGerente.hpp
│ │ │ ├── InterfacePersistenciaGerente.hpp
│ │ │ ├── InterfaceServicoGerente.hpp
│ │ │ ├── modulo_apresentacao_gerente/
│ │ │ │ └── ControladoraApresentacaoGerente.hpp
│ │ │ ├── modulo_persistencia_gerente/
│ │ │ │ └── ControladoraPersistenciaGerente.hpp
│ │ │ └── modulo_servico_gerente/
│ │ │ └── ControladoraServicoGerente.hpp
│ │ ├── pacote_hospede/
│ │ │ ├── InterfaceApresentacaoHospede.hpp
│ │ │ ├── InterfacePersistenciaHospede.hpp
│ │ │ ├── InterfaceServicoHospede.hpp
│ │ │ ├── modulo_apresentacao_hospede/
│ │ │ │ └── ControladoraApresentacaoHospede.hpp
│ │ │ ├── modulo_persistencia_hospede/
│ │ │ │ └── ControladoraPersistenciaHospede.hpp
│ │ │ └── modulo_servico_hospede/
│ │ │ └── ControladoraServicoHospede.hpp
│ │ ├── pacote_hotel/
│ │ │ ├── InterfaceApresentacaoHotel.hpp
│ │ │ ├── InterfacePersistenciaHotel.hpp
│ │ │ ├── InterfaceServicoHotel.hpp
│ │ │ ├── modulo_apresentacao_hotel/
│ │ │ │ └── ControladoraApresentacaoHotel.hpp
│ │ │ ├── modulo_persistencia_hotel/
│ │ │ │ └── ControladoraPersistenciaHotel.hpp
│ │ │ └── modulo_servico_hotel/
│ │ │ └── ControladoraServicoHotel.hpp
│ │ ├── pacote_quarto/
│ │ │ ├── InterfaceApresentacaoQuarto.hpp
│ │ │ ├── InterfacePersistenciaQuarto.hpp
│ │ │ ├── InterfaceServicoQuarto.hpp
│ │ │ ├── modulo_apresentacao_quarto/
│ │ │ │ └── ControladoraApresentacaoQuarto.hpp
│ │ │ ├── modulo_persistencia_quarto/
│ │ │ │ └── ControladoraPersistenciaQuarto.hpp
│ │ │ └── modulo_servico_quarto/
│ │ │ └── ControladoraServicoQuarto.hpp
│ │ └── pacote_reserva/
│ │ ├── InterfaceApresentacaoReserva.hpp
│ │ ├── InterfacePersistenciaReserva.hpp
│ │ ├── InterfaceServicoReserva.hpp
│ │ ├── modulo_apresentacao_reserva/
│ │ │ └── ControladoraApresentacaoReserva.hpp
│ │ ├── modulo_persistencia_reserva/
│ │ │ └── ControladoraPersistenciaReserva.hpp
│ │ └── modulo_servico_reserva/
│ │ └── ControladoraServicoReserva.hpp
│ └── utilitarios/
│ ├── enum/ #Modos.hpp
│ ├── Utils.hpp
│ ├── AplicacaoSistema.hpp
│ ├── Sistema.hpp
│ ├── SistemaSessao.hpp
│ └── Versao.hpp
├── libs/ #Bibliotecas e componentes reutilizáveis
│ ├── formato/ #Formato.cpp/.hpp
│ ├── io/ #IO.cpp/.hpp
│ ├── menu/ #Menu, MenuCRUD, MenuItem, ExibirMenu
│ ├── sqlite/ #sqlite3.c/.h (embutido)
│ ├── tabela/ #Atributo, Linha, Tabela, TamanhoAtributo
│ └── teste/ #SmokeTeste, InterfaceDeTestes
├── src/ #Implementações (.cpp) — espelha include/ quando aplicável
│ ├── HACKER/SistemaHacker.cpp
│ └── sistema/sub_sistema/
│ ├── ControladoraPersistenciaSolicitacaoHospedagem.cpp
│ ├── pacote_acesso/
│ │ └── modulo_apresentacao_acesso/
│ │ ├── ControladoraApresentacaoAcessoGerente.cpp
│ │ └── ControladoraApresentacaoAcessoHospede.cpp
│ ├── pacote_autenticavel/
│ │ ├── modulo_apresentacao_autenticavel/
│ │ │ └── ControladoraApresentacaoAutenticavel.cpp
│ │ ├── modulo_persistencia_autenticavel/
│ │ │ └── ControladoraPersistenciaAutenticavel.cpp
│ │ └── modulo_servico_autenticavel/
│ │ └── ControladoraServicoAutenticavel.cpp
│ ├── pacote_fabrica/
│ │ └── modulo_apresentacao_fabrica/
│ │ └── FabricaGerenciavel.cpp
│ ├── pacote_gerente/
│ │ ├── modulo_apresentacao_gerente/
│ │ │ └── ControladoraApresentacaoGerente.cpp
│ │ ├── modulo_persistencia_gerente/
│ │ │ └── ControladoraPersistenciaGerente.cpp
│ │ └── modulo_servico_gerente/
│ │ └── ControladoraServicoGerente.cpp
│ ├── pacote_hospede/
│ │ ├── modulo_apresentacao_hospede/
│ │ │ └── ControladoraApresentacaoHospede.cpp
│ │ ├── modulo_persistencia_hospede/
│ │ │ └── ControladoraPersistenciaHospede.cpp
│ │ └── modulo_servico_hospede/
│ │ └── ControladoraServicoHospede.cpp
│ ├── pacote_hotel/
│ │ ├── modulo_apresentacao_hotel/
│ │ │ └── ControladoraApresentacaoHotel.cpp
│ │ ├── modulo_persistencia_hotel/
│ │ │ └── ControladoraPersistenciaHotel.cpp
│ │ └── modulo_servico_hotel/
│ │ └── ControladoraServicoHotel.cpp
│ ├── pacote_quarto/
│ │ ├── modulo_apresentacao_quarto/
│ │ │ └── ControladoraApresentacaoQuarto.cpp
│ │ ├── modulo_persistencia_quarto/
│ │ │ └── ControladoraPersistenciaQuarto.cpp
│ │ └── modulo_servico_quarto/
│ │ └── ControladoraServicoQuarto.cpp
│ └── pacote_reserva/
│ ├── modulo_apresentacao_reserva/
│ │ └── ControladoraApresentacaoReserva.cpp
│ ├── modulo_persistencia_reserva/
│ │ └── ControladoraPersistenciaReserva.cpp
│ └── modulo_servico_reserva/
│ └── ControladoraServicoReserva.cpp
├── meta/ #Tema Doxygen Awesome e customizações (CSS/JS/header)
├── testes/
│ ├── testes_dominios/ #Testes por domínio
│ └── testes_entidades/ #Testes por entidade
├── Doxyfile
├── gerar_documentacao.bat
└── README.md
---
## 🔹 Validação Embutida nos Domínios
A validação de dados agora é feita diretamente dentro das classes de domínio. Cada classe é responsável por garantir sua
própria integridade, lançando exceções (`invalid_argument`) quando os dados são invalidos.
Exemplos:
Nome nome("Calebe"); // valido
Email email("email@invalido"); // lança exceção
Senha senha("123"); // lança exceção se nao atender aos critérios
---
## 🧪 Testes
- testes_dominios/ → Testes unitários por tipo de dado
- testes_entidades/ → Testes por entidade
- libs/teste/ → SmokeTeste e InterfaceDeTestes
- Contadores estáticos:
- contTotalTestes
- contTotalTestesOk
- contTotalTestesProblema
---
## 🛠️ Como Compilar
```bash
mkdir build && cd build
cmake ..
make
./gerenciador_hotel_unb
```
- Este projeto já inclui o SQLite como biblioteca estática:
- libs/sqlite/sqlite3.h → cabeçalho da API
- libs/sqlite/sqlite3.c → implementação embutida
- Nenhuma instalação externa é necessária. Basta clonar e compilar.
---
## 🤝 Como Contribuir
Se você deseja colaborar com o projeto, siga estas etapas:
1. Clone o repositório :
git clone https://github.com/CalebeAF02/Gerenciador-De-Hoteis---UNB.git
cd Hotelaria_UnB_TP1
2. Crie uma branch :
git checkout -b nome-da-sua-branch
3. Compile e teste localmente :
mkdir build && cd build
cmake ..
make
4. Commit e push :
git add .
git commit -m "feat: descrição clara da funcionalidade"
git push origin nome-da-sua-branch
5. Abra um Pull Request no GitHub
---
## 📚 Próximos Passos
Reserva: implementar CRUD completo e validar disponibilidade de quartos.
Solicitação de Hospedagem: corrigir persistência e fluxo de atualização.
Autenticação: integrar com persistência real de gerentes.
Sessão: reforçar restrições de acesso por gerente/hotel.
Testes: ampliar cobertura para reservas e solicitações.
Exportação de dados: implementar saída para .csv ou .tsv.
Interface gráfica: migrar futuramente para Qt ou Web.
Documentação: expandir exemplos de uso e diagramas UML.
---
## 🛠️ O que falta implementar
🔎 Situação atual
- O pacote_reserva já possui:
- Interfaces (InterfaceApresentacaoReserva.hpp, InterfacePersistenciaReserva.hpp, InterfaceServicoReserva.hpp)
- Controladoras nos três módulos (ControladoraApresentacaoReserva, ControladoraPersistenciaReserva, ControladoraServicoReserva)
- Porém, a persistência está apenas esboçada (métodos stub retornando valores fixos).
- O fluxo de reserva ainda não está integrado com o restante do sistema (hotel, quarto, hóspede).
1. Persistência (ControladoraPersistenciaReserva)
- Criar tabela reservas no SQLite (se ainda não existir).
- Métodos:
- inserir(const Reserva &reserva)
- atualizar(const Reserva &reserva)
- excluir(int id)
- listar() -> vector
- pesquisarPorID(int id)
- Usar sqlite3_prepare_v2, sqlite3_bind_* e sqlite3_step como já feito em ControladoraPersistenciaGerente.
2. Serviço (ControladoraServicoReserva)
- Delegar para a persistência.
- Validar regras de negócio:
- Verificar se o quarto está disponível no período (chegada/partida).
- Garantir que o hóspede existe.
- Garantir que o hotel/quarto existem.
- Retornar bool ou optional conforme o caso.
3. Apresentação (ControladoraApresentacaoReserva)
- Menu CRUD de reservas:
- Criar reserva (coletar hóspede_id, hotel_id, quarto_id, datas).
- Listar reservas.
- Atualizar reserva.
- Remover reserva.
- Exibir feedback claro (sucesso/erro).
4. Integração com sessão (SistemaSessao)
- Usar gerente_id e hotel_id ativos para restringir operações.
- Exemplo: gerente só pode manipular reservas do seu hotel.
---
## 🎯 Objetivo Educacional
Este projeto visa aplicar conceitos de POO em C++ moderno, com foco em:
- Herança e Polimorfismo
- Encapsulamento
- Tratamento de exceções
- Arquitetura em camadas, limpa e boas práticas
- Persistência com banco de dados
---
## 👤 Autores
Projeto desenvolvido por:
- [Calebe Alves](https://github.com/CalebeAF02) — Universidade de Brasília (UnB)
- [Artur Silva](https://github.com/TUTUBOY-PRO) — Universidade de Brasília (UnB)
📎 Repositorio: https://github.com/CalebeAF02/gerenciador_hotel_unb
---