C++学生管理系统交不了差我就死定了,大叔大婶行行好

送人玫瑰手有余香,救人一命胜造七级浮屠,C++学生管理系统交不了差我就死定了,大叔大婶行行好

http://wenku.baidu.com/link?url=SXkEsiMcpfqhM3IdT5ZZ97aNTmwfO_74dvJoNSWoCp2FIyudzpd1uBSgh2ccFJS6fvJROIDaVTEAkHkOJBY1a7LNDw6amoiRs_CUd_YjNi3

我也在做这个>__<

我也在做这个>__<

只是用C的话,去看看关于MFC的书,简洁的编程,对于DB的链接也很简单,可视化的界面,有点基础的话,一周就差不多


 #include<stdio.h>
#include<stdlib.h>
#include<malloc.h>
#include<string.h>
struct student{    //结构体定义
  char name[20];  //姓名
  int num;        //学号
  int no;         //排名
  float score[6];    //各科成绩
  float ave;        //平均成绩
  float tot;        //总成绩
  struct student *next;
};

struct student *head;   //定义全局变量 链表头
int i;                  //定义全局变量 科目总数




void key1();        //用户界面1
void key2();        //用户界面2
void fileinput(void);    //文件录入函数
void maninput(void);     //手动录入函数
void avetotal();        //求学生平均分总分函数
void number();         //求学生排名函数
void deorder();         //总分由高到低排序
void asorder();         //总分由低到高排序
void numorder();         //学号由小到大排序
void dictionary();       //按字典顺序排序
void output();           //输出函数
void save();         //保存函数
void senum();         //学号查找函数
void senam();         //名字查找函数
void modify();        //学生信息修改函数
void del();           //删除学生信息函数
void add();            //增加学生信息函数
void analy();                //统计各科各类别人数
void ansave(int a[6][5],float b[6][5]);                //统计结果保存函数
void caculate();             //统计各科平均分及总分



void key1(){      //用户界面1
  int j;
  printf("\n\n\t\\****************欢迎来到学生管理系统*******************\\\n");
  printf("\tRead a file\n");
  printf("\t1.文件录入\n");
  printf("\t1.Record from file\n");
  printf("\t2.手动录入\n");
  printf("\t2.Append record manually\n");
  printf("\t0.exit\n");
  printf("\t请输入你选择的录入方式:");
  scanf("%d",&j);
  switch(j)
  {
      case 1:fileinput();break;         //调用文件录入函数
      case 2:maninput();break;           //调用手动输入函数
      case 0:exit(0);break;            //退出
      default:{
          printf("\n\t请重新选择");
          key1();}
  }
}




void fileinput(void)       //文件录入函数
{       
  FILE *fp;
  struct student *p1=NULL,*p2=NULL;
  int j,k,l;
  char filename[20];
  printf("\n\n\t请输入文件路径:");     //键盘输入文件名
  scanf("%s",filename);
  if((fp=fopen(filename,"r"))==NULL)
  {
      printf("\n\t对不起,文件错误,打开文件失败");
      exit(0);                   
  }
  printf("\n\t文件打开成功.....");
  printf("\n\t请输入科目总数:");
    scanf("%d",&i);
  printf("\n\t请输入录入人数:");
  scanf("%d",&j);
  head=p1=(struct student*)malloc(sizeof(struct student));
  for(l=1;l<=j;l++)
  {
          fscanf(fp,"%s",p1->name);    
          fscanf(fp,"%d",&p1->num);    
          for(k=0;k<i;k++)
                  fscanf(fp,"%f",&p1->score[k]);     
          p1->next=(struct student*)malloc(sizeof(struct student));
          p2=p1;
          p1=p1->next;
      }
    p1->next=NULL;
  p2->next=NULL;
  fclose(fp);
  printf("\n\t文件录入成功.....");

}



