Jump to content
  • Revista PROGRAMAR: Já está disponível a edição #60 da revista programar. Faz já o download aqui!

FioX

Problema com Registos e Leitura de Ficheiros

Recommended Posts

FioX

Boa Tarde, estou a elaborar um projecto para a aula da programacao, sendo que o meu trabalha 'e um programa de gestao de uma companhia aerea.

Contudo quando quero listar os voos usando os dados num ficheiro e percorrer o array esta a dar sempre lista vazia quando percorro a funcao listar();

Tou seguindo um exemplo que fizemos na aula e que deu.

Meu Codigo

#include <stdio.h>
#include <time.h>
#include <stdlib.h>
struct voo_str{
 char NomeVoo[20];
 char Destino[20];
 char Local[20];
 int tempo;
 int numero;
 int lugares;
 struct voo *proximo;
};
typedef struct voo_str voo;

voo *raiz=NULL;
FILE* fp;
voo v[100];

void listar(){
 fp=fopen("Voo.dat", "rb");
 fread(&v, sizeof(voo),1, fp);
	 voo *aux;
	 aux=raiz;

	 if(aux==NULL){// a lista esta vazia
				 printf("Lista vazia\n");
	 }else{// alista não esta vazia
		 while(aux->proximo!=NULL){//percorre e imprime
					 printf("NomeVoo:%s\nDestino:%s\nLocal:%s\nTempo:%d\nNumeroVoo:%d\nLugares:%d",aux->NomeVoo,aux->Destino,aux->Local,aux->tempo,aux->numero,aux->lugares);
				 aux=(voo *)aux->proximo;
		 }//imprime o ultimo
		 printf("NomeVoo:%s\nDestino:%s\nLocal:%s\nTempo:%d\nNumeroVoo:%d\nLugares:%d",aux->NomeVoo,aux->Destino,aux->Local,aux->tempo,aux->numero,aux->lugares);
	 }

}

int eliminarvo(int num){
 voo *aux, *aux2;
 aux=raiz;

 aux2=num;;

 if (aux2==NULL){
	 return 0;
 }else{
	 if(aux==aux2){
					 raiz=aux->proximo;
					 return 1;
	 }else {

			 while(aux->proximo!=aux2){
				 aux=aux->proximo;
			 }

			 aux->proximo=aux2->proximo;
			 free(aux2);
			 return 1;
	 }
 }


}



