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; p >
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) p >
{
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 p>
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:
}
}
}