学生信息管理系统开发

目录

1. 简介

2. 功能模块1:主菜单 开发

2.1 基本思路

2.2 关键代码

2.3 运行结果

3. 功能模块2:输入学生信息 开发

3.1 基本思路

3.2 关键代码

3.3 运行结果

4. 功能模块3:显示学生信息 开发

4.1 基本思路

4.2 关键代码

4.3 运行结果

5. 功能模块4:查询学生信息 开发

5.1 基本思路

5.2 关键代码

5.3 运行结果

6. 功能模块5:修改学生信息 开发

6.1 基本思路

6.2 关键代码

6.3 运行结果

7. 功能模块6:删除学生信息 开发

7.1 基本思路

7.2 关键代码

7.3 运行结果

8. 功能模块7:学生信息排序 开发

8.1 基本思路

8.2 关键代码

8.3 运行结果

9. 功能模块8:统计学生信息 开发

9.1 基本思路

9.2 关键代码

9.3 运行结果

10. 完整源程序代码

10.1 代码组成结构

10.2 完整代码

正文

1. 简介

在本次作业中,我们开发了一个学生信息管理系统,采用逐个功能逐个开发的思路,实现了该系统录入学生信息、显示学生信息、查询学生信息、修改学生信息、删除学生信息、学生信息排序、统计学生信息等功能(排序与统计以学生成绩为目标)。由于能力有限,本系统中仍存在部分bug(后续介绍),以及有一定的改进空间。

本系统数据文件须手动改名为“学生信息.txt“才能应用。

学 |——1.主菜单 |

生 |——2.录入学生信息 |

信 |——3.显示学生信息 |

息——|——4.查询学生信息 |————> main函数整合各项功能

管 |——5.修改学生信息 |

理 |——6.删除学生信息 |

系 |——7.学生信息排序 |

统 |——8.统计学生信息 |

2. 功能模块1:主菜单 开发

2.1 基本思路

按照学生信息管理系统的功能进行设计,利用printf函数将学生信息管理系统的功能设计成表格呈现出来,供使用者选择。

2.2 关键代码

void menu(){ //目录
        printf("\n\n");
        printf("\t\t||*****************************************||\n");
        printf("\t\t||         -----------------------         ||\n");
        printf("\t\t||*********学 生 信 息 管 理 系 统*********||\n");
        printf("\t\t||         -----------------------         ||\n");
        printf("\t\t||            1.输入学生信息               ||\n");
        printf("\t\t||            2.显示学生信息               ||\n");
        printf("\t\t||            3.查询学生信息               ||\n");
        printf("\t\t||            4.修改学生信息               ||\n");
        printf("\t\t||            5.删除学生信息               ||\n");
        printf("\t\t||            6.学生信息排序               ||\n");
        printf("\t\t||            7.统计学生信息               ||\n");
        printf("\t\t||请选择操作:                              ||\n");
        printf("\t\t||                                         ||\n");
        printf("\t\t||*****************************************||\n");
}

2.3 运行结果

3. 功能模块2:录入学生信息开发

3.1 基本思路

首先定义一个结构体数组,以结构体形式储存学生信息,由于编译器的不同,有些编译器动态数组的实现较困难,因此结构体的大小我们采用宏定义。由于fwrite函数录入数据后记事本文件中不好直观地显示相关数据,因此我们选择fprintf函数录入数据。

3.2 关键代码

#define len10//可按需调整学生信息结构体的大小
——————————————————————————————————————————
struct student { //结构体形式储存学生信息
        int num;
        char name[10];
        char xuehao[12];//学号统一为20开头的十位数
        char sex[10];//男为M,女为W
        int age;
        char phone[16];
        float Clange;
        float Math;
        float Eng;
        float total;
        float mean;
};
struct student stu[len];
——————————————————————————————————————————
FILE *fp;
        if ((fp = fopen("学生信息.txt","rb")) == NULL) {
                 printf("Failed\n");
                 return ;
        }
        for (i = 0; i < len; i++) {
                 fscanf(fp, "%d %s %s %s %d%s %f %f %f %f %f\n", &stu[i].num, &stu[i].name,&stu[i].xuehao, &stu[i].sex, &stu[i].age,
                        &stu[i].phone,
                        &stu[i].Clange,
                        &stu[i].Math,
                        &stu[i].Eng, &stu[i].total,&stu[i].mean);    }
        fclose(fp);//该部分代码用于导入数据,以后不再解释
——————————————————————————————————————————
for (i = 0;i <= len; i++) {
                 j = i;
                 if (stu[i].xuehao[0] != '2')
                         break;
        }/*该部分代码用于寻找已有数据的数量,
                 如果len大于已有学生信息数,则从已有学生信息数的下一位开始输入,
                 若已有学生信息数已为结构体大小,输入无效*/
——————————————————————————————————————————
for (i = j; i < len; i++) {
                 stu[i].num = i + 1;
                 printf("正在输入第%d位学生的信息:\n", i + 1 );
                 printf("\t请输入姓名:");
                 scanf("%s",&stu[i].name);
                 printf("\t请输入学号:");
                 scanf("%s",&stu[i].xuehao);
                 printf("\t请输入性别:");
                 scanf("%s",&stu[i].sex);
                 printf("\t请输入年龄:");
                 scanf("%d",&stu[i].age);
                 printf("\t请输入联系方式:");
                 scanf("%s",&stu[i].phone);
                 printf("\t请输入C语言成绩:");
                 scanf("%f",&stu[i].Clange);
                 printf("\t请输入数学成绩:");
                 scanf("%f",&stu[i].Math);
                 printf("\t请输入英语成绩:");
                 scanf("%f",&stu[i].Eng);
                 stu[i].total = stu[i].Clange +stu[i].Math + stu[i].Eng;
                 stu[i].mean = stu[i].total / 3;
                 printf("\t总成绩:%.2f\n\t平均成绩:%.2f\n", stu[i].total, stu[i].mean);
                 printf("该学生信息保存成功\n");
                 if (i != len - 1) {
                         printf("是否继续录入:(yes/no)");
                         scanf("%s",&ch);
                         if (ch[0] == 'n'&& ch[1] == 'o')
                                  break;}
——————————————————————————————————————————
if ((fp =fopen("学生信息.txt", "wb")) == NULL) {
                 return ;
        }
        for (i = 0; i < len; i++) {
                fprintf(fp, "%d %s %s %s %d%s %.2f %.2f %.2f %.2f %.2f\n", stu[i].num, stu[i].name, stu[i].xuehao,stu[i].sex,
                         stu[i].age, stu[i].phone,
                         stu[i].Clange,
                         stu[i].Math,
                         stu[i].Eng, stu[i].total, stu[i].mean);
        }
        fclose(fp);//以记事本形式保存输入的学生信息,以后不再列出

3.3 运行结果

没有数据:

有一定的数据:

数据存满结构体数组:

4. 功能模块3:显示学生信息开发

4.1 基本思路

将文件中的数据导入结构体数组从而显示所有学生信息。

4.2 关键代码

FILE *fp;
        if ((fp = fopen("学生信息.txt","rb")) == NULL) {
                 printf("Failed\n");
                 return;
        }
 
        for (i = 0; i < len; i++) {
                 fscanf(fp, "%d %s %s %s %d%s %f %f %f %f %f\n", &stu[i].num, &stu[i].name,&stu[i].xuehao, &stu[i].sex, &stu[i].age,
                        &stu[i].phone,
                        &stu[i].Clange,
                        &stu[i].Math,
                        &stu[i].Eng, &stu[i].total,&stu[i].mean);
        }
        fclose(fp);
        printf("序号\t姓名\t\t学号\t\t性别\t年龄\t联系方式\tC语言成绩\t数学成绩\t英语成绩\t总成绩\t平均成绩\n");
        for (i = 0; i < len; i++) {
                 printf("%d\t%s\t\t%s\t%s\t%d\t%s\t%.2f\t\t%.2f\t\t%.2f\t\t%.2f\t%.2f\n",stu[i].num, stu[i].name, stu[i].xuehao,
                        stu[i].sex, stu[i].age,
                        stu[i].phone,
                        stu[i].Clange, stu[i].Math, stu[i].Eng,stu[i].total, stu[i].mean);
        }

4.3 运行结果

5. 功能模块4:查询学生信息开发

5.1 基本思路

以学号在系统中搜索目标学生,如搜索到即显示目标学生信息。

5.2 关键代码

char Xuehao[10];
printf("请输入学号:");
        scanf("%s", &Xuehao);
        for (i = 0; i < len; i++) {
                 for (j = 0; j < 10; j++) {
                         if (Xuehao[j] ==stu[i].xuehao[j])
                                  temp++;
                 }
                 if (temp == 10) {
                         printf("搜索到目标学生信息:\n");
                         printf("序号\t姓名\t\t学号\t\t性别\t年龄\t联系方式\tC语言成绩\t数学成绩\t英语成绩\t总成绩\t平均成绩\n");
                         printf("%d\t%s\t\t%s\t%s\t%d\t%s\t%.2f\t\t%.2f\t\t%.2f\t\t%.2f\t%.2f\n",stu[i].num, stu[i].name, stu[i].xuehao,
                                stu[i].sex, stu[i].age,
                                stu[i].phone,
                                stu[i].Clange, stu[i].Math, stu[i].Eng,stu[i].total, stu[i].mean);
                         break;
                 }
                 temp = 0;
        }
        if (i == len )
                 printf("未搜索到目标学生信息");
}

