Foros del Web » Programación para mayores de 30 ;) » Programación General »

problema con relacion de structuras y arcivos en c

Estas en el tema de problema con relacion de structuras y arcivos en c en el foro de Programación General en Foros del Web. tengo un pequeño problema con una relcaion que estoy tratando de hacer entre dos structuras una es de estudiantes y la otra de materias el ...
  #1 (permalink)  
Antiguo 17/07/2005, 21:38
Avatar de julwo  
Fecha de Ingreso: mayo-2004
Ubicación: santiago, Rep Dom
Mensajes: 252
Antigüedad: 19 años, 11 meses
Puntos: 0
problema con relacion de structuras y arcivos en c

tengo un pequeño problema con una relcaion que estoy tratando de hacer entre dos structuras una es de estudiantes y la otra de materias el caso es que un estudiante puede tener vairas materias ok hata ahy estamos claro pero cando la guardo solo me presenta la primera materia que cree y me ignora las otras osea siempre elige la primera materia del archivo.

este es el codigo por si alguna ayudita ???
Código:
#include<conio.h>
#include<stdio.h>
#include<dos.h>
#include<string.h>
#include<stdlib.h>
//#include<loading.h>
void registro();
void graficas();
struct asignatura
{
	char matricula[9];
	char codigo[5];
	char nombre[10];
	int p1,p2,p3,p10;
}as[5];
struct estudiante
{
	char matricula[9];
	char nombre[20];
	char apellido[20];
	char direccion[30];
	char telefono[10];
	char edad[2];
}rec[50];
main()
{
	char op;
       graficas();
       //textmode(C80);
	//loading();
	do{
		clrscr();
		//cuadro();
		gotoxy(30,10);textcolor(YELLOW);cprintf("[E] -Estudiantes");
		gotoxy(30,12);textcolor(YELLOW);cprintf("[A] -Asignatura");
		gotoxy(30,14);textcolor(YELLOW);cprintf("[I] -Iscripcion");
		gotoxy(30,16);textcolor(YELLOW);cprintf("[S] -Salir");
		op=getch();
		switch(op)
		{
		   case 'e':registro();break;
		}
	}while(op!='s');
return 0;
}

