求大神改,能用code.blocks运行就行,作业需要,急!!!
#ifndef H_STUDENT_HH 
#define H_STUDENT_HH 

#include "stdio.h" 
#include "string.h" 
#include "malloc.h" 


#define LEN sizeof(struct message_student) /*一个结构体数组元素的长度*/ 
#define numsubs 5 /*学科数目*/ 
typedef struct message_student /*结构体定义*/ 
{ 
char number[6]; 
char name[20]; 
char sex[4]; 
float subject; 
float score; 
float average; 
int index; 
}student; 


extern int numstus; /*学生数目*/ 
extern student *pointer; /*指向结构体数组*/ 
extern int lens; 



int menu_select(); /*函数声明*/ 
int openfile(student stu[]); 
int findrecord(student stud[]); 
int writetotext(student stud[]); 
void welcome(); 
void display1(); 
void showtable(); 
void sort(student stu[]); 
void deleterecord(student stu[],int i); 
void addrecord(student stud[]); 
void display(student stud[],int n1,int n2); 
void amendrecord(student stud[]); 
void count(student stud[]); 
void sortnum(student stud[]); 
void sortnum2(student stud[]); 
void sortname(student stud[]); 
void sortname2(student stud[]); 
void sortcount(student stud[]); 
void sortcount2(student stud[]); 
void statistic(student stud[]); 
void display1(); 


#endif 

//#include "head.h" 
int menu_select() 
{ 
char c; 
printf("\n\n"); 
printf(" | 1. 增加学生记录 5.统计信息 |\n"); 
printf(" | 2. 查询学生记录 6.打开文件 |\n"); 
printf(" | 3. 修改学生记录 7.保存文件 |\n"); 
printf(" | 4. 学生纪录排序 8.显示记录 |\n"); 
printf(" | 0.退出系统 |\n"); 
printf("\n\n"); 
printf("请选择(0-8):"); 
c=getchar(); 
getchar(); 
return (c-'0'); 
} 

//#include "head.h" 
int findrecord(student stud[]) /*查找信息*/ 
{ 
char str[2]; 
int i,num; 
if(numstus==0) 
{ 
  printf("没有可被查找的记录\n"); 
  return -1; 
} 
else 
{ 
  printf("以何种方式查找?\n1.学号\t2.姓名\t3.名次\n"); 
  gets(str); 
  if(str[0]=='1') /*按学号查找*/ 
  { 
   printf("请输入学号:"); 
   gets(str); 
   for(i=0;i<=numstus;i++) 
    if(strcmp(str,stud.number)==0) 
    { 
     display(stud,i,i); 
     break; 
    } 
    else continue; 
  } 
  else if(str[0]=='2') /*按姓名查找*/ 
  { 
   printf("请输入姓名:"); 
   gets(str); 
   for(i=0;i<=numstus;i++) 
    if(strcmp(str,stud.name)==0) 
    { 
     display(stud,i,i); 
     break; 
    } 
    else continue; 
  } 
  else if(str[0]=='3') /*按名次查找*/ 
  { 
   printf("请输入名次:"); 
   scanf("%d",&num); 
   getchar(); 
   for(i=0;i<=numstus;i++) 
    if(num==stud.index) 
    { 
     display(stud,i,i); 
     break; 
    } 
    else continue; 
  } 
  if(i>numstus) 
  { 
   printf("没有查找所要的信息。\n"); 
   return -1; 
  } 
  return i; 
} 
} 




