Red de conocimiento informático - Programación de la red - Tema de diseño: Diseño de un sistema de gestión de información estudiantil.

Tema de diseño: Diseño de un sistema de gestión de información estudiantil.

#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*/

}; /p>

nodo de estructura typedef

{

estructura de datos del estudiante;

nodo de estructura *siguiente

}Nodo, *Enlace;

menú vacío()

{

printf("****************** ************************************************** * ************");

printf("\t1Registrar información del estudiante\t\t\t\t\t2Eliminar información del estudiante\n");

p>

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\t0Salir del sistema\n");

printf("***************************** * ************************************************* ** ***\n");

}

void printstart()

{

printf("--- -------------------------------------------------- -- ----------------\n");

}

void Wrong()

{

p>

printf("\n======>Mensaje: ¡Error de entrada!\n");

}

void Nofind()

{

printf("\n======>Aviso: ¡No se encontró al estudiante!\n"); }

void printc () /* Esta función se utiliza para generar chino*/

{

printf("Número de estudiante\t Nombre, sexo, inglés puntuación, puntuación de matemáticas, puntuación de lenguaje C, puntuación total, puntuación promedio\n" );

}

void printe(Node *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->datos.num,p->datos.nombre,p ->datos.sexo,p->datos.egrade,p->datos.mgrade,p->datos.cgrade,p->datos. totle,p->datos.ave);

}

Node* Locate(Link l,char findmess[],char nameornum[]) /* Esta función se utiliza para localizar el enlace requerido en la tabla de conexiones y devolver el Puntero*/

{

Nodo *r;

if(strcmp(nameornum,"num")==0) /* Consulta por número de estudiante* /

{

r=l->siguiente;

mientras(r!=NULL)

{

if(strcmp(r->data.num,findmess)==0)

return r;

r=r->siguiente; }

}

else if(strcmp(nameornum,"name")==0) /* Consulta por nombre*/

{

r=l->siguiente;

mientras(r!=NULL)

{

if(strcmp(r->datos.nombre, findmess)==0)

return r;

r=r->siguiente

}

}

devuelve 0;

}

void Agregar(Enlace l) /* Agregar estudiante*/

