#include "stdio.h"
#include "stdlib.h"
#include "string.h"
int shoudsave=0; /* */
estructura estudiante
{
char num[10];/* número de estudiante*/
nombre de char[20];
sexo de char[4];
int cgrade;
int mgrade;
int totle;
int ave;
char neartime[10];/* Hora de la última actualización*/
}; nodo de estructura
{
estructura de datos del estudiante;
nodo de estructura *siguiente;
}Nodo,*Enlace void menu();
{
printf("********************************* *************************************************")
printf("\t1Registrar información del estudiante\t\t\t\t\t2Eliminar información del estudiante\n");
printf("\t3Consultar información del estudiante\ t\t \t\t\t4Modificar información del estudiante\n");
printf("\t5Guardar información del estudiante\t\t\t\t\t6Introducción al autor\n");
printf("\t0Salir del sistema\n");
printf("************************ ** ************************************************* * *******\n");
} void printstart()
{
printf("------- - -------------------------------------------------- --------------\n");
}
void Wrong()
{
printf("\n======>Mensaje: ¡Error de entrada!\n"
} void Nofind()
{
printf("\n=====>Mensaje: ¡No se encontró al estudiante!\n"
} void printc() /* Esta función se utiliza para generar chino*/
{
printf("ID del estudiante\tNombre Género Puntuación en inglés Puntuación en matemáticas Puntuación en idioma C Puntuación media total\n"); p )/* Esta función se utiliza para generar inglés*/
{
printf("%-12s%s\t%s\t%d\t%d\t %d \t %d\t %d\n",p->data.num,p->data.name,p->data.sex,p->data.egrade,p->data.mgrade,p -> datos.cgrade,p->data.totle,p->data.ave
} N
ode* Locate(Link l,char findmess[],char nameornum[]) /* Esta función se utiliza para localizar el punto de contacto que cumple con los requisitos en la lista de conexiones y devuelve el puntero*/
{
Nodo *r;
if(strcmp(nameornum,"num")==0) /* Consulta por número de estudiante*/
{ p>
r=l->siguiente;
mientras(r!=NULL)
{
if(strcmp(r->data. num,findmess) ==0)
return r;
r=r->siguiente
}
} p>
else if(strcmp(nameornum,"name")==0) /* Consulta por nombre*/
{
r=l->next; /p>
while(r!=NULL)
{
if(strcmp(r->data.name,findmess)==0)
devolver r ;
r=r->siguiente;
}
}
devuelve 0; p>} void Add(Link l) /* Agregar estudiantes*/
{
Nodo *p,*r,*s
char num[; 10];
r=l;
s=l->siguiente
mientras(r->siguiente!=NULL)
r= r->next; /* Coloca el puntero al final*/
while(1)
{
printf("Por favor, ingresa su número de estudiante (Regresar al menú anterior con '0':)");
scanf("%s",num);
if(strcmp(num,"0 ")== 0)
romper;
mientras(s)
{
if(strcmp(s->data. num,num) ==0)
{
printf("======>Mensaje: El estudiante con ID de estudiante '%s' ya existe. Si desea para modificarlo, seleccione '4 Modificar'!\n",num);
printstart();
printc();
printe(s
printstart();
printf("\n"); p>s=s->siguiente ;
} p=(Nodo *)malloc(sizeof(Nodo)); strcpy(p->data.num,num); printf("Por favor ingrese su nombre: ");
scanf("%s",p->data.name
getchar(); >printf("Por favor ingrese su género :");
scanf("%s",p->data.sex
getchar(); p>printf("Ingrese la puntuación del lenguaje c: ");
scanf("%d",&p->data.cgrade
getchar(); >
printf(" por favor
Introduzca la puntuación de matemáticas:");
scanf("%d",&p->data.mgrade);
getchar();
printf(" Por favor, introduzca su puntuación en inglés:");
scanf("%d",&p->data.egrade);
getchar();
p ->data.totle=p->data.egrade+p->data.cgrade+p->data.mgrade
p->data.ave=p->data.totle / 3;
/* Se ha completado la entrada de información*/
p->next=NULL
r->next=p
r=p;
shoudsave=1; }
} void Qur(Enlace l) /* Consulta estudiantes*/
{
int sel;
char findmess[20];
Nodo *p; if(!l->siguiente)
{
printf("\n=====>Aviso: ¡No hay información para consultar!\n");
return
}
printf( "\n======>1 Buscar por número de estudiante\n======>2 Buscar por nombre\n");
scanf("%d", &sel);
p>if(sel==1)/* número de estudiante*/
{
printf("Ingrese el número de estudiante que es buscando:");
p>scanf("%s",findmess);
p=Locate(l,findmess,"num");
if(p)
{
printf("\t\t\t\tResultados de búsqueda\n"); /p>
printc()
printe(p);
printstart()
}
else <; /p>
Nofind()
}
else if(sel==2) /* Nombre*/
{
printf("Ingrese el nombre que desea encontrar:");
scanf("%s",findmess
p=Locate(l,findmess,"name); ");
if(p)
{
printf("\t\t\t\tResultados de búsqueda\n");
imprimirinicio();
imprimirc();
imprimir(p);
imprimirinicio(); /p>
else
Nofind();
}
else
Incorrecto(); l) /* Eliminar*/
{
int sel;
Nodo *p,*r
char findmess[20] ];
if(!l->next)
{
printf("\n======>Consejos: No se pueden eliminado!\n");
p>re
turn;
}
printf("\n======>1 Eliminar por número de estudiante\n======>2 Eliminar por nombre\n"
scanf("%d",&sel);
if(sel==1)
{
printf( "Por favor, introduzca el número de estudiante que desea eliminar:");
scanf("%s",findmess
p=Locate(l,findmess,"num"));
p>
if(p)
{
r=l
mientras(r->siguiente! =p)
r=r->siguiente;
r->siguiente=p->siguiente
libre
;printf("\n =====>Consejos: ¡El estudiante ha sido eliminado exitosamente!\n");
shoudsave=1
}
else
Nofind();
}
else if(sel==2)
{
printf("Ingrese el nombre que desea eliminar:");
scanf("%s",findmess
p=Locate(l,findmess,); "nombre");
si(p)
{
r=l
mientras(r->siguiente!= p)
r=r->siguiente;
r->siguiente=p->siguiente
libre
printf("\n== ===>Consejos: ¡El estudiante ha sido eliminado exitosamente!\n");
shoudsave=1
}
;else
Nofind();
}
else
Incorrecto(); void Modificar(Enlace l)
{
Nodo *p;
char findmess[20]
if(!l- >siguiente)
{
printf("\n======>Aviso: ¡No se pueden modificar datos!\n"); return;
}
}
p>
printf("Ingrese el número de estudiante que desea modificar:"); p>scanf("%s",findmess);
p=Locate(l,findmess,"num");
if(p)
{
printf("Ingrese el nuevo número de estudiante (originalmente %s): ",p->data.num
scanf("%s",p->); data.num);
printf("Ingrese el nuevo nombre (originalmente %s):",p->data.name
scanf("%s", p->data.name);
getchar();
printf("Ingrese el nuevo género (originalmente %s):",p->data.sex);
scanf("%s",p->data.sex)
printf("Ingrese la nueva puntuación del lenguaje C (originalmente %d puntuación):",p- >datos.cgrade);
scanf("%d
",&p->data.cgrade);
getchar();
printf("Ingrese su nueva puntuación en matemáticas (originalmente %d puntos):",p- >data .mgrade);
scanf("%d",&p->data.mgrade);
getchar();
printf("Por favor, ingresa la nueva puntuación en inglés (originalmente %d puntos): ",p->data.egrade);
scanf("%d",&p->data.egrade);
p->data.totle=p->data.egrade+p->data.cgrade+p->data.mgrade
p->data.ave=p->totle/3. ;
printf("\n======>Aviso: ¡Datos modificados correctamente!\n");
shoudsave=1;
else
Nofind(); } void Disp(Enlace l)
{
int count=0; p>
Nodo *p;
p=l->siguiente; if(!p)
{
printf("\n== ===>Consejos: ¡No se pueden mostrar datos!\n");
return;
}
printf("\t\t\t \ tMostrar resultados\n");
printstart();
printc();
printf("\n");
mientras(p)
{
printe(p);
p=p->siguiente
}
p>p>
printstart();
printf("\n"
} void Tongji(Enlace l)
{
Nodo *pm,*pe,*pc,*pt,*pa /* Se utiliza para señalar el contacto con la puntuación más alta*/
Nodo *r=l; ->siguiente;
if(!r)
{
printf("\n======>Mensaje: No hay datos para contar!\n");
return ;
}
pm=pe=pc=pt=pa=r;
while(r!=NULL)
{
if(r->data.cgrade>=pc->data.cgrade)
pc=r;
if(r- >datos.mgrade>=pm->datos.mgrade)
pm=r
if(r->datos.egrade >=pe->datos.egrade)
pm=r; p>
pe=r
if(r->datos.totle>=pt->datos .totle)
pt=r
if(r->datos.ave>=pa->datos.ave)
pa=r; ;
r=r->siguiente
}
printf("---------------
------------------Resultados estadísticos------------------------------ --\ n");
printf("El que tiene la puntuación total más alta:\t%s %d puntos\n",pt->data.name,pt->data.totle) ;
printf("La persona con el puntaje promedio más alto:\t%s %d puntos\n",pa->data.name,pa->data.ave); con el puntaje promedio más alto en inglés:\t%s %d puntos \n",pe->data.name,pe->data.egrade);
printf("Más alto en matemáticas:\t %s %d puntos\n",pm->data.name ,pm->data.mgrade);
printf("El que tiene mayores habilidades en lenguaje C:\t%s %d puntos \n",pc->data.name,pc->data.cgrade);
printstart();
}
void Writer()
{
printf("Soy el SDDF legendario. Ahaha\n\n");
}
void Sort(Enlace l)
{
Enlace ll
Nodo *p,*rr,*s; /* Se utiliza para crear una nueva lista de enlaces*/
ll->next=NULL if(l->next==NULL)
{
printf("\n=====>Sugerencia: ¡No hay datos para ordenar!\n");
return
}
p =l->siguiente;
mientras(p)
mientras(p)
p=l->siguiente; p>
s=(Node*)malloc(sizeof(Node)); /* Crear un nuevo contacto para guardar información*/
s->data=p ->data; >
s->siguiente=NULL; rr=ll;
mientras(rr->siguiente!=NULL && rr->siguiente->datos.totle>= p->datos.totle)
rr=rr->siguiente;
if(rr->siguiente==NULL)
rr->siguiente=
else
{
s->siguiente=rr->siguiente
rr->siguiente=s
}
p=p->siguiente;
}
libre(l)
l- >siguiente=ll-; >siguiente;
printf("\n=====>Mensaje: ¡Clasificación completada!\n");
} void Guardar(Enlace l )
{
ARCHIVO* fp;
Nodo *p;
int flag=1,count=0
fp=; fopen("c:\\estudiante","wb");
if(fp==NULL)
{
printf("\n= ====>Aviso: ¡Se produjo un error al volver a abrir el archivo!\n");
exit(
1);
}
p=l->siguiente; mientras(p)
{
if(fwrite(p, sizeof(Nodo),1,fp)==1)
{
p=p->siguiente
count++; >}
else
{
flag=0;
romper
}
}
if(flag)
{
printf("\n======>Mensaje: El archivo se guardó correctamente. (Se han guardado % d registros.)\n",count);
shoudsave=0;
}
fclose(fp);
} void main()
{
Enlace l;/* Lista enlazada*/
ARCHIVO *fp /* Puntero de archivo*/
int sel;
char ch;
char jian; int cuenta=0; /p >
printf("\t\t\t\tSistema de gestión del rendimiento estudiantil\n\t\t\t\t\n");
l=(Nodo*)malloc( tamaño de (Nodo));
l->next=NULL;
r=l; fp=fopen("C:\\estudiante","rb"); p >
if(fp==NULL)
{
printf("\n=====>Mensaje: El archivo aún no existe, ¿quieres para crearlo? (y/ n)\n");
scanf("%c",&jian);
if(jian=='y'||jian= ='Y')
p>
fp=fopen("C:\\student","wb");
else
salir (0);
}
printf("\n======>Mensaje: El archivo se ha abierto y se están importando registros...\n") ; while(!feof(fp))
{
p=(Nodo*)malloc(sizeof(Nodo)); ,sizeof(Node),1,fp)) /* Poner el contenido del archivo en el contacto */
{
p->next=NULL
;r->next=p;
r=p; /* Poner este contacto en la conexión*/
count++; p>
} fclose(fp); /* Cerrar el archivo*/
printf("\n======>Mensaje: Importación de registros completada, ***%d registros importados .\n", recuento); while(1) p>
{
menu();
printf("Seleccione la operación:");
scanf("%d",&sel ); if(sel==0)
{
if(shoudsave==1)
{ getchar();
printf("\n======>Mensaje: Los datos han sido modificados, ¿desea guardar los cambios en el archivo (s/n)? \n");
scanf("%c",&ch );
i
f(ch=='y'||ch=='Y')
Guardar(l
}
printf("\n=); ====>Consejos: Has salido del sistema, ¡adiós!\n");
break;
}
switch(sel) p >
{
caso 1:Add(l);break; /* Agregar estudiante*/
caso 2:Del(l);break;/* Eliminar estudiante * /
caso 3:Qur(l);break;/* Consultar estudiantes*/
caso 4:Modify(l);break;/* Modificar estudiantes*/ p >
caso 5:Save(l);break;/* Guardar estudiantes*/
caso 6:Writer();break;/*Introducción del autor*/
caso 9:printf("\t\t\t==========Información de ayuda==========\n");break
predeterminado: Incorrecto ();getchar();romper;
}
}
}
/* */