多级排序.解决办法

多级排序....
怎么用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;
}