El sistema de gestión del desempeño estudiantil se ejecuta en el entorno TC en lenguaje C
#include "stdio.h"
#include "stdlib.h"
#include "conio.h"
# incluir"string.h"
#include "mem.h"
#include "alloc.h"
#include "ctype.h" p> p>
#define N 3
typedef struct estudiante
{ char num[20];
char nombre[20]; p>
char xi[10];
suma flotante;
promedio flotante;
orden int;
puntuación int [N ];
struct Student *next;
}ST;
main()
{ int i;
ST *init(), *create(), *delete(),*insert(), *sort(), *load(), *head,*index();
void print (),buscar(),guardar(),append(),total(),copiar();
int menu_select();
head=init();
p>
for(;;)
{
switch(menu_select())
{ caso 0:cabeza =init();romper;
caso 1:head=create();romper;
caso 2:print(head);romper;
caso 3:buscar(cabeza);
caso 4:cabeza=eliminar(cabeza);cortar;
caso 5:cabeza=insertar(cabeza);cortar;
caso 6: head=sort(head);break;
caso 7:save(head);break;
caso 8:head=load();break ;
caso 9:append();romper;
caso 10:head=index(cabeza);romper;
caso 11:total(cabeza) ;romper;
caso 12:copiar();romper;
caso 13:salir(0);
}
}
}
int menu_select()
{ char *menu[]={"************MENÚ** ********** ******",
"0.lista de inicio",
"1.Ingresar lista",
"2.imprimir lista",
"3.Buscar lista",
"4.Eliminar un registro de li
st",
"5.insertar registro en la lista",
"6.ordenar para crear un archivo nuevo",
"7.guardar el archivo" ,
"8.cargar el archivo",
"9.añadir registro al archivo" ,
"10.indexar el número",
"11.total del número",
"12.copiar el archivo a un archivo nuevo",
"13.Salir" } ;
char s[3];int c; int i;
gotoxy(1,25);
printf("presione cualquier tecla para ingresar al menú......\n ");
getch();
clrscr();
gotoxy(6,1);
textcolor(AMARILLO) ;
fondo de texto(GRIS CLARO);
gotoxy(16,2);
putch(0xc9);
for(i= 1;i<46;i++)
putch(0xcd);
putch(0xbb);
for(i=3;i<20;i++ )
{ gotoxy(16,i);parche(0xba);
gotoxy(62,i);parche(0xba);
} p>
gotoxy(16,20);putch(0xc8);
for(i=1;i<46;i++)
putch(0xcd); p> p>
putch(0xbc);
ventana(17,3,61,19);
fondo de texto(AZUL);
clrscr () ;
for(i=0;i<16;i++)
{ gotoxy(9,i+1);printf("%s",menú[i] ); }
fondo de texto(NEGRO);
ventana(1,1,80,25);
gotoxy(16,21);
do { printf("\n ingresa tu elección(0~13):");
scanf("%s",&s);
c=atoi (s );
}mientras(c<0||c>13);
return c;
}
ST *init()
{
return NULL;
}
ST *create()
{ int i , s;
ST *head=NULL,*info;
for(;;)
{ info=(ST *)malloc(sizeof (ST ));
si(!info)
{
printf("\n sin memoria");
return NULL;
}
inputs("ingrese num:",info->num,12 );
if(info->num[0]=='@') break;
inputs("ingrese nombre:",info->nombre,15);
inputs("ingrese xi:",info->xi,10);
printf("ingrese su puntuación \n",N);
s=0;
for(i=0;i { hacer { printf("puntuación %d:",i+1); scanf("%d",&info->puntuación[i]); if(info->puntuación[i]>100||info->puntuación[i]<0) printf("datos incorrectos, repetición de entrada\n"); } while(info->score[i]>100||info->score[i]<0 ); s=s+info->puntuación[i]; } info->suma=s; info->avg=(float)s/N; info->order=0; info->next=head; head=info ; } retorno (head); } entradas(char *prompt,char *s,int count) { char p[255]; hacer { printf(prompt); scanf("%s",p); if(strlen(p)>count) printf("\n demasiado largo \n"); } while(strlen(p)>count); strcpy(s ,p); } impresión vacía(ST *cabeza) { int i=0,j=0; ST *p,*q; clrscr(); p=head;q=p; printf("\n\n\n* *******************estudiante******************\n"); printf( "|rec|num | nombre |zhuanye |sc1|sc2|sc3| suma | promedio |orden|\n"); printf("|---|------ -- ----|---------------|--------|---|---|---|------ -| ------|-----|\n"); que ile(p!=NULL) { i++; printf("|%3d|%-12s|%-15s|%8s|%3d|%3d|%3d |%3.2f |%3.2f |%5d|\n",i, p->num,p->nombre,p->xi,p->puntuación[0],p- >puntuación[1],p->puntuación[2], p->suma,p->promedio,p->orden); p=p->siguiente ; } printf("******************end************ *********\n"); printf("******************chongxiu******* ***** *********\n"); mientras(q!=NULL) { mientras(j { if(q->score[j]>=60) j++; else { printf(" |%-12s |%-15s| %8s|di%2d ke|\n",q->num,q->nombre,q->xi,j+1);j++; } } p> q=q->siguiente;j=0; } printf("****************** **fin** *******************\n"); } búsqueda nula(ST *head ) { ST *p; char s[15]; clrscr(); printf("por favor ingrese su nombre para la búsqueda \n "); scanf("%s",&s); p=head; while(strcmp(p-> nombre,s)&&p !=NULL) p=p->siguiente; if(p==NULL) printf("\n lista no %s estudiante\ n",s); else { printf("\n\n****************** **he encontrado******* ********\n"); printf("|num | nombre |zhuanye |sc1|sc2|sc3| suma | promedio | orden|\n"); printf("|----------|---------------|----- ---|---|-- -|---|-----|-----|-----|\n"); printf("| %10s|%-15s|%8s| %3d|%3d|%3d|%3.2f |%3.2f |%5d|\n",p->num,p->nombre,p->xi, p->puntuación [0],p->puntuación[1],p->puntuación[2],p->suma,p- >promedio,p->pedido); printf("************************end****** ********** *******\n"); } } ST *eliminar(ST *cabeza) { ST *p,*q; char s[12]; clrscr(); printf ("por favor elimine num \n"); scanf("%s",&s); p=q=head; while(strcmp). (p->num,s)&&p! =NULL) { q=p; p=p->siguiente; } if(p==NULL ) printf("\n lista ningún %s estudiante\n",s); else { printf("\n\n** *************he encontrado******************\n"); printf("|num | nombre | zhuanye |sc1 |sc2|sc3| suma | promedio |orden|\n"); printf("|---------- --|---------- -----|----------|---|---|---|------|- -----|-----|\n "); printf("|%12s|%-15s|%8s|%3d|%3d|%3d|%4.2f |%4.2f |%5d|\n",p- >num,p->nombre,p->xi, p->puntuación[0],p->puntuación[1], p->puntuación[2],p->suma,p ->promedio,p->orden); printf("****************** ********fin************ ********\n"); getch(); if(p==head) head=p-> siguiente; else q->next=p->siguiente; p> free(p); printf("\ n tiene eliminar num %s estudiante \n",s); printf("no olvides guardar \n"); } return (cabeza); } ST *insertar(ST *cabeza) p> { ST *p,*q,*info; char s[12]; int s1,i; printf( "ingrese la ubicación antes del número \n"); scanf( "%s",&s); printf("\n por favor nuevo registro\n"); info=(ST *)malloc(sizeof(ST)); if(!info) { printf("\n sin memoria"); p> p> return NULL; } entradas("ingrese num:",info->num,12); entradas( "ingrese nombre:",info->nombre,15); inputs("ingrese xi:",info->xi,10); printf("ingrese su puntuación \ n",N); s1=0; for(i=0;i { hacer { printf( "puntuación %d:",i+1); scanf("%d",&info->puntuación[i]); if(info->puntuación[i ]> 100||info->puntuación[i]<0) printf("datos incorrectos, entrada repetida\n"); } while(info->puntuación[ i] >100||info->puntuación[i]<0); s1=s1+info->puntuación[i]; } info ->sum=s1; info->avg=(float)s1/N; info->order=0; info- >siguiente =NULL; p=cabeza; q=cabeza; while(strcmp(p->num,s)&&p!=NULL) p> { q=p; p=p->siguiente; } if(p==NULL) p> if(p==head) head=info; else q->next=info; else if(p==head){ info->next=p;head=info } else{ info->next=p;q->siguiente; =info ; } printf("\n----he insertado %s estudiantes----\n",info->nombre); printf("- -- -no olvides guardar----\n"); return (head); } ST *sort(ST *cabeza ) { int i=0; ST *p,*q,*t,*h1; h1=cabeza->siguiente; cabeza ->siguiente=NULL; while(h1!=NULL) { t=h1; h1=h1->siguiente; p=cabeza;q=cabeza; while(t->suma if(p==q){t->next=p;head=t;} else{t->next=p;q->next=t;} } p=cabeza; while(p!=NULL){i++;p->order=i;p=p->siguiente;} p> printf("clasificación exitosa!!!!\n"); return head; } void save (ST *head ) { FILE *fp; ST *p; char outfile[10]; printf("ingrese el nombre del archivo de salida, por ejemplo c:\\ f1\\te.txt:\n"); scanf("%s",&outfile); if((fp=fopen(outfile,"wb")) ==NULL) { printf("no se puede abrir el archivo \n"); salir(1); } printf("\n guardando archivo....\n"); p=head; while(p!=NULL){fwrite(p, sizeof(ST ),1,fp);p=p->siguiente;} fclose(fp); printf("----- guardado exitoso --- --" ); } ST *load() { ST *p,*q,*head=NULL; ARCHIVO *fp;char infile[10]; printf("ingrese el nombre del archivo, por ejemplo c:\\f1\\te.txt:\n"); scanf( "%s",&infile); if((fp=fopen(infile,"rb"))==NULL) { printf("no se puede abrir el archivo \n "); exit(1); } printf("\n-----cargando archivo!---- -\n "); p=(ST *)malloc(sizeof(ST)); if(!p){printf("¡fuera de memoria!\n" );return cabeza;} cabeza=p; while(!feof(fp)) { if(1!=fread(p,sizeof (ST) ,1,fp)) descanso; p->siguiente=(ST *)malloc(sizeof(ST)); if(!p->next){printf("fuera de memoria\n");return head;} q= p;p=p->siguiente; } q->siguiente=NULL; fclose(fp); printf("----¡has leído correctamente los datos del archivo!---\n"); return head; } void append () { ARCHIVO *fp; ST *info; int s1,i; char infile[10]; printf("\npor favor nuevo registro \n"); info=(ST *)malloc(sizeof(ST)); if(!info) { printf("\n fuera de memoria "); return; } inputs("ingrese num:",info->num ,12); inputs("ingrese nombre:",info->nombre,15); inputs("ingrese xi:",info->xi,10); printf("ingrese su puntuación \n",N); s1=0; for(i=0;i { hacer { printf("puntuación %d:",i+1); scanf("%d",&info->puntuación[i]); p> if(info->score[i]>100||info->score[i]<0) printf("datos incorrectos, repetir entrada\n"); p> }mientras(info->puntuación[i]>100||info->puntuación[i]<0); s1=s1+info->puntuación[i]; } info->sum=s1; info->avg=(float)s1/N; info-> order=0; info->next=NULL; printf("ingrese el nombre del archivo, por ejemplo c:\\f1\\te.txt:\n"); scanf("%s",infile); if((fp=fopen(infile,"ab"))==NULL) { printf("no se puede abrir el archivo \n"); salir(1); } printf("\n------ añadiendo ¡registro!-------\n"); if(1!=fwrite(info,sizeof(ST),1,fp)) { printf( "------error de escritura de archivo-------"); return; } printf("--- - --append Success------\n"); fclose(fp); } ST *index(ST *head ) { ST *p,*q,*t,*h1; h1=head->siguiente; head->siguiente=NULL; while(h1!=NULL) { t=h1; h1=h1->siguiente; p=head q=cabeza; while(strcmp(t->num,p->num)>0&&p!=NULL) { q=p ; p=p->siguiente; } if (p==q) { t->siguiente=p;head=t } else { t->next=p;q->next=t;} } printf("¡¡índice exitoso!!\n") ; devolver cabeza; } anular total(ST *cabeza) { ST *p,*q; p > char snum[14],qnum[14]; float s1,ave; int i,m,n,k; clrscr(); printf("\n\n******************total************ ****\ n"); printf("----clase----------suma-----------promedio--- --\n" ); p=head; while(p!=NULL) { memcpy(snum, p->num, 10 ); snum[10]='\0'; q=p->siguiente; s1=p->suma; ave =p->promedio; i=1; while(q!=NULL); { memcpy (qnum, q ->num, 10 ); qnum[10]='\0'; k=0,m=0,n=0; if( while(k <10){ snum[m]=qnum[n];k++;}) { s1+=q->suma; ave+=q-> promedio; i++; q=q->siguiente; } más romper; } printf("%s %10.2f %5.2f\n",snum,s1,ave/i); if(q==NULL) romper; else p=q; } printf("---------- -------------------------------"); } nulo copiar () { char outfile[10],infile[10]; ARCHIVO *oldfp,*newfp; ST *p=NULL; clrscr(); printf("ingrese el nombre del archivo, por ejemplo c:\\f1\\te.txt:\n"); scanf( "%s",infile); if((oldfp=fopen(infile,"rb"))==NULL) { printf("no se puede abrir archivo de entrada\ n"); exit(0); } printf("ingrese el nombre del archivo de salida, por ejemplo c:\\f1\\ te.txt :\n"); scanf("%s",outfile); if((newfp=fopen(outfile,"wb"))==NULL ) p> { printf("no se puede abrir el archivo de salida\n"); exit(0); } mientras (!feof (oldfp)) { if(1!=fread(p,sizeof(ST),1,oldfp)) break; fwrite(p ,sizeof(ST),1,newfp); } fclose(oldfp); fclose(newfp); printf("¡¡¡Has copiado correctamente el archivo!!!!\n"); }