Jump to content
Dionatan Diego

Conectar função ao menu

Recommended Posts

Dionatan Diego

Eai gnt, tudo bem com vc Estou fazendo um programa em C e não consigo conectar o Nó´s ao menu. Exemplo: cadastroAeroporto(); como fazer para que ele seja "linkado" no menu no case 2? 

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

typedef struct tNo {
	void *dado;
	struct tNo *proximo;
} No;

typedef struct tLista{
	No *cabeca;
	No *ultimo;
	int tamanho;
}Lista;

Lista * cria() {
	 Lista *l;
	 l = malloc(sizeof(Lista));
	 if(l == NULL){ exit(1);}
	 l->cabeca = malloc(sizeof(No));
	 if(!l->cabeca) { exit(1); }
	 l->ultimo = l->cabeca;
	 l->tamanho = 0;
	 l->cabeca->proximo = NULL;
	 return l;
}

void insere_inicio(Lista *l, void *dado) {
	No *novo;
	novo = malloc(sizeof(No));
	if(novo == NULL) { exit(1); }

	novo->dado = dado;

	if (l->cabeca->proximo == NULL){
		l->ultimo = novo;
	}
	novo->proximo = l->cabeca->proximo;
	l->cabeca->proximo = novo;
	l->tamanho += 1;
}

void * remove_inicio(Lista *l) {
	No *primeiro = l->cabeca->proximo;
	if(primeiro == NULL) {
		printf("Lista vazia.\n");
		return NULL;
	}
	l->cabeca->proximo = primeiro->proximo;
	l->tamanho -= 1;
	void * dado = primeiro->dado;
	if(primeiro == l->ultimo){
		l->ultimo = l->cabeca;
	}
	free(primeiro);
	return dado;
}

void destroi(Lista *f) {
	No *liberar;
	while(f->cabeca->proximo) {
		liberar = f->cabeca;
		free(liberar->dado);
		f->cabeca = f->cabeca->proximo;
		free(liberar);
	}
	free(f->cabeca);
	free(f);
}

void * remove_final(Lista *l){
	No *ultimo = l->ultimo;
	void *dado;
	if(ultimo == l->cabeca) {
		printf("Lista vazia.\n");
		return NULL;
	}else
	//Verifica se existe apenas um elemento
	if(ultimo == l->cabeca->proximo){
		dado = ultimo->dado;
		l->cabeca->proximo = NULL;
		l->ultimo = l->cabeca;
	}else
	//Busca o penultimo elemento
	{
		No *penultimo = l->cabeca->proximo;
		while(penultimo != NULL){
			if(penultimo->proximo == ultimo)
				break;
			penultimo = penultimo->proximo;
		}
		penultimo->proximo = NULL;
		l->ultimo = penultimo;
		l->tamanho -= 1;
		dado = ultimo->dado;
	}
	free(ultimo);
	return dado;
}

typedef struct tAeroporto{
	char codigo[4];
	char nome[100];
	Lista * voos;

} Aeroporto;

typedef struct tVoo{
	Aeroporto * destino;
	int codigo;
} Voo;

Aeroporto * buscaAeroporto(Lista *l,char codigo[4]){
	No *n;
	n = l->cabeca->proximo;
	Aeroporto *a;
	while(n!=NULL){
		a = (Aeroporto *) (n->dado);
		if( strcmp(a->codigo,codigo) == 0 )
			return a;
		n = n->proximo;
	}
	return NULL;
}

No * buscaVoo(Lista *l,int codigo){
	No *n;
	n = l->cabeca->proximo;
	Voo *v;
	while(n!=NULL){
		v = (Voo *) (n->dado);
		if( v->codigo == codigo )
			return n;
		n = n->proximo;
	}
	return NULL;
}

int remove_voo(Lista *l, int codigo){

	No *remover = buscaVoo(l,codigo);
	if(remover == NULL){
		return 0;
	}else
	if(l->ultimo == l->cabeca) {
		return 0;
	}else
	//Verifica se esta no inicio
	if(l->cabeca->proximo == remover){
		remove_inicio(l);
	}else
	//Verifica se esta no final
	if(l->ultimo == remover){
		remove_final(l);
	}else
	//Remove do meio da lista
	{
		No *anterior = l->cabeca->proximo;
		while(anterior != NULL){
			if(anterior->proximo == remover)
				break;
			anterior = anterior->proximo;
		}
		anterior->proximo = remover->proximo;
		l->tamanho -= 1;
		free(remover);
	}
	return 1;
}

void imprimeAeroporto(Lista *l){
	No *n;
	printf("\nMen\t\tDado\tProximo\n");
	printf("%p\tcabeca\t%p\n",l->cabeca,l->cabeca->proximo);
	Aeroporto *a;
	for (n = l->cabeca->proximo; n!= NULL ; n = n->proximo){
		a = (Aeroporto *)n->dado;
		printf("%p\t%s\t%p\n",n, a->codigo,n->proximo);
	}
	printf("%p\tultimo\t%p\n",l->ultimo,l->ultimo->proximo);
	printf("\n");
}

