2
Hello, I am doing a simple program of data structure it, have to organize some flights as for example register airports and flights of these airports, each flight line can only have one plane going and one coming back, so I did this program:
main. c
#include <locale.h>
#include "menu.h"
//Programa principal
int main()
{
setlocale(LC_CTYPE, "Portuguese");
_Aeroporto* cabAeroporto;
aloca_memoria_aeroporto(&cabAeroporto);
int op;
menu(op);
return 0;
}
menu. h
#include "menu.c"
void Display_Menu();
int menu (int);
menu. c
#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:");
}
int menu (int op)
{
do{
system(CLEAR);
Display_Menu();
scanf("%d",&op);
switch (op){
case 1:{
/*linha 38*/ 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"
void aloca_memoria_aeroporto();
void aloca_memoria_voo();
void cadastra_aeroporto();
void ler_dados_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();
src. c
#include <stdio.h>
#include <stdlib.h>
#include <conio.h>
#include <string.h>
//2 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;
//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");
return 1;
}
// 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];
int comp = 0;
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");
return 1;
}
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* voos;
_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* voos;
_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");
return 1;
}
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");
return 1;
}
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);
}
In the linha 38
of menu.c
(is marked in the code), I am having an error that I am not able to solve, it says cabAeroporto
is not declared, however, it is declared in _Aeroporto* cabAeroporto;
in #main. c
Do not include file knives with extension .c. Compile them separately and let Linker do what he knows.
– pmg
@pmg as well?
– Leonardo V. De Gasperin
What is your operating system and compiler?
– pmg
use Windows my IDE in case is Falcon C++ the compiler is gcc gnu
– Leonardo V. De Gasperin
with gcc, after removing the
#include
with extension files . c and review the includes structure, doesgcc -std=c89 -pedantic -Wall src.c menu.c main.c
. This will compile the 3 source files and automatically "link" all in one executable.– pmg
that’s the idea.
– Leonardo V. De Gasperin