Uso de programación en lenguaje C para implementar un sistema simple de gestión del desempeño estudiantil
#include?lt;stdio.hgt;
#include?lt;stdlib.hgt;
#include?lt;string.hgt; p>
p>
#includelt;memory.hgt;
typedef?struct?student
{
char?num[16] ;
char?name[20];
float?score[4];
struct?student?*next;
}?stu;
stu?*head; //Puntero de encabezado de enlace
stu*?create() //¿Crear una lista vinculada y leer información del archivo?
{
printf("Lectura?información del estudiante:\n");
stu?*p=NULL //Puntero, apuntando a un; nodo a insertar
stu?*q=NULL; //Puntero, utilizado para insertar nodos después
head?=?NULL //La lista vinculada está vacía; al principio
ARCHIVO?*?r?=fopen("input.dat", "r");?
p?=?(stu*)malloc(sizeof( stu));
while(fscanf(r,"ssfff",p-gt;num,p-gt;nombre,amp;p-gt;puntuación[0],amp;p-gt; puntuación[1],amp;p -gt;puntuación[2])!=EOF)
{
p-gt;puntuación[3]=(p-gt;puntuación [0] p-gt;puntuación [1] p-gt;puntuación[2])/3.0;
fprintf(stdout, "s\ts\tg\tg\tg\t.2f\n ", p-gt;num, p-gt; nombre, p-gt; puntuación[0], p-gt; puntuación[1], p-gt; puntuación[2], p-gt; puntuación[3])
p-gt; next=NULL;
if?(head?==?NULL) //head está vacío, inserta el primero
{
head?=?p;
} //Nodo, deja que el puntero del encabezado apunte al nodo p
más
{ //?De lo contrario, no Para el nodo principal, el nodo p debe insertarse
q-gt; next?=?p ///? p> }
q?=?p; ///?q apunta al último nodo actual
p?=?(stu*)malloc(sizeof(stu)); /p>
}
p>
fclose(r);
si?(head?=?NULL)
{ p>
q-gt;next?=? NULL ///? Deje que el campo de puntero del último nodo señalado por q esté vacío para indicar que este es el final de la cadena
}
return?head; //?Volver al puntero del encabezado
}
void?sort(stu?**head,i
nt?n)?
{
FILE?*w=NULL;
if(n==0)
{
w?=?fopen("sortByMath.dat", "w");
}
else?if(n==1)
{
w?=?fopen("sortByEnglish.dat", "w");
}
else?if(n= =2)
{
w?=?fopen("sortByComputer.dat", "w");
}
else?if(n==3)
{
w?=?fopen("sortByAvg.dat", "w");
}
stu?*q, *t, *p;
stu?*?new_head?=?new?stu;
new_head-gt; cabeza;
p=new_head;
t=NULL;
mientras(t!=new_head-gt;siguiente)
{
p=new_head;
q=p-gt;siguiente;
mientras(q-gt;siguiente!=t)
{
if((p-gt;next-gt;puntuación[n])?lt;?(q-gt;next-gt;puntuación[n]))?
{
p-gt; siguiente=q-gt; siguiente;
q-gt; siguiente=q-gt; p>p-gt; siguiente-gt; siguiente=q;
}
p=p-gt;
q=p-gt; siguiente;
}
t=q;
}
*head?=?new_head-gt;siguiente;
p?=?*head;
q?=?p-gt;next;
printf("ID del estudiante\tNombre\tMatemáticas\tInglés\ tComputadora\tPromedio calificación\n");
int?grado?=?1;?
mientras(p!=NULL)
{
fprintf(w, "s\ts\tg\tg\tg\t.2f\td\n",
p-gt; num, p-gt; nombre, p -gt; puntuación[ 0], p-gt; puntuación[1], p-gt; puntuación[2], p-gt; puntuación[3], calificación);
fprintf(stdout, " s\ts\tg \tg\tg\t.2f\td\n",
p-gt; num, p-gt; nombre, p-gt; puntuación[0], p-gt ;puntuación[1] ,p-gt;puntuación[2],p-gt;puntuación[3],calificación);
if(q!=NULL?amp;amp;?q-gt; puntuación[3]? lt;?p-gt;score[3])?grade? =?1;
p=p-gt;next;
if(q! =NULL)?q =q-gt;siguiente;
}
printf("\n");
fclose(w);
<p>}?
void?count(stu*?head)
{
float?cnt[4][8];
int?i,j;
for(i=0;ilt;4;i)
{
for(j=0;jlt; 8; j )
{
if(j!=2)cnt[i][j]=0;
else?cnt[i][ j]=100;
}
}
stu*?r=cabeza;
mientras(r!=NULL)
{
r=r-gt;siguiente;
}
}
int?main(? )?
{
head=create();
printf("Clasificación?por?promedio?puntuación:\n");
sort(amp; head, 3);
system("pausa");
return?0;
}