Red de conocimiento informático - Consumibles informáticos - Se ofrecen recompensas de alta puntuación a los expertos que escriben códigos. Esta vez se entregan a los compañeros de clase.

Se ofrecen recompensas de alta puntuación a los expertos que escriben códigos. Esta vez se entregan a los compañeros de clase.

Lo siguiente es lo que escribí hace algún tiempo, tú también deberías poder usarlo

#include lt; stdio.hgt;

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

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

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

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

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

/* Tabla de nombres del curso*/

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

registro de estructura

{

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

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

int marks[SWN]; /* puntuación de cada curso*/

int total /* puntuación total*/

}stu;

struct node

{

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

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

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

int total; /* Puntuación total*/

struct node *next /* Elemento de tabla posterior pointer*/

}* head; /* Puntero principal de la lista enlazada*/

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

FILE *stfpt; /* Puntero de archivo*/

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

/* Leer un registro del archivo especificado*/

int readrecord(ARCHIVO *fpt, registro de estructura *rpt)

{

char buf[BUFLEN]

int <; /p>

if(fscanf(fpt, "s" , buf)!=1)

return 0; /* fin del archivo*/

strncpy(rpt- gt; nombre, buf, NAMELEN);

fscanf(fpt, "s", buf

strncpy(rpt-gt; código, buf, CODELEN); >

for(i=0; ilt; SWN; i )

fscanf(fpt, "d", amp; rpt-gt; marks[i]); for(rpt-gt; total=0, i=0; ilt; SWN; i )

rpt-gt; total =rpt-gt; marcas[i]; 1;

}

/* Escribe un registro en el archivo especificado*/

writerecor

d(ARCHIVO *fpt, registro de estructura *rpt)

{

int i;

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

fprintf(fpt, "s\n", rpt-gt; código

for(i=0; ilt; SWN; i )

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

retorno

}

/* mostrar; Registro de estudiante */

displaystu(struct record *rpt)

{

int i;

printf("\nNombre: s \n", rpt-gt; nombre);

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

printf("Marcas:\n" );

for(i=0; ilt; SWN; i )

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

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

}

/* Calcula el total de cada uno. Puntos de asunto*/

int totalmark(char *fname)

{

ARCHIVO *fp;

estructura registro s;

int recuento, i;

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

{

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

return 0;

}

for(i=0; ilt; SWN ;i )

total[i]=0;

recuento=0;

mientras(readrecord(fp,amp;s)!=0)

{

for(i=0; ilt; SWN; i )

total[i] =s.marks[i];

recuento;

}

fclose(fp);

retorno recuento /* Devuelve el número de registros*/

}

/* Lista para mostrar información del estudiante*/

void listtu(char *fname)

{

ARCHIVO *fp;

estructura registro s;

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

{

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

return

}

while(readrecord(fp, amp; s)! =0)

{

displaystu(amp;s);

printf("\n Presione EN

TER para continuar...\n");

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

}

fclose(fp) ;

return;

}

/* Construir lista enlazada*/

estructura nodo *makelist(char *fname)

{

ARCHIVO *fp;

registro de estructura s;

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

p>

int i;

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

{

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

return NULL

}

h=NULL; >

p=(struct node *)malloc(sizeof(struct node));

while(readrecord(fp, (struct record *)p)!=0)

{

v=h;

while(vamp; amp; p-gt; totallt; = v-gt; total)

{

u=v;

v=v-gt; siguiente

}

si(v==h)

h =p;

más

u-gt; siguiente=p

p-gt; > p= (struct node *)malloc(sizeof(struct node));

}

free(p);

fclose(fp);

return h;

}

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

void displaylist(struct node *h)

{

while(h!=NULL)

{

muestratu((struct record *)h);

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

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

h=h-gt; next;

}

return;

}

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

int retrievebyn(char *fname, char *key)

{

ARCHIVO *fp

int

estructura registro s;

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

{

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

devuelve 0; p> mientras(

readrecord(fp,amp;s)!=0)

{

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

{

muestratu(amp; s);

c

}

}

fclose(fp);

if(c==0)

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

); return 1;

}

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

int retrievebyc(char *fname, char *key)

{

ARCHIVO *fp;

int c;

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

{

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

devolver 0;

}

c=0;

mientras(readrecord(fp,amp;s)!=0)

{

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

{

displaystu(amp;s);

c;

romper

}

}

fclose(fp); ==0)

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

return

}

main()

{

int i, j, n;

char c; char buf[BUFLEN];

ARCHIVO *fp;

struct record s;

clrscr()

printf(" Por favor ingrese el nombre del archivo de registro de calificaciones de los estudiantes: ");

scanf("s",stuf);

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

{

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

getchar();

c=getchar();

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

{

fp=fopen(stuf, "w");

printf("Ingrese el número de registro que desea escribir en el archivo: "

scanf("d",amp;n

);

for(i=0;ilt;n;i)

{

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

scanf("s",amp; s.name);

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

scanf("s",amp; s.code);

for(j=0;jlt;SWN;j)

{

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

scanf("d",amp;s.marks[j]);

}

writerecord(fp,amp;s

}

fclose(fp);

}

}

fclose(fp);

getchar();

/*clrscr(); */

puts("Ahora puede ingresar un comando para administrar los registros.");

puts("m : media de las marcas.");

puts("t : total de las marcas."); n: buscar registro por nombre del estudiante.");

puts("c: buscar registro por código del 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", amp; c); Seleccione comando*/

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

{

puts("\n Gracias para su uso.");

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

}

switch(c)

{

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

case 'M':

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

{

puts("¡Error!"

break;

printf("\n");

for(i=0;ilt;SWN;i)

printf("El promedio de -15s es: .2f.\n ", Trabajo escolar

[i], (float)total[i]/n);

break;

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

caso 'T':

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

{

puts("¡Error!");

romper;

}

printf("\n");

for(i=0; ilt; SWN; i )

printf("La nota total de -15 es: d.\n", trabajo escolar[i], total[i]); 'n': /* Buscar registros por nombre del estudiante*/

case 'N':

printf("Ingrese el nombre del estudiante que desea buscar: "); /p>

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 buscar: "

<); p> scanf("s",buf);

retrievebyc(stuf,buf);

break;

case 'l': /* columna Fuera todos los registros de los estudiantes*/

case 'L':

listtu(stuf

break

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

case 'S':

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

lista de visualización (cabeza);

romper

predeterminado:

}

}

}