void registro()
{
	int x,i=0,n,p,h=0,c;
	char op,id[9],d,tcc;
	FILE *archivo;
	FILE *archas;
	do{
		clrscr();
		gotoxy(27,5);textcolor(YELLOW);cprintf("Digite la Opcion Deseada :\n");
		gotoxy(8,10);textcolor(YELLOW);cprintf("[R] -Registrar Datos  ");
		gotoxy(45,10);textcolor(YELLOW);cprintf("[V] -Visualizar Datos");
		gotoxy(8,14);textcolor(YELLOW);cprintf("[C] -Consultar R‚gistro  ");
		gotoxy(45,14);textcolor(YELLOW);cprintf("[S] -Salir del Menu      ");
		op=getch();
		switch(op)
		{
			case 'r':{
			do{
			       clrscr();
			       gotoxy(25,8);textcolor(YELLOW);printf("Matricula : "); scanf("%s",&rec[i].matricula);
			       gotoxy(25,10);textcolor(YELLOW);	printf("Nombre : "); gets(rec[i].nombre);gets(rec[i].nombre);
			       gotoxy(25,12);textcolor(YELLOW);	printf("Apellido : "); gets(rec[i].apellido);
			       gotoxy(25,14);textcolor(YELLOW);	printf("Direcci¢n : "); gets(rec[i].direccion);
			       gotoxy(25,16);textcolor(YELLOW);	printf("Tel‚fono : "); gets(rec[i].telefono);
			       gotoxy(25,18);textcolor(YELLOW);	printf("Edad : "); scanf("%s",&rec[i].edad);
			       c=0;
			       do{
				       clrscr();
				       gotoxy(5,5);printf("%s %s",rec[i].nombre,rec[i].apellido);
				       strcpy(as[c].matricula,rec[i].matricula);
				       gotoxy(25,8);textcolor(YELLOW); printf("Materias");
				       gotoxy(25,10);textcolor(YELLOW); printf("Codigo.:");scanf(" %s",&as[c].codigo);
				       gotoxy(25,12);textcolor(YELLOW); printf("Nombre.:");scanf("%s",&as[c].nombre);
				       gotoxy(25,14);textcolor(YELLOW); printf("Parcial 1.:");scanf("%d",&as[c].p1);
				       gotoxy(25,16);textcolor(YELLOW); printf("Parcial 2.:");scanf("%d",&as[c].p2);
				       gotoxy(25,18);textcolor(YELLOW); printf("Parcial 3.:");scanf("%d",&as[c].p3);
				       as[c].p10=10;
				       c++;
				       gotoxy(25,20);textcolor(YELLOW);	printf("Agregar Otra Materia [S/N] : ");
				       tcc=getch();
			       }while(tcc!='n'||c==5);
				i++;
				archas=fopen("c:\\regas","at+");
				if(archas==NULL)
				{
					 printf("El Archivo no se pudo abrir");
					 getch();
					 exit(0);
				}
				else
				{
					for(p=0;p<c;p++)
					{
						fseek(archas,sizeof(as[p])*p,SEEK_SET);
						fwrite(&as[p],sizeof(as[p]),1,archas);
					}
				}
				fclose(archas);
				gotoxy(25,20);textcolor(YELLOW);	printf("Agregar Otro Estudiante [S/N] : ");
				d=getch();
			 }while(d=='s' || d=='S');
			 archivo=fopen("c:\\registro","at+");
			 if(archivo==NULL)
			 {
				 printf("El Archivo no se pudo abrir");
				 getch();
				 exit(0);
			 }
			 else
			 {
				for(p=0;p<i;p++)
				{
					fseek(archivo,sizeof(rec[p])*p,SEEK_SET);
					fwrite(&rec[p],sizeof(rec[p]),1,archivo);
				}
				fclose(archivo);
				gotoxy(22,20);textcolor(WHITE);cprintf("!!El R‚gistro fue Creado Exitosamente!!");
				gotoxy(26,22);textcolor(190);cprintf("!!Pulse [ENTER] para Continuar !!");
				fclose(archivo);
				getch();
				registro();
			 }
			break;}
			case 'v':{
				clrscr();
				archivo=fopen("c:\\registro","at+");
				if(archivo==NULL)
				{
					printf("El Archivo no se pudo abrir");
					getch();
					exit(0);
				}
				else
				{
					gotoxy(17,2);textcolor(YELLOW);printf(" VISUALIZACION DE LOS REGISTROS DEL ARCHIVO");
					gotoxy(2,6);textcolor(YELLOW);printf("ÉÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍ»");
					gotoxy(2,7);textcolor(YELLOW);printf("ºMat.      Nombre         Apellido        Direcci¢n        Telefono      Edadº");
					gotoxy(2,8);textcolor(YELLOW);printf("ÈÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍͼ");
					i=0;
					while(!feof(archivo))
					{
						fseek(archivo,sizeof(rec[i])*i,SEEK_SET);
						fread(&rec[i],sizeof(rec[i]),1,archivo);
						gotoxy(2,11+i);printf("%s",rec[i].matricula);
						gotoxy(12,11+i);printf("%s",rec[i].nombre);
						gotoxy(28,11+i);printf("%s",rec[i].apellido);
						gotoxy(44,11+i);printf("%s",rec[i].direccion);
						gotoxy(61,11+i);printf("%s",rec[i].telefono);
						gotoxy(75,11+i);printf("%s",rec[i].edad);
						i++;
					};
					gotoxy(26,22);textcolor(190);cprintf("!!Pulse [ENTER] para Continuar !!");
					getch();
					fclose(archivo);
				}
				break;}
			case 'c':{
				clrscr();
				archivo=fopen("c:\\registro","at+");
				if(archivo==NULL)
				{
					printf("El Archivo no se pudo abrir");
					getch();
					exit(0);
				}
				else
				{
					gotoxy(24,2);textcolor(YELLOW);printf(" CONSULTA DE LOS REGISTROS A BUSCAR");
					gotoxy(22,10);textcolor(YELLOW);printf("Por Favor Matricula a Buscar : ");
					gotoxy(60,10);textcolor(YELLOW);scanf("%s",&id);
					do
					{
						 fread(&rec[i],sizeof(rec[i]),1,archivo);
						 x=strcmp(id,rec[i].matricula);
						 if (x==0)
						 {
							 h++;
							 clrscr();
							 gotoxy(25,8);printf("Matricula .: %s",rec[i].matricula);
							 gotoxy(25,10);printf("Nombre   .: %s",rec[i].nombre);
							 gotoxy(25,12);printf("Apellido .: %s",rec[i].apellido);
							 gotoxy(25,14);printf("Direccion.: %s",rec[i].direccion);
							 gotoxy(25,16);printf("Telefono .: %s",rec[i].telefono);
							 gotoxy(25,18);printf("edad     .: %s",rec[i].edad);
						  }
						  i++;
					}while(!feof(archivo));
					if(h==0)
					{
						gotoxy(25,20);
						textcolor(BLUE);
						printf("!!La Matricula Digitada no Existe!!");
					}
					fclose(archivo);
					gotoxy(20,22);textcolor(210);cprintf("!!Pulse [ENTER] para Continuar !!");
					getch();
				}
				break;}
			case 'b':{
				clrscr();
				archas=fopen("c:\\regas","at+");
				if(archas==NULL)
				{
					printf("El Archivo no se pudo abrir");
					getch();
					exit(0);
				}
				else
				{
					gotoxy(24,2);textcolor(YELLOW);printf(" CONSULTA DE LOS REGISTROS A BUSCAR");
					gotoxy(22,10);textcolor(YELLOW);printf("Por Favor Matricula a Buscar : ");
					gotoxy(60,10);textcolor(YELLOW);scanf("%s",&id);
					h=12;
					clrscr();
					while(!feof(archas))
					{
						 fseek(archas,sizeof(as[i])*i,SEEK_SET);
						 fread(&as[i],sizeof(as[i]),1,archas);
						 x=strcmp(id,as[i].matricula);
						 if (x==0)
						 {
						     h++;
						     gotoxy(15,8);printf("Matricula .: %s",as[i].matricula);
						     gotoxy(15,h);printf("materia  .: %s",as[i].nombre);
						     gotoxy(45,h);printf("nota     .: %d %d %d",as[i].p1,as[i].p2,as[i].p3);
						 }
						i++;
					};
					if(h==0)
					{
						gotoxy(25,20);
						textcolor(BLUE);
						printf("!!La Matricula Digitada no Existe!!");
					}
					fclose(archas);
					gotoxy(20,22);textcolor(210);cprintf("!!Pulse [ENTER] para Continuar !!");
					getch();
					}
				}
				break;}
		}while(op!='s');
}
//6686357

