main:
#include <stdio.h>
#include <stdlib.h>
#include <locale.h>
#include "menu.h"
//Programa principal
int main()
{
setlocale(LC_CTYPE, "Portuguese");
aloca_memoria_aeroporto(&cabAeroporto);
int op;
menu(&op);
return 0;
}
menu.h:
#include "menu.c"
void Display_Menu();
void menu (int *op);
menu.c:
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include "src\src.h"
//2 Constantes para controle do fluxo do programa, um para congelar a tela e outro para limpar
#define CLEAR "cls"
#define PAUSE "pause"
//Display do menu do sistema de controle aereo
void Display_Menu()
{
system("cls");
printf(" Menu \n");
printf("1- Cadastrar Aeroporto.\n");
printf("2- Lista Aeroportos.\n");
printf("3- Remove Aeroporto.\n");
printf("4- Cadastrar Voo.\n");
printf("5- Ver Voos do aeroporto.\n");
printf("6- Ver Voos da companhia.\n");
printf("7- Remove voo.\n");
printf("8- Experimentar a viagem iterativa.\n");
printf("0- Sair\n\n");
printf("Escolha uma opcao:");
}
void menu (int *op)
{
do{
system(CLEAR);
Display_Menu();
scanf("%d",&*op);
switch (*op){
case 1:{
cadastra_aeroporto(cabAeroporto);
break;
}
case 2:{
lista_aeroportos(cabAeroporto);
break;
}
case 3:{
remove_aeroportos(cabAeroporto);
break;
}
case 4:{
cadastra_voo(cabAeroporto);
break;
}
case 5:{
lista_voos_aeroporto(cabAeroporto);
break;
}
case 6:{
lista_voos_companhia(cabAeroporto);
break;
}
case 7:{
remove_voo(cabAeroporto);
break;
}
case 8:{
viagem_iterativa(cabAeroporto);
break;
}
}
system(PAUSE);
}while(op != 0);
}
src.h:
#include "src.c"
_Aeroporto* cabAeroporto;
src.c:
#include <stdio.h>
#include <stdlib.h>
#include <conio.h>
#include <string.h>
//Constantes para controle do fluxo do programa, um para congelar a tela e outro para limpar
#define CLEAR "cls"
#define PAUSE "pause"
//Estrutura tipo voo
typedef struct _voo{
char companhia [50];
int numero;
struct _aeroporto* destino;
struct _voo* proximo;
struct _voo* anterior;
} _Voo;
//Estrutura tipo aeroporto
typedef struct _aeroporto{
char nome [50];
struct _voo* voos;
struct _aeroporto* proximo;
struct _aeroporto* anterior;
} _Aeroporto;
/*essa parte de declaração de funções, meu professor pediu para por aqui
ao invez de por no header*/
void aloca_memoria_aeroporto(_Aeroporto** aeroporto);
void aloca_memoria_voo();
void ler_dados_aeroporto();
void cadastra_aeroporto();
void lista_aeroportos();
void imprime_aeroporto();
void remove_aeroportos();
void cadastra_voo();
void ler_dados_voo();
void lista_voos_aeroporto();
void imprime_voo();
void lista_voos_companhia();
void remove_voo();
void viagem_iterativa();
//Busca na lista de aeroportos algum aeroporto cujo nome seja igual ao recebido
_Aeroporto* busca_aeroporto(_Aeroporto* cabAeroporto, char nome_aeroporto[]){
_Aeroporto* cursor;
for(cursor = cabAeroporto->proximo ; cursor != NULL; cursor = cursor->proximo){
if(strcmp(nome_aeroporto, cursor->nome) == 0){
return cursor;
}
}
return NULL;
}
//Recebe o nome do aeroporto de origem e de destino e verifica se existe algum voo parecido.
_Voo* busca_voo(_Aeroporto* cabAeroporto, char origem[], char destino[]){
_Voo* voos;
_Voo* voo_cursor;
_Aeroporto* aeroporto;
aeroporto = busca_aeroporto(cabAeroporto, origem);
if(aeroporto){
voos = aeroporto->voos;
for(voo_cursor = voos->proximo ; voo_cursor != NULL; voo_cursor = voo_cursor->proximo){
if(strcmp(destino, (voo_cursor->destino)->nome) == 0){
return voo_cursor;
}
}
}
return NULL;
}
//Aloca memoria para um tipo _Aeroporto
void aloca_memoria_aeroporto(_Aeroporto** aeroporto){
(*aeroporto) = (_Aeroporto*) malloc (sizeof(_Aeroporto));
if ((*aeroporto) == NULL){
printf("Falha na alocacao da memoria\n");
}
(*aeroporto)->proximo = NULL;
}
//Aloca memoria para um tipo _Voo
void aloca_memoria_voo(_Voo** voo){
(*voo) = (_Voo*) malloc (sizeof(_Voo));
if ((*voo) == NULL){
printf("Falha na alocacao da memoria\n");
}
(*voo)->proximo = NULL;
}
//Cadastra aeroporto
void cadastra_aeroporto(_Aeroporto* cabAeroporto){
_Aeroporto* aeroporto;
_Aeroporto* cursor;
// Obtem o endereco do cabeca
cursor = cabAeroporto;
// Aloca a memoria para um novo elemento
aloca_memoria_aeroporto(&aeroporto);
aloca_memoria_voo(&aeroporto->voos);
// Le o dados a serem cadastrados
ler_dados_aeroporto(aeroporto);
if(busca_aeroporto(cabAeroporto, aeroporto->nome)){
printf("Nome de aeroporto já registrado!\n");
}
// Navega ate o fim da lista
while (cursor->proximo != NULL){
cursor = cursor->proximo;
}
// Insere o novo elemento no fim da lista
cursor->proximo = aeroporto;
aeroporto->anterior = cursor;
}
//Faz a leitura de dados do aeroporto
void ler_dados_aeroporto(_Aeroporto* aeroporto){
printf("Nome do aeroporto: ");
scanf(" %[^\n]s", aeroporto->nome);
}
// Varre a lista de aeroportos e imprime-os
void lista_aeroportos(_Aeroporto* cabAeroporto){
_Aeroporto* cursor;
printf("Aeroportos da lista\n\n");
for(cursor = cabAeroporto->proximo ; cursor != NULL; cursor = cursor->proximo){
imprime_aeroporto(cursor);
}
}
//Imprime os dados de um aeroporto
void imprime_aeroporto(_Aeroporto* cabAeroporto){
printf("Nome do aeroporto: %s\n",cabAeroporto->nome);
}
//Remove um aeroporto da lista de aeroportos
void remove_aeroportos(_Aeroporto* cabAeroporto){
_Aeroporto* aeroporto;
char nome_aux[50];
printf("Nome do aeroporto para ser removido: ");
scanf(" %[^\n]s", nome_aux);
aeroporto = busca_aeroporto(cabAeroporto, nome_aux);
if(aeroporto){
(aeroporto->anterior)->proximo = aeroporto->proximo;
printf("Aeroporto remotivo com sucesso!\n\n");
}else{
printf("Nenhum aeroporto com este nome foi encontrado!\n\n");
}
}
//Cadastra voo
void cadastra_voo(_Aeroporto* cabAeroporto){
_Voo* voo;
_Voo* cursor_voo;
_Aeroporto* origem;
_Aeroporto* destino;
char nome_origem[50];
char nome_destino[50];
// Aloca a memoria para um novo elemento
aloca_memoria_voo(&voo);
// Le o dados a serem cadastrados
ler_dados_voo(voo);
printf("Nome da origem: ");
scanf(" %[^\n]s", nome_origem);
origem = busca_aeroporto(cabAeroporto, nome_origem);
if(origem){
cursor_voo = origem->voos;
}else{
printf("Nenhum aeroporto com este nome foi encontrado!\n\n");
}
printf("Nome do destino: ");
scanf(" %[^\n]s", nome_destino);
if(busca_voo(cabAeroporto, nome_origem ,nome_destino)){
printf("Voo j� programado!\n");
}
destino = busca_aeroporto(cabAeroporto, nome_destino);
if(destino){
voo->destino = destino;
}else{
printf("Nenhum aeroporto com este nome foi encontrado!\n\n");
}
while (cursor_voo->proximo != NULL){
cursor_voo = cursor_voo->proximo;
}
// Insere o novo elemento no fim da lista
cursor_voo->proximo = voo;
voo->anterior = cursor_voo;
printf("Voo adicionado com sucesso!\n\n");
}
//Coleta os dadados do voo vindos do usu�rio
void ler_dados_voo(_Voo* voo){
printf("N�mero do voo: ");
scanf("%d", &voo->numero);
printf("Nome da companhia a�rea: ");
scanf(" %[^\n]s", voo->companhia);
}
//Lista todos os voos que saem de um determinado aeroporto
void lista_voos_aeroporto(_Aeroporto* cabAeroporto){
_Aeroporto* aeroporto;
_Voo* voos;
_Voo* voo_cursor;
char nome_aux[50];
printf("Nome do aeroporto: ");
scanf(" %[^\n]s", nome_aux);
aeroporto = busca_aeroporto(cabAeroporto, nome_aux);
if(aeroporto){
voos = aeroporto->voos;
for(voo_cursor = voos->proximo ; voo_cursor != NULL; voo_cursor = voo_cursor->proximo){
imprime_voo(voo_cursor);
}
}else{
printf("Aeroporto n�o encontrado!\n");
}
}
//Imprime na tela os dados de um voo
void imprime_voo(_Voo* voo){
printf("N�mero do voo: %d\n",voo->numero);
printf("Nome da companhia: %s\n",voo->companhia);
printf("Aeroporto de destino: %s\n",(voo->destino)->nome);
}
//Lista todos os voos que saem de um determinado companhia aerea
void lista_voos_companhia(_Aeroporto* cabAeroporto){
_Aeroporto* aeroporto;
_Voo* voo_cursor;
char nome_aux[50];
aeroporto = cabAeroporto;
printf("Nome da companhia: ");
scanf(" %[^\n]s", nome_aux);
while (aeroporto->proximo != NULL){
aeroporto = aeroporto->proximo;
voo_cursor = aeroporto->voos;
while (voo_cursor->proximo != NULL){
voo_cursor = voo_cursor->proximo;
if(strcmp(nome_aux, voo_cursor->companhia) == 0){
printf("De %s para %s:\n",aeroporto->nome, (voo_cursor->destino)->nome);
}
}
}
}
//Remove voo de uma lista de voos
void remove_voo(_Aeroporto* cabAeroporto){
_Aeroporto* aeroporto;
_Voo* voo_cursor;
char nome_origem[50];
char nome_destino[50];
aeroporto = cabAeroporto;
printf("Nome do aeroporto de origem: ");
scanf(" %[^\n]s", nome_origem);
aeroporto = busca_aeroporto(cabAeroporto, nome_origem);
if(aeroporto){
printf("Nome do aeroporto de destino: ");
scanf(" %[^\n]s", nome_destino);
voo_cursor = aeroporto->voos;
while (voo_cursor->proximo != NULL){
voo_cursor = voo_cursor->proximo;
if(strcmp(nome_destino, (voo_cursor->destino)->nome) == 0){
(voo_cursor->anterior)->proximo = voo_cursor->proximo;
printf("Aeroporto remotivo com sucesso!\n\n");
}
}
}else{
printf("Aeroporto n�o encontrado!\n");
}
}
//Faz uma viagem iterativa com o usu�rio
void viagem_iterativa(_Aeroporto* cabAeroporto){
_Aeroporto* aeroporto;
_Voo* voo_inicial = NULL;
_Voo* voo_cursor = NULL;
int op, aux;
aeroporto = cabAeroporto;
if(aeroporto->proximo == NULL){
printf("N�o existe aeroportos cadastrados!\n");
}
while (aeroporto->proximo != NULL){
aeroporto = aeroporto->proximo;
if((aeroporto->voos)->proximo != NULL){
voo_inicial = aeroporto->voos;
break;
}
}
if(voo_inicial == NULL){
printf("Nenhum voo cadastrado!\n");
}
do{
voo_cursor = voo_inicial;
aux = 0;
system(CLEAR);
printf(" Voos do aeroporto %s! \n", aeroporto->nome);
while (voo_cursor->proximo != NULL){
voo_cursor = voo_cursor->proximo;
imprime_voo(voo_cursor);
printf("\n");
}
printf("\n0- Sair\n\n");
printf("Escolha um voo:");
scanf("%d",&op);
voo_cursor = voo_inicial;
if(op != 0){
while (voo_cursor->proximo != NULL){
voo_cursor = voo_cursor->proximo;
if(voo_cursor->numero == op){
voo_inicial = (voo_cursor->destino)->voos;
aeroporto = voo_cursor->destino;
aux++;
}
}
if(aux == 0){
printf("Número de voo incorreto!\n");
system(PAUSE);
}
}
}while(op != 0);
}
The mistakes you are making are in this photo: