为什么排序后得不到想要的结果高手进
[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;
}
}
}
大家帮我看一下这个程序,为什么排序后得不到想要的结果,尤其是经过学号排序后,姓名排序就会出问题求解决
[解决办法]
楼主,提个建议,,,可以用模板实现
自己重载个<
代码赛那么多, 没兴趣看
[解决办法]
这种问题还是下个断点,一步步跟踪,看每步执行后是否你想要的结果,就知道错误在哪里了.
看代码,一般人都很难看也错误的
[解决办法]
用你的代码跑了一遍,表示姓名排序好像没错啊,给个你错的数据好不好?