Skip to content
PedroarthurlgPublic

About

Sistema desktop de gestão hoteleira desenvolvido em Python e Tkinter, com controle de hóspedes, quartos, reservas e produtos, utilizando SQLite.

Topics

Resources

Stars

0 stars

Watchers

0 watching

Forks

Latest commit

 

History

2 Commits

Folders and files

Repository files navigation

Ventana — Gestão Hoteleira

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.

Funcionalidades

Hóspedes

  • 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.

Quartos

  • 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.

Produtos e serviços

  • 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.

Reservas

  • 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.

Tecnologias

  • Python 3;
  • Tkinter e ttk;
  • SQLite por meio do módulo sqlite3 da biblioteca padrão;
  • unittest para testes automatizados.

Não é necessário instalar pacotes externos.

Estrutura

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

Banco de dados

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.

Gravação imediata

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.

Backup

Para criar uma cópia de segurança:

  1. feche a aplicação;
  2. copie o arquivo hotel.db para um local seguro.

Para restaurar, substitua o arquivo atual por uma cópia anterior com a aplicação fechada.

Migração das versões em .txt

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.py

O 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.

Como executar

Na pasta raiz do projeto:

python programa.py

No Linux, se necessário:

python3 programa.py

Como executar os testes

python -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.

Arquitetura

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.

Regras de negócio

  • 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.

About

Sistema desktop de gestão hoteleira desenvolvido em Python e Tkinter, com controle de hóspedes, quartos, reservas e produtos, utilizando SQLite.

Topics

Resources

Stars

0 stars

Watchers

0 watching

Forks

Releases

Packages

Contributors

Languages