Guião laboratorial n.º 2 – exercício 4

O aeroporto de Coimbra pretende um programa para gerir a informação relativa às partidas de voos. Cada voo é identificado por: número do voo, nome da companhia, cidade destino e hora de partida (horas e minutos).
a) Crie um tipo estruturado chamado struct tempo que permita armazenar as componentes de uma determinada hora de um dia (horas e minutos).
b) Crie um tipo estruturado chamado struct voo que permita armazenar a informação relativa a um voo. O campo que armazena a hora de partida deve ser do tipo struct tempo.
c) Desenvolva uma função que escreva o conteúdo dos campos de uma variável estruturada do tipo struct voo. A função recebe como argumento a variável já preenchida.
d) Desenvolva uma função que permita introduzir informação relativa a um novo voo. É passado como argumento um ponteiro para a estrutura a inicializar.
e) Desenvolva uma função que altere a hora de partida de um voo. Recebe como argumento um ponteiro para uma estrutura já preenchida e solicita ao utilizador as novas componentes da hora para efetuar a alteração.
f) Desenvolva uma função que verifique se um determinado voo já partiu. Recebe como argumentos uma estrutura do tipo struct voo onde está armazenada a informação do voo e uma estrutura do tipo struct tempo onde está armazenada a hora atual. Devolve 1 se o voo já tiver partido, ou 0, se isso ainda não tiver acontecido.
g) Declare uma tabela que lhe permita armazenar informação relativa a 300 voos. A tabela deve ser uma variável local da função main().
h) Desenvolva uma função que permita adicionar novos voos à tabela. A função recebe como argumentos um ponteiro para o início da tabela e um ponteiro para o inteiro que indica quantos voos existem. É o utilizador que indica quantas novas entradas quer inserir e que especifica a informação relativa a cada um dos novos voos. A função deve atualizar a tabela e o inteiro referenciado pelo segundo argumento, indicando quantos voos passam a existir.
i) Desenvolva uma função que liste a informação completa de todos os voos armazenados na tabela. A função recebe como argumentos um ponteiro para o início da tabela e o número de voos que esta contém.
j) Desenvolva uma função que verifique quais os voos que partem nos próximos 30 minutos. Deve ser escrito o número, o destino e o tempo que falta para a partida de cada um desses voos. Um ponteiro para o início da tabela de voos, o número de elementos que esta contém e a hora atual são passados como argumentos.
k) Desenvolva uma função que retire da tabela todos os voos que já partiram. São passados como argumentos um ponteiro para o início da tabela, um ponteiro para um inteiro que indica quantos voos esta contém e a hora atual. A função deve atualizar a tabela e o contador de voos.
l) Crie um programa que construa um menu com o seguinte formato:
1. Introduzir novos voos
2. Listar todos os voos
3. Listar proximos voos
4. Atualizar tabela de voos
5. Terminar

O programa deve fazer a gestão das seleções que o utilizador for efetuando. Termina a execução quando for selecionada a opção 5.

Sugestão: Utilize a seguinte função para obter a hora atual do sistema. O resultado é devolvido numa estrutura do tipo struct tempo.

#include <stdio.h>
#include <time.h>

/* Estrutura auxiliar para guardar as componentes da hora */
struct tempo{
    int h, m;
};

struct tempo hora_atual()
{
 time_t a;
 struct tm* b;
 struct tempo atual;

 time(&a);
 b = localtime(&a);
 atual.h = b->tm_hour;
 atual.m = b->tm_min;
return atual;
}

 

/* Exemplo de utilização da função hora_atual() */
int main()
{
 struct tempo t = hora_atual();

 printf(" São %2.2d:%2.2d\n", t.h, t.m);
 return 0;
}

Proposta de trabalho: Altere o programa de gestão do aeroporto de modo a que os voos fiquem ordenados na tabela por hora de partida. Efetue as alterações necessárias nas funções que implementou.

#include <stdio.h>
#include <stdlib.h>
#include <time.h>
#include <string.h>

#define ST_TAM 50
#define MAX 300


// Estrutura auxiliar para armazenar as componentes de uma hora: horas + minutos (alinea a))

struct tempo{
 int h, m;
};

// Estrutura para armazenar informacao sobre um voo (alinea b))

struct voo{
 int num; // Numero do voo
 char companhia[ST_TAM]; // Companhia
 char destino[ST_TAM]; // cidade de destino
 struct tempo hora_p; // Hora de partida
};


// Funcao que obtem a hora do sistema e a devolve numa estrutura do tipo struct tempo
struct tempo hora_atual()
{
 time_t a;
 struct tm* b;
 struct tempo atual;

 time(&a);
 b = localtime(&a);
 atual.h = b->tm_hour;
 atual.m = b->tm_min;
 return atual;
};