void maninput(void){       //手动录入函数
  struct student *p1=NULL,*p2=NULL;
  int j;
  char ch;
    printf("\n\t请输入录入科目总数:");
    scanf("%d",&i);
  head=p1=(struct student*)malloc(sizeof(struct student));
  printf("\n\t姓名      学号");
  for(j=1;j<=i;j++)
      printf(" 成绩%d",j);
  printf("\n\t");
  scanf("%s%d",p1->name,&p1->num);
  for(j=0;j<i;j++)
      scanf("%f",&p1->score[j]);
  printf("\n\t是否继续输入(y/n):");
  getchar();
  ch=getchar();
  printf("\n\t");
  while(ch=='y')
  {
      p2=(struct student*)malloc(sizeof(struct student));
      scanf("%s%d",p2->name,&p2->num);
        for(j=0;j<i;j++)
           scanf("%f",&p2->score[j]);
         printf("\n\t是否继续输入(y/n):");
       getchar();
       ch=getchar();
       printf("\n\t");
       p1->next=p2;
       p1=p2;
  };
  p1->next=NULL;
  printf("\n\t手动录入成功......");
  printf("\n\t进入功能菜单");

}





void avetotal(){         //求学生平均分总分
  struct student *p1=NULL,*p2=NULL;
  int k;
  p1=head;
  while(p1!=NULL)
  {
      p1->tot=0;
      for(k=0;k<i;k++)
          p1->tot=p1->tot+p1->score[k];
      p1->ave=p1->tot/i;
      p2=p1;
      p1=p1->next;
  }

}







void number(){                    //求学生排名函数
  struct student *p1=NULL,*p2=NULL,*p3=NULL;
  bool flag;
    int j=1;
  p3=p1=head;
  p2=p1->next;
do{
  if(p2==NULL)
  {
      p1->no=1;
      break;
  }
      flag=false;
      if((p1->tot)<(p2->tot))
      {   
          p1->next=p2->next;
          p2->next=p1;
          head=p2;
          p2=p1->next;
          p3=head;
          flag=true;
      }
      else{
          p2=p2->next;
          p1=p1->next;
      };


      while(p2!=NULL)
      {
          if((p1->tot)<(p2->tot))
          {  
                 p1->next=p2->next;
                 p3->next=p2;
                 p2->next=p1;
                   p3=p2;
                 p2=p1->next;                 //调用交换函数
              flag=true;
          }
          else
          {

              p2=p2->next;
              p1=p1->next;
              p3=p3->next;
          };

      };
      p3=p1=head;
      p2=p1->next;
  }while(flag);  
while(p1!=NULL)
{
  p1->no=j;
  j++;
  p1=p1->next;
}
}






void key2(){           //用户界面2
  int j;
  char ch;
    printf("\n\n\n\n\n\t");
  printf("\n\t***********************主菜单*****************************");
  printf("\n\n\t");
  printf("\n\t*********************排序区域(Sort)***********************");
  printf("\n\t1. Sort in descending order by total score of every student");
  printf("\n\t2. Sort in ascending order by total score of every student");
  printf("\n\t3. Sort in ascending order by number");
  printf("\n\t4. Sort in dictionary order by name");
  printf("\n");
  printf("\n\t*********************查询区域(Search)********************");
  printf("\n\t5. Search by number");
    printf("\n\t6. Search by name");
  printf("\n\t");
  printf("\n\t*********************修改区域(Modify)**********************");
    printf("\n\t7. Modify information of student");
  printf("\n\t8. Delete  student");
  printf("\n\t9. Add student");
  printf("\n\t");
  printf("\n\t*********************课程操作区域(Course)******************");
  printf("\n\t10. Statistic analysis for every course");
  printf("\n\t11.Calculate total and average score of every course");
  printf("\n\t*********************保存文件区域(Save)********************");
  printf("\n\t12.Write to a file");
  printf("\n\t0.exit");
  printf("\n\t请输入你的选择:");
    scanf("%d",&j);
  switch(j)
  {
  case(1):deorder();break;        //调用升序函数
  case(2):asorder();break;        //调用降序函数
  case(3):numorder();break;       //调用学号排序函数
  case(4):dictionary();break;      //调用字典排序函数
  case(5):senum();break;            //调用学号查询函数
  case(6):senam();break;              //调用名字查找函数
  case(7):modify();break;            //调用修改学生信息函数
  case(8):del();break;               //调用删除学生信息函数
  case(9):add();break;                //调用增加学生信息函数
  case(10):analy();break;              //调用各科各类别统计函数
  case(11):caculate();break;           //调用统计各科总分及平均分函数
  case(12):save();        //调用保存函数
      printf("\n\t是否返回主菜单(y/n):");
      getchar();
      ch=getchar();
      if(ch=='y') 
      key2();                //调用用户界面2
  case(0):exit(0);               //停止运行
    default:{
          printf("\n\t请重新选择");
          key2();}
  }
}




