problema con ejercicio

fff
15 de Junio del 2008






//me hace errores de linkscuando le doy run




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


typedef struct vuelos
{
int nro_vuelo; //va a ser unico e identificar cada vuelo por destino y dia
int tot_lugares;
int ocupados;
struct pasajeros *abajo;//enlace a pasajeros(multilista)
struct vuelos *sig;
struct sigvuelos *vuelos;
} nodo_vuelos;

typedef struct sigvuelos
{
int nro_vuelo; //va a ser unico e identificar cada vuelo por destino y dia
int tot_lugares;
int ocupados;
struct pasajeros *abajo;
struct sigvuelos *sig1;
} nodo_sig_vuelos;


typedef struct pasajeros
{
char nombre[15];
long nro_pasaporte;
long telefono;
struct pasajeros *prox;
} nodo_pasajeros;

typedef struct cola
{
int nro_vuelo1;
long nro_pasaporte;
long telefono;
struct cola *enlace;
} nodo_cola1;

int dardebaja(nodo_cola1 **,nodo_cola1 **);
void coladereservas(nodo_cola1 *cola, nodo_vuelos *vuelos[7][3]);
void mostrarc(nodo_cola1 *);
void levantar(nodo_vuelos *levantar[7][3]);
void reservar(nodo_cola1 **cabeza,nodo_cola1 **fin,int,long,long);
nodo_vuelos *suspender(nodo_vuelos *suspender[7][3]);
nodo_vuelos *agregar(nodo_vuelos *agregar[7][3]);
void mirar(nodo_vuelos *mirar[7][3]);
void menuuser(nodo_vuelos *user[7][3],nodo_cola1 **cabeza, nodo_cola1 **fin);
void menuadmin(nodo_vuelos *admin[7][3],nodo_cola1 **cabeza,nodo_cola1 **fin);


void main()
{
nodo_cola1 *cabeza=NULL,*fin=NULL;
nodo_vuelos *mat[7][3];
nodo_vuelos *registro;
nodo_pasajeros *registro1,*temp[7][3];
int cont[7][3];
int op,i=0,j=0;
int numvuelo,totlugares,ocupados,numpasaporte,telefono,numvuelopas;
char nombre[15];
FILE *archi,*archiv;
if((archi=fopen("c:mat.txt","r"))==NULL)
printf("no se puede abrir");
else
{
for(j=0;j<3;j++)
{
for(i=0;i<7;i++)
{
fscanf(archi,"%d %d %d",&numvuelo,&totlugares,&ocupados);
// printf("2");
// getch();
mat[i][j]=(nodo_vuelos*)malloc(sizeof(nodo_vuelos));
mat[i][j]->nro_vuelo=numvuelo;
mat[i][j]->tot_lugares=totlugares;
mat[i][j]->ocupados=ocupados;
}
}
fclose(archi);

}
if((archiv=fopen("c:pass.txt","r"))==NULL)
printf("no se puede abrir");

else
{

//tengo problemas no me carga mas de 1 pasajero
fscanf(archiv,"%s %d %d %d",nombre,&numpasaporte,&telefono,&numvuelopas);
while(!feof(archiv))
{

for(j=0;j<3;j++)
{
for(i=0;i<7;i++)
{
if(mat[i][j]->nro_vuelo==numvuelopas)
{
if(mat[i][j]->abajo==NULL)
{
printf("%d",mat[i][j]->nro_vuelo);
mat[i][j]->abajo=(nodo_pasajeros*)malloc(sizeof(nodo_pasajeros));
mat[i][j]->abajo->nro_pasaporte=numpasaporte;
mat[i][j]->abajo->telefono=telefono;
strcpy(mat[i][j]->abajo->nombre,nombre);
}
}
}
}
fscanf(archiv,"%s %d %d %d",nombre,&numpasaporte,&telefono,&numvuelopas);


}
printf("n");
fclose(archiv);
}


printf("ingrese opcion: n 1 user n 2 admin n 0 salir n");
scanf("%d",&op);

while(op!=0){
switch(op)
{
case 0: break;
case 1: menuuser(mat,&cabeza,&fin);break;
case 2: menuadmin(mat,&cabeza,&fin);break;
default: printf("opcion no valida");break;
}
printf("ingrese opcion: n 1 user n 2 admin n 0 salir n");
scanf("%d",&op);
}
for(j=0;j<3;j++)
{
for(i=0;i<7;i++)
{
printf("%d %d %s",i,j,mat[i][j]->abajo->nombre);
}
}
levantar(mat);
}


void menuuser(nodo_vuelos *puntero[7][3],nodo_cola1 *cabeza,nodo_cola1 *fin)
{

int op,nrov;
long nrop,tel;
printf("ingrese que desea hacer: n reserva a vuelo: presione 1 n mirar vuelos disponibles: presione 2 n volver presione 3 n");
scanf("%d",&op);
switch(op)
{
case 1: printf("nnumero vuelon");scanf("%d",&nrov);
printf("n numero pasajeron");scanf("%d",&nrop);
printf("ntelefonon");scanf("%d",&tel);
reservar(&cabeza,&fin,nrov,nrop,tel);break;
case 2: mirar(puntero);break;
case 3: return;
default: menuuser(puntero,&cabeza,&fin);break;
}
mostrarc(cabeza);
}