//#include"head.h" 
int openfile(student stu[]) 
{ 
int i=0,j; 
FILE *fp; 
char filename[20],str[2]; 
if(numstus!=0) 
{ 
  printf("已经有记录存在,是否保存?(y/n)"); 
  gets(str); 
  if(str[0]=='y'||str[0]=='Y') 
   writetotext(stu); 
} 
printf("请输入文件名:"); 
gets(filename); 
numstus=0; 
if((fp=fopen(filename,"rb+"))==NULL) 
{ 
  printf("无法打开该文件\n"); 
  return(-1); 
} 
fscanf(fp,"%d",&numstus); 
fgetc(fp); 
while(i<numstus) 
{ 
  fscanf(fp,"%s",stu.number); 
  fscanf(fp,"%s",stu.name); 
  fscanf(fp,"%s",stu.sex); 
  for(j=0;j<numsubs;j++) 
   fscanf(fp,"%f",&stu.subject); 
  fscanf(fp,"%f",&stu.score); 
  fscanf(fp,"%f",&stu.average); 
  fscanf(fp,"%d",&stu.index); 
  i++; 
} 
fclose(fp); 
printf("文件读取成功\n"); 
printf("是否显示纪录?(y/n)"); 
gets(str); 
if(str[0]=='y'||str[0]=='Y') 
  display(stu,0,numstus-1); 
return(0); 
} 
//#include "head.h" 
void sort(student stud[]) 
{ 
int i,j=0; 
char str[5]; 
student *p; 
p=stud; 
if(numstus==0) 
{ 
  printf("没有可供查询的记录!"); 
} 
while(1) 
{ 
  for(i=0;;i++) 
  { 
   printf(" 请输入查询方式:"); 
   printf("(直接输入回车则结束查询操作)\n"); 
   printf("1.按照学号\t"); 
   printf("2.按照姓名\t"); 
   printf("3.按照名次\n"); 
   gets(str); 
   if(strlen(str)==0) break; 
   if(str[0]=='1') 
   { 
    printf("请输入排序次序:\n"); 
    printf("1.升序排列\t"); 
    printf("2.降序排列\n"); 
    gets(str); 
    if(str[0]=='1') 
     sortnum2(p); 
    else 
     sortnum(p); 
    display(stud,0,numstus-1); 
   } 
   else if(str[0]=='2') 
   { 
    printf("请输入排序次序:\n"); 
    printf("1.升序排列\t"); 
    printf("2.降序排列\n"); 
    gets(str); 
    if(str[0]=='1') 
     sortname2(p); 
    else 
     sortname(p); 
    display(stud,0,numstus-1); 
   } 
   else if(str[0]=='3') 
   { 
    printf("请输入排序次序:\n"); 
    printf("1.升序排列\t"); 
    printf("2.降序排列\n"); 
    gets(str); 
    if(str[0]=='1') 
     sortcount2(p); 
    else 
     sortcount(p); 
    display(stud,0,numstus-1); 
   } 
   else printf("请输入1~3"); 
   printf("是否退出排序?(y/n)"); 
   gets(str); 
   if(str[0]=='y'||str[0]=='Y') break; 
  } 
  return; 
} 
} 
void sortnum(student stud[]) 
{ 
int i,j; 
student temp; 
student *p; 
p=stud; 
for(i=0;i<numstus;i++) 
  for(j=0;j<numstus-i-1;j++) 
  { 
   if(strcmp(stud[j+1].number,stud.number)>0) 
   { 
    temp=*(p+j); 
    *(p+j)=*(p+j+1); 
    *(p+j+1)=temp; 
   } 
  } 
} 
void sortnum2(student stud[]) 
{ 
int i,j; 
student temp; 
student *p; 
p=stud; 
for(i=0;i<numstus;i++) 
  for(j=0;j<numstus-i-1;j++) 
  { 
   if(strcmp(stud.number,stud[j+1].number)>0) 
   { 
    temp=*(p+j); 
    *(p+j)=*(p+j+1); 
    *(p+j+1)=temp; 
   } 
  } 
} 
void sortname(student stud[]) 
{ 
int i,j; 
student temp; 
student *p; 
p=stud; 
for(i=0;i<numstus;i++) 
  for(j=0;j<numstus-i-1;j++) 
  { 
   if(strcmp(stud[j+1].name,stud.name)>0) 
   { 
    temp=*(p+j); 
    *(p+j)=*(p+j+1); 
    *(p+j+1)=temp; 
   } 
  } 
} 
void sortname2(student stud[]) 
{ 
int i,j; 
student temp; 
student *p; 
p=stud; 
for(i=0;i<numstus;i++) 
  for(j=0;j<numstus-i-1;j++) 
  { 
   if(strcmp(stud.name,stud[j+1].name)>0) 
   { 
    temp=*(p+j); 
    *(p+j)=*(p+j+1); 
    *(p+j+1)=temp; 
   } 
  } 
} 
void sortcount(student stud[]) 
{ 
int i,j; 
student temp; 
student *p; 
p=stud; 
for(i=0;i<numstus;i++) 
  for(j=0;j<numstus-i-1;j++) 
  { 
   if(stud[j+1].index>stud.index) 
   { 
    temp=*(p+j); 
    *(p+j)=*(p+j+1); 
    *(p+j+1)=temp; 
   } 
  } 
} 
void sortcount2(student stud[]) 
{ 
int i,j; 
student temp; 
student *p; 
p=stud; 
for(i=0;i<numstus;i++) 
  for(j=0;j<numstus-i-1;j++) 
  { 
   if(stud.index>stud[j+1].index) 
   { 
    temp=*(p+j); 
    *(p+j)=*(p+j+1); 
    *(p+j+1)=temp; 
   } 
  } 
} 
//#include"head.h" 
void statistic(student stud[]) /*新增功能,输出统计信息*/ 
{ 
int i,j=0,k=0; 
char c1,str[2]; 
float average,sum=0; 
if(numstus==0) 
  printf("没有可被查找的记录\n"); 
else 
{ 
  while(1) 
  { 
   printf("下面将统计考试成绩\n"); 
   printf("请选择你要统计哪科的成绩 1.A\t2.B\t3.C\t4.D\t5.E\n"); 
   c1=getchar(); 
   printf("\t一共有个%d记录\n",numstus); /*总共记录数*/ 
   switch(c1) 
   { 
   case '1': 
    for(i=0;i<numstus;i++) /*循环输入判断*/ 
    { 
     sum+=stud.subject[0]; 
     if(stud.subject[0]>stud.subject[0]) k=i; 
     if(stud.subject[0]<stud.subject[0]) j=i; 
    } 
    average[0]=sum/numstus; 
    printf("\t科目A的最高分:\n"); /*最高分*/ 
    printf("\t\t学号:%s 姓名:%s 分数:%.2f\n",stud.number,stud.name,stud.subject[0]); 
    printf("\t科目A的最低分是:\n"); /*最低分*/ 
    printf("\t\t学号:%s 姓名:%s 分数:%.2f\n",stud.number,stud.name,stud.subject[0]); 
    printf("\t科目A的平均分是 %5.2f\n",average[0]); /*平均分*/ 
    break; 
   case '2': 
    for(i=0;i<numstus;i++) /*循环输入判断*/ 
    { 
     sum+=stud.subject[1]; 
     if(stud.subject[1]>stud.subject[1]) k=i; 
     if(stud.subject[1]<stud.subject[1]) j=i; 
    } 
    average[1]=sum/numstus; 
    printf("\t科目B的最高分:\n"); /*最高分*/ 
    printf("\t\t学号:%s 姓名:%s 分数:%.2f\n",stud.number,stud.name,stud.subject[1]); 
    printf("\t科目B的最低分是:\n"); /*最低分*/ 
    printf("\t\t学号:%s 姓名:%s 分数:%.2f\n",stud.number,stud.name,stud.subject[1]); 
    printf("\t科目B的平均分是 %5.2f\n",average[1]); /*平均分*/ 
    break; 
   case '3': 
    for(i=0;i<numstus;i++) /*循环输入判断*/ 
    { 
     sum+=stud.subject[2]; 
     if(stud.subject[2]>stud.subject[2]) k=i; 
     if(stud.subject[2]<stud.subject[2]) j=i; 
    } 
    average[2]=sum/numstus; 
    printf("\t科目C的最高分:\n"); /*最高分*/ 
    printf("\t\t学号:%s 姓名:%s 分数:%.2f\n",stud.number,stud.name,stud.subject[2]); 
    printf("\t科目C的最低分是:\n"); /*最低分*/ 
    printf("\t\t学号:%s 姓名:%s 分数:%.2f\n",stud.number,stud.name,stud.subject[2]); 
    printf("\t科目C的平均分是 %5.2f\n",average[2]); /*平均分*/ 
    break; 
   case '4': 
    for(i=0;i<numstus;i++) /*循环输入判断*/ 
    { 
     sum+=stud.subject[3]; 
     if(stud.subject[3]>stud.subject[3]) k=i; 
     if(stud.subject[3]<stud.subject[3]) j=i; 
    } 
    average[3]=sum/numstus; 
    printf("\t科目D的最高分:\n"); /*最高分*/ 
    printf("\t\t学号:%s 姓名:%s 分数:%.2f\n",stud.number,stud.name,stud.subject[3]); 
    printf("\t科目D的最低分是:\n"); /*最低分*/ 
    printf("\t\t学号:%s 姓名:%s 分数:%.2f\n",stud.number,stud.name,stud.subject[3]); 
    printf("\t科目D的平均分是 %5.2f\n",average[3]); /*平均分*/ 
    break; 
   case '5': 
    for(i=0;i<numstus;i++) /*循环输入判断*/ 
    { 
     sum+=stud.subject[4]; 
     if(stud.subject[4]>stud.subject[4]) k=i; 
     if(stud.subject[4]<stud.subject[4]) j=i; 
    } 
    average[4]=sum/numstus; 
    printf("\t科目E的最高分:\n"); /*最高分*/ 
    printf("\t\t学号:%s 姓名:%s 分数:%.2f\n",stud.number,stud.name,stud.subject[4]); 
    printf("\t科目E的最低分是:\n"); /*最低分*/ 
    printf("\t\t学号:%s 姓名:%s 分数:%.2f\n",stud.number,stud.name,stud.subject[4]); 
    printf("\t科目E的平均分是 %5.2f\n",average[4]); /*平均分*/ 
    break; 
   default:printf("输入错误!请输入1~5之间的数\n"); 
   } 
   sum=0; 
   getchar(); 
   printf("是否继续进行统计?(y/n)"); 
   gets(str); 
   if(str[0]=='y'||str[0]=='Y') ; 
   else break; 
  } 
} 
} 


