Sistema desktop para administração de hotéis, desenvolvido em Python com interface gráfica em Tkinter e persistência relacional em SQLite.
O Ventana permite gerenciar hóspedes, quartos, produtos, reservas e consumos extras por meio de uma interface com painel de indicadores, formulários validados, filtros e tabelas interativas.
- cadastro e edição com validação de CPF, telefone e e-mail;
- pesquisa por nome, CPF, telefone ou e-mail;
- visualização detalhada;
- remoção com confirmação;
- bloqueio da remoção quando existem reservas ativas.
- cadastro de número, tipo e diária;
- filtros por tipo e disponibilidade;
- atualização dos dados;
- controle automático de disponibilidade;
- bloqueio da remoção quando o quarto está associado a uma reserva.
- cadastro por nome, preço e categoria;
- pesquisa e filtro por categoria;
- edição e remoção;
- associação de produtos às reservas com quantidade e subtotal.
- seleção de hóspede e quarto disponível sem digitação de IDs;
- validação das datas de entrada e saída;
- edição do período;
- adição de produtos e serviços;
- cálculo de noites, diárias, itens e total geral;
- cancelamento com confirmação e liberação automática do quarto.
- Python 3;
- Tkinter e ttk;
- SQLite por meio do módulo
sqlite3da biblioteca padrão; unittestpara testes automatizados.
Não é necessário instalar pacotes externos.
hotel/
├── programa.py
├── migrar_txt_para_sqlite.py
├── hotel.db # criado automaticamente
├── modelo/
│ ├── entidade.py
│ ├── hospede.py
│ ├── item_reserva.py
│ ├── produto.py
│ ├── quarto.py
│ └── reserva.py
├── persistencia/
│ ├── database.py
│ ├── dao_factory.py
│ ├── entidade_dao.py
│ ├── id_manager.py
│ └── persistence_exception.py
├── visao/
│ ├── componentes.py
│ ├── tema.py
│ ├── tabela_utils.py
│ ├── menu_principal_interface.py
│ ├── menu_hospede_interface.py
│ ├── menu_quarto_interface.py
│ ├── menu_produto_interface.py
│ └── menu_reserva_interface.py
└── testes/
├── teste_hospede_dao.py
├── teste_produto_dao.py
├── teste_quarto_dao.py
├── teste_reserva_dao.py
└── teste_sqlite.py
Na primeira execução, o arquivo hotel.db é criado automaticamente na raiz do projeto.
O esquema possui as tabelas:
| Tabela | Responsabilidade |
|---|---|
hospedes |
Dados pessoais e de contato |
quartos |
Acomodações, diárias e disponibilidade |
produtos |
Produtos e serviços do hotel |
reservas |
Relação entre hóspede, quarto e período |
itens_reserva |
Produtos consumidos em cada reserva |
sequencias |
Próximos IDs de cada entidade |
As relações são protegidas por chaves estrangeiras. Por exemplo, o SQLite impede que um produto utilizado por uma reserva seja removido diretamente.
As operações de cadastro, edição e remoção são confirmadas no banco imediatamente. Não é necessário encerrar a aplicação para salvar os dados.
Operações compostas, como criar ou cancelar uma reserva e atualizar a disponibilidade do quarto, são executadas em uma única transação.
Para criar uma cópia de segurança:
- feche a aplicação;
- copie o arquivo
hotel.dbpara um local seguro.
Para restaurar, substitua o arquivo atual por uma cópia anterior com a aplicação fechada.
Se você possui dados de uma versão anterior, copie estes arquivos para a raiz do novo projeto:
hospedes.txt
quartos.txt
produtos.txt
reservas.txt
itens_reserva.txt
Com o banco novo ainda vazio, execute:
python migrar_txt_para_sqlite.pyO script importa os registros, relacionamentos, produtos das reservas e ajusta as sequências de IDs. A migração é cancelada se o hotel.db já possuir dados.
Na pasta raiz do projeto:
python programa.pyNo Linux, se necessário:
python3 programa.pypython -m unittest discover -s testes -p "teste_*.py"Os testes utilizam bancos SQLite temporários ou em memória e não alteram o arquivo hotel.db da aplicação.
O projeto é dividido em três camadas principais:
modelo: entidades e regras do domínio;persistencia: conexão SQLite, DAOs, transações e recuperação dos objetos;visao: interface gráfica, componentes e tema visual.
A interface utiliza o DAOFactory, sem executar SQL diretamente. Isso mantém a camada visual independente da implementação do banco.
- a saída deve ser posterior à entrada;
- um quarto fica indisponível ao criar uma reserva;
- o quarto volta a ficar disponível ao cancelar a reserva;
- hóspedes e quartos com reservas ativas não podem ser removidos;
- a quantidade de um produto deve ser maior que zero;
- os totais são calculados pelas diárias e produtos consumidos.