1. Documentação do Projeto Parte 3 Final
FlySmart
(Concurso IBM Mainframe 2012 – Brasil )
Nome: Luiz Nakazone
ID: IBM0056
2. Conteudo
Visão.....................................................................................................................................................3
Definição do Problema.........................................................................................................................3
Objetivos do Negócio...........................................................................................................................3
Escopo.................................................................................................................................................. 4
Requisitos Funcionais...........................................................................................................................5
Requisitos Não Funcionais...................................................................................................................6
Casos de Uso........................................................................................................................................ 8
Descrição dos Casos de Uso.................................................................................................................9
Banco de Dados..................................................................................................................................14
Interfaces do Sistema..........................................................................................................................15
2 IBM0056
3. Visão
Desenvolvimento da arquitetura da aplicação de gerenciamento do aeroporto internacional
FlySmart, garantindo sua qualidade de desenvolvimento.
Dentro deste contexto do projeto serão implementados, casos de uso, modelo de dados, JCL's (Job
Control Language), banco de dados DB2 e linguagem de programação COBOL em ambiente
mainframe com sistema z/Os.
Definição do Problema
Mesmo com tantas regras impostas pela agência de aviação civil para tentar sanar práticas de
overbooking, atrasos e cancelamentos de voos para um melhor gerenciamento dos processos do
aeroporto internacional FlySmart, o problema persiste pois não se encontra em operação no local
um sistema de gerenciamento inteligente e unificado que resolva esse problema.
Objetivos do Negócio
Objetivo Principal
Desenvolver um programa em linguagem COBOL garantindo a agilidade e unificação dos
processos do aeroporto internacional FlySmart.
O projeto deve propiciar:
• Cadastro de Viagens;
• Cadastro de Passageiros;
• Emitir relatório de viagens cadastradas;
• Emitir relatório de lucro de passagens vendidas;
• Emitir relatório de uso de pista com delay do tempo de pouso e decolagem;
3 IBM0056
4. Objetivo Secundário
Como objetivo secundário:
• Permitir ao usuário do sistema facil acesso unificado dos processos vitais do aeroporto.
Escopo
Como escopo do projeto tem-se a concepção da arquitetura de desenvolvimento para a aplicação de
gerenciamento do aeroporto internacional FlySmart contemplando as seguintes tecnologias e
conceitos em ambiente mainframe z/Os: casos de uso, modelagem de dados, JCL's, banco de dados
DB2 e linguagem COBOL.
Produtos gerados/esperados
• Menu principal em texto com as opções a serem escolhidas contemplando as seguintes
funcionalidades:
✔ Cadastro de viagens;
✔ Cadastro de passageiros com limite dependendo da capacidade do voo;
✔ Relatorio das viagens cadastradas;
✔ Relatório dos lucros das viagens de acordo com as passagens vendidas;
✔ Relatório de uso de pista com delay de pouso e decolagem de 15 minutos;
Pré-requisitos
• Definição do modelo de dados entre duas tabelas CLIENTE e VIAGEM em DB2;
• Desenvolvimento em linguagem COBOL;
• Menu em formato texto com as opções a serem escolhidas;
4 IBM0056
5. Requisitos Funcionais
[RF001] Cadastro de Viagens
Descrição do caso de uso: Este caso de uso permite que o usuário cadastre os voos no sistema para
poder efetuar as vendas das passagens.
Prioridade: Essencial Importante Desejável
Entradas e pré-condições: não tem.
Saídas e pós-condição: um voo é cadastrado no sistema.
[RF002] Cadastro de Clientes
Descrição do caso de uso: Este caso de uso permite que o usuário cadastre clientes no sistema para
a venda das passagens.
Prioridade: Essencial Importante Desejável
Entradas e pré-condições: passagem só será cadastrada se a capacidade do voo não for excedida.
Saídas e pós-condição: o consegue cadastrar o cliente e a venda da passagem.
[RF003] Relatório de viagens cadastradas
Descrição do caso de uso: Este caso de uso permite que o usuário visualize um relatório com todos
os voos cadastrados no sistema.
Prioridade: Essencial Importante Desejável
Entradas e pré-condições: recebe como entrada os registros de voos da base de dados.
Saídas e pós-condição: Emite relatório na tela com todos os voos cadastrados na base de dados.
5 IBM0056
6. [RF004] Relatório de lucro
Descrição do caso de uso: Este caso de uso permite que o usuário visualize relatório com o lucro
total e por viagens de acordo com as passagens vendidas.
Prioridade: Essencial Importante Desejável
Entradas e pré-condições: deve receber como entrada os registros da base de dados referentes a
quantidade de passagens vendidas e voos cadastrados.
Saídas e pós-condição: o usuário visualiza na tela o relatório de lucros.
[RF005] Relatório de uso de pista
Descrição do caso de uso: Este caso de uso permite que o usuário visualize relatório de uso de
pista dos voos cadastrados no sistema.
Prioridade: Essencial Importante Desejável
Entradas e pré-condições: recebe como entrada registros da base de dados referente aos voos
cadastrados e adiciona 15 minutos ao horário cadastrado em uma nova coluna.
Saídas e pós-condição: o usuário consegue visualizar relatório de uso de pista com informações
referentes ao voo e horário de entrada e saida da pista.
Requisitos Não Funcionais
[NF001] Usabilidade
A interface com o usuário é de vital importância para o sucesso do sistema. Principalmente por ser
um sistema que será utilizado diariamente, o usuário precisa ter fácil e rápido acesso as
funcionalidades do sistema. O sistema terá uma interface em modo texto com as opções a serem
escolhidas.
Prioridade: Essencial Importante Desejável
6 IBM0056
7. [NF002] Desempenho
Embora não seja um requisito essencial ao sistema, deve ser considerada por corresponder a um
fator de qualidade de software.
Prioridade: Essencial Importante Desejável
[NF003] Hardware e Software
Visando criar um produto com maior extensibilidade, reusabilidade e flexibilidade, deve ser adotar
como linguagem principal de desenvolvimento o Enterprise COBOL para z/Os.
Prioridade: Essencial Importante Desejável
7 IBM0056
9. Descrição dos Casos de Uso
[UC – 01] UC_Cadastro_de_Viagens
[UC-01]
Nome: Cadastro de Viagens
Prioridade: Essencial
FLUXO DE EVENTOS
Fluxo Principal 1. O Usuário escolhe a opção “1” Cadastro de
Viagens no menu principal;
2. Ao escolher a opção sera exibida tela com as
seguintes caracteristicas:
Campos de informações para preenchimento:
• Codigo da Viagem;
• Destino;
• Data;
• Horário;
• Custo;
• Capacidade;
• Status;
Fluxos Excepcionais 1. Se erro no SQL INCLUDE
1.a Mostrar erro Cadastro não efetuado.
Fluxos Alternativos N/A
Pós-condição Viagem Cadastrada com sucesso
9 IBM0056
10. [UC – 02] UC_Cadastro_de_Clientes
[UC-02]
Nome: Cadastro de Clientes
Prioridade: Essencial
FLUXO DE EVENTOS
Fluxo Principal 1. O Usuário escolhe a opção “2” Cadastro de
Clientes no menu principal;
2. Ao escolher a opção sera exibida tela com as
seguintes caracteristicas:
Campos de informações para preenchimento:
• Codigo do cliente;
• CPF;
• Nome;
• Sobrenome;
• Codigo da Viagem;
Fluxos Excepcionais 1. Se erro no SQL INCLUDE
1.a Mostrar erro Cadastro não efetuado.
Fluxos Alternativos N/A
Pós-condição Viagem Cadastrada com sucesso
10 IBM0056
11. [UC – 03] UC_Relatório_de_Voos_Cadastrados
[UC-03]
Nome: Relatórios de Voos cadastrados
Prioridade: Essencial
FLUXO DE EVENTOS
Fluxo Principal 1. O Usuário escolhe a opção “3” Rel. De Voos
no menu principal;
2. Ao escolher a opção sera exibida tela com as
seguintes caracteristicas:
Campos de informações do relatório:
• Codigo da Viagem;
• Destino;
• Horário;
• Status;
Fluxos Excepcionais N/A
Fluxos Alternativos N/A
Pós-condição Mostra relatório com todas as viagens
cadastradas
11 IBM0056
12. [UC – 04] UC_Relatório_de_Lucro
[UC-04]
Nome: Relatórios de Lucro
Prioridade: Essencial
FLUXO DE EVENTOS
Fluxo Principal 1. O Usuário escolhe a opção “4” Rel. de lucro
no menu principal;
2. Ao escolher a opção sera exibida tela com as
seguintes caracteristicas:
Campos de informações do relatório:
• Lucro total acumulado das viagens
vendidas;
• Codigo da Viagem;
• Destino;
• Quantidade de cadeiras vendidas;
• Lucro total por viagens;
Fluxos Excepcionais N/A
Fluxos Alternativos N/A
Pós-condição Mostra relatório com lucro das viagens vendidas
tanto acumulado quanto separado por viagens
12 IBM0056
13. [UC – 05] UC_Relatório_de_Pista
[UC-05]
Nome: Relatórios de Pista
Prioridade: Essencial
FLUXO DE EVENTOS
Fluxo Principal 1. O Usuário escolhe a opção “5” Rel. uso de
pista no menu principal;
2. Ao escolher a opção sera exibida tela com as
seguintes caracteristicas:
Campos de informações do relatório:
• Codigo da Viagem;
• Destino;
• Horário Ent;
• Horário Sai com adicional de 15 minutos
no tempo;
Fluxos Excepcionais N/A
Fluxos Alternativos N/A
Pós-condição Mostra relatório com uso da pista mostrando
horário de entrada e saida
13 IBM0056
14. Banco de Dados
Como descrito no pré-requisito de desenvolvimento do sistema será utilizado o DB2 como SGBD
com a criação de duas tabelas CLIENTE e VIAGEM como no modelo abaixo:
14 IBM0056
15. Interfaces do Sistema
Na figura (Figura 1) a seguir tem-se o protótipo da tela principal, onde o usuário ira digitar e
escolher a opção desejada. O sistema sempre começará com essa janela e sempre sairá com essa
janela.
Figura 1 – Tela Principal
15 IBM0056
16. Selecionando a opção “1” Cadastro de Viagens o sistema apresentará a tela com os campos
referente a viagem para serem preenchidos (Figura 2 ).
Figura 2 – Cadastro de Viagens
Nota-se que uma mensagem de sucesso é exibida quando o registro é efetuado com sucesso, se o
mesmo não for inserido no banco de dados por algum problema uma outra mensagem dizendo para
o usuário que o registro não foi efetuado é exibida.
16 IBM0056
17. Selecionando a opção “2” Cadastro de Clientes o sistema apresentará tela com os campos refentes a
venda da passagem ao cliente (Figura 3).
Figura 3 – Cadastro de Clientes
Da mesma maneira que a mensagem de sucesso e erro é exibida no cadastro de viagens é exibida do
cadastro de cliente também. Segue abaixo parte do código desenvolvido em COBOL referente a
verificação de sucesso ou erro na inserção do registro na base de dados.
17 IBM0056
18. 011553 *****************************************************************
011560 SQL-CHECK.
011600 MOVE SQLCODE TO SQLCODE-PIC
011700 IF SQLCODE = 0
011800 DISPLAY '***********************************************'
011900 DISPLAY '* Cadastro realizado com sucesso!!! *'
012000 DISPLAY '***********************************************'
012010 DISPLAY '* Tecle ENTER para voltar ao menu principal...*'
012020 DISPLAY '***********************************************'
012100 ELSE
012200 DISPLAY '***********************************************'
012300 DISPLAY '* Erro no cadastramento!!! *'
012400 DISPLAY '***********************************************'
012410 DISPLAY '* Tecle ENTER para voltar ao menu principal...*'
012420 DISPLAY '***********************************************'
012500 DISPLAY 'SQLCODE = ' SQLCODE-PIC
012600 'SQLSTATE = ' SQLSTATE
012700 ADD 16 TO ZERO GIVING RETURN-CODE
012800 END-IF.
012810 *
012820 *****************************************************************
Como a venda das passagens é limitada a capacidade de cada voo, foi necessário criar uma regra
para controlar o overbooking e impedir a venda das passagens caso a capacidade tenha sido
esgotada. Abaixo o código referente ao controle de overbooking.
011499 *****************************************************************
011500 * Controle de Overboking!!! *
011501 * Se numero de passagens for maior que capacidade nao grava *
011502 * a venda no banco e mostra erro na tela!!! *
011503 *****************************************************************
011504 EXEC SQL
011505 SELECT COUNT(*) INTO :OV-VENDA FROM CLIENTE
011506 WHERE ID_VIAGEM = :ID-VIAC
011507 END-EXEC.
011517 *****************************************************************
011518 EXEC SQL
011519 SELECT CAPACIDADE INTO :OV-REC FROM VIAGEM
011520 WHERE ID_VIAGEM = :ID-VIAC
011521 END-EXEC.
011522 *****************************************************************
011523 COMPUTE WS-T1 = FUNCTION NUMVAL(WS-COUNT1)
011524 COMPUTE WS-T2 = FUNCTION NUMVAL(WS-COUNT2)
18 IBM0056
19. 011527 IF
011528 WS-T1 >= WS-T2
011529 PERFORM ERRO-OVER
011530 ELSE
011531 PERFORM INCLUI-VENDA
011532 END-IF.
011533 *****************************************************************
Se o usúario do sistema tentar vender uma passagem para um voo com capacidade esgotada
receberá a seguinte tela (Figura 4).
Figura 4 – Erro Overbooking
19 IBM0056
20. Selecionando a opção “3” Rel. de Voos será exibido na tela relatório com as informações referentes
a todos os voos registrados no sistema como na imagem abaixo (Figura 5).
Figura 5 – Relatório de Voo
Selecionando a opção “4” Rel de Lucros será exibido na tela relatório com o lucro acumulado e
lucro por viagem dependendo do numero de passagens vendidas como mostra a figura abaixo
(Figura 6).
20 IBM0056
21. Figura 6 - Relatório de Lucro
Abaixo parte do código referente a fazer a operação aritimetica do relatório de lucro:
018000 *****************************************************************
018100 PRINT-AND-GET3.
018200 COMPUTE QUANT = QUANT + 1
018210 COMPUTE V-NUM = FUNCTION NUMVAL(V-COUNT)
018220 COMPUTE CUSTO-V = FUNCTION NUMVAL(CUSTO-VIL)
018230 MULTIPLY V-NUM BY CUSTO-V GIVING CUSTO-T.
21 IBM0056
22. 018300 PERFORM PRINT-A-LINE-3
018400 EXEC SQL FETCH CUR2 INTO :ID-VIL, :V-COUNT
018500 END-EXEC.
018510 EXEC SQL FETCH CUR3 INTO :ID-VIV, :DEST-VIL, :CUSTO-VIL
018520 END-EXEC.
018600 *****************************************************************
Selecionando a opção “5” Rel de Uso de Pista será exibido na tela relaorio com o tempo de uso de
pista de cada aeronave com seu horario de entrada como mostradado na figura abaixo (Figura 7).
Figura 7 – Relatório de Uso de Pista
22 IBM0056
23. Nota-se na imagem acima que um dos pré-requisitos essenciais para o sistema era de mostrar no
relatório de uso de pista o horário de entrada e de saida que era a soma de 15 minutos a mais no
horário de entrada. Isso foi possível declarando um cursor com a seguinte sintaxe SQL:
000701 *--------------------------------------------------------------*
000702 EXEC SQL DECLARE CUR5 CURSOR FOR
000703 SELECT ID_VIAGEM, DESTINO, HORARIO,
000704 HORARIO + 15 MINUTES AS SAIDA FROM VIAGEM
000705 ORDER BY HORARIO
000706 END-EXEC.
000723 *--------------------------------------------------------------*
Ao selecionar a opção “0” Sair o sistema é encerrado como mostrado na figura abaixo (Figura 8 ).
23 IBM0056