int writetotext(student stud[]) /*将所有记录写入文件*/ 
{ 
int i=0,j; 
FILE *fp; 
char filename[20]; 
printf("输入文件名称:"); 
gets(filename); 
fp=fopen(filename,"w"); 
fprintf(fp,"%d\n",numstus); 
while(i<numstus) 
{ 
  fprintf(fp,"%s %s %s ",stud.number,stud.name,stud.sex); 
  for(j=0;j<numsubs;j++) 
   fprintf(fp,"%f ",stud.subject); 
  fprintf(fp,"%f %f %d ",stud.score,stud.average,stud.index); 
  i++; 
} 
fclose(fp); 
printf("已成功存储!\n"); 
display(stud,0,numstus-1); 
numstus=0; 
return 0; 
} 


void welcome() 
{ 
printf("\t*************************************************************\n"); 
printf("\t\t\t\t这是一个学生成绩管理系统\n\t\t\t\t 倾情奉献 欢迎使用!\n"); 
printf("\t*************************************************************\n"); 

} 


void showtable() 
{ 
printf("---------------------------------------------------------------------------------------\n"); 
printf("学号\t姓名\t性别\tA\tB\tC\tD\tE\t总分\t平均分\t名次\n"); 
printf("---------------------------------------------------------------------------------------\n"); 
} 