void menuadmin(nodo_vuelos *segundo[7][3],nodo_cola1 *cabeza,nodo_cola1 *fin)
{
int op,x;
long l,m;
printf("ingrese que desea hacer: n agregar vuelos: presione 1n suspender vuelos: presione 2 n cola de reservas: presione 3n dar de baja: presione 4 n para volver presione 0n");
scanf("%d",&op);
getch();
switch(op)
{
case 0: break;

case 1: segundo[7][3]=agregar(segundo);break;

case 2: segundo[7][3]=suspender(segundo);break; //falta suspender pasajeros

case 3: coladereservas(cabeza,segundo);break; //falta

case 4: x=dardebaja(&cabeza,&fin);l=dardebaja(&cabeza,&fin);m=dardebaja(&cabeza,&fin);break;

default: menuadmin(segundo,&cabeza,&fin);
}
}

void mirar(nodo_vuelos *vuelos[7][3])
{
int i,j;
for(j=0;j<3;j++)
{
for(i=0;i<7;i++)
{
if(vuelos[i][j]->ocupados < vuelos[i][j]->tot_lugares)
{
printf("nvuelo %dn",vuelos[i][j]->nro_vuelo);
switch(i)
{
case 0:printf("lunesn");break;
case 1:printf("martesn");break;
case 2:printf("miercolesn");break;
case 3:printf("juevesn");break;
case 4:printf("viernesn");break;
case 5:printf("sabadon");break;
case 6:printf("domingon");break;
default: break;
}
switch(j)
{
case 0:printf("buenos airesn");break;
case 1:printf("nueva yorkn");break;
case 2:printf("rio de janeiron");break;
default: break;
}
getch();
}
}
}
}



nodo_vuelos *agregar(nodo_vuelos *agregar2[7][3])
{
int i,j;
nodo_vuelos *aux;
printf("ingrese dia");
scanf("%d",&i);
printf("ingrese destinon 0 bs asn 1 rio janeiron 2 new yorkn");
scanf("%d",&j);
printf("numero de vuelo?");
scanf("%d",&aux->nro_vuelo);
printf("total de lugares");
scanf("%d",&aux->tot_lugares);
printf("ocupados");
scanf("%d",&aux->ocupados);
agregar2[i][j]=aux;
return agregar2[7][3];
}

nodo_vuelos *suspender(nodo_vuelos *suspender2[7][3])
{
int i,j;
nodo_vuelos *aux;
nodo_pasajeros *aux1;
printf("ingrese dia");
scanf("%d",&i);
printf("ingrese destino 0 bs as 1 rio janua 2 new york");
scanf("%d",&j);
while(suspender2[i][j]->abajo!=NULL)
{
printf("%s",suspender2[i][j]->abajo->nombre);
getch();
aux1=suspender2[i][j]->abajo->prox;
free(suspender2[i][j]);
suspender2[i][j]->abajo=aux1;
printf("%d %d %s",i,j,suspender2[i][j]->abajo->nombre);
getch();
suspender2[i][j]->abajo=suspender2[i][j]->abajo->prox;
}
aux=NULL;
free(suspender2[i][j]);
suspender2[i][j]=aux;
return suspender2[i][j];
}

void reservar(nodo_cola1 **cabeza, nodo_cola1 **fin, int nrove, long nrope, long tele)
{
nodo_cola1 *nuevo;
printf("%d %d %d",nrove,nrope,tele);
getch();
nuevo=(nodo_cola1 *)malloc(sizeof(nodo_cola1));
if (nuevo != NULL)
{
nuevo->nro_vuelo1=nrove;
nuevo->nro_pasaporte=nrope;
nuevo->telefono=tele;
nuevo->enlace=NULL;
if (*cabeza == NULL)
*cabeza=nuevo;
else
(*fin)->enlace=nuevo;
*fin=nuevo;
}
else
printf("nNO MEMORY!n");
return;
}

void mostrarc(nodo_cola1 *cola)
{
if(cola->enlace!=NULL)
{
printf("%d",cola->nro_vuelo1);
printf("%d",cola->nro_pasaporte);
printf("%d",cola->telefono);
mostrarc(cola->enlace);
}
else
return;
}

void levantar(nodo_vuelos *levantar[7][3])
{
int i,j;
FILE *archi2;
if((archi2=fopen("c:mat2.txt","w"))==NULL)
{
printf("n no se puede abrir!!");
}else
{
for(j=0;j<3;j++)
{
for(i=0;i<7;i++)
{
if(levantar[i][j]!=NULL)
{
fprintf(archi2,"nnumero vuelo: %d total lugares: %d ocupados: %dn",levantar[i][j]->nro_vuelo,levantar[i][j]->tot_lugares,levantar[i][j]->ocupados);
}
}
}
}
fclose(archi2);
}

void coladereservas(nodo_cola1 *cola,nodo_vuelos *vuelos[7][3])
{
int i,j;
for(j=0;j<3;j++)
{
for(i=0;i<7;i++)
{
if(cola->nro_vuelo1==vuelos[i][j]->nro_vuelo)
{
printf("1");
}
}
}
return;
}

int sacar(nodo_cola1 **cabeza, nodo_cola1 **fin)
{
int valor;
nodo_cola1 *temp;
valor=(*cabeza)->nro_vuelo1;
temp=*cabeza;
*cabeza=(*cabeza)->enlace;
if (*cabeza == NULL)
*fin=NULL;
free(temp);
return valor;
}