可以在学生成绩管理系统中增添求班级平均值和最大值以及最小值的功能代码吗


#include
#include
#include
#include

typedef struct student {
    int numb;
    char name[10];
    int score[3];
    double ave;

}STU;

void input(STU* p, int num);
void showAll(STU*, int);
int searchByNumb(STU *,int);
int searchByName(STU *,int);
void search(STU *, int);
void insert(STU *, int *,int);
void del(STU *, int *);
void update(STU *, int);
void sort(STU *, int);
void save_info(STU *,int);
void load_info(STU *,int *);
void backup();

void main() {
    int num = 0, choice;
    STU stuArray[100];

    for (;;) {
        system("cls");
        printf("---------------------------------------------------------------------\n");
        printf("                    *学生信息管理系统*                                 \n");
        printf("---------------------------------------------------------------------\n");
        printf("----------------------------------系统功能菜单-----------------------\n");
        printf("                * 1.输入学生信息            \n");
        printf("                * 2.显示全部学生信息        \n");
        printf("                * 3.查询学生信息            \n");
        printf("                * 4.新增学生信息            \n");
        printf("                * 5.删除学生信息            \n");
        printf("                * 6.修改学生信息            \n");
        printf("                * 7.对学生信息排序            \n");
        printf("                * 8.保存当前信息到文件        \n");
        printf("                * 9.从文件加载学生信息        \n");
        printf("                * 10.备份                    \n");
        printf("                * 0.退出系统                \n");
        printf("--------------------------------------------------------------------------\n");
        printf("请选择要实现功能的相应序号 :");
        scanf("%d", &choice);

        if (choice == 0) break;
        switch (choice) {
        case 1: printf("输入人数:"); scanf("%d", &num); input(stuArray, num); break;
        case 2: showAll(stuArray,num); break;
        case 3: search(stuArray, num); break;
        case 4: insert(stuArray,&num,100); break;
        case 5: del(stuArray, &num); break;
        case 6: update(stuArray, num); break;
        case 7: sort(stuArray, num); break;
        case 8: save_info(stuArray, num); break;
        case 9: load_info(stuArray, &num); break;
        case 10: backup(); break;

        }
        printf("请按任意键继续.......\n");
        getch();

    }
    printf("感谢您的使用,再见!\n");
}
//1.输入学生信息 
void input(STU* p, int num) {
    int i;
    printf("请输入%d名学生信息\n", num);
    printf("学号\t姓名\t数学\t英语\t语文\n");
    for (i = 0; i < num; i++) {
        scanf("%d%s%d%d%d", &p[i].numb, p[i].name, &p[i].score[0], &p[i].score[1], &p[i].score[2]);
        p[i].ave = (p[i].score[0] + p[i].score[1] + p[i].score[2]) / 3.0;
    }
    printf("输入完成\n");
}
// 2.显示全部学生信息 
void showAll(STU* p, int num) {
    int i;
    system("cls");
    printf("目前共有%d名学生信息\n",num);
    printf("学号\t姓名\t数学\t英语\t语文\t平均分\n");
    for (i = 0; i < num; i++) {
        printf("%d\t%s\t%d\t%d\t%d\t%.2lf\t\n", p[i].numb, p[i].name, p[i].score[0], p[i].score[1], p[i].score[2], p[i].ave);

    }
    printf("输出完成\n");
    
}

