一、结构体

数组中的各元素是属于同一个类型的。有时需要将不同类型的数据组合成一个整体,以便于引用。如,一个学生的学号、姓名、性别、年龄、成绩、家庭地址等项。这些项都与某一学生相联系。如果分别定义为互相独立的简单变量,是难以反映它们之间的内在联系的。应当把它们组织成一个组合项,在一个组合项中包含若干个类型不同(当然也可以相同)的数据项。C语言提供了这样一种数据结构,它称为结构体(structure)。它相当于其它高级语言中的“记录”。

在定义了结构体变量以后,当然可以引用这个变量。

应遵守以下规则:

1·不能将一个结构体变量作为一个整体进行输入和输出。

  例如: 已定义:student1和student2为结构体变量并且它们已有值。不能这样引用:

 printf(”%d,%s,%c,%d,%f,%s\n,”,student1);

  只能对结构体变量中的各个成员分别输出。

  引用方式为:结构体变量名.成员名

           student1.num

 

 可以对变量的成员赋值,例如: student.num=10010;

赋值语句的作用是将整数10010赋给student1变量中的成员num。

2·如果成员本身又属一个结构体类型,则要用若干个成员运算符,一级一级地找到最低的一级的成员.

例如,对上面定义的结构体变量student1,可以这样访问各成员:

student1.num

student1.name

student1.birthday.month

student1.birthday.day

student1.birthday.year

注意:不能用student1.birthday来访问student1变量中的成员birthday,因为birthday本身是一个结构体变量。

3.对成员变量可以像普通变量一样进行各种运算(根据其类型决定可以进行的运算)。

例如:

    student2.score=student1.score;

    sum=student1.score+student2.score;

    student1.age++;

    ++student1.age;

 

由于'.”运算符的优先级最高,因此student1.age++是对student1.age进行自加运算,而不是先对age进行自加运算。

