多级排序.解决办法

多级排序....怎么用C/C++实现一个多级排序???例如下:实现一个小学生成绩管理系统,要求把成绩好的同学放到

多级排序....
怎么用C/C++实现一个多级排序???
例如下:
实现一个小学生成绩管理系统,要求把成绩好的同学放到前面的。我们首先是按个人的总成绩进行排名,如果某两个人的总分相同,则按他们的语文成绩进行排名,如果总成绩和语文成绩都相同时,对于这两个人,我们是按照他们的数学成绩进行排名的,他们每个人都有三门课程,语文,数学和英语!
首先输入一行为总共输入学生的数目N,然后在2到N+1行中分别输入学生姓名和对应学生的总分,语文和数学成绩
输出最后排序顺序的名字序列。保证不会存在两个人总成绩和各门的成绩均分别相同的情况。
如:
3
Henry 225 100 98
Marry 210 95 100
Jhon 210 98 85


输出:

Henry 
Jhon 
Marry

谢谢了!!!



[解决办法]
运行结果:(为啥英语成绩都这么差?哈哈哈)
3
Henry 225 100 98 27
Marry 210 95 100 15
Jhon 210 98 85 27

Henry
Jhon
Marry

C/C++ code
#include <iostream>#include <string.h>#include <stdio.h>using namespace std;int main(){int N=0;cin>>N;char (*namemarks)[128]= new char[N][128];char name[32];int mark, mark1, mark2, mark3;for(int i=0;i<N;i++){    cin>> name >> mark >> mark1 >> mark2 >> mark3;    sprintf(namemarks[i],"%3d %3d %3d %3d %s", mark, mark1,mark2,mark3, name);}// selectsort:    int   j,max;     char  temp[128];     for(i=0;i <N-1;++i){             max=i;         for(j=i+1;j<N;++j)            if( strcmp(namemarks[max], namemarks[j]) < 0)                  max=j;         if(max!=i){             strcpy(temp, namemarks[i]);             strcpy(namemarks[i], namemarks[max]);             strcpy(namemarks[max], temp);         }     } // print the result:    cout<< endl;    for(i=0;i<N;i++)        cout<< namemarks[i]+16 <<endl; // from 16th, it's name    return 0;}