void deorder(){       //总分由高到低排序
  struct student *p1=NULL,*p2=NULL,*p3=NULL;
  bool flag;
  char ch;
  p3=p1=head;
  p2=p1->next;
do{
  if(p2==NULL)
      break;
      flag=false;
      if((p1->tot)<(p2->tot))
      {   
          p1->next=p2->next;
          p2->next=p1;
          head=p2;
          p2=p1->next;
          p3=head;
          flag=true;
      }
      else{
          p2=p2->next;
          p1=p1->next;
      };


      while(p2!=NULL)
      {
          if((p1->tot)<(p2->tot))
          {  
                 p1->next=p2->next;
                 p3->next=p2;
                 p2->next=p1;
                   p3=p2;
                 p2=p1->next;                 //调用交换函数
              flag=true;
          }
          else
          {

              p2=p2->next;
              p1=p1->next;
              p3=p3->next;
          };

      };
      p3=p1=head;
      p2=p1->next;
  }while(flag);         
  output();                                             //调用输出函数
  printf("\n\t是否返回主菜单(y/n):");
  getchar();
  ch=getchar();
  if(ch=='y') 
      key2();                //调用用户界面2
  else
      printf("\n\t是否保存修改到文件(y/n):");
  getchar();
  ch=getchar();
  if(ch=='y')
      save();               //调用保存函数
  exit(0);
}





void asorder(){          //总分由低到高排序
  struct student *p1=NULL,*p2=NULL,*p3=NULL;
  bool flag;
  char ch;
  p3=p1=head;
  p2=p1->next;
do{
  if(p2==NULL)
      break;
      flag=false;
      if((p1->tot)>(p2->tot))
      {   
          p1->next=p2->next;
          p2->next=p1;
          head=p2;
          p2=p1->next;
          p3=head;
          flag=true;
      }
      else{
          p2=p2->next;
          p1=p1->next;
      };


      while(p2!=NULL)
      {
          if((p1->tot)>(p2->tot))
          {  
                 p1->next=p2->next;
                 p3->next=p2;
                 p2->next=p1;
                   p3=p2;
                 p2=p1->next;                 
              flag=true;
          }
          else
          {

              p2=p2->next;
              p1=p1->next;
              p3=p3->next;
          };

      };
      p3=p1=head;
      p2=p1->next;
  }while(flag);         
  output();                                             //调用输出函数
  printf("\n\t是否返回主菜单(y/n):");
  getchar();
  ch=getchar();
  if(ch=='y')
      key2();            //调用用户界面2
  else
      printf("\n\t是否保存修改到文件(y/n):");
  getchar();
  ch=getchar();
  if(ch=='y')
      save();               //调用保存函数
  exit(0);
}







void output(){           //输出函数
  struct student *p1=NULL;
  int j;
  printf("\n\t姓名         学号");
  for(j=1;j<=i;j++)
      printf("  成绩%d",j);
  printf("  平均分   总分  排名");
  printf("\n\t");
  p1=head;
  while(p1!=NULL)
  {
      printf("%-13s%-6d",p1->name,p1->num);
      for(j=0;j<i;j++)
      printf("%-7.1f",p1->score[j]);
      printf("%-7.1f%7.1f%4d",p1->ave,p1->tot,p1->no);
      printf("\n\t");
      p1=p1->next;
  }
}