int main()
{
int login,password,menu,menu2,verificaread=1;
char escolha,procuravo[10];


printf("################################################################################");
printf("########Bem Vindo Ao Sistema de Gestão de Reserva e Operacoes da EasyJet########");
printf("################################################################################");
if (fp=fopen("login.dat", "rb")){ //Caso o Programa ja foi aberto anteriormente irá buscar a pw ao ficheiro binário.
fread(&password, sizeof(4), 1, fp);
fclose(fp);
}
else { //caso é o primeira vez a iniciar o programa irá pedir um PIN de 4 Numeros.
 fp=fopen("login.dat", "w+b");
 printf("O Programa esta a ser executado pela primeira vez.\nPor favor introduza um PIN de 4 Numeros\n");
 scanf("%d",&password);
 fwrite(&password, sizeof(4), 1, fp);
 fclose(fp);
}
while(login!=password) //Inicio While, Fase Login.
{
printf("#####################Se Faz Favor Introduza o Numero de Login###################");
printf("################################################################################");
printf("Numero de Login: ");
scanf("%d",&login);
printf("Verificando...\n");

if(login==password) // login com sucesso
		 {
				 printf("################################################################################");
										 printf("############Login com Sucesso, Obrigado Por Usar o Sistema de Gestao############");
				 do{
										 printf("################################################################################");
										 printf("Menu:\n1-Introduzir Vos\n2-Listar Vos\n3-Verificar Passageiros\n4-Remover Vo\nEscolha: ");
										 scanf("%d",&menu);
						 switch(menu){
									 case 1:{
										 fflush(stdin);
										 printf("################################################################################");
										 printf("############Vai Entrar no Menu Para Introduzir Um Vo, Tem a Certeza?############\nReponda com (S) ou (N)\nEscolha: ");
										 scanf("%c",&escolha);
										 if(escolha=='S'){ // If Escolha S Inicio
														 do{
																			 fflush(stdin);
																			 printf("Introduza um Novo Voo:\nNome do Voo: ");
																			 gets(v[0].NomeVoo);
																			 printf("\nIntroduza o Destino: ");
																			 gets(v[0].Destino);
																			 printf("\nIntroduza Local de Saida: ");
																			 gets(v[0].Local);
																			 fflush(stdin);
																			 printf("\nIntroduza o tempo de duração(seguindo este formato, 1000 para 10:10): ");
																			 scanf("%d",&v[0].tempo);
																			 printf("\nIntroduza o numero do Aviao: ");
																			 scanf("%d",&v[0].numero);
																			 fflush(stdin);
																			 printf("\nQuantos Lugares o aviao tem?: ");
																			 scanf("%d",&v[0].lugares);
																			 fp=fopen("Voo.dat", "a+");
																			 fwrite(&v, sizeof(voo), 1, fp);
																			 printf("\nQuer Adicionar mais algum vo?(Sim=1),(Nao=0): ");
																			 scanf("%d",&menu2);
														 }while(menu2!=0); // Fim S
														 fclose(fp);
														 break;
														 } // If Escolha S Fim

										 } // Fim Case 1


								 case 2:{
											 fflush(stdin);
											 printf("################################################################################");
											 printf("#########Vai Entrar no Menu Para Listar os Voos, Tem a Certeza?##########\nReponda com (S) ou (N)\nEscolha: ");
											 scanf("%c",&escolha);
												 if(escolha=='S'){ // If Escolha S Inicio
													 listar();
												 }
										 }



									 case 3:{
											 fflush(stdin);
											 printf("################################################################################");
											 printf("#########Vai Entrar no Menu Para Verificar Passageiros, Tem a Certeza?##########\nReponda com (S) ou (N)\nEscolha: ");
											 scanf("%c",&escolha);
												 if(escolha=='S'){ // If Escolha S Inicio
																 do{
																			 fflush(stdin);
																			 printf("\nNome do Voo: ");
																			 scanf("%d",&procuravo);
																			 fp=fopen("Voo.dat", "rb");
																								 do{
																								 fread(&v, sizeof(voo),1, fp);
																														 if(procuravo==v[0].numero)
																														 {
																																	 printf("NomeVoo:%s\nDestino:%s\nLocal:%s\nTempo:%d\nNumeroVoo:%d\nLugares:%d",v[0].NomeVoo,v[0].Destino,v[0].Local,v[0].tempo,v[0].numero,v[0].lugares);
																																	 verificaread==0;
																														 }
																														 else
																														 printf("Vo nao foi encontrado");


																								 }while(verificaread==1);
																 }while(menu2!=0);
															 }// Fim S
												 }//Fim case2
									 case 4:{
											 fflush(stdin);
											 printf("################################################################################");
											 printf("#########Vai Entrar no Menu Para Remover um Voo, Tem a Certeza?##########\nReponda com (S) ou (N)\nEscolha: ");
											 scanf("%c",&escolha);
											 if(escolha=='S'){ // If Escolha S Inicio

																 printf("Indique o Numero do Voo que quer apagar");
																 scanf("%d",&procuravo);
																 eliminarvo(procuravo);
															 }
											 }

									 } //Fim Switch Menu
						 }while(menu!=6); //Fim do While
} // Fim Login Certo
else //Falha Login
		 {
		 printf("################################################################################");
		 printf("####Numero de Login Errado Verifique o Numero Introduzido e Tenta Novamente#####");
		 printf("################################################################################");
}
} // Fim While, Fim do Login
getch();
return 0;
}

este codigo 'e o projecto.

