我这有一个挺合你,你自己再改一下吧
/*
学生成绩管理程序
编制一个统计学生考试分数的管理程序。
设学生成绩已以一个学生一个记录的形式存储在文件中,
每位学生记录包含的信息有:姓名,学号和各门功课的成绩。
程序具有以下几项功能:求出各门课程的总分,平均分,按姓名,
按学号寻找其记录并显示,浏览全部学生成绩和按总分由高到低显示学生信息等。
*/
#include <stdio.h>
#define
SWN
3
/* 课程数 */
#define NAMELEN
20
/* 姓名最大字符数 */
#define CODELEN
10
/* 学号最大字符数 */
#define FNAMELEN
80
/* 文件名最大字符数 */
#define BUFLEN
80
/* 缓冲区最大字符数 */
/* 课程名称表 */
char schoolwork[SWN][NAMELEN+1] = {"Chinese","Mathematic","English"};
struct record
{
char
name[NAMELEN+1];
/* 姓名 */
char
code[CODELEN+1];
/* 学号 */
int
marks[SWN];
/* 各课程成绩 */
int total;
/* 总分 */
}stu;
struct node
{
char
name[NAMELEN+1];
/* 姓名 */
char
code[CODELEN+1];
/* 学号 */
int
marks[SWN];
/* 各课程成绩 */
int
total;
/* 总分 */
struct
node *next;
/* 后续表元指针 */
}*head;
/* 链表首指针 */
int total[SWN];
/* 各课程总分 */
FILE *stfpt;
/* 文件指针 */
char stuf[FNAMELEN];
/* 文件名 */
/* 从指定文件读入一个记录 */
int readrecord(FILE *fpt,struct record *rpt)
{
char buf[BUFLEN];
int i;
if(fscanf(fpt,"%s",buf)!=1)
return 0;
/* 文件结束 */
strncpy(rpt->name,buf,NAMELEN);
fscanf(fpt,"%s",buf);
strncpy(rpt->code,buf,CODELEN);
for(i=0;i<SWN;i++)
fscanf(fpt,"%d",&rpt->marks[i]);
for(rpt->total=0,i=0;i<SWN;i++)
rpt->total+=rpt->marks[i];
return 1;
}
/* 对指定文件写入一个记录 */
writerecord(FILE *fpt,struct record *rpt)
{
int i;
fprintf(fpt,"%s\n",rpt->name);
fprintf(fpt,"%s\n",rpt->code);
for(i=0;i<SWN;i++)
fprintf(fpt,"%d\n",rpt->marks[i]);
return ;
}
/* 显示学生记录 */
displaystu(struct record *rpt)
{
int i;
printf("\nName
: %s\n",rpt->name);
printf("Code
: %s\n",rpt->code);
printf("Marks
:\n");
for(i=0;i<SWN;i++)
printf("
%-15s : %4d\n",schoolwork[i],rpt->marks[i]);
printf("Total
: %4d\n",rpt->total);
}
/* 计算各单科总分 */
int totalmark(char *fname)
{
FILE *fp;
struct record s;
int count,i;
if((fp=fopen(fname,"r"))==NULL)
{
printf("Can't open file %s.\n",fname);
return 0;
}
for(i=0;i<SWN;i++)
total[i]=0;
count=0;
while(readrecord(fp,&s)!=0)
{
for(i=0;i<SWN;i++)
total[i]+=s.marks[i];
count++;
}
fclose(fp);
return count;
/* 返回记录数 */
}
/* 列表显示学生信息 */
void liststu(char *fname)
{
FILE *fp;
struct record s;
if((fp=fopen(fname,"r"))==NULL)
{
printf("Can't open file %s.\n",fname);
return ;
}
while(readrecord(fp,&s)!=0)
{
displaystu(&s);
printf("\n
Press ENTER to continue...\n");
while(getchar()!='\n');
}
fclose(fp);
return;
}