5.3 运行结果

由于数据类别过多,“总成绩”与“平均成绩”在窗口运行界面下会出现显示错误

6. 功能模块5:修改学生信息开发

6.1 基本思路

以学号在系统中搜索目标学生,如搜索到则进一步确定需要修改的信息,如果需要修改的信息为某一科目的成绩,则系统自动修改总成绩与平均成绩。

6.2 关键代码

int i, j,temp = 0, t, age;
        char Xuehao[10];
        char Name[10], xueHao[12], Phone[16],sex[10];
        float clange, math, eng, Total, Mean;
printf("请输入学号:");//学号查找目标学生信息
        scanf("%s", &Xuehao);
        for (i = 0; i < len; i++) {
                 for (j = 0; j < 10; j++) {
                         if (Xuehao[j] ==stu[i].xuehao[j])
                                  temp++;
                 }
                 if (temp == 10) {
                         printf("搜索到目标学生信息:\n");
                         printf("序号\t姓名\t\t学号\t\t性别\t年龄\t联系方式\tC语言成绩\t数学成绩\t英语成绩\t总成绩\t平均成绩\n");
                         printf("%d\t%s\t\t%s\t%s\t%d\t%s\t%.2f\t\t%.2f\t\t%.2f\t\t%.2f\t%.2f\n",stu[i].num, stu[i].name, stu[i].xuehao,
                                stu[i].sex, stu[i].age,
                                stu[i].phone,
                                stu[i].Clange, stu[i].Math, stu[i].Eng,stu[i].total, stu[i].mean);
                         printf("请选择需要修改的信息:\n");
                         printf("1.姓名 2.学号 3.性别 4.年龄 5.联系方式 6.C语言成绩 7.数学成绩 8.英语成绩\n");
 
                         while(scanf("%d", &t)) {
                                  if (t == 0)
                                          break;
                                  switch (t) {
                                          case1:
                                                  printf("将该生姓名修改为:\n");
                                                  scanf("%s",&Name);
                                                  strcpy(stu[i].name,Name);
                                                  break;
                                          case2:
                                                  printf("将该生学号修改为:\n");
                                                  scanf("%s",&xueHao);
                                                  strcpy(stu[i].xuehao,xueHao);
                                                  break;
                                          case3:
                                                  printf("将该生性别修改为:\n");
                                                  scanf("%s",&sex);
                                                  strcpy(stu[i].phone,sex);
                                                  break;
                                          case4:
                                                  printf("将该生年龄修改为:\n");
                                                  scanf("%d",&age);
                                                  stu[i].age= age;
                                                  break;
                                          case5:
                                                  printf("将该生联系方式修改为:\n");
                                                  scanf("%s",&Phone);
                                                  strcpy(stu[i].phone,Phone);
                                                  break;
                                          case6:
                                                  printf("将该生C语言成绩修改为:\n");
                                                  scanf("%f",&clange);
                                                  stu[i].Clange= clange;
                                                  break;
                                          case7:
                                                  printf("将该生数学成绩修改为:\n");
                                                  scanf("%f",&math);
                                                  stu[i].Math= math;
                                                  break;
                                          case8:
                                                  printf("将该生英语成绩修改为:\n");
                                                  scanf("%f",&eng);
                                                  stu[i].Eng= eng;
                                                  break;
                                          default:
                                                  printf("选择错误,请重新选择(1-8):\n");
                                                  break;
                                  }
 
                                  printf("修改成功,是否需要继续修改(否请输入0,是请输入对应的数字1-8):\n");
                         }
 
                         Total = stu[i].Clange +stu[i].Math + stu[i].Eng;
                         Mean = Total / 3;
                         stu[i].total = Total;//系统自动修正总成绩与平均成绩
                         stu[i].mean = Mean;}}//录入文件代码不再列出
if (i ==len )
                 printf("未搜索到目标学生信息\n");

6.3 运行结果

7. 功能模块6:删除学生信息开发

7.1 基本思路

以学号在系统中搜索目标学生,如搜索到则进一步确定是否删除目标学生的所有信息。

7.2 关键代码

int i, j,k, temp = 0;
        char Xuehao[10], ch[4];
    printf("请输入学号:");//学号查找目标学生信息
        scanf("%s", &Xuehao);
        for (i = 0; i < len; i++) {
                 for (j = 0; j < 10; j++) {
                         if (Xuehao[j] ==stu[i].xuehao[j])
                                  temp++;
                 }
                 if (temp == 10) {
                         printf("搜索到目标学生信息:\n");
                         printf("序号\t姓名\t\t学号\t\t性别\t年龄\t联系方式\tC语言成绩\t数学成绩\t英语成绩\t总成绩\t平均成绩\n");
                         printf("%d\t%s\t\t%s\t%s\t%d\t%s\t%.2f\t\t%.2f\t\t%.2f\t\t%.2f\t%.2f\n",stu[i].num, stu[i].name, stu[i].xuehao,
                                stu[i].sex, stu[i].age,
                                stu[i].phone,
                                stu[i].Clange, stu[i].Math, stu[i].Eng,stu[i].total, stu[i].mean);
                         
                        printf("确定删除该学生信息?(yes/no)\n");
                         scanf("%s",&ch);
                         if (ch[0] == 'n'&& ch[1] == 'o') {
                                  break;
                         }
                         for (j = i; j < len;j++) {
                                  for (k = 0; k< 10; k++)
                                          stu[j].name[k]= stu[j + 1].name[k];
                                  for (k = 0; k< 12; k++)
                                          stu[j].xuehao[k]= stu[j + 1].xuehao[k];
                                  for (k = 0; k< 16; k++)
                                          stu[j].phone[k]= stu[j + 1].phone[k];
                                  for (k = 0; k< 10; k++)
                                          stu[j].sex[k]= stu[j + 1].sex[k];
                                  stu[j].age =stu[j + 1].age;
                                  stu[j].Clange= stu[j + 1].Clange;
                                  stu[j].Math =stu[j + 1].Math;
                                  stu[j].Eng =stu[j + 1].Eng;
                                  stu[j].total =stu[j + 1].total;
                                  stu[j].mean =stu[j + 1].mean;
                         }//录入代码在此省略
                         printf("删除成功\n");
                         break;
                 }
                 temp = 0;
        }
        if (i == len)
                 printf("未搜索到目标学生信息\n");

7.3 运行结果

8. 功能模块7:学生信息排序开发

8.1 基本思路

利用qsort函数,依据使用者的需求对所有学生信息根据各科成绩或总成绩进行总体的升序或降序排序。

8.2 关键代码

