Introdução
A Força Aérea Portuguesa, com a sua missão de garantir a defesa do espaço aéreo nacional, tem à sua responsabilidade um diverso leque de missões que são cumpridas por muitas tripulações distintas, de naturezas variadas. A correcta gestão das tripulações é crucial para otimizar os recursos existentes, garantir o cumprimentos da missão e salvaguardar a saúde e bem-estar dos nossos militares. O esforço para criar tripulações e manter um registo atualiado das disponibilidades e tempos mínimos de descanso dos tripulantes é significativo e um sistema digital integrado é necessário. A sua missão é desenhar e implementar o Sistema de Informação para a Gestão Integrada de Tripulações (SIGIT). O sistema contém os dados de todos os tripulantes e possíveis missões a realizar. O CA define as missões que devem ser executadas e em que datas. O SIGIT cria automaticamente, e de forma otimizada, as tripulações necessárias para o efeito.
Estrutura & Organização
- Existem Tripulante, Missão, Voo, Função
- Cada Tripulante está associado a uma Função
- Cada Missão está associado a uma ou mais Função
- Cada Voo está associado a uma missão e a um conjunto de Tripulante
- Dados de Tripulante
- id
- estado (operacional ou inop)
- nome
- função
- Dados de Missão
- id da missão
- nome da missão
- número de tripulantes
- indicação das funções dos tripulantes
- Dados de Voo
- id do voo
- data
- id da Missão
- lista de ids dos tripulantes
- Dados de Função
- id da função
- nome da função
- O programa guarda os tripulantes e voos numa base de dados binária.
- O programa guarda a lista de funções e missões em 2 ficheiros de texto de configuração
Funcionalidades
- Importar dados de ficheiro de texto
- Tripulantes
- Voos
- Marcar voos
- SIGIT mostra lista das missões disponíveis e utilizador escolhe.
- SIGIT pede uma data para o voo desejado.
- SIGIT cria tripulação para o voo automaticamente
- Condições
- Um tripulante não pode ser selecionado para 2 voos no mesmo dia.
- Um tripulante não pode ser selecionado para um voo se estiver inoperacional.
- Listas
- Lista com todos os voos
- Lista com todos os voos entre 2 datas
- Lista com todos os tripulantes
- Qualquer uma destas listas pode ser exportada para um fiheiro de texto (⚠️ para grupos de 4 elementos)
- Notas:
- Os dados do voo incluem a sua missão, data e o nome e função de todos os tripulantes
- A lista de tripulantes inclui o nome, função e estado atual de cada tripulante
- Mudar estado de tripulante
- Recebe id do tripulante
- Comuta o estado desse tripulante para o contrário do que está
Formato dos ficheiros
- Tripulantes
- cada tripulante em cada linha
- id estado função nome
- e.g.
- Voo
- cada campo em cada linha
- id do voo
- id do tipo de missão
- data
- ids dos tripulantes, um por linha
- cada voo separado por “% % % % %”
- exemplo
- cada campo em cada linha
- Tipos de missão
- cada campo em cada linha
- id do tipo de missão
- nome do tipo de missão
- número de tripulantes
- ids das funções, um por linha
- exemplo
- cada campo em cada linha
- Funções
- cada função numa linha
- campos separados por espaço
- exemplo
Notas
- Se for conveniente, podes assumir que nunca existirão mais de 500 tripulantes e 1000 voos em sistema.
- Pode ajudar manter a base de dados dos voos ordenada por data.
- Não usar qualquer biblioteca além das que foram introduzidas nas aulas sem aprovação do docente.
Entrega do trabalho
- O trabalho deve implementar uma aplicação para o problema enunciado. Os ficheiros de código (.c e .h) assim como documentação auxiliar (.txt, .pdf) são submetidos pelo chefe do grupo no Moodle. Ficheiros a submeter:
- todos os ficheiros .c e .h necessários para a compilação e execução do programa;
- todos os ficheiros necessários para a execução do programa (e.g. ficheiros de configuração, devem ser do tipo .txt);
- um manual de utilização MANUAL.pdf com uma descrição simples e curta de como utilizar o programa (é o documento que um utilizador iria ler para aprender a utilizar o programa);
- um relatório REPORT.pdf simples e curto sobre como implementaram as diversas funcionalidades e as decisões que tomaram, e onde se clarifica a estrutura do código (e.g. o ficheiro comandos.c contém as funções que manipulam a lista de comandos, grava a lista em ficheiro; optámos por manter a base de dados dos voos ordenada porque…; a estratégia para exportar os relatórios para ficheiro foi….; etc.);
- Caso necessário, irão ocorrer discussões para defesa dos trabalhos.
Critérios de avaliação
- A avaliação do trabalho será feita de acordo com os seguintes princípios:
- O programa deve estar estruturado em funções consideradas necessárias para a resolução do problema. O programa deve estar dividido em vários ficheiros quando for relevante.
- O programa pode e deve reutilizar código tanto quanto possível e for adequado.
- O programa deve executar todas as funcionalidades tal como pedido.
- Devem ser escolhidos nomes apropriados para os tipos de dados, operações, variáveis e constantes de modo a facilitar o entendimento do programa. A formatação do código é importante.
- O código deve ser comentado. Todas as funções devem ter um breve comentário sobre a sua função, imediatamente abaixo do cabeçalho.
- Devem ser utilizadas as estruturas de dados (e.g. vectores, registos) apropriadas para cada problema.