void graficas()
{
	int x,y=20;
	clrscr();
	for(y=10;y<31;y++)
	{
		gotoxy(20,y);printf("¶");
	}
	for(x=20;x<70;x++)
	{
		gotoxy(x,30);printf("Ü");

	}
	x=-10;
	for(y=30;y>8;y-=2)
	{
		gotoxy(17,y);
		textcolor(GREEN);cprintf("%d",x+=10);
	}

	getch();


}
saludos
__________________
Cuando las cosa son Buenas, SON BUENAS! no importan las R@tas que orinen en el camino! Me SiGUe!!
  #2 (permalink)  
Antiguo 18/07/2005, 00:37
Avatar de Eternal Idol  
Fecha de Ingreso: mayo-2004
Ubicación: Lucentum
Mensajes: 6.192
Antigüedad: 19 años, 11 meses
Puntos: 74
Lo siento pero la verdad es que el codigo es ilegible y para nada standard.
__________________
¡Peron cumple, Evita dignifica! VIVA PERON CARAJO
  #3 (permalink)  
Antiguo 18/07/2005, 20:32
Avatar de julwo  
Fecha de Ingreso: mayo-2004
Ubicación: santiago, Rep Dom
Mensajes: 252
Antigüedad: 19 años, 11 meses
Puntos: 0
__________________
Cuando las cosa son Buenas, SON BUENAS! no importan las R@tas que orinen en el camino! Me SiGUe!!
  #4 (permalink)  
Antiguo 19/07/2005, 09:48
Avatar de Instru  
Fecha de Ingreso: noviembre-2002
Ubicación: Mexico
Mensajes: 2.751
Antigüedad: 21 años, 5 meses
Puntos: 52
Es la verdad.
Intenta hacer un "demo" que no utilice nada de conio, loading o dos(esa es estandar?)
Saludos
  #5 (permalink)  
Antiguo 19/07/2005, 09:49
Avatar de Eternal Idol  
Fecha de Ingreso: mayo-2004
Ubicación: Lucentum
Mensajes: 6.192
Antigüedad: 19 años, 11 meses
Puntos: 74
¿DOS.H? ¿Que intuicion tenes al respecto? ¿Funcionara en Linux?
__________________
¡Peron cumple, Evita dignifica! VIVA PERON CARAJO
  #6 (permalink)  
Antiguo 19/07/2005, 10:00
Avatar de Instru  
Fecha de Ingreso: noviembre-2002
Ubicación: Mexico
Mensajes: 2.751
Antigüedad: 21 años, 5 meses
Puntos: 52
JAJAJAJAJAJAJ.Perdon. Nunca la habia utilizado. En cuanto a intuicion. Podria haberse pensado que tenia funciones "imitacion" del sistema operativo DOS.
Pero ya me sacaste de duda.
Saludos
  #7 (permalink)  
Antiguo 19/07/2005, 10:02
Avatar de Eternal Idol  
Fecha de Ingreso: mayo-2004
Ubicación: Lucentum
Mensajes: 6.192
Antigüedad: 19 años, 11 meses
Puntos: 74
Cita:
Iniciado por Instru
JAJAJAJAJAJAJ.Perdon. Nunca la habia utilizado. En cuanto a intuicion. Podria haberse pensado que tenia funciones "imitacion" del sistema operativo DOS.
Pero ya me sacaste de duda.
Saludos
Yo tampoco la use jamas. Es valido pensar que imitara MS-DOS pero seguiria sin ser standard de C
__________________
¡Peron cumple, Evita dignifica! VIVA PERON CARAJO
  #8 (permalink)  
Antiguo 19/07/2005, 21:35
Avatar de julwo  
Fecha de Ingreso: mayo-2004
Ubicación: santiago, Rep Dom
Mensajes: 252
Antigüedad: 19 años, 11 meses
Puntos: 0
bueno la libreria de loading es opcional yo la hice por que ayi tengo los verdaderos graficos del programas osea los cuadros y unas cuantas animaciones mas
__________________
Cuando las cosa son Buenas, SON BUENAS! no importan las R@tas que orinen en el camino! Me SiGUe!!
Atención: Estás leyendo un tema que no tiene actividad desde hace más de 6 MESES, te recomendamos abrir un Nuevo tema en lugar de responder al actual.
Respuesta




La zona horaria es GMT -6. Ahora son las 09:48.