Sistema de gestión de información estudiantil
#include
#include
#include
#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ú();
cambiar (ch)
{
caso 1:printf("Ingrese el número de estudiante (n<=%d):",STU_NUM);
scanf( "%d",&n);
printf("Ingrese el número del curso (m<=%d):",COURSE_NUM);
sc
anf("%d",&m);
ReadScore(stu,n,m);
break;
caso 2:AverSumofEveryCourse(stu,n ,m);
descanso;
caso 3:AverSumofEveryStudent(stu,n,m);
descanso;
caso 4 :SortbyScore(stu,n,m,Descending);
printf("\nOrdenar en orden descendente por puntuación:\n");
PrintScore(stu,n,m) ;
descanso;
caso 5:SortbyScore(stu,n,m,Ascending);
printf("\nOrdenar en orden ascendente por puntuación:\ n");
PrintScore(stu,n,m);
break;
caso 6:AsSortbyNum(stu,n,m); p> p>
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);
descanso;
caso 9 :SearchbyName(stu,n,m);
descanso;
caso 10:StatisticAnalysis(stu,n,m);
descanso;
caso 11:PrintScore(stu,n,m);
descanso;
caso 12:WritetoFile(stu,n,m);
descanso;
caso 13:ReadfromFile(stu,&n,&m);
descanso;
caso 14:printf("¡Fin del programa! \n ");
exit(0);
default :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.Registro de entrada\n");
printf("2.Calcular el puntaje total y promedio de cada curso \n");
printf(" 3. Calcular la puntuación total y media de cada estudiante \n");
printf("4.Ordenar en d
orden ascendente 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 el diccionario por nombre \n");
printf("8.Buscar por número \n"); p>
printf("9.Buscar por nombre \n");
printf("10.Análisis estadístico \n");
printf("11.List registrar \n");
printf("12.escribir en un archivo \n");
printf("13.leer desde un archivo \n"); p> p>
printf("0.Exit \n");
printf("Ingrese su elección:"); //Lea la entrada del usuario
scanf( " %d",&itemSelected);
devolver itemSelected;
}
/*Función: Ingresar m calificaciones de cursos de n estudiantes*/ p>
void ReadScore(STU stu[],int n,int m)
{
int i,j;
printf("Ingrese los resultados de los estudiantes ID, nombre y puntuación:\n");
for(i=0;i { scanf(" %ld %s",&stu[i].num,stu[i].nombre); for(j=0;j { p> scanf("%f",&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;i { stu [i]. suma=0; for(j=0;j { stu[i].sum=stu [i]. suma+stu[i].score[j]; } stu[i].aver=m>0?stu[i].sum/m :-1; printf("estudiante %d: suma = %.0f,aver = %.0f\n", i+1,stu[i].sum ,stu[i ].aver); } } /*Función: Calcular la puntuación total y la puntuación media de cada curso*/ void AverSumofEveryCourse(STU stu[],int n,int m) { int i,j; suma flotante[ COURSE_NUM],aver[ CURSO_NUM]; for(j=0;j { p> suma[j]=0; for(i=0;i { suma[j] =suma[j]+stu[i].score[j]; } aver[j] = n>0 ? suma[j]/n:-1; printf("curso %d:sum = %.0f,aver = %.0f\n",j+1,sum[j],aver[j]); } } /*Función de función: ordenar los valores de los elementos en la suma de la matriz de acuerdo con el método de selección*/ void SortbyScore(STU stu[], int n,int m,int (*comparar)(flotante a,flotante b)) { int i,j,k,t; para(i=0;i { k=i; para(j=i+ 1;j< n;j++) { if((*compare)(stu[j].sum,stu[k].sum)) k=j; } if(k!=i) { for(t=0;t { SwapFloat(&stu[k].score[t],&stu[i].score[t]); } SwapFloat(&stu [k].sum,&stu[i].sum); SwapFloat(&stu[k].aver,&stu[i].aver); SwapLong (&stu[k ].num,&stu[i].num); SwapChar(stu[k].nombre,stu[i].nombre); } p> } } /*Ordenar los datos en orden ascendente*/ int Ascending(float a, float b) { devolver a } /*Ordenar los datos en orden descendente*/ int Descendente(float a,float b) { return a>b; } /*Intercambia dos de precisión simple datos de punto flotante*/ void SwapFloat(float *x,float *y) { float temp; temp =*x; p> *x=*y; *y=temp; } / *Intercambiar dos datos enteros largos*/ p> void SwapLong(long *x,long *y) { long temp; temp=*x; *x=*y; *y=temp; } /*Intercambiar dos cadenas*/ void SwapChar(char x[],char y[]) { char temp[MAX_LEN]; strcpy(temp,x); strcpy(x,y); strcpy(y,temp); } /*Función: Presione para seleccionar Método para ordenar los valores de los elementos de la matriz numérica de menor a mayor*/ void AsSortbyNum(STU stu[],int n,int m) { int i,j,k,t; for( i=0;i { k=i; for(j=i+1;j { if(stu[j].num < stu[k].num) k=j; } if(k!=i) { for(t=0;t { SwapFloat(&stu[k].score[t],&stu[i].score[t]); } SwapFloat(&stu[k].sum,&stu[ i].sum); SwapFloat(&stu[k].aver,&stu[i].aver); SwapLong(&stu[k].num,&stu[i] .num); SwapChar(stu[k].nombre,stu[i].nombre); } } } /*Función de función: método de intercambio para implementar la clasificación de cadenas en el orden del diccionario*/ void SortbyName(STU stu[],int n,int m) { int i,j,t; for(i=0;i { for(j=i+1;j { if(strcmp(stu[j].nombre, stu[i].nombre )<0) { for(t=0;t { SwapFloat(&stu[ i].score[t],&stu[j].score[t]); } SwapFloat(&stu[i].sum,&stu[j].sum) ; SwapFloat(&stu[i].aver,&stu[j].aver); SwapLong(&stu[i].num,&stu[j].num); SwapChar(stu[i].nombre,stu[j].nombre); } } } } /*Función de función: buscar calificaciones de estudiantes por número de estudiante y mostrar los resultados de la búsqueda*/ void SearchbyNum(STU stu[],int n,int m ) { número largo; int i,j; printf("Ingrese el número que desea buscar") scanf("%ld",&number); for(i=0;i { if(stu[i].num==número) { printf("%ld \t%s \t",stu[i].num,stu [ i].nombre); for(j=0;j { printf("%.0f \t" , estu[i].puntuación[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 el orden de los 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;i { if(strcmp( stu[i].nombre,x)==0) { printf("%ld \t%s \t",stu[i].num,stu[ i].nombre); for(j=0;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: Cuente el número de estudiantes en cada rango de puntuación y su porcentaje*/ void StatisticAnalysis(STU stu[], int n,int m) { int i,j,total,t[6]; for(j=0;j { printf("Para el curso %d:\n",j+1); memset(t,0,sizeof(t ) ); //Inicializa todos los elementos de la matriz t en 0 for(i=0;i { if( stu[ i].score[j]>=0&&stu[i].score[j]<60) t[0]++; else if (stu[i].score[j]< 70) t[1]++; si no (stu[i].score[j]<80) t[2]++; si no (stu[ i] .score[j]<90) t[3]++; si no (stu[i].score[j]<100) t[4]++; si no, si (stu[i].score[j]=100) t[5]++; } for(total=0,i=0; i< =5;i++) { total=total+t[i]; } for(i= 0; i<=5;i++) { if(i==0) printf("<60\t%d\t%.2f%%\n" ,t [i],(float)t[i]/n*100); si no(i==5) printf("%d\t%d \t %.2f%%\n",(i+5)*10,t[i],(fl avena)t[i]/n*100); else printf("%d-%d\t%d\t%.2f%%\n", (i+5)*10,(i+5)*19,t[i],(flotante)t[i]/n*100); } } } /*Función: Imprimir puntuaciones de los estudiantes*/ void PrintScore(STU stu[],int n,int m) p > { int i,j; for(i=0;i { printf("%ld\t%s\t",stu[i].num,stu[i].nombre); for(j=0;j { printf("%.0f\t",stu[i].score[j]); } printf ("%.0f\t%.0f\n",stu[i].sum,stu[i].aver); } } /*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; if((fp=fopen("estudiante.txt", "w "))==NULL) { printf("¡Error al abrir score.txt!\n"); exit(0) ; } fprintf(fp,"%d\t%d\n",n,m); //Escribe el número de estudiantes y el número de cursos en el archivo for(i=0;i { fprintf(fp,"%10ld%10s",stu[i] .num, stu[i].nombre); for(j=0;j { fprintf(fp," %10.0f ",stu[i].score[j]); } fprintf(fp,"%10.0f%10.0f\n",stu[i] .sum, stu[i].aver); } fclose(fp); } /*Leer de file El número de estudiante, el nombre, las calificaciones y otra información del estudiante se escriben en la matriz de estructura stu*/ void ReadfromFile(STU stu[],int *n,int *m) { ARCHIVO *fp; int i,j; if((fp=fopen("estudiante.txt","r")) = =NULL) { printf("¡Error al abrir score.txt!\n"); salir(0); } fscanf(fp,"%d\t%d",n,m); //Lee el número de estudiantes y cursos del archivo for( i=0;i< *n;i++) { fscanf(fp,"%10ld",&stu[i].num); fscanf(fp,"%10s",stu[i].nombre); for(j=0;j< *m;j++) { fscanf(f p,"%10f",&stu[i].score[j]); } fscanf(fp,"%10f%10f",&stu[i].sum ,&stu[i].aver); //No se puede usar %10.0f } fclose(fp); }