Skip to content

Latest commit

 

History

105 Commits

Folders and files

NameName
Last commit message
Last commit date
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 

Repository files navigation

Agência Viagens++ ✈️

Sistema de gerenciamento de reservas de viagens desenvolvido em Java Swing. O software permite o cadastro de clientes, gestão de pacotes turísticos (nacionais e internacionais), controle de reservas e emissão de relatórios financeiros.

Este projeto foi desenvolvido como trabalho prático da disciplina de Engenharia de Software / Programação Orientada a Objetos.

📋 Funcionalidades

  • Controle de Acesso (RBAC):
    • Gerente: Acesso total (CRUD de pacotes, usuários, relatórios financeiros e exclusão de reservas).
    • Atendente: Acesso operacional (Venda de reservas, cadastro de clientes).
  • Gestão de Pacotes:
    • Diferenciação entre Nacionais (Taxa Turismo) e Internacionais (Cotação Dólar/Euro).
    • Cálculo automático de preços.
  • Fluxo de Reservas:
    • Busca de clientes por CPF.
    • Simulação de valores em tempo real.
    • Pagamento via PIX (À vista) ou Cartão (+2.5%).
    • Geração de Recibo em HTML.
  • Regras de Negócio:
    • Bloqueio de duplicidade (cliente não pode reservar o mesmo pacote duas vezes se já estiver ativo).
    • Integridade referencial (não permite excluir pacotes/clientes com histórico de reservas).
    • Cancelamento restrito (apenas Gerentes cancelam reservas já confirmadas).

🛠️ Tecnologias Utilizadas

  • Linguagem: Java (JDK 17+)
  • Interface Gráfica: Java Swing (Puro)
  • Estilização: Custom Look & Feel (AppTheme) para design flat moderno.
  • Persistência: Arquivos de Texto (.csv)
  • IDE: IntelliJ IDEA

🚀 Como Executar o Projeto

Pré-requisitos

Certifique-se de ter o Java Development Kit (JDK) 17 ou superior instalado.

Passo a Passo

  1. Clone o repositório:
    git clone [https://github.com/Skrewed/agencia.git]
  2. Abra o projeto na sua IDE (Recomendamos o IntelliJ IDEA).
  3. Localize a classe principal:
    • Caminho: src/agencia/Main.java
  4. Execute a classe Main.

🔑 Acesso Inicial (Primeiro Login)

Ao executar pela primeira vez, o sistema criará automaticamente um usuário administrador:

  • Login: admin
  • Senha: admin

Após logar, você pode ir na aba "Gestão de Usuários" (exclusiva do gerente) e cadastrar novos atendentes.


🏛️ Arquitetura e Decisões Técnicas

O projeto foi estruturado seguindo o padrão MVC (Model-View-Controller) adaptado para Camadas (Layers), visando desacoplamento e facilidade de manutenção.

1. Estrutura de Pacotes

  • agencia.modelo: Classes POJO que representam as entidades (Cliente, Reserva, Pacote).
  • agencia.repositorios (DAO): Camada responsável exclusivamente pela persistência em arquivo CSV. Nenhum código de tela acessa o arquivo diretamente.
  • agencia.ui: Camada de apresentação (Telas Swing).
  • agencia.servicos: Lógica de negócios complexa (ex: Simulador de Preços).
  • agencia.pagamento (Strategy): Implementação do padrão Strategy para cálculo de taxas de pagamento.
  • agencia.exception: Exceções personalizadas para controle de fluxo e validação.

2. Persistência em CSV

Optou-se pelo uso de arquivos .csv (Comma Separated Values) ao invés de um banco de dados relacional para:

  • Simplificar a execução em qualquer máquina sem necessidade de instalar SGBDs.
  • Facilitar a depuração (arquivos legíveis por humanos).
  • Demonstrar a manipulação de I/O em Java (BufferedReader, PrintWriter).
  • Estratégia de Cache: Os DAOs carregam os dados para a memória (Listas) na inicialização e reescrevem o arquivo nas operações de escrita, garantindo performance.

3. Interface Gráfica (Swing + Flat Design)

Para evitar o visual datado do Swing padrão ("Metal"), implementamos uma classe utilitária AppTheme.

  • Uso de CardLayout para navegação fluida (Single Window Application).
  • Componentes customizados (RoundedPanel, botões sem borda) para uma experiência de usuário (UX) moderna.

4. Padrões de Projeto Aplicados (Design Patterns)

  • DAO (Data Access Object): Para abstrair a complexidade de leitura/escrita dos arquivos CSV.
  • Strategy: Na interface Pagavel, permitindo que PagamentoPix e PagamentoCartao tenham lógicas de cálculo diferentes sem encher o código de if/else.
  • Factory Method (Simplificado): Na leitura dos arquivos, para instanciar PacoteNacional ou PacoteInternacional dependendo da flag no CSV.
  • Singleton (Implícito): O MainFrame atua como controlador central da sessão do usuário.

🛡️ Tratamento de Erros e Segurança

  • Exceções Personalizadas: Uso de ValidacaoException para diferenciar erros de regra de negócio (ex: tentar excluir cliente com reserva) de erros técnicos.
  • Integridade Referencial: O sistema verifica dependências antes de excluir registros para evitar corromper os arquivos CSV.
  • Senhas: As senhas são armazenadas no arquivo de usuários (em um cenário real, aplicaríamos Hashing/BCrypt aqui).

👥 Autores

  • Skrewed: André Andrade
  • gfraga126-gif: Gabriel Henrique
  • VashCuBIT: Vitor Hugo

About

Protótipo de sistema de agendamentos de viagens desenvolvido somente com Java para disciplina de Programação I do curso de Sistemas de Informação, UEMG Passos.

Resources

Stars

0 stars

Watchers

0 watching

Forks

Releases

Packages

Contributors

Languages