首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 开发语言 > C++ >

为什么排序后得不到想要的结果

2012-03-25 
为什么排序后得不到想要的结果高手进[size24px][/size]#includeiostream#includeiomanip#includestr

为什么排序后得不到想要的结果高手进
[size=24px][/size]
#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[]);

};
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)
  {
  s.ID =st[i].ID; st[i].ID=st[k].ID ;st[k].ID =s.ID ;
  strcpy_s(s.name,st[i].name ); 
  strcpy_s(st[i].name,st[k].name );
  strcpy_s(st[k].name,s.name );
  strcpy_s(s.sex,st[i].sex ); 
  strcpy_s(st[i].sex,st[k].sex );
  strcpy_s(st[k].sex,s.sex );
  s.chinese =st[i].chinese; st[i].chinese=st[k].chinese ;st[k].chinese =s.chinese ;
  s.math =st[i].math; st[i].math=st[k].math ;st[k].math =s.math ;
  s.english =st[i].english; st[i].english=st[k].english ;st[k].english =s.english ;
  s.computer =st[i].computer; st[i].computer=st[k].computer ;st[k].computer =s.computer ;
  s.total =st[i].total; st[i].total=st[k].total ;st[k].total =s.total ;
  }
 }
  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)
  {
  s.ID =st[i].ID; st[i].ID=st[k].ID ;st[k].ID =s.ID ;
  strcpy_s(s.name,st[i].name ); 
  strcpy_s(st[i].name,st[k].name );
  strcpy_s(st[k].name,s.name );
  strcpy_s(s.sex,st[i].sex ); 
  strcpy_s(st[i].sex,st[k].sex );
  strcpy_s(st[k].sex,s.sex );
  s.chinese =st[i].chinese; st[i].chinese=st[k].chinese ;st[k].chinese =s.chinese ;
  s.math =st[i].math; st[i].math=st[k].math ;st[k].math =s.math ;
  s.english =st[i].english; st[i].english=st[k].english ;st[k].english =s.english ;
  s.computer =st[i].computer; st[i].computer=st[k].computer ;st[k].computer =s.computer ;
  s.total =st[i].total; st[i].total=st[k].total ;st[k].total =s.total ;
  }
  }
 }
  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 ))
  {
  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)
  {
  s.ID =st[i].ID; st[i].ID=st[k].ID ;st[k].ID =s.ID ;
  strcpy_s(s.name,st[i].name ); 
  strcpy_s(st[i].name,st[k].name );
  strcpy_s(st[k].name,s.name );
  strcpy_s(s.sex,st[i].sex ); 
  strcpy_s(st[i].sex,st[k].sex );
  strcpy_s(st[k].sex,s.sex );
  s.chinese =st[i].chinese; st[i].chinese=st[k].chinese ;st[k].chinese =s.chinese ;
  s.math =st[i].math; st[i].math=st[k].math ;st[k].math =s.math ;
  s.english =st[i].english; st[i].english=st[k].english ;st[k].english =s.english ;
  s.computer =st[i].computer; st[i].computer=st[k].computer ;st[k].computer =s.computer ;
  s.total =st[i].total; st[i].total=st[k].total ;st[k].total =s.total ;
  }
 }
  Print(st);
}
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";
  //cout<<" 姓名 "<<" 学号 "<<" 性别 "<<" 语文 "<<" 数学 "<<" 英语 "<<" 计算机 "<<" 总分 "<<endl;
  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;
  }
 }
 
}

大家帮我看一下这个程序,为什么排序后得不到想要的结果,尤其是经过学号排序后,姓名排序就会出问题求解决


[解决办法]
楼主,提个建议,,,可以用模板实现

自己重载个<

代码赛那么多, 没兴趣看
[解决办法]
这种问题还是下个断点,一步步跟踪,看每步执行后是否你想要的结果,就知道错误在哪里了.
看代码,一般人都很难看也错误的
[解决办法]
用你的代码跑了一遍,表示姓名排序好像没错啊,给个你错的数据好不好?

热点排行