alexribeirofaria/prj-final-ugf-sigacar
GitHub: alexribeirofaria/prj-final-ugf-sigacar
一个基于Web的汽车租赁管理系统,支持在线预订、合同管理和支付,并利用模糊逻辑实现基于客户画像的个性化推荐。
Stars: 0 | Forks: 0
# SIGACAR - Sistema de Gerenciamento de Aluguel de Carros On-line
Documentação reconstituída a partir do documento **Projeto Final Gama Filho Entregue.pdf**, apresentado por **Alex Ribeiro Faria** como seminário de projeto final do curso de Ciências da Computação da Universidade Gama Filho.
O SIGACAR é um sistema web para locadora de automóveis. Seu objetivo é tornar o processo de locação mais simples, ágil, seguro e eficiente, oferecendo cadastro de usuários, gerenciamento de veículos, reservas, contratos, pagamentos e recomendações de veículos/promoções conforme o perfil do associado por meio de lógica nebulosa.
## Sumário
- [Objetivo](#objetivo)
- [Justificativa](#justificativa)
- [Análise do Sistema](#análise-do-sistema)
- [Usuários Envolvidos](#usuários-envolvidos)
- [Requisitos Funcionais](#requisitos-funcionais)
- [Metodologia UML](#metodologia-uml)
- [Casos de Uso](#casos-de-uso)
- [Diagrama de Classes](#diagrama-de-classes)
- [Diagramas de Sequência](#diagramas-de-sequência)
- [Diagrama de Atividade](#diagrama-de-atividade)
- [Diagrama de Implantação](#diagrama-de-implantação)
- [Lógica Nebulosa](#lógica-nebulosa)
- [Implementação](#implementação)
- [Telas do Sistema](#telas-do-sistema)
- [Conclusão](#conclusão)
- [Referências](#referências)
## Objetivo
O sistema proposto tem como finalidade diversificar as informações sobre os veículos disponíveis para locação e atender clientes de acordo com seu perfil. Para isso, utiliza lógica nebulosa como mecanismo de apoio à classificação do associado, permitindo oferecer produtos, serviços e promoções adequados.
O atendimento previsto pelo sistema deve oferecer:
- segurança nas operações;
- confiabilidade nos dados;
- rapidez na reserva e contratação;
- comodidade para o cliente;
- eficiência para administradores e empregados da locadora.
## Justificativa
A globalização e a popularização da internet modificaram a forma como empresas prestam serviços e divulgam informações. Clientes procuram canais de atendimento mais confortáveis, rápidos e práticos.
Nesse contexto, o SIGACAR propõe um site dedicado a usuários e empregados, permitindo:
- consulta de veículos e tarifas atualizadas;
- cadastro de clientes e empregados;
- reserva on-line de veículos;
- fechamento de contratos pela internet;
- pagamento on-line;
- oferta de promoções e produtos conforme o perfil do associado.
## Análise do Sistema
### Visão Geral
O sistema de aluguel de automóveis on-line consiste no gerenciamento de reservas pela internet, no controle de reservas e contratos, na consulta de veículos e preços, no fechamento de contratos e na oferta de formas de pagamento diferenciadas.
Também há uma camada de personalização: produtos e promoções são apresentados de acordo com o perfil do cliente.
### Problemas Existentes
O documento aponta três problemas principais no cenário anterior à implantação:
- impossibilidade de fazer fechamento de contrato on-line;
- dificuldade em atrair novos clientes por não possuir um website mais dinâmico;
- impossibilidade de efetuar pagamento on-line.
### Proposta de Implantação
A proposta é desenvolver um sistema para reservas de veículos on-line voltado a um público mais amplo, permitindo que clientes realizem consultas, reservas, pagamentos e fechamento de contratos pela internet.
O sistema também deve usar lógica nebulosa para acelerar e personalizar as consultas, classificando o cliente em perfis e usando essa classificação na oferta de veículos e promoções.
## Usuários Envolvidos
| Usuário | Descrição | Permissões principais |
| --- | --- | --- |
| Internauta | Pessoa navegando na internet. Pode tornar-se associado. | Visualizar informações públicas, consultar veículos e iniciar cadastro. |
| Associado | Usuário cadastrado que utiliza os produtos oferecidos pela agência. | Consultar dados pessoais, cadastrar perfil, consultar veículos, reservar veículos e fechar contrato. |
| Administrador | Usuário responsável pela administração e atualização dos produtos, usuários, veículos e funcionalidades. | Acesso amplo às funcionalidades administrativas, incluindo cadastros, consultas, alterações e exclusões. |
| Empregado | Usuário interno da locadora que opera consultas, reservas, veículos, tarifas e contratos. | Gerenciar veículos, tarifas, reservas, contratos e histórico. |
## Requisitos Funcionais
### Clientes
O sistema deve permitir inclusão, alteração e remoção de clientes da locadora com, entre outros, os seguintes dados:
- nome;
- endereço;
- cidade;
- estado;
- telefone;
- e-mail;
- CPF;
- RG;
- órgão emissor;
- data de nascimento;
- CNH;
- validade da CNH.
### Categorias de Carros
O sistema deve permitir inclusão, alteração e remoção de categorias de carros contendo:
- código da categoria;
- descrição da categoria;
- preço diário de locação;
- preço semanal de locação;
- preço mensal de locação;
- quantidade de carros em estoque por categoria.
### Veículos
O sistema deve permitir inclusão, alteração e remoção de carros para aluguel. Cada veículo possui:
- placa;
- fabricante;
- marca;
- ano;
- modelo.
Uma mesma categoria pode possuir diversos carros com placas, modelos e anos diferentes.
### Empregados
O sistema deve permitir inclusão, alteração e remoção de empregados com:
- nome;
- e-mail;
- endereço;
- cidade;
- estado;
- telefone;
- data de nascimento;
- CPF.
### Reservas
O sistema deve processar reservas de carros com:
- data e hora de retirada;
- identificação do cliente;
- categoria desejada;
- dados do cartão de crédito;
- desconto concedido, quando aplicável.
A reserva só deve ser permitida quando houver carro disponível no período solicitado. Caso contrário, o sistema deve emitir alerta e impedir a confirmação.
### Histórico de Reservas
O sistema deve permitir ao empregado imprimir histórico de reservas. Para isso, o empregado deve estar previamente cadastrado e autenticado por código de identificação e senha.
O histórico deve conter uma linha para cada carro reservado pelo cliente ou para os carros reservados em um período.
## Metodologia UML
O projeto utiliza UML, Linguagem de Modelagem Unificada, para visualizar, especificar, construir e documentar os artefatos do sistema.
No documento, a UML é usada para representar:
- casos de uso;
- classes;
- sequências;
- atividades;
- implantação.
## Casos de Uso
### Diagrama Geral de Casos de Uso
flowchart TB
Administrador([Administrador])
Internauta([Internauta])
Associado([Associado])
UC_CadastrarVeiculos(("Cadastrar Veículos"))
UC_CadastrarCategorias(("Cadastrar Categorias"))
UC_CadastrarTarifas(("Cadastrar Tarifas"))
UC_ConsultarAssociados(("Consultar Associados"))
UC_CadastrarEmpregado(("Cadastrar Empregado"))
UC_CadastroDados(("Cadastro de Dados Pessoais"))
UC_ConsultaVeiculos(("Consulta Veículos"))
UC_ConsultaDados(("Consulta de Dados Pessoais"))
UC_ReservaVeiculos(("Reserva Veículos"))
UC_ConsultaReservas(("Consulta Reservas"))
UC_ConsultarPerfil(("Consultar Perfil"))
UC_CadastraPerfil(("Cadastra Perfil"))
UC_ConsultaContratos(("Consulta Contratos"))
UC_FecharContrato(("Fechar Contrato"))
Administrador --> UC_CadastrarVeiculos
Administrador --> UC_CadastrarCategorias
Administrador --> UC_CadastrarTarifas
Administrador --> UC_ConsultarAssociados
Administrador --> UC_CadastrarEmpregado
Administrador --> UC_CadastroDados
Administrador --> UC_ConsultaVeiculos
Administrador --> UC_ConsultaDados
Administrador --> UC_ReservaVeiculos
Administrador --> UC_ConsultaReservas
Administrador --> UC_ConsultarPerfil
Administrador --> UC_ConsultaContratos
Internauta --> UC_ConsultaVeiculos
Internauta --> UC_CadastroDados
Associado --> UC_CadastroDados
Associado --> UC_ConsultaDados
Associado --> UC_ReservaVeiculos
Associado --> UC_CadastraPerfil
Associado --> UC_FecharContrato
UC_CadastrarTarifas -.->|"<>"| UC_CadastrarCategorias
UC_CadastroDados -.->|"<>"| UC_CadastrarEmpregado
### 1. Cadastro de Dados Pessoais
**Descrição:** responsável pelo cadastro de novos usuários, incluindo criação de login e cadastro dos dados pessoais.
**Atores:** Internauta, Associado e Administrador.
**Condição:** apenas administradores podem cadastrar usuários administrativos.
**Curso normal:**
1. Usuário solicita novo cadastro.
2. Sistema verifica o tipo de usuário.
3. Usuário preenche login, e-mail, senha e dados necessários.
4. Usuário preenche dados pessoais.
5. Sistema verifica se já existe cliente com o CPF informado.
6. Usuário confirma os dados.
7. Sistema informa que o cadastro foi efetuado.
**Cursos alternativos:**
- Se o usuário for administrador, o sistema disponibiliza a escolha do tipo de usuário.
- Se o usuário cancelar, o cadastro é interrompido.
- Se o e-mail já estiver cadastrado, o sistema informa a duplicidade.
- Se o CPF já estiver cadastrado, o sistema informa a duplicidade.
**Classes relacionadas:** `LoginDGS`, `Criptografia`, `Associado`, `Empregado`.
### 2. Consulta de Dados Pessoais
**Descrição:** consulta e alteração dos dados de usuários cadastrados.
**Atores:** Administrador e Associado.
**Condição:** o usuário deve estar logado.
**Curso normal:**
1. Usuário solicita visualizar seus dados pessoais.
2. Sistema verifica se o usuário está logado.
3. Sistema retorna os dados do usuário.
4. Sistema finaliza a operação.
**Cursos alternativos:**
- Se o usuário não estiver logado, o sistema informa que é necessário efetuar login.
- O usuário pode cancelar a consulta.
- O usuário pode marcar a opção de alteração; nesse caso, o sistema informa que os dados foram alterados.
**Classes relacionadas:** `Empregado`, `Associado`.
### 3. Consultar Associados
**Descrição:** consulta e alteração dos dados pessoais de associados cadastrados.
**Ator:** Administrador.
**Condição:** usuário deve estar logado.
**Curso normal:**
1. Empregado solicita consulta de dados pessoais.
2. Sistema disponibiliza opções de consulta por ID, nome, e-mail ou CPF.
3. Sistema retorna os dados ordenados pela opção escolhida.
4. Usuário solicita visualização do associado selecionado.
**Cursos alternativos:**
- Se nenhum dado for encontrado, o sistema informa que nenhum registro foi localizado.
- O sistema disponibiliza os dados completos do associado.
- O usuário pode alterar os dados do associado.
- O usuário pode cancelar a alteração.
**Classes relacionadas:** `Empregado`, `Associado`, `Contrato`.
### 4. Cadastrar Veículos
**Descrição:** cadastro, alteração e exclusão de veículos.
**Ator:** Empregado.
**Condição:** deve existir categoria cadastrada.
**Curso normal:**
1. Empregado solicita cadastrar veículo e informa a placa.
2. Sistema verifica se o veículo já está cadastrado.
3. Empregado informa os dados do veículo e confirma o cadastro.
4. Sistema informa que os dados foram cadastrados.
**Cursos alternativos:**
- Se o veículo já estiver cadastrado, o sistema oferece opções de alterar ou excluir.
- Na alteração, o sistema atualiza os dados e informa sucesso.
- Na exclusão, o sistema remove o veículo associado à placa e informa sucesso.
- O usuário pode cancelar o cadastro.
**Classes relacionadas:** `Empregado`, `Carro`, `Categoria`.
### 5. Consultar Veículos
**Descrição:** consulta de veículos disponíveis e seus respectivos preços.
**Atores:** Internauta, Associado e Administrador.
**Condição:** nenhuma.
**Curso normal:**
1. Usuário solicita consulta.
2. Sistema informa as consultas disponíveis.
3. Usuário escolhe o veículo desejado.
4. Sistema verifica se o usuário está logado.
5. Usuário solicita reserva.
**Cursos alternativos:**
- Consulta por veículos: retorna veículos e preços ordenados por categoria.
- Consulta por preços: retorna veículos e preços ordenados por preço.
- Consulta por categorias: retorna veículos e preços ordenados por categoria.
- Se o usuário não estiver logado, o sistema informa que deve se autenticar para continuar.
**Classes relacionadas:** `Carro`, `Categoria`, `Tarifas`, `Reserva`.
### 6. Reservar Veículos
**Descrição:** criação de nova reserva e consulta de veículos para reserva.
**Ator:** Associado.
**Condição:** associado deve estar cadastrado e sem pendências.
**Curso normal:**
1. Usuário solicita reserva de veículo.
2. Sistema verifica se já existe reserva cadastrada.
3. Sistema verifica o tipo de usuário.
4. Usuário informa local, data e hora de retirada e devolução.
5. Usuário consulta veículos e escolhe um veículo.
6. Sistema verifica se o veículo está disponível.
7. Usuário confirma a reserva.
**Cursos alternativos:**
- Se já existir reserva, o sistema informa que o usuário possui reserva cadastrada.
- Se o usuário for administrador, o sistema redireciona para a interface de consulta.
- Se o veículo não estiver disponível, o sistema informa o motivo.
- Se dados estiverem incorretos, o sistema informa ao usuário.
- Se houver pendência, o sistema solicita contato com a central.
- O cliente pode cancelar a reserva.
**Classes relacionadas:** `Associado`, `Reserva`, `Veiculo`.
### 7. Consultar Reservas
**Descrição:** consulta, alteração e exclusão de reservas cadastradas.
**Atores:** Empregado e Associado.
**Condição:** apenas empregados podem consultar reservas de outros usuários.
**Curso normal:**
1. Usuário solicita consulta de veículos reservados.
2. Sistema disponibiliza opções de consulta direta, por período ou por data.
3. Sistema retorna os dados da reserva.
**Cursos alternativos:**
- Consulta direta: usuário informa CPF, placa, modelo ou categoria.
- Se não houver reserva, o sistema informa que não existem reservas cadastradas.
- Consulta por período: usuário informa início e fim.
- Consulta por data: usuário informa a data.
- Usuário pode cancelar a consulta.
**Classes relacionadas:** `Empregado`, `Reserva`, `Carro`, `Categoria`.
### 8. Fechar Contrato
**Descrição:** fechamento de contrato, criação de cadastro do contrato e formas de pagamento.
**Ator:** Associado.
**Condição:** associado deve estar logado e possuir reserva cadastrada.
**Curso normal:**
1. Usuário solicita efetuar pagamento.
2. Sistema informa tipos de pagamento disponíveis.
3. Sistema valida o pagamento.
4. Sistema informa que o contrato foi feito com sucesso.
**Cursos alternativos:**
- Cartão de crédito: sistema valida o cartão.
- Se o cartão não for válido, o sistema informa a inconsistência.
- Boleto bancário: sistema disponibiliza boleto para impressão.
- Se o pagamento for comprovado, o sistema envia e-mail com comprovante.
**Classes relacionadas:** `Associado`, `Carro`, `Reserva`, `Contrato`.
### 9. Cadastro de Empregados
**Descrição:** cadastro, alteração e exclusão de empregados.
**Ator:** Administrador.
**Condição:** apenas empregados com perfil máster podem alterar ou excluir.
**Curso normal:**
1. Usuário solicita novo cadastro e informa CPF ou e-mail.
2. Sistema verifica se não existe cliente cadastrado.
3. Usuário informa seus dados e confirma o cadastro.
4. Sistema informa que o cadastro foi efetuado.
**Cursos alternativos:**
- Se o usuário já estiver cadastrado, o sistema oferece opções de alterar ou excluir.
- Na alteração, o sistema atualiza os dados e informa sucesso.
- Na exclusão, o sistema remove o usuário associado ao CPF e informa sucesso.
- O usuário pode cancelar o cadastro.
**Classe relacionada:** `Empregados`.
### 10. Cadastrar Tarifas
**Descrição:** cadastro, consulta, alteração e exclusão de tarifas.
**Ator:** Empregado.
**Condição:** nenhuma.
**Curso normal:**
1. Usuário solicita cadastrar tarifa.
2. Sistema verifica se a tarifa está cadastrada.
3. Usuário informa os dados da tarifa e confirma o cadastro.
4. Sistema informa que a tarifa foi cadastrada.
**Cursos alternativos:**
- Se a tarifa já estiver cadastrada, o sistema oferece opções de consultar, alterar ou excluir.
- Consulta: sistema exibe tarifas cadastradas.
- Alteração: sistema atualiza dados e informa sucesso.
- Exclusão: sistema remove a tarifa associada à placa do veículo e informa sucesso.
- Usuário pode cancelar o cadastro.
**Classes relacionadas:** `Empregado`, `Tarifa`.
### 11. Consultar Contrato
**Descrição:** consulta de contratos fechados.
**Ator:** Empregado.
**Condição:** nenhuma.
**Curso normal:**
1. Empregado solicita consulta de contratos.
2. Sistema disponibiliza opções de consulta direta, por situação ou por período.
3. Sistema retorna os dados da consulta.
**Cursos alternativos:**
- Consulta direta: empregado informa código do contrato, placa do veículo ou CPF do associado.
- Consulta por situação: empregado informa se o contrato está em análise, contratado ou concluído.
- Consulta por período: empregado informa início e fim do período.
- Usuário pode cancelar a consulta.
**Classes relacionadas:** `Contrato`, `Carro`, `Categoria`, `Associados`, `Empregado`.
### 12. Cadastrar Perfil
**Descrição:** cadastro do perfil do associado para apoio à oferta de veículos e promoções.
**Ator:** Associado.
**Condição:** associado deve estar cadastrado no sistema.
**Curso normal:**
1. Usuário efetua login.
2. Sistema verifica se o perfil está cadastrado.
3. Sistema oferece veículos e promoções.
**Curso alternativo:**
- Se o perfil não estiver cadastrado, o sistema informa a ausência do perfil e disponibiliza questionário para preenchimento.
**Classes relacionadas:** `Associado`, `Carro`, `Tarifas`.
## Diagrama de Classes
classDiagram
direction LR
class BancoDados {
+conecta() void
+desconecta() void
#conn: SqlConnection
}
class Criptografia {
-IV: Byte[]
-KEY: Byte[]
+encrypt(strValor: String) String
+decrypt(strValor: String) String
}
class LoginDGS {
-login: String
-email: String
-pwd: String
-type: String
-dataCadastro: String
-ultimoAcesso: String
-sqlC: SqlCommand
-cs: Criptografia
+loginDGS()
+loginDGS(usuario: String)
+verificar(usuario: String) boolean
+getAcesso() boolean
+atualAcesso() void
}
class Loga {
-log: LoginDGS
-usuario: String
-senha: String
+Loga(usuario: String)
+retornaLogin() String
+retornaEmail() String
+retornaTipo() String
+retornaUltimoAcesso() String
}
class Associado {
+Associado()
+Associado(nome: String)
+Associado(DGS: AssociadoDGS, email: String)
+insereAssociado(s: AssociadoDGS) boolean
+insereBanco(DGS: AssociadoDGS) boolean
}
class AssociadoDGS {
-email: String
-nome: String
-sexo: String
-pwd: String
-cpf: String
-rg: String
-orgao: String
-cnh: String
-bairro: String
-endereco: String
-complemento: String
-numero: String
-cep: String
-bairro: String
-cidade: String
-estado: String
-idade: String
-tel: String
-funcao: String
-perfil: String
}
class Empregado {
+insereEmpregado(Emp: AssociadoDGS) boolean
+insereBanco(DGS: AssociadoDGS) boolean
}
class Veiculo {
-placa: String
-fabricante: String
-ano: String
-marca: String
-modelo: String
+insereVeiculo() boolean
+alteraVeiculo() boolean
+excluiVeiculo() boolean
+listaVeiculo() DataSet
}
class Categoria {
#idCategoria: int
#tipo: char
#qtde: int
#descricao: String
-Categoria()
}
class Tarifa {
-idTarifa: int
-km: double
-diaria: double
-semanal: double
-mensal: double
-atributo: int
-Tarifa()
+insereDados() boolean
+altDados() boolean
+excDados() boolean
}
class Reserva {
#idVeiculo: int
#idCategoria: int
#idAssociado: int
#estadoRet: String
#cidadeRet: String
#dtRet: String
#hrRet: String
#estadoDev: String
#cidadeDev: String
#dtDev: String
#hrDev: String
-Reserva()
+insereReserva(Ass: String) boolean
+verificaReserva(Associado: String) boolean
}
class Contrato {
-idContrato: int
-dtAssinatura: String
-status: String
-obs: String
-Contrato()
+fecharContrato() boolean
+insereContrato() boolean
+excContrato() boolean
}
class Pagamento {
-idPagamento: int
-dtPagamento: String
-total: double
+efetuaPagamento() boolean
+cancelaPagamento() boolean
}
class Cartao {
-idCartao: int
-marcaCartao: String
-validadeCartao: int
-idSeguranca: int
-Cartao()
+validarCartao() boolean
}
class Boleto {
-idBoleto: int
-cedente: String
+geraBoleto() void
}
class IAperfil {
+gerarPerfil() void
}
BancoDados <|-- LoginDGS
LoginDGS <|-- Loga
Criptografia --> LoginDGS
Associado <|-- Empregado
Associado --> AssociadoDGS
Associado --> IAperfil
Associado --> Reserva
Associado --> Veiculo
Veiculo o-- Categoria
Tarifa --> Categoria
Reserva --> Contrato
Pagamento <|-- Cartao
Pagamento <|-- Boleto
Contrato --> Pagamento
## Diagramas de Sequência
### Cadastro de Dados Pessoais
sequenceDiagram
actor Usuario
participant Interface as Interface de cadastro de dados pessoais
participant Associado
Usuario->>Interface: 1. Informa dados (CPF, e-mail)
Interface->>Associado: 1.1. Verifica usuário cadastrado
alt usuário não cadastrado
Interface-->>Usuario: 1.2. Usuário não cadastrado
Usuario->>Interface: 2. Preenche dados pessoais
Usuario->>Interface: 3. Salvar registro
Interface->>Associado: 3.1. Adiciona dados à tabela associado
Interface-->>Usuario: 3.2. Dados cadastrados
else usuário cadastrado
Associado-->>Interface: 4. Retorna dados
Interface-->>Usuario: 4.1. Mostrar dados
Usuario->>Interface: 5. Altera registro
Interface->>Associado: 5.1. Altera dados na tabela associado
Interface-->>Usuario: 5.2. Dados alterados
end
### Consulta de Dados Pessoais
sequenceDiagram
actor AssociadoAtor as Associado
participant Interface as Interface de consulta de dados pessoais
participant Associado
AssociadoAtor->>Interface: 1. Visualizar dados
Interface->>Interface: 2. Verificar login
alt usuário não cadastrado ou não logado
Interface-->>AssociadoAtor: Usuário não cadastrado
else usuário cadastrado
Interface->>Associado: 3. Usuário cadastrado
Associado-->>Interface: Retorna dados do usuário
Interface-->>AssociadoAtor: 4. Dados do usuário
AssociadoAtor->>Interface: 5. Alterar dados pessoais
Interface->>Associado: 5.1. Inserir dados no banco
Interface-->>AssociadoAtor: Dados alterados
end
### Consulta de Associados
sequenceDiagram
actor Administrador
participant Interface as Interface de consulta de dados pessoais
participant Associado
participant Contrato
participant Reserva
Administrador->>Interface: 1. Solicita consulta (CPF, CNH, placa)
Interface->>Interface: 1.1. Verifica dados
alt dados não cadastrados
Interface-->>Administrador: 1.3. Dados não cadastrados
else dados cadastrados
Interface->>Associado: 1.2. Dados cadastrados
Associado-->>Interface: 2. Retorna dados do usuário
Interface-->>Administrador: 2.1. Mostra dados do usuário
end
Administrador->>Interface: 3. Solicita consulta contrato
Interface->>Contrato: 3.1. Consultar contratos
Contrato-->>Associado: 4. Retorna dados do contrato
Associado-->>Interface: 4.1. Retorna dados do usuário
Interface-->>Administrador: 4.1.1. Mostra usuário com contrato
Administrador->>Interface: 5. Solicita consulta reserva
Interface->>Reserva: 5.1. Consultar reservas
Reserva-->>Associado: 6. Retorna dados de reserva
Associado-->>Interface: 6.1. Retorna dados do usuário
Interface-->>Administrador: 6.1.1. Mostra usuário com reservas
### Cadastrar Veículos
sequenceDiagram
actor Administrador
participant Interface as Interface de cadastro de veículos
participant Veiculos
Administrador->>Interface: 1. Solicita cadastro do veículo (placa)
Interface->>Veiculos: 1.1. Verifica veículo já cadastrado
alt veículo não cadastrado
Interface-->>Administrador: 1.2. Veículo não cadastrado
Administrador->>Interface: 2. Preenche dados
Administrador->>Interface: 3. Salva registro
Interface->>Veiculos: 3.1. Adiciona dados à tabela
else veículo cadastrado
Administrador->>Veiculos: 4. Informa categoria do veículo
Veiculos-->>Interface: 5. Retorna dados do veículo
Interface-->>Administrador: 5.1. Mostra dados do veículo
Administrador->>Interface: 6. Altera registro
Interface->>Veiculos: 6.1. Altera dados da tabela
Administrador->>Interface: 7. Exclui registro
Interface->>Veiculos: 7.1. Exclui dados da tabela
end
### Consultar Veículos
sequenceDiagram
actor Usuario
participant Interface as Interface de consulta de veículos
participant Veiculos
participant Reserva
Usuario->>Interface: 1. Solicita consulta (veículos, preços, categoria)
Interface->>Veiculos: 1.1. Dados da consulta
Veiculos-->>Interface: 2. Retorna dados da consulta
Interface-->>Usuario: 2.1. Mostra dados da consulta
Usuario->>Interface: 3. Escolhe o veículo
Interface->>Interface: 3.1. Verifica login
alt usuário logado
Interface->>Reserva: 3.2. Usuário logado
else usuário não logado
Interface-->>Usuario: 3.3. Não logado
end
### Reservar Veículos
sequenceDiagram
actor Usuario
participant InterfaceReserva as Interface de reserva
participant InterfaceCarros as Interface de carros
participant Reserva
Usuario->>InterfaceReserva: 1. Solicita reserva
InterfaceReserva->>InterfaceCarros: 1.1. Verifica reserva cadastrada
InterfaceCarros->>Reserva: 1.1.1. Consulta dados
alt reserva não cadastrada
InterfaceReserva-->>Usuario: 1.2. Reserva não cadastrada
Reserva-->>InterfaceCarros: 2. Retorna dados
InterfaceCarros-->>Usuario: 2.1. Mostra lista de veículos
Usuario->>InterfaceReserva: 3. Informa data e hora
InterfaceReserva->>InterfaceReserva: 3.1. Verificar veículo
alt veículo não disponível
InterfaceReserva-->>Usuario: 3.2. Veículo não disponível
else usuário com pendência
InterfaceReserva->>InterfaceReserva: 3.3. Verificar pendência
InterfaceReserva-->>Usuario: 3.4. Usuário com pendência
else reserva válida
InterfaceReserva->>Reserva: 3.5. Adiciona registro à tabela reserva
end
else reserva cadastrada
InterfaceCarros-->>InterfaceReserva: Reserva cadastrada
end
### Consultar Reservas
sequenceDiagram
actor Administrador
participant Interface as Interface de consulta de reserva
participant Reserva
Administrador->>Interface: 1. Solicita consulta (CPF, placa, modelo, categoria)
Interface->>Interface: 1.1. Verificar reserva
alt reserva não cadastrada
Interface-->>Administrador: 1.2. Reserva não cadastrada
else reserva cadastrada
Interface->>Reserva: 1.3. Reserva cadastrada
end
Administrador->>Interface: 2. Solicita consulta (início, fim)
Interface->>Reserva: 2.1. Consultar dados da tabela por período
Administrador->>Interface: 3. Solicita consulta (data)
Interface->>Reserva: 3.1. Consultar dados da tabela por data
Reserva-->>Interface: 4. Retorna dados da consulta
Interface-->>Administrador: 4.1. Mostra dados da reserva
### Fechar Contrato
sequenceDiagram
actor Associado
participant Interface as Interface de pagamento
participant Contrato
participant Cartao as Cartão
participant Boleto
participant Email as E-mail
Associado->>Interface: 1. Solicita efetuar pagamento
Interface-->>Associado: 2. Informa tipos de pagamento
alt pagamento por cartão
Associado->>Interface: Escolhe cartão de crédito
Interface->>Cartao: Valida cartão
alt cartão inválido
Interface-->>Associado: Cartão não é válido
else cartão válido
Interface->>Contrato: Confirma pagamento
end
else pagamento por boleto
Associado->>Interface: Escolhe boleto bancário
Interface->>Boleto: Gera boleto
Boleto-->>Associado: Boleto para impressão
Interface->>Contrato: Confirma pagamento comprovado
end
Contrato-->>Interface: Contrato fechado com sucesso
Interface->>Email: Envia comprovante de pagamento
### Cadastro de Empregados
sequenceDiagram
actor Administrador
participant Interface as Interface de cadastro de empregados
participant Empregado
Administrador->>Interface: 1. Solicita cadastro (CPF ou e-mail)
Interface->>Empregado: 1.1. Verifica empregado cadastrado
alt empregado não cadastrado
Interface-->>Administrador: Empregado não cadastrado
Administrador->>Interface: 2. Informa dados
Administrador->>Interface: 3. Confirma cadastro
Interface->>Empregado: 3.1. Adiciona empregado
Interface-->>Administrador: Cadastro efetuado
else empregado cadastrado
Interface-->>Administrador: Opções alterar ou excluir
Administrador->>Interface: Alterar cadastro
Interface->>Empregado: Atualiza dados
Administrador->>Interface: Excluir cadastro
Interface->>Empregado: Exclui empregado
end
### Cadastrar Tarifas
sequenceDiagram
actor EmpregadoAtor as Empregado
participant Interface as Interface de cadastro de tarifas
participant Tarifa
EmpregadoAtor->>Interface: 1. Solicita cadastrar tarifa
Interface->>Tarifa: 2. Verifica tarifa cadastrada
alt tarifa não cadastrada
EmpregadoAtor->>Interface: 3. Informa dados da tarifa
Interface->>Tarifa: Salva tarifa
Interface-->>EmpregadoAtor: Tarifa cadastrada
else tarifa cadastrada
Interface-->>EmpregadoAtor: Opções consultar, alterar e excluir
EmpregadoAtor->>Interface: Consultar
Interface->>Tarifa: Exibe tarifas cadastradas
EmpregadoAtor->>Interface: Alterar
Interface->>Tarifa: Atualiza tarifa
EmpregadoAtor->>Interface: Excluir
Interface->>Tarifa: Exclui tarifa
end
### Consultar Contrato
sequenceDiagram
actor EmpregadoAtor as Empregado
participant Interface as Interface de consulta de contratos
participant Contrato
participant Associado
participant Veiculo
EmpregadoAtor->>Interface: 1. Solicita consulta de contratos
Interface-->>EmpregadoAtor: 2. Opções direta, situação ou período
alt consulta direta
EmpregadoAtor->>Interface: Código do contrato, placa ou CPF
else consulta por situação
EmpregadoAtor->>Interface: Situação em análise, contratada ou concluída
else consulta por período
EmpregadoAtor->>Interface: Início e fim do período
end
Interface->>Contrato: Consulta contratos
Contrato->>Associado: Relaciona associado
Contrato->>Veiculo: Relaciona veículo
Contrato-->>Interface: Retorna dados da consulta
Interface-->>EmpregadoAtor: Mostra contratos
### Cadastrar Perfil
sequenceDiagram
actor AssociadoAtor as Associado
participant Interface as Interface de perfil
participant Perfil
participant Fuzzy as Motor de lógica nebulosa
participant Oferta as Veículos e promoções
AssociadoAtor->>Interface: 1. Efetua login
Interface->>Perfil: 2. Verifica perfil cadastrado
alt perfil cadastrado
Perfil->>Fuzzy: Processa dados do perfil
Fuzzy->>Oferta: Classifica Basic, Advanced ou Master
Oferta-->>AssociadoAtor: 3. Oferece veículos e promoções
else perfil não cadastrado
Interface-->>AssociadoAtor: Perfil não cadastrado
Interface-->>AssociadoAtor: Disponibiliza questionário
end
## Diagrama de Atividade
O diagrama de atividade descreve o fluxo de aluguel sem necessidade de comparecimento físico à locadora.
flowchart TD
Inicio((Início)) --> Login[Usuário se loga]
Login --> Cadastro{Usuário já cadastrado?}
Cadastro -- Não --> ForkCadastro[[Sincroniza cadastro]]
ForkCadastro --> SolicitaInfo[Solicita informações do usuário]
ForkCadastro --> CadastraInfo[Cadastra informações do usuário]
SolicitaInfo --> JoinCadastro[[Dados do usuário prontos]]
CadastraInfo --> JoinCadastro
JoinCadastro --> Menu[Exibe menu de opções]
Cadastro -- Sim --> Menu
Menu --> Logoff{Usuário efetua logoff?}
Logoff -- Sim --> EfetuarLogoff[Efetuar logoff] --> FimLogoff((Fim))
Logoff -- Não --> Reserva{Reserva cadastrada?}
Reserva -- Não --> ForkReserva[[Preparar reserva]]
ForkReserva --> InfoVeiculo[Informações do veículo]
ForkReserva --> InfoReserva[Informações da reserva]
InfoVeiculo --> JoinReserva[[Dados da reserva prontos]]
InfoReserva --> JoinReserva
JoinReserva --> Pendencia{Usuário com pendências?}
Pendencia -- Sim --> DialogoPendencia[Exibe diálogo informando a pendência] --> FimPendencia((Fim))
Pendencia -- Não --> MenuAluguel[Exibe menu de aluguel]
Reserva -- Sim --> MenuAluguel
MenuAluguel --> FormasPagamento[Exibe tela com formas de pagamento]
FormasPagamento --> TipoPagamento{Forma de pagamento}
TipoPagamento -- Cartão --> ValidaCartao[Valida cartão]
ValidaCartao --> CartaoValido{Cartão válido?}
CartaoValido -- Não --> InformaCartao[Informa cartão inválido] --> FimCartao((Fim))
CartaoValido -- Sim --> ConfirmaPagamento[Confirma pagamento]
TipoPagamento -- Boleto --> ImprimeBoleto[Imprime boleto]
ImprimeBoleto --> AguardaPagamento[Aguarda confirmação de pagamento]
AguardaPagamento --> ConfirmaPagamento
ConfirmaPagamento --> FechaContrato[Fecha contrato]
FechaContrato --> EnviaEmail[Envia e-mail]
EnviaEmail --> FimContrato((Fim))
## Diagrama de Implantação
O sistema é descrito como cliente-servidor, com banco de dados centralizado contendo os registros acessados por usuários e empregados.
flowchart TB
PaginaASP[Pagina.ASP]
subgraph ServidorAlugueis["Servidor de Aluguéis"]
SistemaWeb["SistemaWeb.DLL"]
Seguranca["Segurança.DLL"]
end
subgraph ServidorBD["Servidor de Banco de Dados"]
SQLServer["SQL Server"]
end
PaginaASP -.-> SistemaWeb
PaginaASP -.-> Seguranca
SistemaWeb -.-> SQLServer
Seguranca -.-> SQLServer
## Lógica Nebulosa
### Definição
A lógica nebulosa, também chamada de lógica difusa, generaliza a lógica booleana e permite valores intermediários entre verdadeiro e falso. No projeto, ela é usada para tratar incertezas no perfil do cliente e auxiliar a oferta de veículos e promoções.
### Objetivo no SIGACAR
Cada associado deve cadastrar seu perfil por meio de um questionário. Algumas respostas, combinadas aos dados já cadastrados, são transformadas em variáveis de entrada para o processo de fuzzificação.
O perfil do associado pode ser classificado como:
- `Basic`;
- `Advanced`;
- `Master`.
### Arquitetura Funcional de um Sistema Nebuloso
flowchart LR
Entrada[Entradas precisas]
Fuzzificacao[Fuzzificação]
Conjuntos[(Conjuntos nebulosos)]
Regras[(Regras nebulosas)]
Inferencia[Inferência nebulosa]
Defuzzificacao[Defuzzificação]
Saida[Saídas precisas]
Entrada --> Fuzzificacao
Conjuntos --> Fuzzificacao
Fuzzificacao --> Inferencia
Regras --> Inferencia
Inferencia --> Defuzzificacao
Conjuntos --> Defuzzificacao
Defuzzificacao --> Saida
### Conjuntos Nebulosos
#### Idade
| Faixa | 16 a 20 | 20 a 29 | 30 a 39 | 40 a 49 | 50 a 59 | 60 a 69 | 70 a +70 |
| --- | ---: | ---: | ---: | ---: | ---: | ---: | ---: |
| Muito jovem | 0,8 | 0,65 | 0,3 | 0,2 | 0,15 | 0,1 | 0,1 |
| Jovem | 0,6 | 0,45 | 0,65 | 0,35 | 0,25 | 0,2 | 0,1 |
| Adulto | 0,1 | 0,2 | 0,45 | 0,75 | 0,8 | 0,65 | 0,3 |
| Idoso | 0,1 | 0,1 | 0,2 | 0,2 | 0,3 | 0,45 | 0,7 |
#### Salário
| Faixa | 190 | 380 | 760 | 1200 | 1900 | 2500 | 3800 a +3800 |
| --- | ---: | ---: | ---: | ---: | ---: | ---: | ---: |
| Baixo | 0,8 | 0,7 | 0,65 | 0,3 | 0,2 | 0,15 | 0,1 |
| Médio | 0,3 | 0,4 | 0,45 | 0,7 | 0,8 | 0,2 | 0,1 |
| Alto | 0,1 | 0,2 | 0,3 | 0,4 | 0,5 | 0,65 | 0,9 |
#### Carteira
| Faixa | 1/2 a 1 | 1 a 5 | 5 a 10 | 10 a 15 | 15 a 20 | 20 a 25 | 25 a +25 |
| --- | ---: | ---: | ---: | ---: | ---: | ---: | ---: |
| Baixo risco | 0,1 | 0,2 | 0,3 | 0,3 | 0,15 | 0,45 | 0,8 |
| Médio risco | 0,2 | 0,45 | 0,5 | 0,55 | 0,45 | 0,35 | 0,2 |
| Alto risco | 1,0 | 0,65 | 0,4 | 0,25 | 0,2 | 0,15 | 0,1 |
#### Perfil
| Faixa | 0 | 200 | 500 | 1000 | 1200 | 2000 a +2000 |
| --- | ---: | ---: | ---: | ---: | ---: | ---: |
| Basic | 1,0 | 0,8 | 0,65 | 0,25 | 0,1 | 0,1 |
| Advanced | 0,1 | 0,2 | 0,45 | 0,75 | 0,85 | 0,2 |
| Master | 0,1 | 0,1 | 0,1 | 0,15 | 0,25 | 0,9 |
### Fuzzificação do Exemplo
O documento usa como exemplo o usuário **Pedro de Assis Motta**, com:
- idade: 28 anos;
- salário: R$ 1.440,00;
- experiência na carteira de motorista: 10 anos.
Graus de pertinência:
| Variável | Conjunto | Grau |
| --- | --- | ---: |
| Idade | Jovem | 0,45 |
| Idade | Adulto | 0,2 |
| Idade | Idoso | 0,1 |
| Salário | Menos de dois salários mínimos | 0,2 |
| Salário | De dois a cinco salários mínimos | 0,6 |
| Salário | De cinco a dez salários mínimos | 0,4 |
| Carteira | Baixo risco | 0,65 |
| Carteira | Médio risco | 0,65 |
| Carteira | Alto risco | 0,35 |
### Regras Nebulosas
| Regra | Condição | Resultado |
| --- | --- | --- |
| R1 | Idade muito jovem, salário de um a três salários mínimos e carteira de alto risco | Perfil Basic |
| R2 | Idade muito jovem, salário até dez salários mínimos e carteira de baixo risco | Perfil Advanced |
| R3 | Idade muito jovem, salário maior que dez salários mínimos e carteira de médio risco | Perfil Master |
| R4 | Idade jovem, salário de dois a cinco salários mínimos e carteira de alto risco | Perfil Basic |
| R5 | Idade jovem, salário de cinco a dez salários mínimos e carteira de baixo risco | Perfil Advanced |
| R6 | Idade jovem, salário maior que dez salários mínimos e carteira de médio risco | Perfil Master |
| R7 | Idade adulta, salário de dois a cinco salários mínimos e carteira de alto risco | Perfil Advanced |
| R8 | Idade adulta, salário de cinco a dez salários mínimos e carteira de baixo risco | Perfil Advanced |
| R9 | Idade adulta, salário maior que dez salários mínimos e carteira de médio risco | Perfil Advanced |
| R10 | Idade idosa, salário de dois a cinco salários mínimos e carteira de alto risco | Perfil Advanced |
| R11 | Idade idosa, salário de cinco a dez salários mínimos e carteira de baixo risco | Perfil Advanced |
| R12 | Idade idosa, salário maior que dez salários mínimos e carteira de médio risco | Perfil Advanced |
### Defuzzificação do Exemplo
O documento apresenta três regras disparadas no exemplo:
| Regra | Cálculo do grau de disparo | Resultado |
| --- | --- | --- |
| Regra 1 | `min(0,45; 0,2; 0,35) = 0,2` | Perfil Basic com pertinência 0,2 |
| Regra 2 | `min(0,1; 0,6; 0,65) = 0,1` | Perfil Advanced com pertinência 0,1 |
| Regra 3 | `min(0,2; 0,4; 0,35) = 0,2` | Perfil Master com pertinência 0,2 |
Valores finais usados:
- `µBasic(X) = 0,2`, com `X = 850`;
- `µAdvanced(Y) = 0,1`, com `Y = 0`;
- `µMaster(Z) = 0,2`, com `Z = 900`.
Cálculo:
Perfil = ((0,2 * 850) + (0,1 * 0) + (0,2 * 900)) / (0,2 + 0,1 + 0,3)
Perfil = 530 pontos
Assim, pelo sistema nebuloso do documento, um associado com 28 anos, salário de R$ 1.440,00 e 10 anos de carteira deve obter **530 pontos** como saída precisa.
## Implementação
### Visão Geral
O protótipo foi desenvolvido com arquitetura cliente-servidor em três camadas. Essa arquitetura busca:
- separar interface, lógica e dados;
- facilitar escalabilidade;
- tornar a base de dados mais independente;
- permitir desenvolvimento de interfaces gráficas mais amigáveis;
- reduzir necessidade de recursos excessivos nos servidores.
### Tecnologias Utilizadas
| Tecnologia | Papel no projeto |
| --- | --- |
| .NET Framework | Plataforma Microsoft para desenvolvimento e execução de aplicações web. |
| ASP.NET | Parte da plataforma .NET usada para criação de páginas e componentes web. |
| C# | Linguagem utilizada para criar componentes do .NET Framework e implementar regras do sistema. |
| AJAX | Técnica para execução de código sem recarregar páginas, reduzindo postbacks e reloads. |
| SQL Server 2000 | Sistema gerenciador de banco de dados usado para persistência centralizada. |
Elementos do .NET Framework citados:
- CLR;
- Metadata;
- Assemblies;
- linguagens habilitadas ao .NET;
- Common Type System;
- interoperabilidade entre linguagens;
- Web Services;
- servidores .NET;
- ADO.NET.
## Telas do Sistema
O documento descreve as principais telas do protótipo:
| Figura | Tela | Função |
| --- | --- | --- |
| 5.3.1 | Tela principal de entrada do website | Permite solicitar senha, realizar novo cadastro como associado e acessar funções iniciais. |
| 5.3.2 | Login do administrador | Tela de autenticação com opção de tipo de usuário para administradores. |
| 5.3.3 | Login comum | Tela de autenticação sem opção administrativa de tipo de usuário. |
| 5.3.4 | Cadastro e consulta de dados pessoais | Permite cadastrar e consultar dados pessoais; a consulta exibe opção de alteração. |
| 5.3.5 | Consulta de associados | Permite pesquisar e ordenar usuários por ID, nome, e-mail ou CPF. |
| 5.3.6 | Visualização completa de associado | Exibe dados completos do associado e permite alteração por administradores. |
| 5.3.7 | Consulta de veículos | Permite pesquisar e ordenar veículos por placa, preço e categoria. |
| 5.3.8 | Visualização completa de veículo | Exibe dados completos do veículo e permite alteração por administradores. |
| 5.3.9 | Cadastro de reservas | Interface para criação de reserva de veículo. |
## Conclusão
O projeto utilizou UML para descrever processos, classes e interações do sistema. O protótipo atende requisitos mínimos para funcionamento de uma locadora de automóveis on-line, incluindo cadastro, consulta, reserva, pagamento e fechamento de contratos.
A lógica nebulosa foi incorporada para lidar com situações incertas e classificar o perfil do associado, apoiando a oferta de produtos e promoções conforme características do cliente.
O sistema proposto busca oferecer diversidade de informações sobre veículos, segurança, confiabilidade, rapidez e comodidade, contribuindo para um atendimento mais eficiente.
## Referências
Referências bibliográficas citadas no documento original:
- BOJADZIEV E BOJADZIEV. *Lógica Nebulosa e Sistemas Nebulosos*, 1997.
- CEZAR, Cláudio. *Apostila de UML*. Rio de Janeiro, 2000.
- FOWLER, Martin; SCOTT, Kendall. *UML Essencial*. 2ª ed. São Paulo: Bookman, 2000.
- FURLAN, J. D. *Modelagem de objetos através da UML*. São Paulo: Market Books, 1999.
- GEORGE J. KLIR; BO YUAN. *Fuzzy Sets and Fuzzy Logic: Theory and Applications*. Prentice Hall PTR, 1995.
- LARMAN, C. *Utilizando UML e Padrões*. São Paulo: Bookman, 2000.
- REZENDE. Artigos sobre lógica nebulosa, 2003.
- TANSCHEIT, R. "Lógica Fuzzy, Raciocínio Aproximado e Mecanismos de Inferência". Anais do 17º Encontro Nacional de Automática, Natal, RN, julho/1998.
- RUMBAUGH, James; BLAHA, Michael; PREMERLANI, William; EDDY, Frederick; LORENSEN, William. *Modelagem e Projeto Baseado em Objetos*. Rio de Janeiro: Campus, 1994.
Consultas via internet citadas:
- AJAX Control Toolkit: `ajax.asp.net/ajaxtoolkit/NET`
- Cotando: `http://www.cotando.com.br`
- Buggy Mania: `http://www.buggymania.com`
- Locadora Curumim: `http://www.locadoracurumim.com.br`
- Mauricio Junior: `http://www.mauriciojunior.org`
- Macoratti: `http://www.macoratti.net/07/09/aspn_ujs2.htm`
- Microsoft .NET Shared Hosting: `http://www.vwdhosting.net/`
- Katatudo: `http://www.katatudo.com.br/buscas/aluguel_de_carro_porto_seguro.html`
- Locacity: `http://www.locacity.com.br`
- Softpedia: `http://www.softpedia.com/progDownload/AJAX-Control-Toolkit-Download-82908.html`
- Wikipedia .NET: `http://pt.wikipedia.org/wiki/.net`
- Linha de Código: `http://www.linhadecodigo.com.br/`