怎样通过建立结构类型去完成该结果的输出,此种结构类型应该怎样去建立?

写一个程序,要求如下:我们数学与计算科学学院举办C++语言程序设计竞赛,每个班有10个学生参加,共有5个班,录入成绩单,分别录入学生的班级名称、姓名,笔试成绩和上机成绩(笔试成绩和.上机成绩满分是100分),总成绩为笔试成绩占30%,上机成绩占70%,

计算:

(1)每个同学的总成绩;

(2)并把所有学生按总分从高到低进行排序,显示器上输出班级名、姓名和总成绩。

结构类型如下:

struct Student

char className[30];//班级名称char name[20]//姓名

int writtenResult;//笔试成绩

int OperationaResult;//. 上机成绩float total; //总成绩

};

利用循环获取各班学生的信息到一个学生信息二维结构数组里,然后计算其总分,然后再用循环排序这个学生结构数组即可。测试的例子我是用2个班级,每班3个学生进行的测试。代码如下:
参考链接:
结构体数组及其定义和使用,C语言结构体数组详解

#include <iostream>
#include <string.h>
#define CLASS_NUM 5  //班级的数量   测试的例子是用的2个班 
#define STU_NUM 10   //每班个学生的个数  进行的测试 

using namespace std;
 

struct Student{


char className[30];//班级名称
char name[20];//姓名
int writtenResult;//笔试成绩
int OperationaResult;//. 上机成绩
float total; //总成绩
};

int main(void){
    //http://c.biancheng.net/view/245.html
    struct Student     stus [CLASS_NUM][STU_NUM];
    
    int i,j;
    
    char cname[30];
    char tname[20];
    int wresult;
    int oresult;
    float ttotal;
    //获取 各班级学生的信息,并计算他们各自的总成绩 
    for(i=0;i<CLASS_NUM;i++){
        
        cout<<"请输入第"<<i+1<<"个班级的名称:";
        cin>>cname;
        
        for(j=0;j<STU_NUM;j++){
            
            strcpy(stus[i][j].className,cname);
            
            cout<<"请输入班级"<<cname<<"第"<<j+1<<"个学生的姓名:";
            cin>>stus[i][j].name; 
            
            cout<<"请输入班级"<<cname<<"第"<<j+1<<"个学生的C++笔记成绩:";
            cin>>stus[i][j].writtenResult;
            
            cout<<"请输入班级"<<cname<<"第"<<j+1<<"个学生的C++上机成绩:";
            cin>>stus[i][j].OperationaResult;
            
            cout<<endl; 
            
            //计算每个班每个学生的总成绩 
            stus[i][j].total = (float)(stus[i][j].writtenResult*0.3+stus[i][j].OperationaResult*0.7); 
        }
        
                    
    }
    
 //用一维学生结构指针访问二维学生结构数组 
    struct    Student * p = &stus[0][0];
    //float max = p->total;
    
    //按总分从高到低排序学生信息    
    for(i=0;i<CLASS_NUM*STU_NUM;i++){
        
        for(j=i;j<CLASS_NUM*STU_NUM;j++){
            
            if((p+i)->total<(p+j)->total){
                
                strcpy(cname,(p+i)->className);
                strcpy((p+i)->className,(p+j)->className);
                strcpy((p+j)->className,cname);
                
                strcpy(tname,(p+i)->name);
                strcpy((p+i)->name,(p+j)->name);
                strcpy((p+j)->name,tname);
                
                wresult = (p+i)->writtenResult;
                (p+i)->writtenResult = (p+j)->writtenResult;
                (p+j)->writtenResult = wresult;
                
                oresult = (p+i)->OperationaResult;
                (p+i)->OperationaResult = (p+j)->OperationaResult;
                (p+j)->OperationaResult = oresult;
                
                ttotal = (p+i)->total;
                (p+i)->total = (p+j)->total;
                (p+j)->total = ttotal;
                
                
            }
            
        }
    
                    
    }
    
    //打印结果 
    cout<<"按总成绩从高到底排序的结果为:"<<endl; 
    for(i=0;i<CLASS_NUM*STU_NUM;i++){
        cout<<"班级名称:"<<(p+i)->className<<", 姓名:"<<(p+i)->name<<", 总成绩为:"<<(p+i)->total<<endl;
    }
    
    return 0;
}

img