void display(student stud[],int n1,int n2) 
{ 
int i; 
showtable(); /*显示表头*/ 
for(i=n1;i<=n2;i++) 
  printf("%s\t%s\t%s\t%.2f\t%.2f\t%.2f\t%.2f\t%.2f\t%.2f\t%.2f\t%d\t\n",stud.number,stud.name,stud.sex,stud.subject[0],stud.subject[1],stud.subject[2],stud.subject[3],stud.subject[4],stud.score,stud.average,stud.index); 
/*通过循环输出数据*/ 

} 
void display1() 
{ 
printf("\t\t本系统由计应精英一组亲情制作\n\n"); 
printf("\t\t制作人员列表: (按比划)\n"); 
printf("\t\t王庆斌\t\t\t张威\n\t\t李智\t\t\t周在峰\n\t\t杨凯\t\t\t胡杨\n"); 
printf("\n\n"); 
getchar(); 
} 



#include<string.h> 
void amendrecord(student stud[]) 
{ 
char str[5]; /*供用户输入*/ 
int i=-1,j; 

if(numstus==0) /*没有记录返回*/ 
  printf("没有可供修改的记录!"); 
while(i<0) 
{ 
  i=findrecord(stud); 
  if(i>=0) 
  { 
   printf("要删除这个学生的信息吗?(y/n)"); 
   gets(str); 
   if(str[0]=='y'||str[0]=='Y') 
   { 
    deleterecord(stud,i); 
    count(stud); 
   } 
   else 
   { 
    printf("确定要修改这个学生的信息吗?(y/n)"); 
    gets(str); 
    if(str[0]=='y'||str[0]=='Y') 
    { 
     
     printf("下面请重新输入学生的信息:\n"); 
     printf("请输入学号:"); 
     gets(stud.number); 
     printf("请输入姓名:"); 
     gets(stud.name); 
     printf("请输入性别(男/女 1/0):"); 
     gets(str); 
     if(str[0]=='0') 
      strcpy(stud.sex,"女"); 
     else 
      strcpy(stud.sex,"男"); 
     stud.score=0; 
     printf("请按顺序输入成绩:"); 
     for(j=0;j<numsubs;j++) 
     { 
      scanf("%f",&stud.subject); 
      stud.score+=stud.subject; 
     } 
     getchar(); 
     stud.average=stud.score/numsubs; 
    } 
    count(stud); 
   } 
   display(stud,0,numstus-1); 
  } 
  printf("是否继续进行其他修改?(y/n)\n"); 
  gets(str); 
  if(str[0]=='y'||str[0]=='Y') 
   i=-1; 
  else i=1; 
} 
} 