{

Nodo * p,*r,*s;

char num[10];

r=l;

s=l->siguiente;

while(r->next!=NULL)

r=r->next /* Coloca el puntero al final*/

while(1) p>

{

printf("Por favor ingrese su número de estudiante (regrese al menú anterior con '0':)");

scanf("%s ", num);

if(strcmp(num,"0")==0)

romper;

mientras(s)

{

if(strcmp(s->data.num,num)==0)

{

printf("==== => Consejo: El estudiante con número de estudiante '%s' ya existe. Si desea modificarlo, seleccione '4 Modificar'!\n",num);

printstart();

printc();

imprimir(s);

printstart();

printf("\n"); >

regresar

}

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("Ingrese su género:

scanf(" %s",p->data.sex);

getchar();

printf("Ingrese su puntuación en lenguaje C:"); p>

scanf("%d",&p->data.cgrade

getchar();

printf("Ingrese su puntaje de matemáticas:"); .mgrade);

getchar();

printf("Ingrese su puntuación en inglés:"); >data.egrade);

getchar();

p->data.totle=p->data.egrade+p->data.cgrade+p->datos. mgrade;

p->data.ave=p->data.totle / 3;

/* La entrada de información se ha completado*/

p- > siguiente=NULL;

r->siguiente=p;

r=p;

shoudsave=1; / p>

}

void Qur(Link l) /* Consulta estudiantes*/

{

int sel; > char findmess[20];

Nodo *p;

if(!l->siguiente)

{

printf( " \n=====>Consejos: ¡No hay información para consultar!\n");

return

}

printf(" \n= ====>1Buscar por número de estudiante\n======>2Buscar por nombre\n");

scanf("%d",&sel);

if(sel==1)/* número de estudiante*/

{

printf("Ingrese el número de estudiante que está buscando:"); >

scanf("%s",findmess);

p=Locate(l,findmess,"num"); p>{

printf("\t\t\t\tResultados de búsqueda\n");

printstart()

printc(); /p >

printe(p);

printstart();

}

else

Nofind(); /p >

}

else if(sel==2) /* Nombre*/

{

printf("Por favor, introduzca el nombre que están buscando :");

scanf("%s",findmess);

p=Locate(l,findmess,"name");

if( p)

{

printf("\t\t\t\tResultados de búsqueda\n"); p>

printc();

printe(p);

printstart()

}

else

Nofind();

}

else

Incorrecto();

}

void Del(Enlace l) /* Eliminar*/

{

int sel

Nodo *p,*r

char encontrarmess[20];

if(!l

->siguiente)

{

printf("\n======>Consejos: ¡No se pueden eliminar datos!\n"); >return

}

printf("\n======>1Eliminar por número de estudiante\n======>2Eliminar por nombre\n")

scanf("%d",&sel);

if(sel==1)

{

printf(" Ingrese el número de estudiante que desea eliminar: ");

scanf("%s",findmess);

p=Locate(l,findmess,"num");

if(p)

{

r=l

mientras(r->siguiente!=p)

r=r->siguiente;

r->siguiente=p->siguiente;

libre(p); n= ====>Consejos: ¡El estudiante ha sido eliminado exitosamente!\n");

shoudsave=1;

}

else

Nofind();

}

else if(sel==2)

{

printf(" Por favor, introduzca el nombre que desea eliminar:");

scanf("%s",findmess);

p=Locate(l,findmess,"name");

if(p)

{

r=l

mientras(r->siguiente!=p)

r =r->siguiente;

r->siguiente=p->siguiente;

libre(p); == ==>Consejos: ¡El estudiante ha sido eliminado exitosamente!\n");

shoudsave=1;

}

else

No encontrar();

}

else

Incorrecto()

}

nulo; Modificar(Enlace l)

{

Nodo *p;

char findmess[20]

if(!l-> siguiente)

{

printf("\n=====>Aviso: ¡No se pueden modificar datos!\n");

}

printf("Ingrese el número de estudiante que desea modificar:");

scanf("%s",findmess

p=Locate(l,findmess,"num");

if(p)

{

printf("Ingrese el nuevo número de estudiante (Resultó ser %s):",p->data.num);

scanf("%s",p->data.num);

printf("Ingrese un 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 ->datos

.sex);

printf("Ingrese la nueva puntuación de lenguaje C (originalmente %d puntuación):",p->data.cgrade

scanf(" %d); ",&p->data.cgrade);

getchar();

printf("Ingrese la nueva puntuación de matemáticas (originalmente %d puntos):", p->data .mgrade);

scanf("%d",&p->data.mgrade);

getchar();

printf( "Por favor, ingrese su nueva puntuación en inglés (originalmente %d puntos):",p->data.egrade);

scanf("%d",&p->data.egrade);

p>

p->data.totle=p->data.egrade+p->data.cgrade+p->data.mgrade

p->data.ave=p->data.totle/ 3;

printf("\n=====>Aviso: ¡Datos modificados correctamente!\n");

shoudsave=1;

else

Nofind();

}

void Disp(Enlace l)

{

int count=0;

Nodo *p;

p=l->siguiente

if(!p )

{

printf("\n======>Aviso: ¡No se pueden mostrar datos!\n"); p>

}

printf("\t\t\t\tMostrar resultados\n");

printstart()

printc (

printf("\n");

mientras(p)

{

imprimir(p); p>

p=p->siguiente;

}

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*/

Node *r=l->next

if(!r)

{

printf("\n======>Aviso: ¡No hay datos para contar!\n");

return

}

pm=pe=pc=pt=pa=r;

mientras(r!=NULL)

{

if(r- >data.cgrade> =pc->data.cgrade)

pc=r

if(r->data.mgrade>=pm->data.mgrade)

pm=r;

if(r->datos.egrade>=pe->datos.egrade)

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("La persona con la puntuación total más alta:\t%s %d puntos\n ",pt->data.name,pt->data.totle);

printf("La persona con la puntuación promedio más alta:\t%s %d puntos\n" ,pa->data.name, pa->data.ave);

printf("El que tiene la puntuación más alta en inglés:\t%s %d puntos\n",pe->data. name,pe->data.egrade);

p>

printf("El que tiene mayor puntuación en matemáticas:\t%s %d puntos\n",pm->data.name,pm ->data.mgrade);

printf("lenguaje c El más alto:\t%s %d puntos\n",pc->data.name,pc->data.cgrade

printstart();

}

}

p>

void Sort(Enlace l)

{

Enlace ll;

Nodo *p,*rr,*s;

ll=(Enlace)malloc(sizeof(Nodo)); Se utiliza para crear una nueva tabla de enlaces*/

ll->next=NULL

if( l->next==NULL)

{

printf("\n======>Aviso: ¡No se pueden ordenar datos!\n");

return

}

p=l->siguiente;

mientras(p)

{

s=(Nodo*)malloc(tamañode(Nodo)) ; /* Crea un nuevo contacto para guardar información*/

s->data=p->data

s->next=NULL

; rr=ll

mientras(rr->siguiente!=NULL && rr->siguiente->datos.totle>=p->datos.totle) ​​​​

rr= rr->siguiente;

if(rr->siguiente==NULL)

rr->siguiente=s

else

{

s->siguiente=rr->siguiente;

rr->siguiente=s

}

p= p->siguiente;

}

libre(l);

l->siguiente= ll->siguiente; ("\n=====>Mensaje: ¡Se ha completado la clasificación!\n"

}

void Save(Link l)

); {

ARCHIVO* fp;

Nodo *p;

int flag=1,count=0

fp=fopen( "c:\\estudiante","wb");

if(fp==NULL)

{

printf("\n=====>Aviso: ¡Ocurrió un error al volver a abrir el archivo!\n");

exit( 1 );

}

p=l->siguiente

mientras(p)

{

if(fwrite(p,sizeof(Node),1,fp)==1)

{

p=p->siguiente

count++;

}

else

{

flag=0

romper; p >}

}

if(bandera)

{

printf("\n=====>Mensaje: Archivo guardado 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; =0;

Nodo *p,*r;

printf("\t\t\t\tSistema de gestión del rendimiento estudiantil\n\t\t\t\t- - -----Colegio Vocacional Agrícola de Fujian Ji Ying 0501 Huang Huan (No. 32)\n");

l=(Node*)malloc(sizeof(Node));

l->siguiente=NULL;

r=l;

fp=fopen("C:\\estudiante","rb"); >if(fp==NULL)

{

printf("\n======>Mensaje: El archivo aún no existe, ¿quieres crearlo? ? (y/n)\ n");

scanf("%c",&jian);

if(jian=='y'||jian=='Y ')

fp=fopen("C:\\estudiante","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));

if(fread(p, sizeof(Node),1,fp )) /* Poner el contenido del archivo en el contacto*/

{

p->next=NULL

<; p>r->next=p;

r=p; /* Poner este contacto en la conexión*/

count++; >

}

fclose(fp); /* Cerrar el archivo*/

printf("\n======>Mensaje: Importación de registro completada, * **%d registros importados.\n ",count);

while(1)

{

menu();

printf("Por favor seleccione la operación: ");

scanf("%d",&sel);

==0)

{

if(shoudsave==1)

{ getchar();

printf("\n; =====>Pregunta: Los datos han sido cambiados ¿Desea guardar los cambios en el archivo (y/n)?\n");

scanf("%c",&ch.

if(ch=='y'||ch=='Y')

Guardar

}

;

printf( "\n=====>Aviso: ¡Has salido del sistema, adiós!\n");

break

}

switch(sel )

{

caso 1:Add(l);break; /* Agregar estudiantes*/

caso 2:Del( l);break;/ * Eliminar estudiantes*/

caso 3:Qur(l);break;/* Consultar estudiantes*/

caso 4:Modify(l);break ;/* Modificar estudiantes* /

caso 5:Save(l);break;/* Guardar estudiante*/

caso 9:printf("\t\t\t= ====== ===Información de ayuda==========\n");break;

predeterminado: Incorrecto();getchar();break;

}

}

}

/* */

/*

Rendimiento de los estudiantes programa de gestión

Prepare un programa de gestión para contar las puntuaciones de los exámenes de los estudiantes.

Supongamos que las calificaciones de los estudiantes se han almacenado en el archivo en forma de un registro para cada estudiante.

La información contenida en el registro de cada estudiante incluye: nombre, número de estudiante y. calificaciones de cada materia.

El programa tiene las siguientes funciones: encontrar el puntaje total y el puntaje promedio de cada curso, por nombre,

Buscar y mostrar registros por número de estudiante, explorar todos los puntajes de los estudiantes y Mostrar estudiantes información de mayor a menor según la puntuación total.

*/

#include

#define SWN 3 /* Número de cursos*/

#define NAMELEN 20 /* Número máximo de caracteres para el nombre*/

#define CODELEN 10 /* Número máximo de caracteres para el número de identificación del estudiante*/

#define FNAMELEN 80 /* Número máximo de caracteres para el nombre del archivo*/

#define BUFLEN 80 /* Número máximo de caracteres en el buffer*/

/* Tabla de nombres de cursos*/

char trabajo escolar[SWN][NAMELEN+1] = {"Chino","Matemático","Inglés"}

registro de estructura

{

char nombre[NAMELEN+1]; /* nombre */

código char[CODELEN+1]; /* número de estudiante*/

int marcas[SWN]; cada curso*/

int total; /* puntuación total*/

}stu;

struct node

{

nombre de carácter[NAMELEN+1] ; /* Nombre*/

código de carácter[CODELEN+1] /* Número de estudiante*/

int marcas[SWN] ; /* Puntajes para cada curso*/

int total; /* puntaje total*/

struct node *next /* puntero de elemento de tabla posterior*/

}*head; /* puntero de encabezado de lista enlazada* /

int total[SWN] /* Puntuación total de cada curso*/

FILE *stfpt /* File pointer*/

char stuf[FNAMELEN ]; /* Nombre de archivo*/

/* Leer un registro del archivo especificado*/

int readrecord( ARCHIVO *fpt,struct record *rpt)

{

char buf[BUFLEN]

int i; (fpt,"%s",buf)!=1)

return 0; /* fin del archivo*/

strncpy(rpt->name,buf,NAMELEN);

fscanf(fpt,"%s" ,buf);

strncpy(rpt->código,buf,CODELEN

for(i=0); ;i

fscanf (fpt,"%d",&rpt->marcas[i]); 0;i

rpt->total+=rpt->marcas[i];

devuelve 1

}

/* Escribe un registro en el archivo especificado*/

writerecord(FILE *fpt,struct record *rpt)

{

int i;

fprintf(fpt,"%s\ n",rpt->nombre);

fprintf(fpt,"%s\n");

,rpt->código);

for(i=0;i

fprintf(fpt,"%d\n",rpt->marcas[i ]);

return

}

/* Mostrar registro de estudiante*/

displaystu(struct record *rpt)

p>

{

int i;

printf("\nNombre: %s\n",rpt->nombre

printf( "Código: %s\n",rpt->código);

printf("Marcas:\n"); )

printf(" %-15s : %4d\n",trabajo escolar[i],rpt->notas[i]);

printf("Total : %4d\ n",rpt->total);

}

/* Calcular la puntuación total de cada materia*/

int totalmark(char *fname)

p>

{

ARCHIVO *fp;

estructura registro s;

int recuento,i; if((( fp=fopen(fname,"r"))==NULL)

{

printf("No se puede abrir el archivo %s.\n",fname );

{

printf("No se puede abrir el archivo %s.\n",fname); ;

}

for(i=0;i

total[i]=0

cuenta; =0;

mientras(readrecord(fp,&s)!=0)

{

for(i=0; i

total[i]+=s.marcas[i];

cuenta++;

}

fclose(fp); p>

return count; /* Devuelve el número de registros*/

}

/* Muestra la información del estudiante en una lista*/

void listastu(char *fname)

{

ARCHIVO *fp;

estructura registro s; fname,"r"))==NULL)

{

printf("No se puede abrir el archivo %s.\n",fname

return ;

}

mientras(readrecord(fp,&s)!=0)

{

displaystu( &s);

printf("\n Presione ENTER para continuar...\n");

while(getchar()!='\n'); >}

fclose(fp);

return;

}

/* Construir una lista enlazada*/

estructura nodo *makelist(char *fname)

{

ARCHIVO *fp

registro de estructura;

s;

estructura nodo *p,*u,*v,*h;

int i; r"))==NULL)

{

printf("No se puede abrir el archivo %s.\n",fname);

return NULL ;

}

h=NULL;

p=(nodo de estructura *)malloc(sizeof(nodo de estructura)); while(readrecord(fp,(struct record *)p)!=0)

{

v=h

mientras(v&&p->total; =v->total)

{

u=v

v=v->siguiente

}

if(v==h)

h=p

else

u->siguiente=p

p->siguiente=v;

p=(nodo de estructura *)malloc(tamañode(nodo de estructura)); ;

fclose(fp);

return h;

}

/* Muestra cada elemento de la tabla de la lista vinculada en secuencia. */

lista de visualización vacía (nodo de estructura *h)

{

mientras(h!=NULL)

{

displaystu((struct record *)h);

printf("\n Presione ENTER para continuar...\n"); !='\ n');

h=h->siguiente;

}

regresar

}

/* Buscar registros de estudiantes por nombre de estudiante*/

int retrievebyn(char *fname, char *key)

{

FILE *fp ;

int c;

estructura registro s;

if((fp=fopen(fname,"r"))==NULL)

{

printf("No se puede abrir el archivo %s.\n",fname);

return 0; p>

c=0;

mientras(readrecord(fp,&s)!=0)

{

if(strcmp(s.nombre) ,clave)= =0)

{

displaystu(&s

c++; >}

fclose(fp);

if(c==0)

printf("El estudiante %s no está en el archivo %s. \n", key,fname);

return 1;

}

/* Buscar registros de estudiantes por número de estudiante*/

int retrievebyc (char *fnam

e, char *key)

{

ARCHIVO *fp;

int c

estructura registro

if((fp=fopen(fname,"r"))==NULL)

{

printf("No se puede abrir el archivo %s.\n" ,fname);

return 0;

}

c=0;

mientras(readrecord(fp,&s)!= 0)

{

if(strcmp(s.code,key)==0)

{

displaystu(&s)

c++;

romper

}

}

fclose(fp); >

if(c==0)

printf("El estudiante %s no está en el archivo %s.\n",key,fname

return); 1;

}

main()

{

int i,j,n

char; c;

char buf[BUFLEN];

ARCHIVO *fp;

estructura registro

clrscr(); p>

FILE *fp; p>

printf("Ingrese el nombre del archivo de registro de calificaciones de los estudiantes: ");

if((fp=fopen (stuf,"r"))==NULL)

{

printf("El archivo %s no sale, ¿verdad? ¿Quieres crearlo? (Y/N ) ",stuf);

getchar();

c=getchar();

if(c=) ='Y'||c== 'y')

{

fp=fopen(stuf,"w");

printf("Por favor ingrese el número de registro que desea escribir en el archivo: ");

scanf("%d",&n);

for(i=0;i

{

printf("Ingrese el nombre del estudiante: ");

scanf("%s",&s.name

);

printf("Ingrese el código del estudiante: ");

scanf("%s",&s.code); j++)

{

printf("Ingrese la marca %s: ",trabajo escolar[j]);

scanf("%d",&s. marcas[j]);

}

escritor(fp,&s);

}

fclose(fp); p>

}

}

fclose(fp);

etchar();

/*clrscr();*/

puts("Ahora puede ingresar un comando para administrar los registros."); puts("m: media de las calificaciones.");

puts("t: total de las calificaciones."); .");

puts("c : buscar registro por código de estudiante.");

puts("l : listar todos los registros.");

puts("s: ordenar y enumerar los registros por total.");

puts("q: salir!";

while(1)

{

puts("Ingrese el comando:");

scanf(" %c",&c /* Ingrese el comando de selección*/

);

if(c=='q'||c=='Q')

{

puts("\n Gracias por usar."); /p>

break; /* q, finalizar la ejecución del programa*/

}

switch(c)

{

case 'm': /* Calcular la puntuación media*/

case 'M':

if((n=totalmark(stuf))==0)

{

puts("¡Error!");

romper;

}

printf("\n" ) ;

for(i=0;i

printf("El promedio de %-15 es: %.2f.\n",trabajo escolar[i], ( float)total[i]/n);

break;

case 't': /* Calcular puntuación total*/

case 'T' :

if((n=totalmark(stuf))==0)

{

puts("¡Error!"); p >romper;

}

printf("\n");

for(i=0;i

printf("La calificación total de %-15s es: %d.\n",trabajo escolar[i],total[i]);

descanso

case 'n; ' : /* Buscar registros por nombre del estudiante*/

case 'N':

printf("Ingrese el nombre del estudiante que desea buscar: "

);

scanf("%s",buf);

retrievebyn(stuf,buf);

break;

case 'c': /* Buscar registros por número de estudiante*/

case 'C':

printf("Ingrese el código del estudiante que desea

para buscar: ");

scanf("%s",buf);

retrievebyc(stuf,buf);

break;

case 'l': /* Listar todos los registros de los estudiantes*/

case 'L':

liststu(stuf);

break; /p>

case 's': /* Mostrar en orden de mayor a menor por puntuación total*/

case 'S':

if((head=makelist (stuf))!=NULL)

displaylist(head);

break;

predeterminado:

}

p>

p>

}

}