程序说明:有 N 个学生,每个学生的数据包含学号(不重复)、姓名、三门课的成绩及平均成绩,试设计一学生成绩管理系统,使之能提供以下功能: (1)主菜单 学生成绩管理系统 1、 成绩录入 2、 成绩查询 3、 成绩统计 4、 退 出 (2)各菜单项功能 ① 成绩录入:输入学生的学号、姓名及三门课的成绩; ② 成绩查询:(至少一种查询方式). v 按学号查询学生记录。 v 查询不及格学生的记录。 ③成绩统计: v 计算学生的平均分; v 根据学生的平均分高低,对学生的数据进行排序后输出; v 对学生单科成绩排序,输出学生姓名与该科成绩; ④退出系统:退出整个系统(即主菜单)。 (3)结构体数组: #define N 30 struct student {int num; /* 定义学号*/char name[20]; /* 定义姓名*/float score[3]; /* 定义存贮三门课成绩的数组*/float average; /* 定义平均成绩*/};struct student stu[N]; /* 定义结构体数组,存贮多个学生的记录*/. #include #include〈stdlib.h> #include〈string。h> struct student { int num; char name[20]; float score[4]; float average; }stu[10000]; long t,max; bool unpass[1000]; FILE *fstu=fopen("stud.dat","at+"); int init() { int no,i; float s[4],ave; char nam[20]; while (!feof(fstu)) { fscanf(fstu,”%d”,&no); fscanf(fstu,”%s",nam); fscanf(fstu,"%f%f%f%f",&s[1],&s[2],&s[3],&ave); if (no>max) max=no; stu[no].num=no; strcpy(stu[no].name,nam); unpass[no]=false; for (i=1;i〈=3;i++){ stu[no].score[i]=s[i]; if (s[i]〈60) unpass[no]=true; } stu[no].average=ave; } } int stuinsert() { int no,i; float s[3],sum; char nam[20],cha; loop:printf(”请输入学生的学号、姓名及三门课的成绩 \n"); scanf(”%d”,&no); scanf("%s”,nam); scanf(”%f%f%f/n”,&s[1],&s[2],&s[3]); if (no>max) max=no; stu[no].num=no; sum=0。0; strcpy(stu[no].name,nam); unpass[no]=false; for (i=1;i〈=3;i++) { stu[no]。score[i]=s[i]; sum=sum+s[i]; if (s[i]<60) unpass[no]=true; } stu[no].average=sum/3。0; fprintf(fstu,...