Universidade de Pernambuco Escola Politécnica de Pernambuco Ciclo Profissional Banco de Dados NF Projeto de Banco de Dados Parking Manager Recife, maio de 2012.
Projeto realizado pelos discentes André Ramos, Felipe Farias, Gildo Ferrúcio e Henrique Siqueira; da turma NF como componente da nota do 2º E.E. 2
Conteúdo 1. Motivação...4 2. Visão geral do sistema...5 2.1. Abrangência e sistemas relacionados...5 2.1.1. Abrangência...5 2.1.2. Sistemas relacionados...6 2.1.3. Escopo negativo...6 2.2. Descrição dos usuários...6 3. Requisitos funcionais...8 4. Requisitos não funcionais...9 5. Diagrama de casos de uso...10 6. Modelo ER...11 7. Tabelas...12 8. Modelo Relacional...13 9. Script SQL...14 10. Consultas...15 3
1. Motivação A motivação para o Parking Manager veio da oportunidade de negócio com o desenvolvimento de um sistema de gerenciamento completo. Com o qual o dono do estacionamento pode ter um controle mais amplo do seu estabelecimento, levando satisfação aos seus clientes. Com o terminal de entrada do estacionamento apresentando as vagas liberadas, os seus clientes poderão selecionar uma vaga sem ter que perder tempo procurando por vagas disponíveis. Com o pagamento em terminais de pagamento dentro dos estabelecimentos, os clientes poderão enfrentar filas menores na hora de pagar o seu ticket. Ou então poderão não enfrentar filas e pagar o seu ticket de forma confortável e segura utilizando dispositivos móveis. Além das facilidades supracitadas, os clientes mensalistas são gerenciados de forma simples e confiável. 4
2. Visão geral do sistema 2.1. Abrangência e sistemas relacionados 2.1.1. Abrangência O sistema tratado neste documento é contextualizado no gerenciamento de um estacionamento de estabelecimentos de médio e grande porte. O mesmo é capaz de fazer manipulação de clientes cadastrados, vagas ocupadas e livres, extração de relatórios. De maneira geral o sistema irá funcionar de acordo com a seguinte esquematização: O dono do veículo irá se dirigir à cancela, onde haverá um terminal apresentando as vagas liberadas, escolher qual vaga irá ocupar e receber um ticket com o número da vaga, data de entrada e um QR code. Os Administradores do Sistema devem se registrar. O Administrador do Sistema deve registrar os administradores do estacionamento. Todos os administradores devem se logar. Administradores do estacionamento poderão acessar o sistema por meio de uma interface de gerenciamento a partir de um dispositivo móvel ou de um computador. Administradores do estacionamento podem consultar a base de dados, extrair relatórios sobre vagas ocupadas, controle de caixa, aplicar multas nos clientes que os carros não estiverem na vaga escolhida previamente, isentar o pagamento do ticket do cliente que escolheu uma vaga ocupada por outro carro indevidamente. Os Clientes que desejarem se tornar mensalistas devem se registrar no terminal de pagamento ou através de um dispositivo móvel. E o administrador do estacionamento ou do sistema deve aprovar o registro. O Cliente Mensalista, antes de escolher a vaga, deve se logar por meio de um cartão no terminal de entrada do estacionamento. Os Clientes Mensalistas poderão atualizar o cadastro e solicitar a desvinculação do programa de mensalistas através do terminal de pagamentos ou de um dispositivo móvel. Os Administradores do estacionamento ou do sistema irão remover o vínculo do cliente mensalista, caso seja solicitada a desvinculação e não haja pendências desse mensalista. O Cliente, mensalista ou não, poderá fazer o pagamento através de um terminal de pagamentos disponível no estabelecimento ou através de algum 5
dispositivo móvel que ele possua. Caso o Cliente opte ir para um terminal realizar o pagamento, irá inserir o ticket que recebeu na entrada, para que o sistema leia o QR Code e saiba qual vaga irá manipular. Após as verificações no QR Code, o sistema irá solicitar ao cliente a forma de pagamento: dinheiro ou cartão. Caso o Cliente opte efetuar o pagamento através do seu dispositivo móvel, será utilizado a câmera do aparelho para fazer a leitura do QR Code, e o cliente fará o pagamento através do cartão de crédito/débito. O Cliente Mensalista deverá acessar o terminal de pagamentos ou algum dispositivo móvel numa determinada faixa de datas do mês para efetuar o pagamento da mensalidade. Se o Cliente, mensalista ou não, optar por pagamento através cartão, o sistema irá se comunicar com a operadora do cartão para a aprovação do pagamento. O Administrador do Sistema poderá configurar os valores cobrados pelo estacionamento, e valores de punições. O Parking Manager é dividido nos seguintes módulos: Clientes Administradores Pagamento 2.1.2. Sistemas relacionados O Parking Manager irá interagir com o sistema de transações de operadoras de cartão de crédito. 2.1.3. Escopo negativo O sistema aqui tratado será indicado para estacionamentos de estabelecimentos como hospitais, shopping centers, estacionamentos privados, clubes. Não será tratado neste projeto, a maneira como as operadoras irão validar a transação. 2.2. Descrição dos usuários No Parking Manager existem os seguintes usuários: 2.2.1. Cliente Cliente avulso do estacionamento que paga as tarifas predefinidas. 2.2.2. Mensalista 6
Cliente que faz uso regular do estacionamento. O qual é cadastrado no sistema e faz pagamento mensal com tarifa diferenciada. 2.2.3. Administrador do estacionamento Administra o estacionamento e faz controle dos clientes cadastrados. 2.2.4. Administrador do sistema Administra o sistema e possui controle sobre os administradores do estacionamento. Possuindo controle total sobre o sistema. Ou seja, é um tipo especial de administrador herdando características do administrador do estacionamento. 7
3. Requisitos funcionais Código Descrição Módulo RF01 Entrar no estacionamento Clientes RF02 Penalizar ocupações indevidas Administradores RF03 Isentar ticket Administradores RF04 Logar mensalista Clientes RF05 Logar administradores Administradores RF06 Registrar administrador sistema Administradores RF07 Registrar administrador estacionamento Administradores RF08 Registrar mensalista Clientes RF09 Aprovar cadastro mensalista Administradores RF10 Aprovar desvinculação mensalista Administradores RF11 Consultar base de clientes Administradores RF12 Gerar relatório de vagas Administradores RF13 Gerar relatório de caixa Administradores RF14 Atualizar cadastro Administradores RF15 Solicitar desvinculação Administradores RF16 Pagar Clientes RF17 Aprovar pagamento cartão Pagamento RF18 Sair do estacionamento Clientes RF19 Remover Administrador Estacionamento Administradores RF20 Definir Valores Cobrados Administradores RF21 Consultar Administrador Estacionamento Administradores RF22 Atualizar Administrador Estacionamento Administradores 8
4. Requisitos não funcionais O Parking Manager irá atender a determinados requisitos não funcionais, como requisitos de sistema, tempos de resposta e restrições. A leitura do ticket na liberação da saída no terminal da cancela não deve demorar mais do que 3 segundos. O login do mensalista não deve demorar mais do que 3 segundos. O sistema não deve mostrar dados pessoais dos clientes aos funcionários. O sistema não deve prover dados confidenciais dos clientes. O sistema deve ter uma explicação ilustrativa de como usá-lo em no máximo uma tela. O sistema deverá rodar o servidor no sistema operacional Linux. O sistema deve ter uma disponibilidade de 24/7. O ticket deverá conter um QR Code com informações de horário de entrada, número da vaga. O uso do sistema em dispositivos móveis devem atender as plataformas Android e ios. O administrador do sistema deverá escolher os valores a serem cobrados no estacionamento. 9
5. Diagrama de casos de uso 10
6. Modelo ER 11
7. Tabelas Usuario(tx_cpf, tx_senha, tp_usuario, tx_login, tx_senha, tx_nome) Mensalista(tx_cpf FK, dt_vencimento, tx_telefone, tx_endereco, fl_pendencia) Funcionario(tx_cpf FK, tp_turno, nu_salario) Mensalidade(nu_codigo, tx_cpf FK, dt_vencimento, nu_valor, fl_situacao) Vaga(nu_vaga, fl_disponibilidade) Ticket(nu_codigo, tx_placa, ts_entrada, fl_saida_liberada, fl_saida_utilizada, nu_vaga FK ) Pagamento(nu_codigo, nu_codigo_ticket FK, nu_codigo_mensal FK, nu_valor, tp_pagamento, ts_pagamento) 12
8. Modelo Relacional 13
CREATE DATABASE PARKING_MANAGER; 9. Script SQL CREATE TABLE Usuario (tx_nome VARCHAR(100), tx_login VARCHAR(10), tx_cpf VARCHAR(11), tx_senha VARCHAR(8), tp_usuario VARCHAR(1), PRIMARY KEY(tx_cpf)); CREATE TABLE Mensalista (fl_pendencia VARCHAR(1), tx_entereco VARCHAR(100), tx_telefone VARCHAR(10), dt_vencimento DATE, tx_cpf VARCHAR(11), PRIMARY KEY (tx_cpf), FOREIGN KEY (tx_cpf) REFERENCES Usuario(tx_cpf)); CREATE TABLE Funcionario (nu_salario Number(9,2), tp_turno VARCHAR(1), tx_cpf VARCHAR(11), PRIMARY KEY (tx_cpf), FOREIGN KEY(tx_cpf) REFERENCES Usuario (tx_cpf)); CREATE TABLE Mensalidade (fl_situacao VARCHAR(1), nu_valor Number(6,2), dt_vencimento DATE, nu_codigo Number(8), PRIMARY KEY(nu_codigo), tx_cpf_mensal VARCHAR(11),FOREIGN KEY(tx_cpf_mensal) REFERENCES Mensalista (tx_cpf)); CREATE TABLE Vaga (nu_vaga Number(3), PRIMARY KEY(nu_vaga), fl_disponibilidade VARCHAR(1)); CREATE TABLE Ticket (nu_codigo NUMBER (8),tx_placa VARCHAR(7), PRIMARY KEY(nu_codigo), ts_entrada DATE, fl_saida_liberada Number(1), nu_vaga Number(3), tx_cpf_mensal VARCHAR(11), fl_saida_util Number(1), FOREIGN KEY(nu_vaga) REFERENCES Vaga (nu_vaga)) CREATE TABLE Pagamento (ts_pagamento DATE, tp_pagamento VARCHAR(1), nu_valor Number(6,2), nu_codigo Number(8), PRIMARY KEY(nu_codigo),nu_codigo_ticket NUMBER(8), nu_codigo_mensal Number(8),, FOREIGN KEY(nu_codigo_ticket) REFERENCES Ticket (nu_codigo), FOREIGN KEY(nu_codigo_mensal) REFERENCES Mensalidade (nu_codigo)); 14
10.Consultas Lista de todos os administradores: select * from usuario where tp_usuario = A ; Lista de todos funcionários(nome, Cpf, Salário, Turno): select u.tx_nome, u.tx_cpf, f.nu_salario, f.tp_turno from usuario u inner join funcionario f on (f.tx_cpf = u.tx_cpf); Lista de todos os mensalistas (Nome, Cpf) ordenado pelo nome: select tx_nome AS NOME_MENSALISTA, tx_cpf AS CPF, from usuario where tp_usuario = M order by tx_nome asc; Lista de Vagas livres: select nu_vaga as NUMERO_VAGA from vaga where fl_disponibilidade = 0; Lista de todas as vagas ocupadas com a placa de seu ocupante: select nu_vaga as NUMERO_VAGA from vaga v inner join ticket t on (t.nu_vaga = v.nu_vaga) where t.fl_saida_util = 0; Soma e média dos salários dos funcionários: select sum(nu_salario), avg(nu_salario) from funcionario; Relatório de movimentação mensal no estacionamento: select * from Pagamento where (ts_pagamento >= '2012-02- 01' and ts_pagamento <= '2012-02-30') order by ts_pagamento asc; 15