int searchByNumb(STU *p,int num){
    int i,number;
    printf("请输入要查询学生的学号:");
    scanf("%d",&number);
    for(i = 0;i<num;i++)
    {
        if(p[i].numb==number)
        break;}
    return i;
    
    
}
int searchByName(STU* p, int num){
    int i;
    char name[10];

    printf("请输入要查询学生的姓名:");
    scanf("%s", name);
    
    for(i=0;i<num;i++)
        if(strcmp(p[i].name,name)==0)
            break;
     return i;
     
}
//3.查询学生信息 
void search(STU *p,int num){
    int choice,result=1;
    
    for(;;)
    {
        system("cls");
        printf("现在进入查询学生信息的填写\n"); 
        printf("按学号查询请按1,按姓名查询请按2:");
        scanf("%d",&choice);
        switch(choice)
        {
            case 1: result=searchByNumb(p,num);break;
            case 2: result=searchByName(p,num);break;
            
         } 
        if(result>=num)
         printf("查无此人\n");
        else{
             printf("找到了,该生信息如下: \n");
             printf("学号\t姓名\t数学\t英语\t语文\t平均分\n");
             printf("%d\t%s\t%d\t%d\t%d\t%.2f\n",p[result].numb,p[result].name,p[result].score[0],p[result].score[1],p[result].score[2],p[result].ave);

         }
         printf("继续查找请按1,退出请按0;");
         scanf("%d",&choice);
         if(choice==0) break;
         
          
    }
} 
//4.新增学生信息函数
void insert(STU *p,int *pnum,int maxLen)
{
    STU stu;
    int choice;
    
    for(;;)
    {
        if(*pnum>100){
            printf("人数已达上限,无法添加!\n");
            break;
            
        }
        else{
            system("cls");
            printf("现在进行新增学生信息填写\n");
            printf("学号\t姓名\t数学\t英语\t语文\n");
            scanf("%ds%d%d%d",&stu.numb,stu.name,&stu.score[0],&stu.score[1],&stu.score[2]);
            stu.ave=(stu.score[0]+stu.score[1]+stu.score[2])/3.0;
            
            p[*pnum]=stu;
            (*pnum)++;
            printf("成功添加!继续添加请按1,退出请按0;");
            scanf("%d",&choice);
            if(choice==0) break; 
        }
    }
    
}
//5.删除学生信息
 void del(STU *p,int *pnum){int result,i,choice;
 for(;;){
     system("cls");
     printf("现在进入删除学生信息的处理\n");
     
     result=searchByNumb(p,*pnum);
     if(result>=*pnum)
     printf("查无此人\n");
     else
     {
         printf("找到了,确定删除请按1,取消删除请按2;");
         scanf("%d",&choice);
         if(choice==i){
             //
             for(i=result;i<*pnum-1;i++)
             p[i]=p[i+1];
             (*pnum)--;
             printf("成功删除,当前学生总人数是%d人\n",*pnum);
             
         } 
          
     }
      printf("继续删除请按1,退出请按0;");
     scanf("%d",&choice); 
     if(choice==0) break;
     
 }
 }
 
 //6.修改学生信息
 void update(STU *p,int num){
     STU stu;
     int result,choice,key_code;
         loop1:
         printf("请输入五位数密码:\n");
         scanf("%d",&key_code);
         if(key_code == 20230){
             if(result != -1){
            for(;;){
         system("pause"); 
         printf("现在进入修改学生信息的处理\n");
         result = searchByNumb(p,num);
         if(result >= num)
             printf("查无此人\n");
         else
         {
             printf("找到了,该生信息如下: \n");
             printf("学号\t姓名\t数学\t英语\t语文\t平均分\n");
             printf("%d\t%s\t%d\t%d\t%d\t%.2lf\n",p[result].numb,p[result].name,p[result].score[0],p[result].score[1],p[result].score[2],p[result].ave);

             printf("确定修改请按1,取消修改请按2;");
             scanf("%d",&choice);
             if(choice==1){
                 printf("现在进行修改学生信息的填写\n");
                printf("学号\t姓名\t数学\t英语\t语文\n");
                scanf("%d%s%d%d%d",&stu.numb,stu.name,&stu.score[0],&stu.score[1],&stu.score[2]);
                stu.ave=(stu.score[0]+stu.score[1]+stu.score[2])/3.0;
                p[result]=stu;
                printf("成功修改,修改后的信息如下\n");
                printf("学号\t姓名\t数学\t英语\t语文\t平均分\n") ;
            printf("%d\t%s\t%d\t%d\t%d\t%.2lf\n",p[result].numb,p[result].name,p[result].score[0],p[result].score[1],p[result].score[2],p[result].ave);

             }
         }
         printf("继续修改请按1,退出请按0;");
         scanf("%d",&choice);
         if(choice==0) break;
          
     }
 }
          }
     else{
         printf("密码错误,请重新输入:");
         goto loop1;
        }
         }
     
