Sistema de gestión de información estudiantil
#includelt;stdio.hgt;/*Nosotros también lo hemos hecho*/
#includelt;stdlib.hgt;
#includelt;string.hgt ;
#define MAX_LEN 10
#define STU_NUM 30
#define COURSE_NUM 6
estudiante de estructura typedef
{
número largo;
nombre de carácter[MAX_LEN];
puntuación flotante[COURSE_NUM];
suma flotante; p>
p>
promedio flotante;
}STU;
int Menú(void);
void ReadScore(STU stu[] , int n, int m);
void AverSumofEveryStudent(STU stu[], int n, int m);
void AverSumofEveryCourse(STU stu[], int n, int m) );
void SortbyScore(STU stu[], int n, int m, int (*compare)(float a, float b));
int Ascending(float a, float b);
int Descending(float a, float b);
void SwapFloat(float *x, float *y);
void SwapLong( long *x, long *y);
void SwapChar(char x[], char y[]);
void AsSortbyNum(STU stu[], int n, int m );
void SortbyName(STU stu[], int n, int m);
void SearchbyNum(STU stu[], int n, int m);
void SearchbyName (STU stu[], int n, int m);
void StatisticAnalysis(STU stu[], int n, int m);
void PrintScore( STU stu[], int n, int m);
void WritetoFile(registro STU[], int n, int m
void ReadfromFile(registro STU[], int); *n, int * m);
int main()
{
char ch;
int n=0, m =0;
p>
STU stu[STU_NUM];
mientras(1)
{
ch=Menú ();
switch (ch)
{
caso 1: printf("Ingrese el número de estudiante (nlt;=d):", STU_NUM);
p>
scanf("d",amp;n);
printf("Ingrese el número del curso (mlt;=d):",COURSE_NUM);
scanf( "d",amp;m);
ReadScore(stu,n,m);
break;
caso 2: AverSumofEveryCourse(stu,n, m);
descanso;
caso 3: AverSumofEveryStudent(stu, n, m);
caso 4: SortbyScore(stu, n, m, Descendente);
printf("\nOrdenar en orden descendente por puntuación:\n");
descanso;
caso 5: SortbyScore(stu, n, m, Ascendente);
printf("\nOrdenar en orden ascendente por puntuación:\n ");
PrintScore(stu, n, m);
romper;
caso 6: AsSortbyNum(stu, n, m);
printf("\nOrdenar en orden ascendente por puntuación:\n");
PrintScore(stu, n, m
break; p>caso 7: SortbyName(stu, n, m);
printf("\nOrdenar en el diccionario por puntuación:\n");
PrintScore(stu, n, m);
descanso;
caso 8: SearchbyNum(stu, n, m);
caso 9: SearchbyName(stu, n, m);
descanso;
caso 10: Análisis estadístico (stu, n, m);
caso 11: PrintScore(stu, n, m);
romper;
caso 12: WritetoFile(stu, n, m); break;
caso 13: ReadfromFile(stu,amp;n,amp;m);
break;
caso 14: printf("Fin del programa !\n");
salir(0);
predeterminado: printf("¡Error de entrada!\n");
}
}
return 0;
}
/*Función: mostrar el menú y obtener las opciones ingresadas por el teclado del usuario*/
int Menu(void)
{
int itemSelected;
printf("Gestión de puntuaciones de los estudiantes\n");
printf("1.En
poner registro\n");
printf("2.Calcular puntaje total y promedio de cada curso \n");
printf("3.Calcular puntaje total y promedio de cada estudiante \n");
printf("4.Ordenar en orden descendente por puntuación \n");
printf("5.Ordenar en orden ascendente por puntuación \n ");
printf("6.Ordenar en orden ascendente por número \n");
printf("7.Ordenar en diccionario por nombre \n");
printf("8.Buscar por número \n");
printf("9.Buscar por nombre \n");
printf("10 .Análisis estadístico \n");
printf("11.Listar registro \n");
printf("12.escribir en un archivo \n"); p>
p>
printf("13.leer de un archivo \n");
printf("0.Salir \n");
printf ("Ingrese su elección: "); //Lea la entrada del usuario
scanf("d", itemSelected);
devuelva itemSelected;
}
/*Función: Ingrese m puntajes de cursos de n estudiantes*/
void ReadScore(STU stu[], int n, int m)
{
int i, j;
printf("Ingrese el ID, el nombre y la puntuación de los estudiantes:\n"); n; i )
{
scanf("lds", amp; stu[i].num, stu[i].nombre);
para (j=0;jlt;m;j)
{
scanf("f", amp; stu[i].score[j]);
}
}
}
/*Función función: Calcula la puntuación total y la puntuación media de los cursos de cada estudiante*/
void AverSumofEveryStudent(STU stu[], int n, int m)
{
int i, j;
for(i=0; ilt; n; i )
{
stu[i].sum=0;
for(j=0;jlt;m;j)
{
stu[i].sum=stu[i].sum stu[i].score[j];
}
stu[i].aver=mgt;0?stu[i].sum/m:-1;
printf("estudiante
t d: suma = .0f, aver = .0f\n",
i 1, stu[i].sum, stu[i].aver);
} p>
}
/*Función de función: Calcula la puntuación total y la puntuación promedio de cada curso*/
void AverSumofEveryCourse(STU stu[], int n, int m )
{
int i,j;
suma flotante[COURSE_NUM],aver[COURSE_NUM];
for(j= 0;jlt;m;j )
{
suma[j]=0;
for(i=0;ilt;n;i)
{
suma[j]=sum[j] stu[i].score[j];
}
promedio[ j] = ngt; 0 ? suma[j]/n: -1;
printf("curso d: suma = .0f, aver = .0f\n", j 1, suma[j] ,aver[j]);
}
}
/*Función: Ordenar los valores de los elementos en la suma de la matriz según el método de selección* / p>
void SortbyScore(STU stu[], int n, int m, int (*compare)(float a, float b))
{
int i, j, k, t;
for(i=0;ilt;n-1;i)
{
k=i;
for(j=i 1;jlt;n;j)
{
if((*comparar)(stu[j].sum,stu[ k]. suma)) k=j;
}
if(k!=i)
{
for(t). =0; tlt; m; t )
{
SwapFloat(amp; stu[k].score[t],amp; stu[i].score[t]) ;
p>}
SwapFloat(amp;stu[k].sum,amp;stu[i].sum);
SwapFloat(amp; stu[k].aver, amp; stu[i].aver);
SwapLong(amp;stu[k].num, amp;stu[i].num);
SwapChar(stu [k].nombre, stu[i].nombre);
}
}
}
/* Ordenar los datos en orden ascendente*/
int Ascending(float a, float b)
{
return alt; >
} p>
/*Ordenar los datos en orden descendente*/
int Descending(float a, float b)
{
return agt; b;
}
/*Intercambiar dos datos de punto flotante de precisión simple*/
void SwapFloat(float *x, flotante *y)
{
temperatura flotante;
temp=*x;
*x=*y;
*y
=temp;
}
/*Intercambiar dos datos enteros largos*/
void SwapLong(long *x, long *y)
{
temperatura larga;
temp=*x;
*x=*y;
*y=temp ;
}
/*Intercambiar dos cadenas*/
void SwapChar(char x[], char y[])
{
temperatura de carácter[MAX_LEN];
strcpy(temp, x);
strcpy(x, y);
strcpy( y, temp);
}
/*Función función: Ordena los valores de los elementos de la matriz num de menor a mayor según el método de selección*/ p>
void AsSortbyNum(STU stu[], int n, int m)
{
int i, j, k, t;
for( i=0;ilt;n-1;i )
{
k=i;
for(j=i 1;jlt;n ;j )
{
if(stu[j].num lt; stu[k].num) k=j;
}
if(k!=i)
{
for(t=0;tlt;m;t)
{
SwapFloat(amp;stu[k].score[t],amp;stu[i].score[t]);
}
SwapFloat(amp;stu [k ].sum,amp;stu[i].sum);
SwapFloat(amp;stu[k].aver,amp;stu[i].aver);
SwapLong (amp;stu[k].num,amp;stu[i].num);
SwapChar(stu[k].nombre, stu[i].nombre);
}
}
}
/*Función: método de intercambio para ordenar cadenas en el orden del diccionario*/
void SortbyName (STU stu[], int n, int m)
{
int i, j, t;
for(i=0; ilt; n -1;i )
{
for(j=i 1;jlt;n;j )
{
si( strcmp(stu[j].nombre, stu[i].nombre)lt;0)
{
for(t=0;tlt;m;t)
{
SwapFloat(amp;stu[i].score[t],amp;stu[j].score[t]);
}
SwapFloat(amp;stu[i].sum,amp;stu[j].sum);
SwapFloat(amp;stu[i].aver,amp;stu[j]. aver);
SwapLong(amp;stu[i].num,amp;stu[j].num);
SwapChar(stu[i].nombre,stu[j ].nombre);
}
}
}
}
/*Función: buscar puntuaciones de estudiantes por número de estudiante y mostrar los resultados de la búsqueda*/ p>
void SearchbyNum(STU stu[], int n, int m)
{
número largo;
int i, j;
printf("Ingrese el número que desea buscar");
scanf("ld", amp; número
for(i=0; ilt; n; i )
{
if(stu[i].num==número)
{
printf( "ld \ts \t", stu[i].num, stu[i].nombre);
for(j=0;jlt;m;j)
{
printf(".0f \t", stu[i].score[j]);
}
printf(".0f\t. 0f\n", stu[i].sum, stu[i].aver);
return;
}
}
printf("\n ¡No encontrado! \n");
}
/*Función: organizar la tabla de resultados en orden de nombres del diccionario*/
void SearchbyName(STU stu[], int n, int m)
{
char x[MAX_LEN];
int i, j;
printf("Ingrese el número que desea buscar");
scanf("s", x
for(i=0; ilt; n;i)
{
if(strcmp(stu[i].nombre, x)==0)
{
printf("ld \ts \t", stu[i].num, stu[i].nombre);
for(j=0;jlt;m;j)
{
printf(".0f \t",stu[i].score[j]);
}
printf(".0f \t.0f\n", stu[i].sum, stu[i].aver);
return;
}
} p>
printf("\n ¡No encontrado! \n");
}
/*Función: Cuente el número de estudiantes en cada rango de puntuación y su porcentaje * /
análisis estadístico nulo(STU stu[], int n, int m)
{
int i, j, total, t[6]
for(j=0;jlt;m;j)
{
printf("Por supuesto d:\n",j 1);< / p>
memset(t, 0, sizeof(t)); //Inicializa todos los elementos de la matriz t en 0
for(i=0; ilt; n; i) p>
{
if(stu[i].score[j]gt;=0amp;amp;stu[i].score[j]l
t; 60) t[0];
else si (stu[i].score[j]lt; 70) t[1];
else si (stu[i] ].puntuación[j]lt; 80) t[2]
si no (stu[i].score[j]lt; 90) t[3]
de lo contrario si (stu[i].score[j]lt; 100) t[4] ;
de lo contrario si (stu[i].score[j]=100) t[5] ; p>
else if (stu[i].score[j]=100) t[5] ;
p>
}
for(total=0 ,i=0;ilt;=5;i)
{
total=total t[ i];
}
for(i=0;ilt;=5;i)
{
if(i= =0) printf("lt;60\td\t.2f\n" ,t[i],(float)t[i]/n*100);
else if(i== 5)
printf("d\td\t. 2f\n", (i 5)*10, t[i], (flotante)t[i]/n*100);
p>else
printf(" d-d\td\t.2f\n", (i 5)*10, (i 5)*10 9, t[i], (flotante) t[i]/n*100);
}
}
}
/*Función: Imprimir puntuaciones de los estudiantes* /
void PrintScore(STU stu[], int n, int m)
{
int i, j;
for (i=0;ilt;n;i)
{
printf("ld\ts\t", stu[i].num, stu[i].nombre) ;
for(j=0;jlt;m ;j)
{
printf(".0f\t",stu[i].score [j]);
}
printf(".0f\t.0f\n", stu[i].sum, stu[i].aver);
p>}
}
/*Envíe los números de estudiantes, nombres y calificaciones de m cursos de n estudiantes al archivo Student.txt*/
void WritetoFile(STU stu[], int n, int m )
{
ARCHIVO *fp;
int i, j;
p>
if((fp=fopen ("student.txt", "w"))==NULL)
{
printf("Error al abrir la partitura. txt!\n");
exit(0);
}
fprintf(fp, "d\td\n", n, m) //Escribe el número de estudiantes y cursos a; el archivo
for(i=0;ilt;n;i)
{
fprintf(fp , "10ld10s", stu[i].num , stu[i].nombre);
for(j=0;jlt;m;j)
{
fprintf(fp, "10.0f ", stu[i].puntuación[j]);
<p>}
fprintf(fp, "10.0f10.0f\n", stu[i].sum, stu[i].aver);
}
fclose(fp);
}
/*Lea el número de estudiante, el nombre, las calificaciones y otra información del archivo y escríbalo en la matriz de estructura stu*/
void ReadfromFile(STU stu[], int *n, int *m)
{
ARCHIVO *fp;
int i, j;
if((fp=fopen("student.txt", "r"))==NULL)
{
printf( "¡Error al abrir score.txt!\n");
exit(0);
}
fscanf(fp, "d\td", n, m); //Lee el número de estudiantes y cursos del archivo
for(i=0; ilt; *n; i)
{
fscanf(fp, "10ld", amp; stu[i].num);
fscanf(fp, "10s", stu[i].nombre); for(j=0;jlt; *m;j)
{
fscanf(fp, "10f", amp; stu[i].score[j]); /p>
}
fscanf(fp, "10f10f", amp; stu[i].sum, amp; stu[i].aver); //No se puede usar 10.0f p >
}
fclose(fp);
}