/* listado formateado del contenido de un fichero de alumnos */ /* Agrupado por curso */ #include #include #include #define NLINPORPAGINA 15 // Número máximo de línea por página typedef struct { char nombre[30]; int edad; int curso; int nota; } TIPOALUMNO; int numlin; char * FechaActual(void ) { static char cfecha[12]; // Cadena con la fecha 01/12/2001 struct tm *sfecha; // Puntero a Estructura fecha y hora time_t tiemposg; // Tiempo en segundos desde 1970 tiemposg = time(NULL); sfecha = localtime( & tiemposg ); sprintf(cfecha,"%2d/%2d/%4d", sfecha->tm_mday,sfecha->tm_mon+1,sfecha->tm_year+1900); return cfecha; } void VerCabecera (int Npag ) { clrscr(); printf("N. %d Fecha:%s\n", Npag,FechaActual()); printf(" INFORME DE ALUMNOS AGRUPADO \n\n"); printf("=====================================================\n"); printf(" NOMBRE EDAD \n"); printf("=====================================================\n"); numlin += 5; } void VerPie (void ) { printf("=====================================================\n"); numlin++; } void VerCampos ( TIPOALUMNO *sr ) { printf(" %-15s %3d\n", sr->nombre, sr->edad); numlin++; } main () { FILE *fent; // Fichero TIPOALUMNO ralumno; // Registro del fichero int Npaginas; // Contador de paginas int totalcentro; // Número de alumnos del centro int nalumnoscurso; // Número de alumnos de cada curso int cursoactual; fent = fopen("ALUMNOS.DAT","rb"); if ( fent == NULL ) { printf(" Error al abrir el archivo ALUMNOS.DAT "); return 1; } numlin = 0; Npaginas = 1; VerCabecera(Npaginas); totalcentro = 0; fread(&ralumno,1,sizeof(TIPOALUMNO),fent ); while ( !feof (fent) ) { cursoactual = ralumno.curso; nalumnoscurso = 0; printf("CURSO:%2d\n",cursoactual); numlin++; while ( (cursoactual == ralumno.curso ) && ( !feof(fent) ) ) { VerCampos( & ralumno ); nalumnoscurso++; if ( (numlin % NLINPORPAGINA) == 0 ) { VerPie(); puts("\n\t--- Pulse una tecla para continuar ---"); getch(); Npaginas++; VerCabecera(Npaginas); } fread(&ralumno,1,sizeof(TIPOALUMNO),fent ); } printf("\t\t\t Total curso : %3d alumnos.\n",nalumnoscurso ); numlin++; totalcentro += nalumnoscurso; } VerPie(); printf(" Total de alumnos del centro : %d\n ", totalcentro ); puts("\n\t------- FIN DEL INFORME ----------"); getchar(); fclose(fent); return 0; }