// Funcao auxiliar para mostrar o menu e obter a opcao desejada pelo utilizador
// Devolve a opcao selecionada como resultado
int menu()
{
 int op;
 struct tempo t = hora_atual();

 printf("\n%2.2d:%2.2d\n", t.h, t.m);

 printf("\n1 - Introduzir novos voos");
 printf("\n2 - Listar todos os voos");
 printf("\n3 - Listar proximos voos");
 printf("\n4 - Actualizar tabela de voos");
 printf("\n5 - Veriricar se um voo ja partiu");
 printf("\n6 - Terminar");
 do{
 printf("\nOpcao: ");
 scanf("%d", &op);
 }while(op<1 || op>6);
 return op;
}

//------------------- funcoes a implementar

void alineac(struct voo *p, int t){
int i;
printf("\nTotal de registos: %d", t);
for(i=0; i<t;i++, p++){
 //printf("\nvoo: %d\tcompanhia: %s\tindo para: %s\thorario: %d:%d", p->, p[i].companhia, p[i].destino, p[i].hora_p.h, p[i].hora_p.m);
 printf("\nvoo: %d\tcompanhia: %s\tindo para: %s\thorario: %d:%d", p->num, p->companhia, p->destino, p->hora_p.h, p->hora_p.m);
 // printf("\nvoo: %d", p->num);
}

}

void alinead(struct voo *p, int *t, int m){
 char r;
 do{
 printf("\nQuer inserir?");
 scanf(" %c", &r);
 if(r=='s'){
 printf("\n---------------------------");
 printf("\nQual o numero do voo?");
 scanf(" %d", &(p->num));
 printf("Qual o nome da companhia?");
 scanf(" %[^\n]", &(p->companhia));
 printf("Qual o nome do destino?");
 scanf(" %[^\n]", &(p->destino));
 printf("Qual a hora e minutos de partida?");
 scanf("%d %d", &(p->hora_p.h), &(p->hora_p.m));
 (*t)++;
 p=p+(*t);
 }
 }while(r=='s' && *t < m);


}

void alineae(struct voo *p, int t){
 int r, i;

 printf("\nQual o voo que quer alterar? 0 se nenhum");
 scanf(" %d", &r);
 for(i=0; i< t; i++, p++){
 if(r==p->num){
 printf("\n o horario atual e: %d:%d", p->hora_p.h, p->hora_p.m);
 printf("Qual a NOVA hora e minutos de partida?");
 scanf("%d %d", &(p->hora_p.h), &(p->hora_p.m));
 }
 }
}


void alienaf(struct voo *p, int t){
 //nao vai devolver, escreve no final o valor 1 ou 0 dependendo
 int i, sita;
 struct tempo usa = hora_atual();
 for(i=0; i<t;i++, p++){
 if(p->hora_p.h < usa.h && p->hora_p.m < usa.m){
 sita=1;
 }else{
 sita=0;
 }
 printf("\nsituacao: %d\tvoo: %d\tcompanhia: %s\tindo para: %s\thorario: %d:%d", sita, p->num, p->companhia, p->destino, p->hora_p.h, p->hora_p.m);
 }


}

void alienaj(struct voo *p, int t){
 struct tempo usa = hora_atual();
 int i, auxHaM=0, auxHrM=0,y;
 auxHaM=(usa.h*60)+usa.m;
 for(i=0; i<t;i++, p++){
 printf("\n%d:%d-%d:%d", usa.h, usa.m, p->hora_p.h, p->hora_p.m);
 auxHrM=(p->hora_p.h*60)+p->hora_p.m;
 // y= atoi(auxHrM);
 if(auxHrM < auxHaM){
 printf("\n%d\tcompanhia: %s\tindo para: %s\thorario: %d:%d", p->num, p->companhia, p->destino, p->hora_p.h, p->hora_p.m);
 }else{
 printf("\nno can do");
 }
 printf("\n%d-%d", auxHaM, auxHrM);

 }
}


int main(int argc, char *argv[])
{
 int i;

 // Declaracao das variaveis locais: (alinea g)
 struct voo aero[MAX];
 int total=0;

 //alinea c
 struct voo testec ={11,"TAP", "London", {12,30}}, tested;

 /*
 struct voo testec ={
 {11,"TAP", "London", {12, 00}},
 {22,"RYN", "Faro", {13, 30}};
 {33,"TAP", "Paris", {18, 00}};
 {44,"RYN", "NY",{22, 30}}
 };
*/
 // Ciclo principal do programa
 do{
 i=menu();
 switch(i){
 case 1:
 //aliena d
 alinead(&aero, &total, MAX);
 break;
 case 2:
 //aliena c
 alineac(aero, total);

 break;
 case 3:
 //alinea j)
 alienaj(aero, total);
 break;
 case 4:
 //alterar a hora do voo alinea e)
 alineac(aero, total); //listar primeiro
 alineae(&aero, total);

 break;
 case 5:
 //verificar se um voo ja partiu f)
 alienaf(aero, total);
 break;
 }
 }while(i!=6);

 return 0;
}

falta verificar as horas e a ultima aliena… :P

ajuda(atoi): LINK

ajuda(estruturas e arrays): LINK

Tags :