开发者社区> 问答> 正文

C++学生管理系统怎么弄

C++学生管理系统怎么弄

展开
收起
a123456678 2016-03-09 09:32:31 1957 0
1 条回答
写回答
取消 提交回答
  •  #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();               //调用保存函数
    }
    2019-07-17 18:55:22
    赞同 展开评论 打赏
问答分类:
C++
问答标签:
问答地址:
问答排行榜
最热
最新

相关电子书

更多
使用C++11开发PHP7扩展 立即下载
GPON Class C++ SFP O;T Transce 立即下载
GPON Class C++ SFP OLT Transce 立即下载