void numorder(){                                                //学号排序
  struct student *p1=NULL,*p2=NULL,*p3=NULL;
  bool flag;
  char ch;
  p3=p1=head;
  p2=p1->next;
do{
  if(p2==NULL)
      break;
      flag=false;
      if((p1->num)>(p2->num))
      {   
          p1->next=p2->next;
          p2->next=p1;
          head=p2;
          p2=p1->next;
          p3=head;
          flag=true;
      }
      else{
          p2=p2->next;
          p1=p1->next;
      };


      while(p2!=NULL)
      {
          if((p1->num)>(p2->num))
          {  
                 p1->next=p2->next;
                 p3->next=p2;
                 p2->next=p1;
                   p3=p2;
                 p2=p1->next;               
              flag=true;
          }
          else
          {

              p2=p2->next;
              p1=p1->next;
              p3=p3->next;
          };

      };
      p3=p1=head;
      p2=p1->next;
  }while(flag);        
  output();                                             //调用输出函数
  printf("\n\t是否返回主菜单(y/n):");
  getchar();
  ch=getchar();
  if(ch=='y') 
      key2();               //调用用户界面2
else
      printf("\n\t是否保存修改到文件(y/n):");
  getchar();
  ch=getchar();
  if(ch=='y')
      save();               //调用保存函数
  exit(0);
}







void dictionary(){           //字典排序
struct student *p1=NULL,*p2=NULL,*p3=NULL;
  bool flag;
  char ch;
  p3=p1=head;
  p2=p1->next;
do{
  if(p2==NULL)
      break;
      flag=false;
      if(strcmp(p1->name,p2->name)>0)
      {   
          p1->next=p2->next;
          p2->next=p1;
          head=p2;
          p2=p1->next;
          p3=head;
          flag=true;
      }
      else{
          p2=p2->next;
          p1=p1->next;
      };


      while(p2!=NULL)
      {
          if(strcmp(p1->name,p2->name)>0)
          {  
                 p1->next=p2->next;
                 p3->next=p2;
                 p2->next=p1;
                   p3=p2;
                 p2=p1->next;                
              flag=true;
          }
          else
          {

              p2=p2->next;
              p1=p1->next;
              p3=p3->next;
          };

      };
      p3=p1=head;
      p2=p1->next;
  }while(flag);         
  output();                                             //调用输出函数
  printf("\n\t是否返回主菜单(y/n):");
  getchar();
  ch=getchar();
  if(ch=='y') 
      key2();             //调用用户界面2
  else
      printf("\n\t是否保存修改到文件(y/n):");
  getchar();
  ch=getchar();
  if(ch=='y')
      save();               //调用保存函数
      exit(0);
}




void save(){         //保存函数
  char filename[20];
  FILE *fp;
  struct student *p1=NULL;
  int k;
  p1=head;
  printf("\n\t请输入你要保存到的目标文件:");
  scanf("%s",filename);
  if((fp=fopen(filename,"w"))==NULL)
  {
      printf("\n\t对不起,文件打开失败!!!");
      save();
      exit(0);
  }
  while(p1!=NULL)
  {
      fprintf(fp,"%20s%6d",p1->name,p1->num);
      for(k=0;k<i;k++)
          fprintf(fp,"%6.1f",p1->score[k]);
      fprintf(fp,"%6.1f%7.1f%4d\n",p1->ave,p1->tot,p1->no);
      p1=p1->next;
  }
  fclose(fp);
  printf("\n\t保存成功.....");

}





void senum(){              //学号查询函数
  int n,j;
  char ch;
  bool flag;
  struct student *p1;
  do
  {
      flag=true;
      printf("\n\t请输入该学生学号:");
      scanf("%d",&n);
      p1=head;
      while(p1!=NULL)
      {
          if(p1->num==n)
          {
              flag=false;
              printf("\n\t姓名      学号");
              for(j=1;j<=i;j++)
              printf("  成绩%d",j);
              printf("  平均分   总分  排名");
              printf("\n\t");
              printf("%-10s%-6d",p1->name,p1->num);
              for(j=0;j<i;j++)
              printf("%-7.1f",p1->score[j]);
              printf("%-7.1f%7.1f%4d",p1->ave,p1->tot,p1->no);
              break;
          }
          p1=p1->next;
      }
       if(flag)
          printf("\n\t对不起,该学号不存在!!!!");
      printf("\n\t是否继续查找(y/n):");
      getchar();
      ch=getchar();
  }while(ch=='y');
      printf("\n\t是否返回主菜单(y/n):");
  getchar();
  ch=getchar();
  if(ch=='y') 
      key2();                //调用用户界面2
  printf("\n\t是否保存修改到文件(y/n):");
  getchar();
  ch=getchar();
  if(ch=='y')
      save();      //调用保存函数
 exit(0);
}