int uptotal(const void *a, const void *b) {
        struct student *p1 = (struct student*)a;
        struct student *p2 = (struct student*)b;
        return (p1->total - p2->total);
}
---
int downtotal(const void *a, const void *b) {
        struct student *p1 = (struct student*)a;
        struct student *p2 = (struct student*)b;
        return (p2->total - p1->total );
}//以上为qsort函数中最后一项参数所指代函数的编写,仅列此一例
---
int i, j,tem;
for (i = 0;i < len; i++) {
                 if (stu[i].xuehao[0] != '2')
                         break;
                 tem = i + 1;
        }//找到已有数据的大小—tem
        int o, p;
        printf("请选择排序依据(输入对应的数字):1.C语言成绩 2.数学成绩 3.英语成绩 4.总成绩/平均成绩\n");
        scanf("%d", &o);
        printf("请选择排序方式(输入对应的数字):1.升序 2.降序\n");
        scanf("%d", &p);
        struct student a;
        switch (o) {//根据用户的选择实现不同的排序
                 case 1:
                         switch (p) {
                                  case 1:
                qsort(stu, tem, sizeof(stu[0]), upC);/*此处已经完成了排序,以下为相关成绩相同时,以学号大小进行排序的代码,由于篇幅以后省略此步骤*/
                                          for (i= 0; i < len - 1; i++) {
                                                  if(stu[i].Clange == stu[i + 1].Clange) {
                                                           for (j = 9; j > 0; j--) {
                                                                   if(stu[i].xuehao[j] > stu[i + 1].xuehao[j]) {
                                                                            a= stu[i];
                                                                            stu[i]= stu[i + 1];
                                                                            stu[i+ 1] = a;
                                                                   }
                                                           }
                                                  }
                                          }
 
                                          break;
                                  case 2:
                                          qsort(stu,tem, sizeof(stu[0]), downC);
                                          break;
                                  default:
                                          printf("Wrong.\n");
                                          break;
                         }
                         break;
                 case 2: //其余项与以上内容相似,由于篇幅问题不再展示,详情见完整代码
                 default:
                         printf("Wrong.\n");
                         break;
        }
        for (i = 0; i < len; i++) {
                 stu[i].num = i + 1;
        }
        //以下为排序后立即展示已排序学生信息的代码
        printf("序号\t姓名\t\t学号\t\t性别\t年龄\t联系方式\tC语言成绩\t数学成绩\t英语成绩\t总成绩\t平均成绩\n");
        for (i = 0; i < tem; i++) {
                 printf("%d\t%s\t\t%s\t%s\t%d\t%s\t%.2f\t\t%.2f\t\t%.2f\t\t%.2f\t%.2f\n",stu[i].num, stu[i].name, stu[i].xuehao,
                        stu[i].sex, stu[i].age,
                        stu[i].phone,
                        stu[i].Clange, stu[i].Math, stu[i].Eng,stu[i].total, stu[i].mean);
        }
        printf("排序成功\n");//此系统会自动录入排序后信息,录入文件代码省略

8.3 运行结果(以英语成绩为例)

降序:

升序:

9. 功能模块8:统计学生信息开发

9.1 基本思路

导入学生信息后,统计并显示出某科目或总成绩及格/不及格、 优秀的学生列表以及相关人数与几率,或统计所有学生某科目/总成绩的平均成绩。

9.2 关键代码

int i, j,tem;
for (i = 0;i < len; i++) {
                 if (stu[i].xuehao[0] != '2')
                         break;
                 tem = i + 1;
        }
