排序得不到想要的结果!求解决解决方法

排序得不到想要的结果!求解决[size24px]#includeiostream#includeiomanip#includestring.husing na

排序得不到想要的结果!求解决
[size=24px]#include<iostream>
#include<iomanip>
#include<string.h>
using namespace std;
const int n=3;
const int m=10;
class student{
private:
  int ID,chinese,english,math,computer,total;
  char name[m];
  char sex[4];
public:
void Getinfo();
  student(){cout<<"构造函数在执行\n";}
  void Print();
  ~student(){cout<<"析构函数在执行\n";}
  friend void SortID(student st[]);
  friend void Print(student st[]);
  friend int FindID(student st[]);
  friend void SortName(student st[]);
  friend int FindName(student st[]);
  friend void SortTotal(student st[]);
  friend void swap(student &,student &);
};
void student::Getinfo() 
{
  cout<<"请输入学生的姓名\n";cin>>name;
  cout<<"请输入学生的学号\n";cin>>ID;
  cout<<"请输入学生的性别\n";cin>>sex;
  cout<<"请输入语文成绩\n";cin>>chinese;
  cout<<"请输入英语成绩\n";cin>>english;
  cout<<"请输入数学成绩\n";cin>>math;
  cout<<"请输入计算机成绩\n";cin>>computer;
  total=chinese+english+math+computer;
}
void student::Print() 
{  
  cout<<"姓名 "<<setw(6)<<name<<" 学号"<<setw(4)<<ID<<" 性别"<<setw(4)<<sex<<" 语文"
  <<setw(4)<<chinese<<" 数学"<<setw(4)<<math<<" 英语"<<setw(4)<<english<<" 计算机"
  <<setw(4)<<computer<<" 总分"<<setw(4)<<total<<endl;
}
void SortID(student st[n]) 
{

  int i,j,k;
  student s;
  for(i=0;i<n-1;i++)
  {  
k=i;
  for(j=i+1;j<n;j++)
  if(st[i].ID>st[j].ID ) {k=j;}
  if(k!=i) { swap(st[i],st[k]); }
}
  Print(st);
}
void SortName(student st[n])
{

  int i,j,k;
  student s;
  for(i=0;i<n-1;i++)
  { k=i;
  for(j=i+1;j<n;j++)
  {if(strcmp(st[i].name,st[j].name)>0) {k=j;}
  if(k!=0){swap(st[i],st[k]); }
}
  }
  Print(st);
}
void Print(student st[n])
{

  int i;
  for(i=0;i<n;i++)
  {
cout<<"姓名"<<setw(6)<<st[i].name<<" 学号"<<setw(2)<<st[i].ID <<" 性别"<<setw(2)<<st[i].sex <<" 语文"<<setw(2)<<st[i].chinese ;
  cout<<" 数学"<<setw(2)<<st[i].math<<" 英语"<<setw(2)<<st[i].english <<" 计算机"<<setw(2)<<st[i].computer<<" 总分"<<setw(3)<<st[i].total<<endl; 
}
}
int FindID(student st[n])
{

  int i,id;
 ff:cout<<"请输入您要查找的学号\n";
  cin>>id;
  for(i=0;i<n;i++)
  {
  if(st[i].ID ==id)
  {
  cout<<"姓名"<<setw(4)<<st[i].name<<" 学号"<<setw(2)<<st[i].ID <<" 性别"<<setw(2)<<st[i].sex <<" 语文"<<setw(2)<<st[i].chinese ;
  cout<<" 数学"<<setw(2)<<st[i].math<<" 英语"<<setw(2)<<st[i].english <<" 计算机"<<setw(2)<<st[i].computer<<" 总分"<<setw(3)<<st[i].total<<endl;


  return 0;
}
}
  cout<<"您查找的学号不存在\n";goto ff;
}
int FindName(student st[])
{

  char name1[m];
  int i,j=0;
 nn:cout<<"请输入要查找学生姓名\n";
  cin>>name1;
  for(i=0;i<n;i++)
  if(strcmp(name1,st[i].name )==0)
{
cout<<"姓名"<<setw(4)<<st[i].name<<" 学号"<<setw(2)<<st[i].ID <<" 性别"<<setw(2)<<st[i].sex <<" 语文"<<setw(2)<<st[i].chinese ;
  cout<<" 数学"<<setw(2)<<st[i].math<<" 英语"<<setw(2)<<st[i].english <<" 计算机"<<setw(2)<<st[i].computer<<" 总分"<<setw(3)<<st[i].total<<endl;
  return 0;
}
  cout<<"此姓名不存在,请重新输入\n";goto nn;
}
void SortTotal(student st[n])
{

  int i,j,k;
  student s;
  for(i=0;i<n-1;i++)
  { k=i;
  for(j=i+1;j<n;j++)
  if(st[i].total<st[j].total) {k=j;}
  if(k!=i){ swap(st[i],st[k]);}
}
  Print(st);
}
void swap(student &a,student &b)
{
student s;
s.ID =a.ID; a.ID=b.ID ;b.ID =s.ID ;
  strcpy_s(s.name,a.name ); 
  strcpy_s(a.name,b.name );
  strcpy_s(b.name,s.name );
  strcpy_s(s.sex,a.sex ); 
  strcpy_s(a.sex,b.sex );
  strcpy_s(b.sex,s.sex );
  s.chinese =a.chinese; a.chinese=b.chinese ;b.chinese =s.chinese ;
  s.math =a.math; a.math=b.math ;b.math =s.math ;
  s.english =a.english; a.english=b.english ;b.english =s.english ;
  s.computer =a.computer; a.computer=b.computer ;b.computer =s.computer ;
  s.total =a.total; a.total=b.total ;b.total =s.total ;
}
void main()
{  
cout<<"欢迎使用荣强学生信息管理系统,请根据提示选择操作\n";
  cout<<"温馨提示\n";
  cout<<"输入1,进入输入数据界面\n";
  cout<<"输入2,进入输出数据界面\n";
  cout<<"输入3,进入数据按学号排序界面\n";
  cout<<"输入4,进入数据按学号查找界面\n";
  cout<<"输入5,进入数据按姓名排序界面\n";
  cout<<"输入6,进入数据按姓名查找界面\n";
  cout<<"输入7,进入数据按总分排序界面\n";
  cout<<"输入0,退出该系统\n";
  student ST[n];
  int i,choice=1;
  while(choice!=0)
{
 kk: cout<<"请输入你的选择\n";cin>>choice;
  switch(choice)
  {
case 0:cout<<"退出系统,欢迎下次使用\n";break;
  case 1:cout<<"进入输入数据界面\n";
  for(i=0;i<n;i++) ST[i].Getinfo(); break;
  case 2:cout<<"进入输出数据界面\n";for(i=0;i<n;i++) ST[i].Print();
  break;
  case 3:cout<<"进入数据按学号排序界面\n";SortID(ST);break;
  case 4:cout<<"进入数据按学号查找界面\n";FindID(ST);break;
  case 5:cout<<"进入数据按姓名排序界面\n";SortName(ST); break;
  case 6:cout<<"进入数据按姓名查找界面\n";FindName(ST); break;
  case 7:cout<<"进入数据按总分排序界面\n";SortTotal(ST); break;
  default:cout<<"输入有误,请重新输入\n";goto kk;
  }
  }
}

  [/size]排序得不到想要的结果!当按学号排序过后,在按姓名,总分排序就得不到想要的结果啊求解决