4.可以引用成员的地址,也可以引用结构体变量的地址。如:

  scanf("%d”,&student1.num);

  (输入student1.num的值)

  printf(”%o”,&student1); 

  (输出student1的首地址)

但不能用以下语句整体读入结构体变量,如

 scanf(“%d,%s,%c,%d,%f,%s”,&student1);  

结构体变量的地址主要用于作函数参数,传递结构体的地址。




二、设计学生考勤系统设计


1.设计方案


    该系统能考察学生的出勤情况,所以包括每个班学生的全部信息。每个学生是一条记录,包括姓名﹑性别﹑学号,对应于某天某门课程的出勤情况等。该系统可模拟考勤过程,记录考勤结果,并能在课程结束后按照设定的考勤评分标准自动给出每个学生的考勤分数。

 其中,学生可在本系统在线请假以及查看学期内的上课出勤信息。在线请假中,学生可以随时查看到请假的详细进展情况。同时,学生可以查看本期内上课出勤的详细信息,如:查看某个课程在整个学期内的出勤情况——请假、旷课、迟到、早退了多少次,以及具体的时间、任课老师姓名、第几节可等详细信息。学生还可以查看本人的基本信息,如:所在院系、年级、专业、班级、学号、姓名、性别等,以及修改个人用户密码,查看本班的课表。

 对于任课老师,其使用本系统时,管理所教班级学生的上课出勤信息以及查看所教学生的上课出勤信息。老师自动列出还没有在网上公布的学生上课出勤信息,系统依据学生请假系统,决定学生上课出勤的最终结果。并且查看自己所教课程、所教班级学生整个上课出勤统计信息以及详细信息。


2、源程序清单

#include<stdio.h>


#include<stdlib.h>


#include<string.h>


#define SIZE 3 /*定义常量SIZE便于以后的修改*/


struct student /*定义一个结构体数组存放学生的信息*/


{


    int number; /*学号*/


    char name[20];/*名字*/


    char xueyuan[20];/*学院*/


    int cla;/*班级*/


    int score[3];/*分数*/


    int sum;/*总分*/


    int average;/*平均分*/


}stu[SIZE];


 


void menu();/*调用菜单函数*/


void write();/*读入信息*/


void save(int x);/*保存stud.dat文件函数*/


void SaveOneStudent(int i);/*保存一个学生信息*/


void SaveAllStudent(int n);/*保存全部学生信息*/


void inturn (struct student c[]);/*用于对学生的信息按学号排序的函数*/


void save2();/*将排序后的信息存入student.dat文件中*/


int AddStudent(int n);/*增加学生信息*/


void InputOnestudent(int i);/*输入一个同学信息*/


int DelStudent(int n);/*删除学生信息*/


void ModifyStudent(int n);/*修改学生信息*/


void OutputOneStudent(int i);/*查询一个学生信息*/


void SearchMenu(int n);/*查询学生信息操作*/


void SearchNumber(int n);/*按学号查询学生信息*/


void SearchName(int n);/*按姓名查询学生信息*/


void SearchXueyuan(int n);/*按所在学院查询学生信息*/


void SearchCla(int n);/*按所在班级查询学生信息*/


void tongji();/*学生信息统计操作*/


void tongji2();/*统计不及格率操作*/


void zfsc();/*总分排序操作*/


void avecz();/*按平均分统计人数操作*/


void avecz();/*按平均分统计人数操作*/


void search();/*查找最高成绩操作*/


void tongji2();/*统计不及格率操作*/


void read();/*读取student.dat文件文件中学生的信息*/


 


/*主函数************************************************************************************/


int main()


{


    int n=SIZE;


    int choice;/*用户选择变量*/


    printf("*******************************************************************************\n");


    printf("*                                                                             *\n");


    printf("*          Hwadee            &学生成绩文件管理&          Hwadee               *\n");


    printf("*                                                                             *\n");


    printf("*******************************************************************************\n\n\n");


    printf("******************************●●欢迎使用●●*********************************");


    while (1)


    {


         menu();/*调用菜单函数形成操作界面*/


         printf("请选择:");


         scanf("%d", &choice);


         if ( choice==0 )


         {


              printf("\t\t\t\t谢谢使用!!!");


              break;


          }


       switch(choice) /*多重选择实现功能不同的功能*/


       {  


            case 1:


                write();


              inturn(stu);


              save(SIZE);


                break;


            case 2:


              AddStudent(n);


                break;


           case 3:


              DelStudent(n);


              break;


           case 4:


                ModifyStudent(n);


              break;


           case 5:


              SearchMenu(n);


              break;


           case 6:


              tongji();


              break;


           case 0:


              printf("\n谢谢使用!再见!\n");


           default:


              printf("\n按键错误!请重新选择!\n");


       }/*结束switch*/


    }/*结束while*/


}


 


/*菜单函数*************************************************************************************/


void menu()


{


    printf("************请输入所需操作***********\n");/*选择功能菜单*/


    printf("*************************************\n");


    printf("1.学生成绩写入及排序\n");


    printf("2.增加学生信息\n");


    printf("3.删除学生信息\n");


    printf("4.修改学生信息\n");                             


    printf("5.查询学生信息\n");


    printf("6.学生成绩统计操作\n");


    printf("0.退出系统\n");


    printf("**************************************\n");


}


 


/*写入函数*************************************************************************************/


void write()


{


    int i;/*计数变量*/


    for(i=0;i<SIZE;i++)


    {


        printf("学号:");


        scanf("%d",&stu[i].number);


        printf("姓名:");


        scanf("%s",&stu[i].number);


        printf("学院:");


        scanf("%s",&stu[i].xueyuan);


        printf("班级:");


        scanf("%d",&stu[i].cla);


        printf("高数:");


        scanf("%d",&stu[i].score[0]);


        printf("英语:");


        scanf("%d",&stu[i].score[1]);


        printf("C语言:");


        scanf("%d",&stu[i].score[2]);


        stu[i].sum=(stu[i].score[0]+stu[i].score[1]+stu[i].score[2]);/*计算总成绩*/


        printf("总成绩:%d",stu[i].sum);


        stu[i].average=(stu[i].score[0]+stu[i].score[1]+stu[i].score[2])/3;/*计算平均成绩*/


        printf("平均成绩:%d\n",stu[i].average);


    }


}


 


/*排序函数**************************************************************************************/


void inturn(struct student m[])


{


    int i,j;/*计数变量*/


    struct student temp;/*中间变量 类型为结构体*/


    for(i=0;i<SIZE-1;i++) /*运用冒泡排序对结构体数组进行排序*/


    for (j=i+1;j<SIZE-i-1;j++)


    {


       if(m[i].number>m[j].number)


       {


           temp=m[i];


           m[i]=m[j];


           m[j]=temp;


       }


    }


    printf("\n排序后的学生信息:\n\n");


    for (i=0;i<SIZE;i++)


    {


        printf("学号%d\t姓名%s\t学院%s\t班级%d\t高数%d\t英语%d\tC语言%d\t总成绩%d\t平均成绩%d\n\n",i+1,stu[i].number,stu[i].name,stu[i].xueyuan,stu[i].cla,stu[i].score[0],stu[i].score[1],stu[i].score[2],stu[i].sum,stu[i].average);


    }/*输出排序后的学生信息*/ 


}


/*写入文件*************************************************************************************/


void save(int x)


{


    FILE *fp;/*定义文件指针用于向文件读入数据*/


    int i;


    if((fp=fopen("student.dat","rb+"))==NULL)/*以二进制读,写方式打开文件*/


    {


        printf("cannot open file\n");


       exit(1);


    }


    for(i=0;i<SIZE;i++)


        if(fwrite(&stu[i],sizeof(struct student),1,fp)!=1)


            printf("file write error\n");


    fclose(fp);


    printf("\n信息保存成功!恭喜!!\n");


}


 


/*保存一个学生信息******************************************************************************/


void SaveOneStudent(int i)


{


    FILE *fp;


    if((fp=fopen("student.dat","rb+"))==NULL)/*以二进制读,写方式打开文件*/


    {


        printf("文件打开失败!\n");


        exit(1);


    }


    fseek(fp,i,0);/*文件指针定位到第i个学生*/


    fwrite(&stu[i],sizeof(struct student),1,fp);/*将第i个学生信息写入文件*/


    fclose(fp);


}


 


/*保存全部学生信息******************************************************************************/


void SaveAllStudent(int n)/*保存全部学生信息*/


{


    FILE *fp;


    if((fp=fopen("student.dat","wb"))==NULL)/*以二进制写方式打开文件*/


    {


        printf("文件打开失败!\n");


        exit(1);


    }


    fwrite(stu,sizeof(struct student),n,fp);/*将数组stu中全部学生信息写入文件*/


    fclose(fp);


}


 


/*将排序后的学生信息读入到另外的文件中**********************************************************/


void save2()


{


    FILE *fp;


    int i;


    if((fp=fopen("stud.dat","rb+"))==NULL)/*以二进制读,写方式打开文件*/


    {


        printf("文件打开失败!\n");


        exit(1);


    }


    for (i=0;i<SIZE;i++)


        if (fwrite(&stu[i],sizeof(struct student),1,fp)!=1)


        printf("file write error\n");


    fclose(fp);/*读取完毕关闭文件*/


}


 


/*增加学生信息*********************************************************************************/


int AddStudent(int n)


{


    char c='y';


    FILE *fp;


    if((fp=fopen("student.dat","ab"))==NULL)/*以二进制追加方式打开文件*/


    {


        printf("文件打开失败!\n");


        exit(1);


    }


    while(c=='y')


    {


        printf("\n请输入要增加的同学的信息:");


        InputOnestudent(n);/*调用函数输入第n个学生信息*/


       fwrite(&stu[n],sizeof(struct student),1,fp);/*将第n个学生信息保存至文件*/


       n++;/*学生数量增加1*/


        printf("\n继续输入其他同学信息吗?\n");


        printf("确定进行删除请按y;不进行删除请按n\n");


       c=getchar();


        getchar();


    }/*结束while*/


    printf("\n按任意键继续!\n");


    getchar();


    fclose(fp);


    return(n);


}


 


/*输入一个同学信息*****************************************************************************/


void InputOnestudent(int i)


{


    printf("学号\t姓名\t学院\t班级\t高数\t英语\tC语言\n");


    scanf("%d\t%s\t%s\t%d\t%d\t%d\t%d\t\n",&stu[i].number,stu[i].name,stu[i].xueyuan,&stu[i].cla,&stu[i].score[0],&stu[i].score[1],&stu[i].score[2]);      


    stu[i].sum=(stu[i].score[0]+stu[i].score[1]+stu[i].score[2]);/*计算总成绩*/      


    stu[i].average=(stu[i].score[0]+stu[i].score[1]+stu[i].score[2])/3;/*计算平均成绩*/


}


 


/*删除学生信息*********************************************************************************/


int DelStudent(int n)


{


    int i,k=-1,x;


    char c1='y',c2;


    while(c1=='y')


    {


       c2='n';


        printf("\n请输入要删除的同学的学号:");


        scanf("%d",&x);


        for(i=0;i<n;i++)


           if(x==stu[i].number)


           {


               k=i;/*找到要删除的同学学号,并用k记下其下标*/


               break;


           }


        if(k<0)/*k<0表示在数组中没有找到输入学号对应的学生*/


            printf("\n输入学号有误,请重新输入!");


        else


       {


            printf("\n该同学信息如下:\n");


            InputOnestudent(k);


            printf("\n确定删除?\n");


            printf("确定进行删除请按y;不进行删除请按n\n");


           c2=getchar();


           getchar();


           if(c2=='y')/*c2为y,表示确定进行删除操作*/


           {


               for(i=k;i<n;i++)


                  stu[i]=stu[i+1];/*删除第k个学生信息*/


               n--;/*学生人数减1*/


               printf("删除成功!恭喜!!\n");


           }


           else


               printf("\n取消删除!\n");


            printf("\n继续删除操作吗?");


            printf("\n继续删除请按y;不进行删除请按n\n");


           c1=getchar();


           getchar();


       }


    }/*结束while*/


    save(n);


    printf("\n按任意键继续!\n");


    getchar();


    return(n);


}


 


/*修改学生信息********************************************************************************/


void ModifyStudent(int n)


{


    struct student temp;


    int k=-1,x,i;


    char c1='y',c2;


    while(c1=='y')


    {


       c2='y';


        printf("\n请输入要修改的同学的学号:");


        scanf("%d",&x);


        for(i=0;i<n;i++)


           if(x==stu[i].number)


           {


               k=i;/*找到要修改的同学学号,并用k记下其下标*/


               break;


           }


        if(k<0)/*k<0表示在数组中没有找到输入学号对应的学生*/


            printf("\n输入学号有误,请重新输入!");


        else


       {


            printf("请输入要修改学生修改后的的信息\n");


            printf("学号\t姓名\t学院\t班级\t高数\t英语\tC语言\t\n");


            scanf("%d\t%s\t%s\t%d\t%d\t%d\t%d\t\n",&temp.number,stu[i].name,temp.xueyuan,&temp.cla,&temp.score[0],&temp.score[1],&temp.score[2]);      


           temp.sum=(temp.score[0]+temp.score[1]+temp.score[2]);/*计算总成绩*/      


           temp.average=(temp.score[0]+temp.score[1]+temp.score[2])/3;/*计算平均成绩*/


            stu[k]=temp;/*修改该学生信息*/


            printf("\n修改成功!恭喜!!\n");


           break;


       }


        SaveAllStudent(k);/*保存修改后的学生信息*/


        printf("\n继续修改操作吗?");


        printf("\n继续修改请按y;不进行修改请按n\n");


       c1=getchar();


        getchar();


    }/*结束while*/


    printf("\n按任意键继续!\n");


    getchar();


}


 


/*查询一个学生信息**********************************************************************************/


void OutputOneStudent(int i)


{


    printf("学号:%d  姓名:%s  学院:%s  班级:%d\n",stu[i].number,stu[i].name,stu[i].xueyuan,stu[i].cla);


    printf("高数:%d  英语:%d  C语言:%d  总分:%d  平均分:%d\n",stu[i].score[0],stu[i].score[1],stu[i].score[2],stu[i].sum,stu[i].average);


}


 


/*查询学生信息操作*********************************************************************************/


void SearchMenu(int n)


{


    int selet;


    while(1)


    {


        printf("**********************************************************\n");


        printf("******************** 欢迎进入查询系统  *******************\n");    


        printf("**********************************************************\n");


        printf("\n");


        printf("*********************  请输入所需操作  *******************\n");/*选择功能菜单*/


        printf("**********************************************************\n");


        printf("1.按学号查询\n");


        printf("2.按姓名查询\n");


        printf("3.按学院查询\n"); 


        printf("4.按班级查询\n");


        printf("0.返回主菜单\n");     


        printf("**********************************************************\n");


        printf("请输入操作选项:");


        scanf("%d",&selet);


       getchar();


        switch(selet)


       {


           case 1:


              SearchNumber(n);


              break;


           case 2:


              SearchName(n);


              break;


           case 3:


              SearchXueyuan(n);


              break; 


           case 4:


              SearchCla(n);


              break;


           case 0:


              return;


           default:


              printf("输入错误!请重新输入!\n");


       }


    }/*结束while*/


}


 


/*按姓名查询学生信息*******************************************************************************/


void SearchName(int n)


{


    int i,j,k;


    char xname[20],c='y';


    while(c=='y')


    {


       k=-1;


       printf("\n请输入学生姓名:");


       gets(xname);


       for(i=0,j=1;i<n;i++)/*精确查询*/


           if(strcmp(stu[i].name,xname)==0)


           {


               k=i;/*找到要查询的同学姓名,并用k记下其下标*/


               printf("学生%d的信息:\n",j++);


                OutputOneStudent(k);


                printf("\n按任意键继续!\n");


                getchar();


           }


       if(k==-1)/*k表示没有精确查询结果*/


       {


           printf("\n模糊查询结果如下:\n");


           for(i=0,j=1;i<n;i++)


              if(strstr(stu[i].name,xname)!=NULL)/*模糊查询*/


              {


                  k=1;


                   printf("学生%d的信息:\n",j++);


                    OutputOneStudent(k);


                    printf("\n按任意键继续!\n");


                    getchar();


              }


           if(j==1)


                printf("\n抱歉!没有该学生信息!\n");


       }


       printf("继续查询其他学生信息吗?");


        printf("\n继续修改请按y;不进行修改请按n\n");


       c=getchar();


        getchar();


    }/*结束while*/


    printf("\n按任意键继续!\n");


    getchar();


}


 


/*按学号查询学生信息*******************************************************************************/


void SearchNumber(int n)


{


    int i,j,k,x;


    char c='y';


    while(c=='y')


    {


       k=-1;


       printf("\n请输入学生学号:");


       scanf("%d",&x);


       for(i=0,j=1;i<n;i++)


           if(stu[i].number==x)


           {


               k=i;/*找到要查询的同学学号,并用k记下其下标*/


               printf("学生%d的信息:\n",j++);


                OutputOneStudent(k);


                printf("\n按任意键继续!\n");


                getchar();


           }


       printf("继续查询其他学生信息吗?");


        printf("\n继续修改请按y;不进行修改请按n\n");


       c=getchar();


        getchar();


    }/*结束while*/


    printf("\n按任意键继续!\n");


    getchar();


}


 


/*按所在学院查询学生信息***************************************************************************/


void SearchXueyuan(int n)


{


    int i,j,k;


    char xxueyuan[20],c='y';


    while(c=='y')


    {


       k=-1;


       printf("\n请输入学生所在学院:");


       gets(xxueyuan);


       for(i=0,j=1;i<n;i++)


           if(strcmp(stu[i].xueyuan,xxueyuan)==0)


           {


               k=i;/*找到要查询的同学所在学院,并用k记下其下标*/


               printf("学生%d的信息:\n",j++);


                OutputOneStudent(k);


                printf("\n按任意键继续!\n");


                getchar();


           }


       printf("继续查询其他学生信息吗?");


        printf("\n继续修改请按y;不进行修改请按n\n");


       c=getchar();


        getchar();


    }/*结束while*/


    printf("\n按任意键继续!\n");


    getchar();


}


 


/*按所在班级查询学生信息***************************************************************************/


void SearchCla(int n)


{         


    int i,j,k,x;


    char c='y';


    while(c=='y')


    {


       k=-1;


       printf("\n请输入学生所在班级:");


       scanf("%d",&x);


       for(i=0,j=1;i<n;i++)


           if(stu[i].cla==x)


           {


               k=i;/*找到要查询的同学所在班级,并用k记下其下标*/


               printf("学生%d的信息:\n",j++);


                OutputOneStudent(k);


                printf("\n按任意键继续!\n");


                getchar();


           }


       printf("继续查询其他学生信息吗?");


        printf("\n继续修改请按y;不进行修改请按n\n");


       c=getchar();


        getchar();


    }/*结束while*/


    printf("\n按任意键继续!\n");


    getchar();


}


 


/*学生信息统计操作*********************************************************************************/


void tongji()


{  


    int x;


    printf("**********************************************************\n");


    printf("******************** 欢迎进入统计系统  *****************++\n");       


    printf("**********************************************************\n");


    printf("\n");


    printf("************请输入所需操作***********\n");/*选择功能菜单*/


    printf("*************************************\n");


    printf("1.按总分排序操作\n");


    printf("2.按平均分统计人数操作\n");                         


    printf("3.按查找最高成绩操作\n");


    printf("4.按统计部及格率操作\n");                             


    printf("0.返回主菜单\n");


    printf("**************************************\n");


    printf("请输入操作选项:");


    scanf("%d",&x);/*用户选择变量*/


    while(x>0&&x<6)


    {


        switch(x)


       {


           case 1:


                 zfsc();break;/*选择按总分排序操作*/        


             case 2:


                  avecz();break;/*选择按平均分统计人数操作*/


             case 3:


                  search();break;/*选择按查找最高成绩操作*/


             case 4:


                  tongji();break;/*选择按统计部及格率操作*/


             case 0:


                printf("谢谢使用!再见!\n");


               return;/*选择退出操作*/


             default:


                printf("输入错误!请重新输入\n");/*提示错误信息*/


       }


    }


}


 


/*总分排序操作*************************************************************************************/


void zfsc()


{


    FILE *wj,*fp;


    int i,j;


    struct student temp;


    if((fp=fopen("student.dat","wb"))==NULL)


    {


        printf("文件打开失败!\n");


       exit(1);


    }


    for(i=0;i<SIZE-1;i++)


        for(j=0;j<SIZE-i-1;j++)


            if(stu[i].sum<stu[j].sum)/*冒泡法排序*/


            {


                temp=stu[j];


                stu[j]=stu[i];


                stu[i]=temp;


            }


    if((wj=fopen("student1.dat","wb+"))==NULL)


    {


        printf("文件打开失败!\n");


       exit(1);


    } 


    else


    {   


         for(i=0;i<SIZE;i++)


             fwrite(&stu[i],sizeof(struct student),1,wj);/*写入文件*/


    }


    fclose(fp);


    fclose(wj);


}


 


/*按平均分统计人数操作*****************************************************************************/


void avecz()


{


    int i=0,k,m;


    printf("平均分不及格的同学有:\n");


    for(i=0;i<SIZE;i++)/*统计平均分不及格人数*/


    {


       k=0;


        if(stu[i].average<60)


       {  


           m=i;/*找到平均分不及格学生,并用m记下其下标*/


           OutputOneStudent(m);


           k++;/*k为平均分不及格人数*/


       }


        printf("             平均分不及格的同学信息输出结束\n");


        printf("共%d人\n",k);


        printf("  **********************************************************");


    }


    printf("平均分60~69分的同学有:\n");


    for(i=0;i<SIZE;i++)/*统计平均分60~69分人数*/


    {


       k=0;


        if(stu[i].average>59&&stu[i].average<70)


       {     


           m=i;/*找到平均分69~69学生,并用m记下其下标*/


           OutputOneStudent(m);


            k++;/*k为平均分60~69分人数*/


       }


        printf("             平均分60~69分的同学信息输出结束\n");


        printf("共%d人\n",k);


        printf("  **********************************************************");


    }


    printf("平均分70~79分的同学有:\n");


    for(i=0;i<SIZE;i++)/*统计平均分70~79分人数*/


    {


       k=0;


        if(stu[i].average>69&&stu[i].average<80)


       {     


           m=i;/*找到平均分70~79学生,并用m记下其下标*/


           OutputOneStudent(m);


           k++;/*k为平均分70~79分人数*/


       }


        printf("             平均分70~79分的同学信息输出结束\n");


        printf("共%d人\n",k);


        printf("  **********************************************************");


    }


    printf("平均分80~89分的同学有:\n");


    for(i=0;i<SIZE;i++)/*统计平均分80~89分人数*/


    {


       k=0;


        if(stu[i].average>79&&stu[i].average<90)


       {     


           m=i;/*找到平均分80~89学生,并用m记下其下标*/


           OutputOneStudent(m);


           k++;/*k为平均分80~89分人数*/


       }


        printf("             平均分80~89分的同学信息输出结束\n");


        printf("共%d人\n",k);


        printf("  **********************************************************");


    }


    printf("平均分90~100分的同学有:\n");


    for(i=0;i<SIZE;i++)/*统计平均分90~100分人数*/


    {


       k=0;


        if(stu[i].average>89&&stu[i].average<=100)


       {     


           m=i;/*找到平均分90~100学生,并用m记下其下标*/


           OutputOneStudent(m);


           k++;/*k为平均分90~100分人数*/


       }


        printf("             平均分90~100分的同学信息输出结束\n");


        printf("共%d人\n",k);


        printf("  **********************************************************");


    }


}


 


/*查找最高成绩操作****************************************************************************/


void search()


{


    int i=0,x,k=0;


    printf("********************输入查找选项**********************\n");/*选择功能菜单*/


    printf("          查找高数成绩最高学生请按:1\n");


    printf("          查找英语成绩最高学生请按:2\n");           


    printf("          查找C语言成绩最高学生请按:3\n");


    scanf("%d",&x);/*用户选择变量*/                        


    if(x==1)


    {


        for(i=0;i<SIZE;i++)/*查找高数成绩最高学生*/                   


       {   if(stu[i].score[0]>stu[k].score[0])


              i=k;


       }


       printf("高数成绩最高学生信息如下:\n");


       OutputOneStudent(k);


       printf("                       输出结束\n");


        printf("  **********************************************************");


    }


    if(x==2)


    {


        for(i=0;i<SIZE;i++)/*查找英语成绩最高学生*/


       {   if(stu[i].score[1]>stu[k].score[1])


              i=k;


       }


       printf("英语成绩最高学生信息如下:\n");


       OutputOneStudent(k);


       printf("                       输出结束\n");


        printf("  **********************************************************");


    }


    if(x==3)


    {


        for(i=0;i<SIZE;i++)/*查找C语言成绩最高学生*/


       {   if(stu[i].score[2]>stu[k].score[2])


              i=k;


       }


       printf("C语言成绩最高学生信息如下:\n");


       OutputOneStudent(k);


       printf("                       输出结束\n");


        printf("  **********************************************************");


    }


}


 


/*统计不及格率操作*****************************************************************************/


void tongji2()


{


    int x,i,k;


    printf("********************输入统计选项**********************\n"); /*选择功能菜单*/


    printf("统计高数成绩不及格率请按:1\n");


    printf("统计英语成绩不及格率请按:2\n");           


    printf("统计C语言成绩不及格率请按:3\n");


    scanf("%d",&x);/*用户选择变量 */                        


    if(x==1)


    {


        for(i=0;i<SIZE;i++)/*统计高数成绩不及格率*/


       {


           k=0;


           if(stu[i].score[0]<60)


                k++;/*k为高数成绩不及格人数*/


        printf("共%d人高数未及格\n",k);


        printf("不及格率为%f\n",k/SIZE);


        printf("  **********************************************************");


       }


    }


    if(x==2)


    {


        for(i=0;i<SIZE;i++)/*统计英语成绩不及格率*/


       {


           k=0;


           if(stu[i].score[1]<60)


                 k++;/*k为英语成绩不及格人数*/


        printf("共%d人英语不及格\n",k);


        printf("不及格率为%f\n",k/SIZE);


        printf("  **********************************************************");


       }


    }


    if(x==3)


    {


        for(i=0;i<SIZE;i++)/*统计C语言成绩不及格率*/


       {


           k=0;


           if(stu[i].score[2]<60)


                k++;/*k为C语言成绩不及格人数*/


        printf("共%d人C语言不及格\n",k);


        printf("不及格率为%f\n",k/SIZE);


        printf("  **********************************************************");


       }


    }


}