int o, p;
        printf("请选择需要统计的数据:1.C语言成绩 2.数学成绩 3.英语成绩 4.总成绩(及格为180分及以上,优秀为255分及以上)\n");
        scanf("%d", &o);
        printf("请选择统计目标:1.及格学生 2.优秀学生 3.所有同学的平均成绩\n");
        scanf("%d", &p);
        int sum, m = 0, n = 0;
        float yep, fal, TOL = 0; //符合/不合/所有学生总成绩
        struct student stu1[len], stu2[len];
        switch (o) {
                 case 1:
                         switch (p) {
                                  case 1:
                                          for (i= 0; i < tem; i++) {
                                                  if(stu[i].Clange >= 60) {
                                                           stu1[m]= stu[i];//定义另一个结构体数组存储及格学生信息
                                                           m++;
                                                  }else {
                                                           stu2[n]= stu[i];// 定义另一个结构体数组存储不及格学生信息
                                                           n++;
                                                  }
                                          }
                                          printf("\nC语言及格学生:\n");
                                          printf("序号\t姓名\t\t学号\t\t性别\t年龄\t联系方式\tC语言成绩\t数学成绩\t英语成绩\t总成绩\t平均成绩\n");
                                          for (i= 0; i < m; i++) {
                                                  printf("%d\t%s\t\t%s\t%s\t%d\t%s\t%.2f\t\t%.2f\t\t%.2f\t\t%.2f\t%.2f\n",stu1[i].num, stu1[i].name, stu1[i].xuehao,
                                                         stu1[i].sex, stu1[i].age,
                                                         stu1[i].phone,
                                                         stu1[i].Clange, stu1[i].Math,stu1[i].Eng, stu1[i].total, stu1[i].mean);
                                          }//展示及格学生信息
                                          printf("\nC语言不及格学生:\n");
                                          printf("序号\t姓名\t\t学号\t\t性别\t年龄\t联系方式\tC语言成绩\t数学成绩\t英语成绩\t总成绩\t平均成绩\n");
                                          for (i= 0; i < n; i++) {
                                                  printf("%d\t%s\t\t%s\t%s\t%d\t%s\t%.2f\t\t%.2f\t\t%.2f\t\t%.2f\t%.2f\n",stu2[i].num, stu2[i].name, stu2[i].xuehao,
                                                         stu2[i].sex, stu2[i].age,
                                                         stu2[i].phone,
                                                         stu2[i].Clange, stu2[i].Math,stu2[i].Eng, stu2[i].total, stu2[i].mean);
                                          }//展示不及格学生信息
                                          yep =((float)m / (float)tem ) * 100;//计算及格率
                                          fal= n / tem ;
                                          printf("\n一共%d位学生,C语言及格%d位学生,及格率%.2f%c",tem, m,  yep, 37);
                                          break;
                                  case 2:
                                          for (i= 0; i < tem; i++) {
                                                  if(stu[i].Clange >= 85) {
                                                           stu1[m]= stu[i];// 定义另一个结构体数组存储优秀学生信息
                                                           m++;
                                                  }
                                          }
                                          printf("\nC语言优秀学生:\n");
                                          printf("序号\t姓名\t\t学号\t\t性别\t年龄\t联系方式\tC语言成绩\t数学成绩\t英语成绩\t总成绩\t平均成绩\n");
                                          for (i= 0; i < m; i++) {
                                                  printf("%d\t%s\t\t%s\t%s\t%d\t%s\t%.2f\t\t%.2f\t\t%.2f\t\t%.2f\t%.2f\n",stu1[i].num, stu1[i].name, stu1[i].xuehao,
                                                         stu1[i].sex, stu1[i].age,
                                                         stu1[i].phone,
                                                         stu1[i].Clange, stu1[i].Math,stu1[i].Eng, stu1[i].total, stu1[i].mean);
                                          }//展示优秀学生信息
                                          yep =((float)m / (float)tem ) * 100;//计算优秀率
                                          printf("\n一共%d位学生,C语言优秀%d位学生,优秀率%.2f%c",tem, m, yep, 37);
                                          break;
                                  case 3:
                                          printf("序号\t姓名\t\t学号\t\t性别\t年龄\t联系方式\tC语言成绩\t数学成绩\t英语成绩\t总成绩\t平均成绩\n");
                                          for (i= 0; i < tem; i++) {
                                                  printf("%d\t%s\t\t%s\t%s\t%d\t%s\t%.2f\t\t%.2f\t\t%.2f\t\t%.2f\t%.2f\n",stu[i].num, stu[i].name, stu[i].xuehao,
                                                         stu[i].sex, stu[i].age,
                                                         stu[i].phone,
                                                         stu[i].Clange, stu[i].Math, stu[i].Eng,stu[i].total, stu[i].mean);
                                          }//展示所有学生信息
                                          for (i= 0; i < tem; i++)
                                                  TOL+= stu[i].Clange;
 
                                          printf("\n所有学生C语言的平均成绩为%.2f", TOL / tem);
                                          break;
                         }
                         break;
                 case 2://其余项与以上内容相似,由于篇幅问题不再展示,详情见完整代码

9.3 运行结果(以C语言成绩为例)

及格/不及格:

优秀:

平均成绩:

10. 完整源程序代码

10.1 代码组成结构

在本系统中,我们采用逐个功能逐个开发的思路,分别开发出(以下都为viod类型函数)menu(主菜单)、input(录入信息)、display(显示)、inquire(查询)、correct(修改)、Delete(删除)、sort(排序)、statistics(统计)函数,最终由intmain函数整合这8个功能函数,开发出较为完整的学生信息管理系统。

10.2 完整代码

#include<stdio.h>
#include<string.h>
#include<stdlib.h>
#define len10//可按需调整学生信息结构体的大小
 
 
structstudent { //结构体形式储存学生信息
        int num;
        char name[10];
        char xuehao[12];//学号统一为20开头的十位数
        char sex[10];//男为M,女为W
        int age;
        char phone[16];
        float Clange;
        float Math;
        float Eng;
        float total;
        float mean;
};
structstudent stu[len];
 
void menu(){ //目录
        printf("\n\n");
        printf("\t\t||*****************************************||\n");
        printf("\t\t||         -----------------------         ||\n");
        printf("\t\t||*********学 生 信 息 管 理 系 统*********||\n");
        printf("\t\t||         -----------------------         ||\n");
        printf("\t\t||            1.输入学生信息               ||\n");
        printf("\t\t||            2.显示学生信息               ||\n");
        printf("\t\t||            3.查询学生信息               ||\n");
        printf("\t\t||            4.修改学生信息               ||\n");
        printf("\t\t||            5.删除学生信息               ||\n");
        printf("\t\t||            6.学生信息排序               ||\n");
        printf("\t\t||            7.统计学生信息               ||\n");
        printf("\t\t||请选择操作:                              ||\n");
        printf("\t\t||                                        ||\n");
        printf("\t\t||*****************************************||\n");
}
 
 
voidinput() { //输入学生信息
        int i, j = 0;
        char ch[5];
        FILE *fp;
        if ((fp = fopen("学生信息.txt","rb")) == NULL) {
                 printf("Failed\n");
                 return ;
        }
 
        for (i = 0; i <= len; i++) {
                 fscanf(fp, "%d %s %s %s %d%s %f %f %f %f %f\n", &stu[i].num, &stu[i].name,&stu[i].xuehao, &stu[i].sex, &stu[i].age,
                        &stu[i].phone,
                       &stu[i].Clange,
                        &stu[i].Math,
                        &stu[i].Eng, &stu[i].total,&stu[i].mean);
        }
        fclose(fp);//该部分代码用于导入数据,以后不再解释
        for (i = 0; i <= len; i++) {
                 j = i;
                 if (stu[i].xuehao[0] != '2')
                         break;
        }/*该部分代码用于寻找已有数据的数量,
                 如果len大于已有学生信息数,则从已有学生信息数的下一位开始输入,
                 若已有学生信息数已为结构体大小,输入无效*/
        for (i = j ; i < len; i++) {
                 stu[i].num = i + 1;
                 printf("正在输入第%d位学生的信息:\n", i + 1 );
                 printf("\t请输入姓名:");
                 scanf("%s",&stu[i].name);
                 printf("\t请输入学号:");
                 scanf("%s",&stu[i].xuehao);
                 printf("\t请输入性别:");
                 scanf("%s",&stu[i].sex);
                 printf("\t请输入年龄:");
                 scanf("%d",&stu[i].age);
                 printf("\t请输入联系方式:");
                 scanf("%s",&stu[i].phone);
                 printf("\t请输入C语言成绩:");
                 scanf("%f",&stu[i].Clange);
                 printf("\t请输入数学成绩:");
                 scanf("%f",&stu[i].Math);
                 printf("\t请输入英语成绩:");
                 scanf("%f",&stu[i].Eng);
                 stu[i].total = stu[i].Clange +stu[i].Math + stu[i].Eng;
                 stu[i].mean = stu[i].total / 3;
                 printf("\t总成绩:%.2f\n\t平均成绩:%.2f\n", stu[i].total, stu[i].mean);
                 printf("该学生信息保存成功\n");
                 if (i != len - 1) {
                         printf("是否继续录入:(yes/no)");
                         scanf("%s",&ch);
                         if (ch[0] == 'n'&& ch[1] == 'o')
                                  break;
                 }
        }
 
        if ((fp = fopen("学生信息.txt","wb")) == NULL) {
                 return ;
        }
        for (i = 0; i < len; i++) {
                fprintf(fp, "%d %s %s %s %d%s %.2f %.2f %.2f %.2f %.2f\n", stu[i].num, stu[i].name, stu[i].xuehao,stu[i].sex,
                         stu[i].age, stu[i].phone,
                         stu[i].Clange,
                         stu[i].Math,
                         stu[i].Eng, stu[i].total, stu[i].mean);
        }
        fclose(fp);//以记事本形式保存输入的学生信息
        return ;
}
 
voiddisplay() { //显示学生信息
        int i;
        FILE *fp;
        if ((fp = fopen("学生信息.txt","rb")) == NULL) {
                 printf("Failed\n");
                 return;
        }
 
        for (i = 0; i < len; i++) {
                 fscanf(fp, "%d %s %s %s %d%s %f %f %f %f %f\n", &stu[i].num, &stu[i].name,&stu[i].xuehao, &stu[i].sex, &stu[i].age,
                        &stu[i].phone,
                        &stu[i].Clange,
                        &stu[i].Math,
                        &stu[i].Eng, &stu[i].total,&stu[i].mean);
        }
        fclose(fp);
        printf("序号\t姓名\t\t学号\t\t性别\t年龄\t联系方式\tC语言成绩\t数学成绩\t英语成绩\t总成绩\t平均成绩\n");
        for (i = 0; i < len; i++) {
                 printf("%d\t%s\t\t%s\t%s\t%d\t%s\t%.2f\t\t%.2f\t\t%.2f\t\t%.2f\t%.2f\n",stu[i].num, stu[i].name, stu[i].xuehao,
                        stu[i].sex, stu[i].age,
                        stu[i].phone,
                        stu[i].Clange, stu[i].Math, stu[i].Eng,stu[i].total, stu[i].mean);
        }
}
 
voidinquire() { //以学号查询学生信息
        int i, j, temp = 0;
        char Xuehao[10];
        FILE *fp;
        if ((fp = fopen("学生信息.txt","rb")) == NULL) {
                 printf("Failed\n");
                 return;
        }
 
        for (i = 0; i < len; i++) {
                 fscanf(fp, "%d %s %s %s %d%s %f %f %f %f %f\n", &stu[i].num, &stu[i].name,&stu[i].xuehao, &stu[i].sex, &stu[i].age,
                        &stu[i].phone,
                        &stu[i].Clange,
                        &stu[i].Math,
                        &stu[i].Eng, &stu[i].total,&stu[i].mean);
        }
        fclose(fp);
        printf("请输入学号:");
        scanf("%s", &Xuehao);
        for (i = 0; i < len; i++) {
                 for (j = 0; j < 10; j++) {
                         if (Xuehao[j] ==stu[i].xuehao[j])
                                  temp++;
                 }
                 if (temp == 10) {
                         printf("搜索到目标学生信息:\n");
                         printf("序号\t姓名\t\t学号\t\t性别\t年龄\t联系方式\tC语言成绩\t数学成绩\t英语成绩\t总成绩\t平均成绩\n");
                         printf("%d\t%s\t\t%s\t%s\t%d\t%s\t%.2f\t\t%.2f\t\t%.2f\t\t%.2f\t%.2f\n",stu[i].num, stu[i].name, stu[i].xuehao,
                                stu[i].sex, stu[i].age,
                                stu[i].phone,
                                stu[i].Clange, stu[i].Math, stu[i].Eng,stu[i].total, stu[i].mean);
                         break;
                 }
                 temp = 0;
        }
        if (i == len )
                 printf("未搜索到目标学生信息");
}
 
voidcorrect() { //修改学生信息
        int i, j, temp = 0, t, age;
        char Xuehao[10];
        char Name[10], xueHao[12], Phone[16],sex[10];
        float clange, math, eng, Total, Mean;
        FILE *fp;
        if ((fp = fopen("学生信息.txt","rb")) == NULL) {
                 printf("Failed\n");
                 return;
        }
 
        for (i = 0; i < len; i++) {
                 fscanf(fp, "%d %s %s %s %d%s %f %f %f %f %f\n", &stu[i].num, &stu[i].name,&stu[i].xuehao, &stu[i].sex, &stu[i].age,
                        &stu[i].phone,
                        &stu[i].Clange,
                        &stu[i].Math,
                        &stu[i].Eng, &stu[i].total,&stu[i].mean);
        }
        fclose(fp);
        printf("请输入学号:");//学号查找目标学生信息
        scanf("%s", &Xuehao);
        for (i = 0; i < len; i++) {
                 for (j = 0; j < 10; j++) {
                         if (Xuehao[j] == stu[i].xuehao[j])
                                  temp++;
                 }
                 if (temp == 10) {
                         printf("搜索到目标学生信息:\n");
                         printf("序号\t姓名\t\t学号\t\t性别\t年龄\t联系方式\tC语言成绩\t数学成绩\t英语成绩\t总成绩\t平均成绩\n");
                         printf("%d\t%s\t\t%s\t%s\t%d\t%s\t%.2f\t\t%.2f\t\t%.2f\t\t%.2f\t%.2f\n",stu[i].num, stu[i].name, stu[i].xuehao,
                                stu[i].sex, stu[i].age,
                                stu[i].phone,
                                stu[i].Clange, stu[i].Math, stu[i].Eng,stu[i].total, stu[i].mean);
                         printf("请选择需要修改的信息:\n");
                         printf("1.姓名 2.学号 3.性别 4.年龄 5.联系方式 6.C语言成绩 7.数学成绩 8.英语成绩\n");
 
                         while (scanf("%d",&t)) {
                                  if (t == 0)
                                          break;
                                  switch (t) {
                                          case1:
                                                  printf("将该生姓名修改为:\n");
                                                  scanf("%s",&Name);
                                                  strcpy(stu[i].name,Name);
                                                  break;
                                          case2:
                                                  printf("将该生学号修改为:\n");
                                                  scanf("%s",&xueHao);
                                                  strcpy(stu[i].xuehao,xueHao);
                                                  break;
                                          case3:
                                                  printf("将该生性别修改为:\n");
                                                  scanf("%s",&sex);
                                                  strcpy(stu[i].phone,sex);
                                                  break;
                                          case4:
                                                  printf("将该生年龄修改为:\n");
                                                  scanf("%d",&age);
                                                  stu[i].age= age;
                                                  break;
                                          case5:
                                                  printf("将该生联系方式修改为:\n");
                                                  scanf("%s",&Phone);
                                                  strcpy(stu[i].phone,Phone);
                                                  break;
                                          case6:
                                                  printf("将该生C语言成绩修改为:\n");
                                                  scanf("%f",&clange);
                                                  stu[i].Clange= clange;
                                                  break;
                                          case7:
                                                  printf("将该生数学成绩修改为:\n");
                                                  scanf("%f",&math);
                                                  stu[i].Math= math;
                                                  break;
                                          case8:
                                                  printf("将该生英语成绩修改为:\n");
                                                  scanf("%f",&eng);
                                                  stu[i].Eng= eng;
                                                  break;
                                          default:
                                                  printf("选择错误,请重新选择(1-8):\n");
                                                  break;
                                  }
 
                                  printf("修改成功,是否需要继续修改(否请输入0,是请输入对应的数字1-8):\n");
                         }
 
                         Total = stu[i].Clange +stu[i].Math + stu[i].Eng;
                         Mean = Total / 3;
                         stu[i].total = Total;
                         stu[i].mean = Mean;
                         if ((fp = fopen("学生信息.txt","wb")) == NULL)
                                  return;
                         for (j = 0; j < len;j++) {
                                  fprintf(fp,"%d %s %s %s %d %s %.2f %.2f %.2f %.2f %.2f\n", stu[j].num,stu[j].name, stu[j].xuehao, stu[j].sex,
                                          stu[j].age, stu[j].phone,
                                          stu[j].Clange,
                                          stu[j].Math,
                                          stu[j].Eng, stu[j].total, stu[j].mean);
                         }
                         fclose(fp);
                         break;
                 }
                 temp = 0;
        }
        if (i == len )
                 printf("未搜索到目标学生信息\n");
}
 
voidDelete() { //删除学生信息
        int i, j, k, temp = 0;
        char Xuehao[10], ch[4];
        FILE *fp;
        if ((fp = fopen("学生信息.txt","rb")) == NULL) {
                 printf("Failed\n");
                 return;
        }
 
        for (i = 0; i < len; i++) {
                 fscanf(fp, "%d %s %s %s %d%s %f %f %f %f %f\n", &stu[i].num, &stu[i].name,&stu[i].xuehao, &stu[i].sex, &stu[i].age,
                        &stu[i].phone,
                        &stu[i].Clange,
                        &stu[i].Math,
                        &stu[i].Eng, &stu[i].total,&stu[i].mean);
        }
        fclose(fp);
        printf("请输入学号:");//学号查找目标学生信息
        scanf("%s", &Xuehao);
        for (i = 0; i < len; i++) {
                 for (j = 0; j < 10; j++) {
                         if (Xuehao[j] == stu[i].xuehao[j])
                                  temp++;
                 }
                 if (temp == 10) {
                         printf("搜索到目标学生信息:\n");
                         printf("序号\t姓名\t\t学号\t\t性别\t年龄\t联系方式\tC语言成绩\t数学成绩\t英语成绩\t总成绩\t平均成绩\n");
                         printf("%d\t%s\t\t%s\t%s\t%d\t%s\t%.2f\t\t%.2f\t\t%.2f\t\t%.2f\t%.2f\n",stu[i].num, stu[i].name, stu[i].xuehao,
                                stu[i].sex, stu[i].age,
                                stu[i].phone,
                                stu[i].Clange, stu[i].Math, stu[i].Eng,stu[i].total, stu[i].mean);
                         printf("确定删除该学生信息?(yes/no)\n");
                         scanf("%s",&ch);
                         if (ch[0] == 'n'&& ch[1] == 'o') {
                                  break;
                         }
                         for (j = i; j < len;j++) {
                                  for (k = 0; k< 10; k++)
                                          stu[j].name[k]= stu[j + 1].name[k];
                                  for (k = 0; k< 12; k++)
                                          stu[j].xuehao[k]= stu[j + 1].xuehao[k];
                                  for (k = 0; k< 16; k++)
                                          stu[j].phone[k]= stu[j + 1].phone[k];
                                  for (k = 0; k< 10; k++)
                                          stu[j].sex[k]= stu[j + 1].sex[k];
                                  stu[j].age =stu[j + 1].age;
                                  stu[j].Clange= stu[j + 1].Clange;
                                  stu[j].Math =stu[j + 1].Math;
                                  stu[j].Eng =stu[j + 1].Eng;
                                  stu[j].total =stu[j + 1].total;
                                  stu[j].mean =stu[j + 1].mean;
                         }
                         if ((fp = fopen("学生信息.txt","wb")) == NULL)
                                  return;
                         for (j = 0; j < len- 1; j++) {
                                  fprintf(fp,"%d %s %s %s %d %s %.2f %.2f %.2f %.2f %.2f\n", stu[j].num,stu[j].name, stu[j].xuehao, stu[j].sex,
                                          stu[j].age, stu[j].phone,
                                          stu[j].Clange,
                                          stu[j].Math,
                                          stu[j].Eng, stu[j].total, stu[j].mean);
                         }
                         fclose(fp);
                         printf("删除成功\n");
                         break;
                 }
                 temp = 0;
        }
        if (i == len)
                 printf("未搜索到目标学生信息\n");
}
 
int upC(constvoid *a, const void *b) {
        struct student *p1 = (struct student*)a;
        struct student *p2 = (struct student*)b;
        return (p1->Clange - p2->Clange);
}
 
intupmath(const void *a, const void *b) {
        struct student *p1 = (struct student*)a;
        struct student *p2 = (struct student*)b;
        return (p1->Math - p2->Math);
}
 
intupeng(const void *a, const void *b) {
        struct student *p1 = (struct student*)a;
        struct student *p2 = (struct student*)b;
        return (p1->Eng - p2->Eng);
}
 
intuptotal(const void *a, const void *b) {
        struct student *p1 = (struct student*)a;
        struct student *p2 = (struct student*)b;
        return (p1->total - p2->total);
}
 
intdownC(const void *a, const void *b) {
        struct student *p1 = (struct student*)a;
        struct student *p2 = (struct student*)b;
        return (p2->Clange - p1->Clange);
}
 
intdownmath(const void *a, const void *b) {
        struct student *p1 = (struct student*)a;
        struct student *p2 = (struct student*)b;
        return (p2->Math - p1->Math);
}
 
intdowneng(const void *a, const void *b) {
        struct student *p1 = (struct student*)a;
        struct student *p2 = (struct student*)b;
        return (p2->Eng - p1->Eng);
}
 
intdowntotal(const void *a, const void *b) {
        struct student *p1 = (struct student*)a;
        struct student *p2 = (struct student*)b;
        return (p2->total - p1->total );
}
 
void sort(){ //学生信息排序(按各科成绩或总成绩、均分排序)
        int i, j, tem;
        FILE *fp;
        if ((fp = fopen("学生信息.txt","rb")) == NULL) {
                 printf("Failed\n");
                 return;
        }
 
        for (i = 0; i < len; i++) {
                 fscanf(fp, "%d %s %s %s %d%s %f %f %f %f %f\n", &stu[i].num, &stu[i].name,&stu[i].xuehao, &stu[i].sex, &stu[i].age,
                        &stu[i].phone,
                        &stu[i].Clange,
                        &stu[i].Math,
                        &stu[i].Eng, &stu[i].total,&stu[i].mean);
        }
        fclose(fp);
        for (i = 0; i < len; i++) {
                 if (stu[i].xuehao[0] != '2')
                         break;
                 tem = i + 1;
        }
 
        int o, p;
        printf("请选择排序依据(输入对应的数字):1.C语言成绩 2.数学成绩 3.英语成绩 4.总成绩/平均成绩\n");
        scanf("%d", &o);
        printf("请选择排序方式(输入对应的数字):1.升序 2.降序\n");
        scanf("%d", &p);
        struct student a;
        switch (o) {
                 case 1:
                         switch (p) {
                                  case 1:
                                          qsort(stu,tem, sizeof(stu[0]), upC);
                                          for (i= 0; i < len - 1; i++) {
                                                  if(stu[i].Clange == stu[i + 1].Clange) {
                                                           for(j = 9; j > 0; j--) {
                                                                   if(stu[i].xuehao[j] > stu[i + 1].xuehao[j]) {
                                                                            a= stu[i];
                                                                            stu[i]= stu[i + 1];
                                                                            stu[i+ 1] = a;
                                                                   }
                                                           }
                                                  }
                                          }
 
                                          break;
                                  case 2:
                                          qsort(stu,tem, sizeof(stu[0]), downC);
                                          for (i= 0; i < len - 1; i++) {
                                                  if(stu[i].Clange == stu[i + 1].Clange) {
                                                           for (j = 9; j > 0;j--) {
                                                                   if(stu[i].xuehao[j] > stu[i + 1].xuehao[j]) {
                                                                            a= stu[i];
                                                                            stu[i]= stu[i + 1];
                                                                            stu[i+ 1] = a;
                                                                   }
                                                           }
                                                  }
                                          }
                                          break;
                                  default:
                                          printf("Wrong.\n");
                                          break;
                         }
                         break;
                 case 2:
                         switch (p) {
                                  case 1:
                                          qsort(stu,tem, sizeof(stu[0]), upmath);
                                          for (i= 0; i < len - 1; i++) {
                                                  if(stu[i].Math == stu[i + 1].Math) {
                                                           for(j = 9; j > 0; j--) {
                                                                   if(stu[i].xuehao[j] > stu[i + 1].xuehao[j]) {
                                                                            a= stu[i];
                                                                            stu[i]= stu[i + 1];
                                                                            stu[i+ 1] = a;
                                                                   }
                                                           }
                                                  }
                                          }
                                          break;
                                  case 2:
                                          qsort(stu,tem, sizeof(stu[0]), downmath);
                                          for (i= 0; i < len - 1; i++) {
                                                  if(stu[i].Math == stu[i + 1].Math) {
                                                           for(j = 9; j > 0; j--) {
                                                                   if(stu[i].xuehao[j] > stu[i + 1].xuehao[j]) {
                                                                            a= stu[i];
                                                                            stu[i]= stu[i + 1];
                                                                            stu[i+ 1] = a;
                                                                   }
                                                           }
                                                  }
                                          }
                                          break;
                                  default:
                                          printf("Wrong.\n");
                                          break;
                         }
                         break;
                 case 3:
                         switch (p) {
                                  case 1:
                                          qsort(stu,tem, sizeof(stu[0]), upeng);
                                          for (i= 0; i < len - 1; i++) {
                                                  if(stu[i].Eng == stu[i + 1].Eng) {
                                                           for(j = 9; j > 0; j--) {
                                                                   if(stu[i].xuehao[j] > stu[i + 1].xuehao[j]) {
                                                                            a= stu[i];
                                                                            stu[i]= stu[i + 1];
                                                                            stu[i+ 1] = a;
                                                                   }
                                                           }
                                                  }
                                          }
                                          break;
                                  case 2:
                                          qsort(stu,tem, sizeof(stu[0]), downeng);
                                          for (i= 0; i < len - 1; i++) {
                                                  if(stu[i].Eng == stu[i + 1].Eng) {
                                                           for(j = 9; j > 0; j--) {
                                                                   if(stu[i].xuehao[j] > stu[i + 1].xuehao[j]) {
                                                                            a= stu[i];
                                                                            stu[i]= stu[i + 1];
                                                                            stu[i+ 1] = a;
                                                                   }
                                                           }
                                                  }
                                          }
                                          break;
                                  default:
                                          printf("Wrong.\n");
                                          break;
                         }
                         break;
                 case 4:
                         switch (p) {
                                  case 1:
                                          qsort(stu,tem, sizeof(stu[0]), uptotal);
                                          for (i= 0; i < len - 1; i++) {
                                                  if(stu[i].total == stu[i + 1].total) {
                                                           for(j = 9; j > 0; j--) {
                                                                   if(stu[i].xuehao[j] > stu[i + 1].xuehao[j]) {
                                                                            a= stu[i];
                                                                            stu[i]= stu[i + 1];
                                                                            stu[i+ 1] = a;
                                                                   }
                                                           }
                                                  }
                                          }
                                          break;
                                  case 2:
                                          qsort(stu,tem, sizeof(stu[0]), downtotal);
                                          for (i= 0; i < len - 1; i++) {
                                                  if(stu[i].total == stu[i + 1].total) {
                                                           for(j = 9; j > 0; j--) {
                                                                   if(stu[i].xuehao[j] > stu[i + 1].xuehao[j]) {
                                                                            a= stu[i];
                                                                            stu[i]= stu[i + 1];
                                                                           stu[i + 1] = a;
                                                                   }
                                                           }
                                                  }
                                          }
                                          break;
                                  default:
                                          printf("Wrong.\n");
                                          break;
                         }
                         break;
                 default:
                         printf("Wrong.\n");
                         break;
        }
        for (i = 0; i < len; i++) {
                 stu[i].num = i + 1;
        }
        printf("序号\t姓名\t\t学号\t\t性别\t年龄\t联系方式\tC语言成绩\t数学成绩\t英语成绩\t总成绩\t平均成绩\n");
        for (i = 0; i < tem; i++) {
                 printf("%d\t%s\t\t%s\t%s\t%d\t%s\t%.2f\t\t%.2f\t\t%.2f\t\t%.2f\t%.2f\n",stu[i].num, stu[i].name, stu[i].xuehao,
                        stu[i].sex, stu[i].age,
                        stu[i].phone,
                        stu[i].Clange, stu[i].Math, stu[i].Eng,stu[i].total, stu[i].mean);
        }
        printf("排序成功\n");
        if ((fp = fopen("学生信息.txt","wb")) == NULL)
                 return;
        for (i = 0; i < len; i++) {
                fprintf(fp, "%d %s %s %s %d%s %.2f %.2f %.2f %.2f %.2f\n", stu[i].num, stu[i].name, stu[i].xuehao,stu[i].sex,
                         stu[i].age, stu[i].phone,
                         stu[i].Clange,
                         stu[i].Math,
                         stu[i].Eng, stu[i].total, stu[i].mean);
        }
        fclose(fp);
 
}
 
/*统计数据(各科及格率,优秀率,平均成绩),
令及格为成绩在60及以上,优秀为成绩在85及以上*/
voidstatistics() {
        int i, j, tem;
        FILE *fp;
        if ((fp = fopen("学生信息.txt","rb")) == NULL) {
                 printf("Failed\n");
                 return;
        }
 
        for (i = 0; i < len; i++) {
                 fscanf(fp, "%d %s %s %s %d%s %f %f %f %f %f\n", &stu[i].num, &stu[i].name,&stu[i].xuehao, &stu[i].sex, &stu[i].age,
                        &stu[i].phone,
                        &stu[i].Clange,
                        &stu[i].Math,
                        &stu[i].Eng, &stu[i].total,&stu[i].mean);
        }
        fclose(fp);
        for (i = 0; i < len; i++) {
                 if (stu[i].xuehao[0] != '2')
                         break;
                 tem = i + 1;
        }
        int o, p;
        printf("请选择需要统计的数据:1.C语言成绩 2.数学成绩 3.英语成绩 4.总成绩(及格为180分及以上,优秀为255分及以上)\n");
        scanf("%d", &o);
        printf("请选择统计目标:1.及格学生 2.优秀学生 3.所有同学的平均成绩\n");
        scanf("%d", &p);
        int sum, m = 0, n = 0;
        float yep, fal, TOL = 0; //符合/不合/所有学生总成绩
        struct student stu1[len], stu2[len];
        switch (o) {
                 case 1:
                         switch (p) {
                                  case 1:
                                          for (i= 0; i < tem; i++) {
                                                  if(stu[i].Clange >= 60) {
                                                           stu1[m]= stu[i];
                                                           m++;
                                                  }else {
                                                           stu2[n]= stu[i];
                                                           n++;
                                                  }
                                          }
                                          printf("\nC语言及格学生:\n");
                                          printf("序号\t姓名\t\t学号\t\t性别\t年龄\t联系方式\tC语言成绩\t数学成绩\t英语成绩\t总成绩\t平均成绩\n");
                                          for (i= 0; i < m; i++) {
                                                  printf("%d\t%s\t\t%s\t%s\t%d\t%s\t%.2f\t\t%.2f\t\t%.2f\t\t%.2f\t%.2f\n",stu1[i].num, stu1[i].name, stu1[i].xuehao,
                                                         stu1[i].sex, stu1[i].age,
                                                         stu1[i].phone,
                                                         stu1[i].Clange, stu1[i].Math,stu1[i].Eng, stu1[i].total, stu1[i].mean);
                                          }
                                          printf("\nC语言不及格学生:\n");
                                          printf("序号\t姓名\t\t学号\t\t性别\t年龄\t联系方式\tC语言成绩\t数学成绩\t英语成绩\t总成绩\t平均成绩\n");
                                          for (i= 0; i < n; i++) {
                                                  printf("%d\t%s\t\t%s\t%s\t%d\t%s\t%.2f\t\t%.2f\t\t%.2f\t\t%.2f\t%.2f\n",stu2[i].num, stu2[i].name, stu2[i].xuehao,
                                                         stu2[i].sex, stu2[i].age,
                                                         stu2[i].phone,
                                                         stu2[i].Clange, stu2[i].Math,stu2[i].Eng, stu2[i].total, stu2[i].mean);
                                          }
                                          yep =((float)m / (float)tem ) * 100;
                                          fal =n / tem ;
                                          printf("\n一共%d位学生,C语言及格%d位学生,及格率%.2f%c",tem, m,  yep, 37);
                                          break;
                                  case 2:
                                          for (i= 0; i < tem; i++) {
                                                  if(stu[i].Clange >= 85) {
                                                           stu1[m]= stu[i];
                                                           m++;
                                                  }
                                          }
                                          printf("\nC语言优秀学生:\n");
                                          printf("序号\t姓名\t\t学号\t\t性别\t年龄\t联系方式\tC语言成绩\t数学成绩\t英语成绩\t总成绩\t平均成绩\n");
                                          for (i= 0; i < m; i++) {
                                                  printf("%d\t%s\t\t%s\t%s\t%d\t%s\t%.2f\t\t%.2f\t\t%.2f\t\t%.2f\t%.2f\n",stu1[i].num, stu1[i].name, stu1[i].xuehao,
                                                         stu1[i].sex, stu1[i].age,
                                                         stu1[i].phone,
                                                         stu1[i].Clange, stu1[i].Math,stu1[i].Eng, stu1[i].total, stu1[i].mean);
                                          }
                                          yep =((float)m / (float)tem ) * 100;
                                          printf("\n一共%d位学生,C语言优秀%d位学生,优秀率%.2f%c",tem, m, yep, 37);
                                          break;
                                  case 3:
                                          printf("序号\t姓名\t\t学号\t\t性别\t年龄\t联系方式\tC语言成绩\t数学成绩\t英语成绩\t总成绩\t平均成绩\n");
                                          for (i= 0; i < tem; i++) {
                                                  printf("%d\t%s\t\t%s\t%s\t%d\t%s\t%.2f\t\t%.2f\t\t%.2f\t\t%.2f\t%.2f\n",stu[i].num, stu[i].name, stu[i].xuehao,
                                                         stu[i].sex, stu[i].age,
                                                         stu[i].phone,
                                                         stu[i].Clange, stu[i].Math, stu[i].Eng,stu[i].total, stu[i].mean);
                                          }
                                          for (i= 0; i < tem; i++)
                                                  TOL+= stu[i].Clange;
 
                                          printf("\n所有学生C语言的平均成绩为%.2f", TOL / tem);
                                          break;
                         }
                         break;
                 case 2:
                         switch (p) {
                                  case 1:
                                          for (i= 0; i < tem; i++) {
                                                  if(stu[i].Math >= 60) {
                                                           stu1[m]= stu[i];
                                                           m++;
                                                  }else {
                                                           stu2[n]= stu[i];
                                                           n++;
                                                  }
                                          }
                                          printf("\n数学及格学生:\n");
                                          printf("序号\t姓名\t\t学号\t\t性别\t年龄\t联系方式\tC语言成绩\t数学成绩\t英语成绩\t总成绩\t平均成绩\n");
                                          for (i= 0; i < m; i++) {
                                                  printf("%d\t%s\t\t%s\t%s\t%d\t%s\t%.2f\t\t%.2f\t\t%.2f\t\t%.2f\t%.2f\n",stu1[i].num, stu1[i].name, stu1[i].xuehao,
                                                         stu1[i].sex, stu1[i].age,
                                                         stu1[i].phone,
                                                         stu1[i].Clange, stu1[i].Math,stu1[i].Eng, stu1[i].total, stu1[i].mean);
                                          }
                                          printf("\n数学不及格学生:\n");
                                          printf("序号\t姓名\t\t学号\t\t性别\t年龄\t联系方式\tC语言成绩\t数学成绩\t英语成绩\t总成绩\t平均成绩\n");
                                          for (i= 0; i < n; i++) {
                                                  printf("%d\t%s\t\t%s\t%s\t%d\t%s\t%.2f\t\t%.2f\t\t%.2f\t\t%.2f\t%.2f\n",stu2[i].num, stu2[i].name, stu2[i].xuehao,
                                                         stu2[i].sex, stu2[i].age,
                                                         stu2[i].phone,
                                                         stu2[i].Clange, stu2[i].Math,stu2[i].Eng, stu2[i].total, stu2[i].mean);
                                          }
                                          yep =((float)m / (float)tem ) * 100;
                                          fal =n / tem ;
                                          printf("\n一共%d位学生,数学及格%d位学生,及格率%.2f%c", tem, m,  yep, 37);
                                          break;
                                  case 2:
                                          for (i= 0; i < tem; i++) {
                                                  if(stu[i].Math >= 85) {
                                                           stu1[m] = stu[i];
                                                           m++;
                                                  }
                                          }
                                          printf("\n数学优秀学生:\n");
                                          printf("序号\t姓名\t\t学号\t\t性别\t年龄\t联系方式\tC语言成绩\t数学成绩\t英语成绩\t总成绩\t平均成绩\n");
                                          for (i= 0; i < m; i++) {
                                                  printf("%d\t%s\t\t%s\t%s\t%d\t%s\t%.2f\t\t%.2f\t\t%.2f\t\t%.2f\t%.2f\n",stu1[i].num, stu1[i].name, stu1[i].xuehao,
                                                         stu1[i].sex, stu1[i].age,
                                                         stu1[i].phone,
                                                         stu1[i].Clange, stu1[i].Math,stu1[i].Eng, stu1[i].total, stu1[i].mean);
                                          }
                                          yep =((float)m / (float)tem ) * 100;
                                          printf("\n一共%d位学生,数学优秀%d位学生,优秀率%.2f%c", tem, m, yep, 37);
                                          break;
                                  case 3:
                                          printf("序号\t姓名\t\t学号\t\t性别\t年龄\t联系方式\tC语言成绩\t数学成绩\t英语成绩\t总成绩\t平均成绩\n");
                                          for (i= 0; i < tem; i++) {
                                                  printf("%d\t%s\t\t%s\t%s\t%d\t%s\t%.2f\t\t%.2f\t\t%.2f\t\t%.2f\t%.2f\n",stu[i].num, stu[i].name, stu[i].xuehao,
                                                         stu[i].sex, stu[i].age,
                                                         stu[i].phone,
                                                         stu[i].Clange, stu[i].Math, stu[i].Eng,stu[i].total, stu[i].mean);
                                          }
                                          for (i= 0; i < tem; i++)
                                                  TOL+= stu[i].Math;
 
                                          printf("\n所有学生C语言的平均成绩为%.2f", TOL / tem);
                                          break;
                         }
                         break;
                 case 3:
                         switch (p) {
                                  case 1:
                                          for (i= 0; i < tem; i++) {
                                                  if(stu[i].Eng >= 60) {
                                                           stu1[m] = stu[i];
                                                           m++;
                                                  }else {
                                                           stu2[n]= stu[i];
                                                           n++;
                                                  }
                                          }
                                          printf("\n英语及格学生:\n");
                                          printf("序号\t姓名\t\t学号\t\t性别\t年龄\t联系方式\tC语言成绩\t数学成绩\t英语成绩\t总成绩\t平均成绩\n");
                                          for (i= 0; i < m; i++) {
                                                  printf("%d\t%s\t\t%s\t%s\t%d\t%s\t%.2f\t\t%.2f\t\t%.2f\t\t%.2f\t%.2f\n",stu1[i].num, stu1[i].name, stu1[i].xuehao,
                                                         stu1[i].sex, stu1[i].age,
                                                         stu1[i].phone,
                                                         stu1[i].Clange, stu1[i].Math,stu1[i].Eng, stu1[i].total, stu1[i].mean);
                                          }
                                          printf("\n英语不及格学生:\n");
                                          printf("序号\t姓名\t\t学号\t\t性别\t年龄\t联系方式\tC语言成绩\t数学成绩\t英语成绩\t总成绩\t平均成绩\n");
                                          for (i= 0; i < n; i++) {
                                                  printf("%d\t%s\t\t%s\t%s\t%d\t%s\t%.2f\t\t%.2f\t\t%.2f\t\t%.2f\t%.2f\n",stu2[i].num, stu2[i].name, stu2[i].xuehao,
                                                         stu2[i].sex, stu2[i].age,
                                                         stu2[i].phone,
                                                         stu2[i].Clange, stu2[i].Math,stu2[i].Eng, stu2[i].total, stu2[i].mean);
                                          }
                                          yep =((float)m / (float)tem ) * 100;
                                          printf("\n一共%d位学生,英语及格%d位学生,及格率%.2f%c", tem, m,  yep, 37);
                                          break;
                                  case 2:
                                          for (i= 0; i < tem; i++) {
                                                  if(stu[i].Eng >= 85) {
                                                           stu1[m]= stu[i];
                                                           m++;
                                                  }
                                          }
                                          printf("\n英语优秀学生:\n");
                                          printf("序号\t姓名\t\t学号\t\t性别\t年龄\t联系方式\tC语言成绩\t数学成绩\t英语成绩\t总成绩\t平均成绩\n");
                                          for (i= 0; i < m; i++) {
                                                  printf("%d\t%s\t\t%s\t%s\t%d\t%s\t%.2f\t\t%.2f\t\t%.2f\t\t%.2f\t%.2f\n",stu1[i].num, stu1[i].name, stu1[i].xuehao,
                                                         stu1[i].sex, stu1[i].age,
                                                         stu1[i].phone,
                                                         stu1[i].Clange, stu1[i].Math,stu1[i].Eng, stu1[i].total, stu1[i].mean);
                                          }
                                          yep =((float)m / (float)tem ) * 100;
                                          printf("\n一共%d位学生,英语优秀%d位学生,优秀率%.2f%c", tem, m, yep, 37);
                                          break;
                                  case 3:
                                          printf("序号\t姓名\t\t学号\t\t性别\t年龄\t联系方式\tC语言成绩\t数学成绩\t英语成绩\t总成绩\t平均成绩\n");
                                          for (i= 0; i < tem; i++) {
                                                  printf("%d\t%s\t\t%s\t%s\t%d\t%s\t%.2f\t\t%.2f\t\t%.2f\t\t%.2f\t%.2f\n",stu[i].num, stu[i].name, stu[i].xuehao,
                                                         stu[i].sex, stu[i].age,
                                                         stu[i].phone,
                                                         stu[i].Clange, stu[i].Math, stu[i].Eng,stu[i].total, stu[i].mean);
                                          }
                                          for (i= 0; i < tem; i++)
                                                  TOL+= stu[i].Eng;
 
                                          printf("\n所有学生英语的平均成绩为%.2f", TOL / tem);
                                          break;
                         }
                         break;
                 case 4:
                         switch (p) {
                                  case 1:
                                          for (i= 0; i < tem; i++) {
                                                  if(stu[i].total >= 180) {
                                                           stu1[m]= stu[i];
                                                           m++;
                                                  }else {
                                                           stu2[n]= stu[i];
                                                           n++;
                                                  }
                                          }
                                          printf("\n总成绩及格学生:\n");
                                          printf("序号\t姓名\t\t学号\t\t性别\t年龄\t联系方式\tC语言成绩\t数学成绩\t英语成绩\t总成绩\t平均成绩\n");
                                          for (i= 0; i < m; i++) {
                                                  printf("%d\t%s\t\t%s\t%s\t%d\t%s\t%.2f\t\t%.2f\t\t%.2f\t\t%.2f\t%.2f\n",stu1[i].num, stu1[i].name, stu1[i].xuehao,
                                                         stu1[i].sex, stu1[i].age,
                                                         stu1[i].phone,
                                                         stu1[i].Clange, stu1[i].Math,stu1[i].Eng, stu1[i].total, stu1[i].mean);
                                          }
                                          printf("\n总成绩不及格学生:\n");
                                          printf("序号\t姓名\t\t学号\t\t性别\t年龄\t联系方式\tC语言成绩\t数学成绩\t英语成绩\t总成绩\t平均成绩\n");
                                          for (i= 0; i < n; i++) {
                                                  printf("%d\t%s\t\t%s\t%s\t%d\t%s\t%.2f\t\t%.2f\t\t%.2f\t\t%.2f\t%.2f\n",stu2[i].num, stu2[i].name, stu2[i].xuehao,
                                                         stu2[i].sex, stu2[i].age,
                                                         stu2[i].phone,
                                                         stu2[i].Clange, stu2[i].Math,stu2[i].Eng, stu2[i].total, stu2[i].mean);
                                          }
                                          yep =((float)m / (float)tem ) * 100;
                                          fal =n / tem ;
                                          printf("\n一共%d位学生,总成绩及格%d位学生,及格率%.2f%c", tem, m,  yep, 37);
                                          break;
                                  case 2:
                                          for (i= 0; i < tem; i++) {
                                                  if(stu[i].total >= 255) {
                                                           stu1[m]= stu[i];
                                                           m++;
                                                  }
                                          }
                                          printf("\n总成绩优秀学生:\n");
                                          printf("序号\t姓名\t\t学号\t\t性别\t年龄\t联系方式\tC语言成绩\t数学成绩\t英语成绩\t总成绩\t平均成绩\n");
                                          for (i= 0; i < m; i++) {
                                                  printf("%d\t%s\t\t%s\t%s\t%d\t%s\t%.2f\t\t%.2f\t\t%.2f\t\t%.2f\t%.2f\n",stu1[i].num, stu1[i].name, stu1[i].xuehao,
                                                         stu1[i].sex, stu1[i].age,
                                                         stu1[i].phone,
                                                         stu1[i].Clange, stu1[i].Math,stu1[i].Eng, stu1[i].total, stu1[i].mean);
                                          }
                                          yep =((float)m / (float)tem ) * 100;
                                          printf("\n一共%d位学生,总成绩优秀%d位学生,优秀率%.2f%c", tem, m, yep, 37);
                                          break;
                                  case 3:
                                          printf("序号\t姓名\t\t学号\t\t性别\t年龄\t联系方式\tC语言成绩\t数学成绩\t英语成绩\t总成绩\t平均成绩\n");
                                          for (i= 0; i < tem; i++) {
                                                  printf("%d\t%s\t\t%s\t%s\t%d\t%s\t%.2f\t\t%.2f\t\t%.2f\t\t%.2f\t%.2f\n",stu[i].num, stu[i].name, stu[i].xuehao,
                                                         stu[i].sex, stu[i].age,
                                                         stu[i].phone,
                                                         stu[i].Clange, stu[i].Math, stu[i].Eng,stu[i].total, stu[i].mean);
                                          }
                                          for (i= 0; i < tem; i++)
                                                  TOL+= stu[i].total;
 
                                          printf("\n所有学生总成绩的平均成绩为%.2f", TOL / tem);
                                          break;
                         }
                         break;
        }
}
 
 
 
int main(){
        menu();
        int n, a;
        scanf("%d", &n);
        switch (n) {
                 case 1:
                         input();
                         break;
                 case 2:
                         display();
                         break;
                 case 3:
                         inquire();
                         break;
                 case 4:
                         correct();
                         break;
                 case 5:
                         Delete();
                         break;
                 case 6:
                         sort();
                         break;
                 case 7:
                         statistics();
                         break;
                 default:
                         printf("Wrong\n");
                         break;
        }
        printf("是否回到主菜单?(1.是 0.否)");
        while (scanf("%d", &a)) {
                 if (a == 1) {
                         menu();
                         scanf("%d",&n);
                         switch (n) {
                                 case1:
                                          input();
                                          break;
                                  case 2:
                                          display();
                                          break;
                                  case 3:
                                          inquire();
                                          break;
                                  case 4:
                                          correct();
                                          break;
                                  case 5:
                                          Delete();
                                          break;
                                  case 6:
                                          sort();
                                          break;
                                  case 7:
                                          statistics();
                                          break;
                                  default:
                                          printf("Wrong\n");
                                          break;
                         }
                 } else if (a == 0)
                         break;
                 printf("是否回到主菜单?(1.是 0.否)");
        }
        return 0;
}

  • 0
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 2
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值