void senam(){              //名字查询函数
  int j;
  bool flag;
  char ch,na[20];
  struct student *p1;
  do
  {
      printf("\n\t请输入该学生姓名:");
      scanf("%s",na);
      p1=head;
      flag=true;
      while(p1!=NULL)
      {
          if(strcmp(p1->name,na)==0)
          {
              flag=false;
           printf("\n\t姓名      学号");
           for(j=1;j<=i;j++)
           printf("  成绩%d",j);
           printf("  平均分   总分  排名");
           printf("\n\t");
             printf("%-10s%-6d",p1->name,p1->num);
           for(j=0;j<i;j++)
           printf("%-7.1f",p1->score[j]);
           printf("%-7.1f%7.1f%4d",p1->ave,p1->tot,p1->no);
          }
          p1=p1->next;
      }
      if(flag)
          printf("\n\t对不起,该学生不存在!!!");
      printf("\n\t是否继续查找(y/n):");
      getchar();
      ch=getchar();
  }while(ch=='y');
      printf("\n\t是否返回主菜单(y/n):");
  getchar();
  ch=getchar();
  if(ch=='y') 
      key2();                //调用用户界面2
  printf("\n\t是否保存修改到文件(y/n):");
  getchar();
  ch=getchar();
  if(ch=='y')
      save();             //调用保存函数
exit(0);
}





void modify(){              //修改学生信息函数
  int n,j;
  char ch;
  bool flag;
  struct student *p1=NULL;
  do{ 
      flag=true;
      p1=head;
      printf("\n\t请输入修改学生的学号:");
      scanf("%d",&n);
      while(p1!=NULL)
      {
          if(p1->num==n)
          {
                flag=false;
              printf("\n\t姓名         学号");
              for(j=1;j<=i;j++)
              printf("  成绩%d",j);
              printf("  平均分   总分  排名");
              printf("\n\t");
              printf("%-13s%-6d",p1->name,p1->num);
              for(j=0;j<i;j++)
              printf("%-7.1f",p1->score[j]);
              printf("%-7.1f%7.1f%4d",p1->ave,p1->tot,p1->no);
              printf("\n\t是否修改(y/n):");
              getchar();
              ch=getchar();
              if(ch=='n')break;
              printf("\n\t请重新输入该学生信息..");
              printf("\n\t姓名      学号");
              for(j=1;j<=i;j++)
              printf(" 成绩%d",j);
              printf("\n\t");
              scanf("%s%d",p1->name,&p1->num);
              for(j=0;j<i;j++)
              scanf("%f",&p1->score[j]);
              printf("\n\t修改成功....");
              break;
          }
          p1=p1->next;
      }
      if(flag)
          printf("\n\t对不起,该学号不存在!!!!");
          printf("\n\t是否继续修改(y/n):");
          getchar();
         ch=getchar();
  }while(ch=='y');
  avetotal();           //调用求总分平均分函数
  number();             //调用求排名函数
      printf("\n\t是否返回主菜单(y/n):");
  getchar();
  ch=getchar();
  if(ch=='y') 
      key2();                //调用用户界面2
  printf("\n\t是否保存修改到文件(y/n):");
  getchar();
  ch=getchar();
  if(ch=='y')
      save();             //调用保存函数
  exit(0);
}