[解决办法]

C/C++ code
void SortID(student st[n])  {    int i,j,k;    student s;    for(i=0;i<n-1;i++)    {           k=i;        for(j=i+1;j<n;j++)            if(st[k].ID>st[j].ID ) {k=j;}            if(k!=i) { swap(st[i],st[k]); }    }    Print(st);}void SortName(student st[n]){    int i,j,k;    student s;    for(i=0;i<n-1;i++)    { k=i;    for(j=i+1;j<n;j++)    {        if(strcmp(st[k].name,st[j].name)>0) {k=j;}            }    if(k!=i){swap(st[i],st[k]); }    }    Print(st);}void Print(student st[n]){    int i;    for(i=0;i<n;i++)    {        cout<<"姓名"<<setw(6)<<st[i].name<<" 学号"<<setw(2)<<st[i].ID <<" 性别"<<setw(2)<<st[i].sex <<" 语文"<<setw(2)<<st[i].chinese ;        cout<<" 数学"<<setw(2)<<st[i].math<<" 英语"<<setw(2)<<st[i].english <<" 计算机"<<setw(2)<<st[i].computer<<" 总分"<<setw(3)<<st[i].total<<endl;      }}int FindID(student st[n]){    int i,id;ff:cout<<"请输入您要查找的学号\n";    cin>>id;    for(i=0;i<n;i++)    {        if(st[i].ID ==id)        {            cout<<"姓名"<<setw(4)<<st[i].name<<" 学号"<<setw(2)<<st[i].ID <<" 性别"<<setw(2)<<st[i].sex <<" 语文"<<setw(2)<<st[i].chinese ;            cout<<" 数学"<<setw(2)<<st[i].math<<" 英语"<<setw(2)<<st[i].english <<" 计算机"<<setw(2)<<st[i].computer<<" 总分"<<setw(3)<<st[i].total<<endl;            return 0;        }    }    cout<<"您查找的学号不存在\n";goto ff;}int FindName(student st[]){    char name1[m];    int i,j=0;nn:cout<<"请输入要查找学生姓名\n";    cin>>name1;    for(i=0;i<n;i++)        if(strcmp(name1,st[i].name )==0)        {            cout<<"姓名"<<setw(4)<<st[i].name<<" 学号"<<setw(2)<<st[i].ID <<" 性别"<<setw(2)<<st[i].sex <<" 语文"<<setw(2)<<st[i].chinese ;            cout<<" 数学"<<setw(2)<<st[i].math<<" 英语"<<setw(2)<<st[i].english <<" 计算机"<<setw(2)<<st[i].computer<<" 总分"<<setw(3)<<st[i].total<<endl;            return 0;        }        cout<<"此姓名不存在,请重新输入\n";goto nn;}void SortTotal(student st[n]){    int i,j,k;    student s;    for(i=0;i<n-1;i++)    { k=i;    for(j=i+1;j<n;j++)        if(st[k].total<st[j].total) {k=j;}        if(k!=i){ swap(st[i],st[k]);}    }    Print(st);}void swap(student &a,student &b){    student s;    s.ID =a.ID; a.ID=b.ID ;b.ID =s.ID ;    strcpy_s(s.name,a.name );      strcpy_s(a.name,b.name );    strcpy_s(b.name,s.name );    strcpy_s(s.sex,a.sex );      strcpy_s(a.sex,b.sex );    strcpy_s(b.sex,s.sex );    s.chinese =a.chinese; a.chinese=b.chinese ;b.chinese =s.chinese ;    s.math =a.math; a.math=b.math ;b.math =s.math ;    s.english =a.english; a.english=b.english ;b.english =s.english ;    s.computer =a.computer; a.computer=b.computer ;b.computer =s.computer ;    s.total =a.total; a.total=b.total ;b.total =s.total ;}