//7.排序 
 void sort(STU *p,int num){
     char style='a';
     int type=1,i,j,index;
     STU temp;
     
     system("cls");
     printf("现在进入对当前信息排序的处理\n");
     printf("按升序排列请按a,按降序排列请按d;");
     getchar();
     scanf("%c",&style);
     
     printf("按学号排序请按1,按平均分排序请按2;");
     scanf("%d",&type);
     
     if(style=='a'){
         if(type==1){
             for(i=0;i<num-1;i++){
                 if(p[index].numb>p[j].numb)
                 index=j;
                 temp=p[i];p[i]=p[index];p[index]=temp;
                 
             }
             
         }
         else if(type==2){
             for(i=0;i<num-1;i++){
                 index=i;
                 for(j=i+1;j<num;j++)
                     if(p[index].ave>p[j].ave)
                         index=j;
             temp=p[i];p[i]=p[index];p[index]=temp;
             }
             
         }
     }
    if(style=='d'){
         if(type==1){
             for(i=0;i<num-1;i++){
                 if(p[index].numb>p[j].numb)
                 index=j;
                 temp=p[i];p[i]=p[index];p[index]=temp;
                 
             }
             
         }
         else if(type==2){
             for(i=0;i<num-1;i++){
                 index=i;
                 for(j=i+1;j<num;j++)
                     if(p[index].ave>p[j].ave)
                         index=j;
             temp=p[i];p[i]=p[index];p[index]=temp;
             }
             
         }
     }
     printf("排序成功\n");
 }
//8.保存当前信息到文件
void save_info(STU *p,int num){    
    char filename[20];
    FILE *fp;
      int i;
      
      system("cls");
      printf("现在进入保存当前信息到文件的处理\n");
      printf("请输入文件名:");
      scanf("%s",filename);
      
      if((fp=fopen(filename,"w"))==NULL){
          printf("无法打开文件\n");
          return;
      }
      fprintf(fp,"目前共有%d名学生信息\n",num);
      fprintf(fp,"学号\t姓名\t数学\t英语\t语文\t平均分\n") ;
      for(i=0;i<num;i++)
      {
              fprintf(fp,"%d\t%s\t%d\t%d\t%d\t%.2lf\t\n", &p[i].numb, p[i].name, &p[i].score[0], &p[i].score[1], &p[i].score[2], p[i].ave);

      }
      fclose(fp);
      printf("保存成功\n");
    
}

//9.从文件加载学生信息
  void load_info(STU *p,int *pnum){
      char filename[20],secondLine[50];
      FILE *fp;
      int i,num;
      
      system("cls");
      printf("现在进入从文件加载学生信息的处理\n");
      printf("请输入文件名:");
      scanf("%s",filename);
      
      if((fp=fopen(filename,"r"))==NULL){
          printf("无法打开文件\n");
          return ;
      }
      fscanf(fp,"目前共有%d名学生信息",&num);
      //过滤第二行信息("学号\t姓名\t数学\t英语\t语文\t平均分\n") ;
      for(i=0;i<6;i++)
          fscanf(fp,"%s",secondLine);
    for(i=0;i<num;i++){ 
          fscanf(fp,"%d%s%d%d%d%lf",&p[i].numb, p[i].name, &p[i].score[0], &p[i].score[1], &p[i].score[2], p[i].ave);
      }
     *pnum=num;
     fclose(fp);
     printf("加载成功\n");
  } 
//10.备份
  void backup(){
      FILE *in,*out;
      char infile[20],outfile[20],ch;
      printf("请输入源文件的文件名:");
    scanf("%s",infile);
    printf("请输入备份文件的文件名:");
      scanf("%s",outfile);
      if((in=fopen(infile,"r"))==NULL)
      {
          printf("无法打开该文件\n");
          return ;
          
      }
      if((out=fopen(outfile,"w"))==NULL)
      {
          printf("无法打开该文件\n");
          return ;
          
      }
      ch=fgetc(in);
      while(ch!=EOF){
          fputc(ch,out);
          ch=fgetc(in);
          
      }
      printf("备份成功\n");
      fclose(in);
      fclose(out);
  } 
  

求指点,谢谢!

在菜单里面加上
case 某个值: printf("班级最高分为:%d\n", class_max(stuArray, num)); break;
以及代码
double class_average(STU* p, int num) {
int i;
double sum = 0.0;
for (i = 0; i < num; i++) {
sum += p[i].ave;
}
return sum / num;
}