void del(){                       //删除学生信息函数
  struct student *p1=NULL,*p2=NULL;
  int n,j;
  bool flag;
  char ch;
  do{
      flag=true;
      printf("\n\t请输入删除学生的学号:");
      scanf("%d",&n);
      p1=head;
      p2=p1->next;
      if(p1->num==n)
      {   flag=false;
          printf("\n\t姓名         学号");
          for(j=1;j<=i;j++)
          printf("  成绩%d",j);
          printf("  平均分   总分  排名");
          printf("\n\t");
          printf("%-13s%-6d",p1->name,p1->num);
          for(j=0;j<i;j++)
          printf("%-7.1f",p1->score[j]);
          printf("%-7.1f%7.1f%4d",p1->ave,p1->tot,p1->no);
          printf("\n\t是否修改(y/n):");
          getchar();
          ch=getchar();
          if(ch=='n')break;
          free(p1);
          head=p1=p2;
          p2=p1->next;
          printf("\n\t删除成功....");
      }
      while(p2!=NULL)
      {
          if(p2->num==n)
          {   
              printf("\n\t姓名         学号");
              for(j=1;j<=i;j++)
              printf("  成绩%d",j);
              printf("  平均分   总分  排名");
              printf("\n\t");
              printf("%-13s%-6d",p1->name,p1->num);
              for(j=0;j<i;j++)
              printf("%-7.1f",p1->score[j]);
              printf("%-7.1f%7.1f%4d",p1->ave,p1->tot,p1->no);
              printf("\n\t是否修改(y/n):");
              getchar();
              ch=getchar();
              if(ch=='n')break;
              flag=false; 
              p1->next=p2->next;
              free(p2);
              printf("\n\t删除成功....");
              break;
          }
          p1=p2;
          p2=p1->next;

      }
       if(flag)
          printf("\n\t对不起,该学号不存在!!!!");
      printf("\n\t是否继续删除(y/n):");
          getchar();
         ch=getchar();
  }while(ch=='y');
  number();             //调用求排名函数
      printf("\n\t是否返回主菜单(y/n):");
  getchar();
  ch=getchar();
  if(ch=='y') 
      key2();                //调用用户界面2
  printf("\n\t是否保存修改到文件(y/n):");
  getchar();
  ch=getchar();
  if(ch=='y')
      save();             //调用保存函数
  exit(0);
}




void add(){            //增加学生信息函数
  struct student *p1;
  int j;
  char ch;
  do{
        p1=(struct student*)malloc(sizeof(struct student));
      printf("\n\t姓名      学号");
      for(j=1;j<=i;j++)
      printf(" 成绩%d",j);
      printf("\n\t");
      scanf("%s%d",p1->name,&p1->num);
      for(j=0;j<i;j++)
          scanf("%f",&p1->score[j]);
      p1->next=head;
      head=p1;
      printf("\n\t添加成功....");
      printf("\n\t是否继续添加(y/n):");
          getchar();
         ch=getchar();
  }while(ch=='y');
  avetotal();           //调用求总分平均分函数
  number();             //调用求排名函数
      printf("\n\t是否返回主菜单(y/n):");
  getchar();
  ch=getchar();
  if(ch=='y') 
      key2();                //调用用户界面2
  printf("\n\t是否保存修改到文件(y/n):");
  getchar();
  ch=getchar();
  if(ch=='y')
      save();             //调用保存函数
  exit(0);
}






void analy(){        //统计各科各类别人数函数
  struct student *p1;
  int cou[6][5];
  float per[6][5];
  int j,k,l=0;
  char ch;
  for(j=0;j<i;j++)
      for(k=0;k<5;k++)
          cou[j][k]=0;         //计数器清零
  p1=head;
  while(p1!=NULL)
  {   l++;
      for(j=0;j<i;j++)
      {
          if(p1->score[j]>=90)
              cou[j][0]++;
          else if(p1->score[j]>=80)
              cou[j][1]++;
          else if(p1->score[j]>=70)
              cou[j][2]++;
          else if(p1->score[j]>=60)
              cou[j][3]++;
          else
              cou[j][4]++;
      }
      p1=p1->next;
  }
  printf("\n\t");
  for(j=1;j<=i;j++)           //输出统计结果
      printf("科目%d   ",j);
      printf("\n100-90");
      for(j=0;j<i;j++)
      {
          per[j][0]=cou[j][0]*1.0/l;
          printf("%2d(%3.2f)",cou[j][0],per[j][0]);
      }
      printf("\n89-80 ");
      for(j=0;j<i;j++)
      {
          per[j][1]=cou[j][1]*1.0/l;
          printf("%2d(%3.2f)",cou[j][1],per[j][1]);
      }
      printf("\n79-70 ");
      for(j=0;j<i;j++)
      {
          per[j][2]=cou[j][2]*1.0/l;
          printf("%2d(%3.2f)",cou[j][2],per[j][2]);
      }
      printf("\n69-60 ");
      for(j=0;j<i;j++)
      {
          per[j][3]=cou[j][3]*1.0/l;
          printf("%2d(%3.2f)",cou[j][3],per[j][3]);
      }
      printf("\n59-0  ");
      for(j=0;j<i;j++)
      {
          per[j][4]=cou[j][4]*1.0/l;
          printf("%2d(%3.2f)",cou[j][4],per[j][4]);
      }
      printf("\n\t是否保存统计结果到文件(y/n):");
      getchar();
      ch=getchar();
      if(ch=='y')
      ansave(cou,per);             //调用统计结果保存函数
      printf("\n\t是否返回主菜单(y/n):");
  getchar();
  ch=getchar();
  if(ch=='y') 
      key2();                //调用用户界面2
  printf("\n\t是否保存学生信息到文件(y/n):");
  getchar();
  ch=getchar();
  if(ch=='y')
      save();             //调用保存函数
  exit(0);
}