o codigo abaixo 'e o que foi feito na escola e deu para fazer a leitura, nao encontro a falha.

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


struct aluno_str{
 char nome[20];
 int numero;
 struct aluno *proximo;
};
typedef struct aluno_str aluno;


aluno *raiz=NULL;


aluno * procuraAluno(int num){
 aluno *aux;

 aux=raiz;// por auxiliar no inicio da lista



 if(raiz!=NULL){// tem elementos na lista
	 while(aux->proximo!=NULL){
		 if(aux->numero==num){
			 return aux;				
		 }else{
			 aux=aux->proximo;	
		 }					
	 }
	 if(aux->numero==num){
			 return aux;				
		 }else{
			 return NULL;
	 }
 }else{// nao tem elementos na lista
	 return NULL;


 }

}

int eliminarAluno(int num){
 aluno *aux, *aux2;
 aux=raiz;

 aux2=procuraAluno(num);

 if (aux2==NULL){
	 return 0;
 }else{
	 if(aux==aux2){
					 raiz=aux->proximo;
					 return 1;
	 }else {

			 while(aux->proximo!=aux2){
				 aux=aux->proximo;
			 }

			 aux->proximo=aux2->proximo;
			 free(aux2);
			 return 1;
	 }
 }


}

void listar(){

	 aluno *aux;
	 aux=raiz;

	 if(aux==NULL){// a lista esta vazia
				 printf("Lista vazia");			
	 }else{// alista não esta vazia
		 while(aux->proximo!=NULL){//percorre e imprime
					 printf("aluno:%s n:%d \n", aux->nome, aux->numero);
				 aux=(aluno *)aux->proximo;
		 }//imprime o ultimo
		 printf("aluno:%s n:%d \n", aux->nome, aux->numero);			
	 }

}


void insereAluno(char *nome, int num){// insere sempre no inicio da lista
 aluno *aux;
 aluno *novo;

 aux=raiz;
 //reserva memoria para o novo registo
 novo = (aluno *)malloc(sizeof(aluno));

 //preenche os campos do registo novo
 strcpy(novo->nome,nome);
 novo->numero=num;

 if (aux==NULL){// a lista esta vazia
				 raiz=novo;
				 novo->proximo=NULL;
 }else{// caso a lista nao esteja vazia
	 novo->proximo=raiz;
	 raiz=novo;

 }
}

void insereAlunoatras(char *nome, int num){
 aluno *aux;
 aluno *novo;

 aux=raiz;
 novo = (aluno *)malloc(sizeof(aluno));

 strcpy(novo->nome,nome);
 novo->numero=num;
 novo->proximo=NULL;

 if (aux==NULL){
				 raiz=novo;

				 novo->proximo=NULL;
 }else{
 while(aux->proximo!=NULL){
				 aux=(aluno *)aux->proximo;
		 }
 aux->proximo=novo;

 }
}
main(){
 aluno *aux, *alunoprocurado;
 int sucesso;
 char teste[20];


 printf("tamanho do registo aluno %d bytes", sizeof(aluno));

 getch();


 insereAluno("pedro", 70);	
 insereAluno("Maria", 20);
 insereAluno("jose", 30);

 insereAlunoatras("pedro11", 100);
 insereAlunoatras("maria22", 50);
 insereAlunoatras("jose22", 90);

 listar();	

 alunoprocurado=procuraAluno(20);

 if(alunoprocurado==NULL){
	 printf("ERRO PROCURAR: nao existe nenhum aluno com esse numero\n");										
 }else{
	 printf("\n\ntem o nome %s\n", alunoprocurado->nome );
 }

 sucesso=eliminarAluno(20);

 if(sucesso==0){
	 printf("ERRO ELIMINAR:nao existe nenhum aluno com esse numero\n");										
 }else{
	 printf("aluno eliminado com sucesso" );
 }
 listar();

 getch();
 }

Muito Obrigado pelo vosso tempo!

Edited by FioX
Falta LP no GeSHi

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

×

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.