void deleterecord(student stu[],int i) /*删除信息*/ 
{ 
int j; 

while(i>=0) 
{ 
  for(j=i;j<numstus;j++) 
   stu=stu[j+1]; 
  numstus--; 
  printf("删除成功!\n"); 
  
  
} 
} 

void count(student stud[]) 
{ 
int i,j; 
for(i=0;i<numstus;i++) 
{ 
  stud.index=1; 
  for(j=0;j<numstus;j++) 
   if(stud.score>stud.score) 
    stud.index++; 
} 
} 





void addrecord(student stud[]) 
{ 
int i=0,j,num; 
char str[5]; 
if(numstus!=0) 
{ 
  printf("已有记录存在是否覆盖?(y/n)\n"); 
  gets(str); 
  if(str[0]=='Y'||str[0]=='y') 
   i=0; 
  else i=numstus; 
} 

printf("请输入增加的学生信息条目数:"); 
scanf("%d",&num); 
if(i==0) 
  numstus=num; 
else numstus+=num; 
if(numstus>lens) 
{ 
  lens+=50; 
  pointer=(student *)realloc(pointer,lens*LEN); 
} 
printf("请输入学生信息:\n"); 
for(;i<numstus;i++) 
{ 
  getchar(); 
  printf("请输入学号:"); 
  gets(pointer.number); 
  printf("请输入姓名:"); 
  gets(pointer.name); 
  printf("请输入性别(男/女 1/0):"); 
  gets(pointer.sex); 
  if(pointer.sex[0]=='0') strcpy(pointer.sex,"女"); 
  else strcpy(pointer.sex,"男"); 
  printf("请输入各科成绩:(按ABCDE的顺序):"); 
  stud.score=0; 
  for(j=0;j<numsubs;j++) 
  { 
   scanf("%f",&stud.subject); /*计算总分*/ 
   stud.score+=stud.subject; 
  } 
  stud.average=stud.score/numsubs; /*计算平均分*/ 
} 
count(stud); /*附名次*/ 
display(stud,0,numstus-1); 
getchar(); 
}
int numstus; 
int lens; 
student *pointer; 
void main() 
{ 
int i=1; 
char str[2]; 
lens=100; 
pointer=(student *)malloc(lens*LEN); /*分配内存*/ 
numstus=0; 
welcome(); /*欢迎界面*/ 
while(i>0) 
{ 
  i=menu_select(); /*控制菜单*/ 
  switch(i) 
  { 
  case 1:addrecord(pointer);break; /*增加学生信息*/ 
  case 2:findrecord(pointer);break; /*查询学生信息*/ 
  case 3:amendrecord(pointer);break; /*修改学生信息*/ 
  case 4:sort(pointer);break; /*学生信息排序*/ 
  case 5:statistic(pointer);break; /*统计信息*/ 
  case 6:openfile(pointer);break; /*打开文件*/ 
  case 7:writetotext(pointer);break; /*保存文件*/ 
  case 8:display(pointer,0,numstus-1);break; /*显示记录*/ 
  case 0: 
   if(numstus!=0) printf("是否保存当前记录?(y/n)"); 
   gets(str); 
   if(str[0]=='y'||str[0]=='Y') 
    writetotext(pointer); 
   i=-1;break; /*退出系统*/ 
  default:printf("请输入数字0~8:\n");i=1; /*输入错误*/ 
  } 
} 
printf("\t\t欢迎再次使用本系统。\n\n"); 
display1(); 
}