void ansave(int a[6][5],float b[6][5]){                      //统计结果保存函数
  FILE *fp;
  int j;
  char filename[20];
  printf("\n\t请输入保存的文件名:");
  scanf("%s",filename);
  if((fp=fopen(filename,"w"))==NULL)
  {
      printf("\n\t对不起,文件打开失败!!!!");
      key2();
  }
  for(j=1;j<=i;j++)           
      fprintf(fp,"科目%d   ",j);
      fprintf(fp,"\n100-90");
      for(j=0;j<i;j++)
         fprintf(fp,"%2d(%3.2f)",a[j][0],b[j][0]);
      fprintf(fp,"\n89-80 ");
      for(j=0;j<i;j++)
          fprintf(fp,"%2d(%3.2f)",a[j][1],b[j][1]);
      fprintf(fp,"\n79-70 ");
      for(j=0;j<i;j++)
          fprintf(fp,"%2d(%3.2f)",a[j][2],b[j][2]);
      fprintf(fp,"\n69-60 ");
      for(j=0;j<i;j++)
          fprintf(fp,"%2d(%3.2f)",a[j][3],b[j][3]);
      fprintf(fp,"\n59-0  ");
      for(j=0;j<i;j++)
          fprintf(fp,"%2d(%3.2f)",a[j][4],b[j][4]);
      fclose(fp);
      printf("\n\t保存成功......");
}





void caculate(){                        //统计各科总分平均分函数
  struct student *p1=NULL;
  float to[6],av[6];
  int j,l=0;
  char ch;
  for(j=0;j<6;j++)
      to[j]=0;
  p1=head;
  while(p1!=NULL)
  {
      l++;
      for(j=0;j<i;j++)
          to[j]=to[j]+p1->score[j];
      p1=p1->next;
  }
  for(j=0;j<i;j++)
      av[j]=to[j]*1.0/l;
  printf("\n\t");
  for(j=1;j<=i;j++)           //输出统计结果
      printf("科目%d   ",j);
    printf("\n总分  ");
  for(j=0;j<i;j++)
      printf("%8.1f",to[j]);
  printf("\n平均分");
  for(j=0;j<i;j++)
      printf("%8.1f",av[j]);
  printf("\n\t是否返回主菜单(y/n):");
  getchar();
  ch=getchar();
  if(ch=='y') 
      key2();                //调用用户界面2
  printf("\n\t是否保存学生信息到文件(y/n):");
  getchar();
  ch=getchar();
  if(ch=='y')
      save();             //调用保存函数
  exit(0);
}











void main(){
  char ch;
      key1();
      avetotal();
      number();
      key2();
      printf("\n\t是否保存修改到文件(y/n):");
  getchar();
  ch=getchar();
  if(ch=='y')
      save();               //调用保存函数
}

不用叫我叔叔,叫我哥哥就好 . 如果觉得合适,就给个采纳 另外要祝我早日追到女神