参考GPT和自己的思路:可以增加求班级平均值和最大值以及最小值的功能代码。可以在输入学生信息后,遍历所有学生的成绩,统计班级的平均分、最大值和最小值,并在显示全部学生信息函数中添加班级的统计信息的显示。具体代码实现如下:

在学生结构体中添加全局变量:

int class_total[3];    // 班级成绩的总和
int class_max[3];      // 班级成绩的最大值
int class_min[3];      // 班级成绩的最小值

在输入学生信息函数中完成班级成绩的统计:

void input(STU* p, int num) {
    int i, j;
    printf("请输入%d名学生信息\n", num);
    printf("学号\t姓名\t数学\t英语\t语文\n");
    for (i = 0; i < num; i++) {
        scanf("%d%s%d%d%d", &p[i].numb, p[i].name, &p[i].score[0], &p[i].score[1], &p[i].score[2]);
        p[i].ave = (p[i].score[0] + p[i].score[1] + p[i].score[2]) / 3.0;
        for (j = 0; j < 3; j++) {
            p[i].class_total[j] += p[i].score[j];
            if (p[i].score[j] > p[i].class_max[j]) {
                p[i].class_max[j] = p[i].score[j];
            }
            if (p[i].score[j] < p[i].class_min[j] || p[i].class_min[j] == 0) {
                p[i].class_min[j] = p[i].score[j];
            }
        }
    }
    printf("输入完成\n");
}

在显示全部学生信息函数中添加班级统计信息的显示:

// 2.显示全部学生信息 
void showAll(STU* p, int num) {
    int i, j;
    system("cls");
    printf("目前共有%d名学生信息\n",num);
    printf("学号\t姓名\t数学\t英语\t语文\t平均分\n");
    for (i = 0; i < num; i++) {
不知道你这个问题是否已经解决, 如果还没有解决的话:
  • 你可以看下这个问题的回答https://ask.csdn.net/questions/681212
  • 我还给你找了一篇非常好的博客,你可以看看是否有帮助,链接:微信小程序大段文本内容过多,实现折叠与展开效果解决方案 以及 多行文本溢出隐藏不生效的解决方案
  • 除此之外, 这篇博客: 小白用单链表实现 成绩大于等于某值的学生信息输出中的 采用尾插法实现的,头插法这道题不适用,因为要按照学号的顺序 部分也许能够解决你的问题, 你可以仔细阅读以下内容或者直接跳转源博客中阅读:

    一般用带有头结点来建立链表,这样更简便一些

    #include<cstdlib>
    #include<cstdio>
    #include<string.h>
    typedef struct student//建立结构体
    {
        int n;
        char name[100];//这里没有选择用string
        //原因是scanf里的%s对string不兼容,好像是这样的......
        int s;
        struct student *next;
    } stu;
    using namespace std;
    
    int main()
    {
        int x,y;
        char a[100];
        scanf("%d",&x);
        stu* head = NULL;//定义头结点
        head = new stu();
        head->next =NULL;
        stu *p =head;
        while(x!=0)
        {
            scanf(" %s %d",a,&y);//没有用cin,而是选择scanf,对于整型和字符串的输入需要注意
            stu *q = NULL;
            q = new stu();
            p->next = q;
            q->n = x;
            strcpy(q->name,a);//关于字符串函数的使用
            q->s = y;
            p = q;
            scanf("%d",&x);
        }
       //以前因为判断是不是输入错误所以debug: printf("\nbull shit\n");
        int line;
        scanf("%d",&line);
        p = head->next;
        while(p!=NULL)
        {
            if(p->s>=line)
            {
                printf("%d %s %d\n",p->n,p->name,p->s);
                p = p->next;
            }
            else
                p = p->next;
        }
        p = head;
        while(p!=NULL)//删除链表,防止超时
        {
            stu *q =p;
            p = q->next;
            free(q);
        }
        return 0;
    }
    
    
  • 您还可以看一下 AI100讲师老师的朋友圈爆款背后的计算机视觉技术与应用课程中的 朋友圈爆款背后的计算机视觉技术与应用小节, 巩固相关知识点

如果你已经解决了该问题, 非常希望你能够分享一下解决方案, 写成博客, 将相关链接放在评论区, 以帮助更多的人 ^-^