Programação III / Estruturas de Dados
Enunciado do Trabalho Prático
1. Objectivo
Pretende-se implementar uma base de dados que sirva para ajudar uma agência de
viagens a planear as viagens a realizar pelos seus clientes, durante o ano de 2014. A
ideia base é a seguinte: a agência de viagens elabora viagens, cada uma caraterizada
por uma sequência de destinos/deslocações; após a conclusão do plano de cada viagem,
esta é colocada à disposição dos seus clientes para que se possam inscrever nela; à
medida que os clientes se vão inscrevendo na viagem, são colocados numa fila de espera
e posteriormente afetados à viagem correspondente.
Em traços gerais, poder-se-à inserir clientes, destinos e viagens (indicando, neste
último caso, a sequência de deslocações e os clientes envolvidos); cancelar viagens;
registar a desistência de um cliente de uma viagem; efectuar pesquisas sobre viagens
(realizadas num período do ano ou por um cliente); inscrição em viagens; etc..
2. Conceitos e princípios
Cada viagem é efetuada por um grupo de (um ou mais) clientes e consiste numa
sequência de, pelo menos, duas deslocações. Uma deslocação ocorre numa data
(caracterizada pelo mês e pelo dia) e tem um destino (identificado por uma localidade e
um país). Para simplificar, assume-se que todas as viagem têm origem em Portugal.
Por exemplo, uma viagem de ida e volta a Paris, realizada pela Maria Santos e pelo
Manuel Silva, seria associada a um grupo de dois clientes (a Maria Santos e o Manuel
Silva) e a uma sequência de duas deslocações: no dia 7 de Abril o destino seria Paris, em
França; no dia 15 de Abril o destino seria Lisboa, em Portugal.
Considera-se que cada deslocação numa viagem é totalmente efetuada num dia,
ocupando completamente esse dia (i.e., uma pessoa parte e chega no mesmo dia, mas
não pode realizar mais do que uma deslocação por dia). As datas de início e de
conclusão de uma viagem são as datas da primeira e da última deslocação,
respetivamente.
O sistema deverá garantir que,
- todos os clientes e destinos referidos nas diferentes operações foram
previamente inseridos (exceto nas respectivas operações de inserção);
1
- o percurso induzido pela sequência de deslocações é cronologicamente possível;
- ninguém está simultaneamente em dois lugares distintos.
Para este efeito, o sistema deverá ignorar qualquer operação de inserção que tente
violar estas regras.
3. Entrada e saída
A aplicação deverá funcionar de forma a permitir buscar dados a ficheiros de
entrada (clientes, localidades e viagens já construídas) e/ou permitir a entrada de novos
dados (usando um menu específico para tal). Antes de terminar, a aplicação deverá
permitir guardar todas as movimentações efetuadas em ficheiros, caso seja essa a
intensão do utilizador.
3.1. Sintaxe
Pretende-se que a interface da aplicação seja muito simples. Em todas as
operações apresentadas na Secção 4, a saída é uma mensagem, especificando-se quais as
mensagens possíveis em cada caso. A mensagem a devolver deverá ser a primeira (da
sequência dada) que corresponde a uma afirmação verdadeira. Note que nenhuma destas
operações deve produzir qualquer efeito na base de dados, se a mensagem devolvida
não for a última (que informa que a operação foi efectuada com sucesso).
No caso das pesquisas (Secção 4.6 e 4.7), as linhas que correspondem à entrada
deverão sempre ocorrer na saída. As restantes linhas dependem da existência da
informação pesquisada.
As operações de pesquisa produzem uma listagem de viagens, cujo formato deverá
ser sempre igual. Se a listagem for vazia, ou seja, quando não existirem viagens nas
condições especificadas, a saída deverá ser exactamente igual à entrada. Se a listagem
não for vazia, dever-se-à começar por repetir as linhas da entrada.
3.2. Estruturas de dados
Para tratar dos clientes deverá ser construída e implementada um EAD Lista
denominada por “CLIENTE”. O tipo de dados usado será um estrutura com os seguintes
campos: ID Cliente (NIF, CC, BI, ou outro), Nome, Morada, E-mail e Telefone. Devem ser
implementadas todas as operações estudadas nas aulas.
Para tratar dos destinos deverá ser construída e implementada um EAD Lista
denominada por “DESTINO”. O tipo de dados usado será um estrutura com os seguintes
2
campos: ID Destino (código postal, ou outro), Localidade, País e Número de locais a
visitar. Devem ser implementadas todas as operações estudadas nas aulas.
Para tratar das viagens deverá ser construída e implementada um EAD Lista
denominada por “VIAGEM”. O tipo de dados usado será um estrutura com os seguintes
campos: ID Viagem, Sequência de Deslocações (Mês, Dia e ID Destino) e Sequência de
clientes (ID Cliente). As deslocações devem estar ordenadas cronologicamente e os
clientes ordenados alfabeticamente. Devem ser implementadas todas as operações
estudadas nas aulas.
Para tratar as inscrições nas viagens deverá ser construída e implementada uma
EAD Fila denominada “INSCRIÇÃO_EM_VIAGEM” para cada viagem já planeada. O tipo de
dados usado será um estrutura com os seguintes campos: ID Viagem e ID Cliente. Devem
ser implementadas todas as operações estudadas nas aulas.
3.3. Tipo e dimensões dos dados
Não existe qualquer restrição relativamente ao número máximo de entidades
inseridos na base de dados: clientes, destinos (i.e., pares [localidade, país]), total de
viagens, de clientes que viajam juntos (dimensão dos grupos), de deslocações numa
viagem, de viagens efetuadas por um cliente, etc..
3.4. Correção da entrada
Poderá admitir que a entrada está sintaticamente correta, mas não deverá assumir
que ela está logicamente correta. Por exemplo, poder-se-à pedir a listagem das viagens
efetuadas entre 15 de novembro e 31 de fevereiro (com duas fontes de erro) ou a
listagem das viagens realizadas em janeiro por um cliente inexistente.
4. Operações a implementar
Todas as operações inerentes à EAD Lista e à EAD Fila deverão ser implementadas.
No entanto, só algumas é que devem estar inseridas no menu da aplicação como opções
desta. A seguir referem-se algumas das operações que devem pertencer ao menu da
aplicação.
4.1. Inserção de um Cliente
– Entrada
cliente
3
– Saída
mensagem de inserção de cliente, que pode ser:
- “Cliente existente.”
- “Inserção de cliente com sucesso.”
- Inserção de um novo cliente, identificado pelo nome cliente.
- Os clientes devem ser inseridos por ordem alfabética dos seus nomes.
4.2. Remoção de um cliente
– Entrada
cliente
– Saída
mensagem de remoção de cliente, que pode ser:
- “Cliente inexistente.”
- “Remoção de cliente com sucesso.”
- Remoção do cliente cliente da lista de clientes.
4.3. Alteração dos dados de um cliente
– Entrada
cliente
– Saída
mensagem de alteração dos dados de cliente, que pode ser:
- “Cliente inexistente.”
- “Alteraçaõ dos dados do cliente com sucesso.”
- Alteração dos dados do cliente cliente.
4.4. Consulta dos dados de um cliente
– Entrada
cliente
– Saída
mensagem de consulta dos dados de cliente, que pode ser:
- “Cliente inexistente.”
- ID cliente, Nome, Morada, E-mail, Telefone
- Mostra toda a informação associada ao cliente cliente.
4
4.5. Inserção de um Destino
– Entrada
destino
– Saída
mensagem de inserção de destino, que pode ser:
- “Destino existente.”
- “Inserção de destino com sucesso.”
- Inserção de um novo destino, identificado por destino.
- Os destinos devem ser inseridos por ordem alfabética dos nomes dos países e, em
caso de igualdade, pelos nomes das localidades.
4.6. Remoção de um Destino
– Entrada
destino
– Saída
mensagem de retirada de destino, que pode ser:
- “Destino inexistente.”
- “Remoção de destino com sucesso.”
- Remoção do destino destino da lista de destinos.
4.7. Alteração dos dados de um destino
– Entrada
destino
– Saída
mensagem de alteração dos dados de destino, que pode ser:
- “Destino inexistente.”
- “Alteração de dados de destino com sucesso.”
- Alteração dos dados associados ao destino destino.
4.8. Consulta dos dados de um destino
– Entrada
destino
5
– Saída
mensagem de consulta dos dados de destino, que pode ser:
- “Destino inexistente.”
- ID destino, Localidade, País, Número locais a visitar
- Mostra toda a informação associada ao destino destino.
4.9. Inserção de uma Viagem
– Entrada (M deslocações e N clientes)
ID viagem (pode ser atribuído automaticamente ou verificar existência)
Sequência de deslocações (deslocação 1, deslocação 2, …, deslocação M),
em que cada deslocação é formado por: mês, dia e destino
Grupo de clientes (cliente 1, cliente 2, …, cliente N)
– Saída
mensagem de inserção de viagem, que pode ser:
- “Data(s) inexistente(s).”
- “Percurso cronologicamente impossível.” (Sequência de deslocações não
ordenada por ordem estritamente crescente)
- “Percurso inválido.” (Número insuficiente de deslocações, deslocações
seguidas com o mesmo destino, ...).
- “Destino(s) inexistente(s).”
- “Cliente(s) inexistente(s).”
- “Cliente(s) indisponível(eis).” (Sobreposição com outra viagem)
- “Inserção de viagem com sucesso.”
- Inserção de uma nova viagem composta pelo seu ID viagem (indicado ou atribuído
automaticamente), pela sequência de deslocações especificada e efetuada pelo
grupo de clientes indicado. Se o ID viagem for indicado, deve ser verificado a sua
validade (existência).
- As viagens devem ser inseridas ordenadas cronologicamente pela data de início e,
em caso de igualdade desta, pela data de conclusão.
- Garante-se que o ID viagem é único, que as sequências de deslocações e de
clientes nunca são vazias.
6
4.10. Cancelamento (remoção) de uma Viagem
– Entrada
mês, dia; viagem
– Saída
mensagem de cancelamento de viagem, que pode ser:
- “Data inexistente.”
- “Viagem inexistente.”
- “Cancelamento de viagem com sucesso.”
- Remoção da viagem viagem com data de início no dia dia do mês mês.
4.11. Alteração dos dados de uma Viagem
– Entrada
viagem
– Saída
mensagem de alteração dos dados de viagem, que pode ser:
- “Viagem inexistente.”
- “Alteração dos dados de viagem com sucesso.”
- Alteração dos dados associados à viagem viagem.
4.12. Consulta dos dados de uma Viagem
– Entrada
viagem
– Saída
mensagem de desistência de cliente, que pode ser:
- “Viagem inexistente.”
- apenas as datas inicial e final
mês_inicial, dia_inicial; mês_final; dia_final
- descrição mínima (último destino da viagem e clientes)
mês_final, dia_final; localidade; país
cliente1; cliente2; …
- descrição detalhada (todos as deslocação e clientes)
mês, dia; localidade; país
…
mês, dia; localidade; país
7
cliente1; cliente2; …
- Mostra toda a informação da viagem viagem (3 formas de mostrar a informação).
- A sequência de deslocações da viagem viagem deverá estar ordenada
cronologicamente e a sequência de clientes deverá respeitar a ordem alfabética.
4.13. Desistência (remoção) de um Cliente de uma Viagem
– Entrada
cliente; viagem
– Saída
mensagem de desistência de cliente, que pode ser:
- “Cliente inexistente.”
- “Viagem inexistente.”
- “Desistência de viagem com sucesso.”
- Remover da viagem viagem o cliente cliente do grupo de clientes desta viagem.
4.14. Pesquisa das Viagens efetuadas num Intervalo de Tempo
– Entrada
mês_inicial, dia_inicial; mês_final, dia_final
– Saída (considerando K viagens)
a) igual à da entrada (apenas as datas inicial e final de cada viagem):
mês_inicial, dia_inicial; mês_final; dia_final
→ viagem 1
...
mês_inicial, dia_inicial; mês_final; dia_final
→ viagem K
b) descrição mínima (último destino da viagem e clientes):
viagem 1
mês_final, dia_final; localidade; país
cliente1; cliente2; …
...
viagem K
mês_final, dia_final; localidade; país
cliente1; cliente2; …
c) descrição detalhada (todos as deslocação e clientes):
viagem 1
mês, dia; localidade; país
→ deslocação 1
8
...
mês, dia; localidade; país
→ deslocação final
cliente1; cliente2; …
...
viagem K
mês, dia; localidade; país
→ deslocação 1
...
mês, dia; localidade; país
→ deslocação final
cliente1; cliente2; …
- Mostra toda a informação das viagens realizadas (iniciadas e concluídas) entre o
dia dia_inicial do mês mês_inicial e o dia dia_final do mês mês_final.
- As viagens deverão aparecer ordenadas cronologicamente pela data de início e,
em caso de igualdade desta, pela data de conclusão. No âmbito de cada viagem,
a sequência de deslocações deverá estar ordenada cronologicamente e a
sequência de clientes deverá respeitar a ordem alfabética.
4.15. Pesquisa das Viagens efetuadas num Mês por um Cliente
– Entrada
mês; cliente
– Saída
(semelhante a “Pesquisa das Viagens efetuadas num Intervalo de Tempo”)
- Mostra toda a informação sobre as viagens realizadas (i.e., iniciadas e concluídas)
durante o mês mês pelo cliente cliente.
- As viagens deverão aparecer ordenadas cronologicamente pela data de início. No
âmbito de cada viagem, a sequência de deslocações deverá estar ordenada
cronologicamente e a sequência de clientes deverá respeitar a ordem alfabética.
4.16. Inscrição em viagem
– Entrada
cliente; viagem
– Saída
mensagem de inscrição de cliente em viagem, que pode ser:
- “Viagem inexistente.”
- “Cliente inexistente.”
9
- “Inscrição em viagem com sucesso.”
- Efetua a inscrição do cliente cliente na viagem viagem planeada pela agência de
viagem; após a inscrição o cliente é inserido numa EAD Fila em que cada
elemento é composto por (viagem, cliente).
4.17. Distribuição clientes por viagem
– Entrada
inscrições_viagens (fila)
– Saída
mensagem de distribuição dos clientes pelas viagens, que pode ser (para cada
elemento da fila):
- “Viagem inexistente.” (erro na introdução do código da viagem)
- “Cliente inexistente.” (erro na introdução do código de cliente)
- “Inserção de cliente em viagem com sucesso.”
- Efetua a distribuição dos clientes inscritos nas viagens pelas respetivas viagens;
ou seja, insere o cliente cliente na lista de clientes da viagem viagem.
- No final, a fila de inscrições fica vazia.
4.18. Remoção de uma deslocação numa viagem
– Entrada
viagem, deslocação
– Saída
mensagem de remoção de deslocação de viagem, que pode ser:
- “Viagem inexistente.”
- “Deslocação inexistente.”
- “Remoção de deslocação de viagem com sucesso.”
- Remoção de deslocação deslocação da viagem viagem.
4.19. Total de viagens planeadas pela agência de viagens
– Entrada
– Saída
mensagem sobre o total de viagens planeadas, que pode ser:
- “Total de viagens: ???”
- Mostra o total de viagens planeadas pela agência de viagens.
10
4.20. Total de clientes de uma viagem
– Entrada
viagem
– Saída
mensagem sobre o total de clientes de uma viagem, que pode ser:
- “Viagem inexistente.”
- “Total de clientes: ???”
- Mostra o total de clientes associados à viagem viagem.
4.21. Total de deslocações (destinos) de uma viagem
– Entrada
viagem
– Saída
mensagem sobre o total de deslocações de uma viagem, que pode ser:
- “Viagem inexistente.”
- “Total de deslocações/destinos da viagem: ???”
- Mostra o total de deslocações que compoem a viagem viagem.
4.22. Total de viagens efetuadas por um cliente
– Entrada
cliente
– Saída
mensagem sobre o total de viagens efetuadas por um cliente, que pode ser:
- “Cliente inexistente.”
- “Total de viagens efetuadas pelo cliente: ???”
- Mostra o total de viagens efetuadas pelo cliente cliente.
4.23. Operações de gestão da aplicação
- Abrir ficheiro da base de dados
- Guardar os dados da base de dados no ficheiro correspondente, após atualização
- Guardar os dados da base de dados noutro ficheiro
- Sair da aplicação
- ...
11
Download

Programação III / Estruturas de Dados Enunciado do Trabalho Prático