void imprimeVoos(Lista *l){
	No *n;
	printf("\nMen\t\tDado\tProximo\n");
	printf("%p\tcabeca\t%p\n",l->cabeca,l->cabeca->proximo);
	Voo *a;
	for (n = l->cabeca->proximo; n!= NULL ; n = n->proximo){
		a = (Voo *) n->dado;
		printf("%p\t%d\t%p\n",n, a->codigo,n->proximo);
	}
	printf("%p\tultimo\t%p\n",l->ultimo,l->ultimo->proximo);
	printf("\n");
}

int CadastraAeroporto(Lista * l, char * Cidade, char * Codigo){
	
	Aeroporto *a;
	a = malloc(sizeof(Aeroporto));
	if(a == NULL)
		return 0;
	strcpy(a->codigo,Codigo);
	strcpy(a->nome,Cidade);
	a->voos = cria();
	insere_inicio(l,(void *) a);
	return 1;
}

int CadastraVoo(Lista *l,int NumVoo, char * CodigoOrigem, char * CodigoDestino){ 

//Cadastra um Voo com um determinado número entre dois aeroportos identificados pelos seus Codigos.

}

int RemoveVoo(Lista *l,int NumVoo){ 

//Remove um Voo indicado pelo número.
	
}

// Função para exibir o menu de opções
// Note que retorna um valor int, que é o
// número digitado pelo usuário.
int menu() {
    int opcao;
 
    printf("\n\n ==== MENU DE OPCOES ====\n");
    printf("1 - Procura Voo \n");
    printf("2 - Cadastra Aeroporto \n");
    printf("3 - Imprime Voos \n");
    printf("4 - Cadastra Voo \n");
    printf("5 - Remove Voo \n");
    printf("6 - Procura Voo \n");
    printf("7 - Imprime Tudo \n");
    printf("8 - SAIR \n");
    printf("\nO que deseja fazer? ");
    scanf("%d", &opcao);
 
    return opcao;
}
 

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

	Lista *aeroportos;
	aeroportos = cria();
	int cod;
	
	char codigoA[4];
	char nomeA[100];
	
	int codigoV;
	char origem[4];
	char destino[4];
	
	do{
		opcao_selecionada = menu();
		scanf("%d",&cod);
		switch(opcao_selecionada){
			case 1:
				buscaVoo();
			break;
			case 2:
				CadastraAeroporto();
                break;
			break;
			case 3:
				imprimeVoos();
			    break;
			case 4:
				CadastraVoo();
			break;
			case 5:
				RemoveVoo();
				
			break;
			case 6:
				buscaVoo();
			break;
			case 7:
				imprimeVoos();
				
			break;
			case 8: break;
		}
	}while(cod != 0);

	
	imprimeAeroporto(aeroportos);
	
	//Imprimrir Voos
	//Aeroporto *a = buscaAeroporto(aeroportos,"CNF");
	//imprimeVoos(a->voos);


	destroi(aeroportos);

	return 0;
}

 

Share this post


Link to post
Share on other sites
HappyHippyHippo

nao estou a perceber a pergunta ... o que um no da lista tem haver com o menu ?


IRC : sim, é algo que ainda existe >> #p@p

Share this post


Link to post
Share on other sites
Dionatan Diego

Ex: No * buscaVoo(Lista *l,int codigo)

case 1: buscaVoo();

 

essa opção não funciona.

 

Share this post


Link to post
Share on other sites
HappyHippyHippo

olha para a assinatura da função "buscaVoo"

como estás a chamar-la ?

é coerente ?

  • Vote 1

IRC : sim, é algo que ainda existe >> #p@p

Share this post


Link to post
Share on other sites
Dionatan Diego
20 horas atrás, HappyHippyHippo disse:

olha para a assinatura da função "buscaVoo"

como estás a chamar-la ?

é coerente ?

Olha kkk eu tô perdido, e deseperado por que tô atrasado com esse projeto, o que vc me sujere a fazr?

Share this post


Link to post
Share on other sites
PsySc0rpi0n

A definição da função tem que corresponder à forma como é chamada depois no código. Se defines uma função que recebe 30 parâmetros, quando a usas no código, tens que lhe enviar 30 parâmetros. Não podes enviar só 25, 28 nem tão pouco 32. E chamá-la sem parâmetros, muito menos!

  • Vote 1

Kurt Cobain - Grunge misses you

Nissan GT-R - beast killer

Share this post


Link to post
Share on other sites

Create an account or sign in to comment

You need to be a member in order to leave a comment

Create an account

Sign up for a new account in our community. It's easy!

Register a new account

Sign in

Already have an account? Sign in here.

Sign In Now

×
×
  • Create New...

Important Information

By using this site you accept our Terms of Use and Privacy Policy. We have placed cookies on your device to help make this website better. You can adjust your cookie settings, otherwise we'll assume you're okay to continue.