这个程序还是前几天开始的中途把它忘了,隔了好几天才想起来,于是乎就继续写。写完,出现一个不知道的窗口提示:
蛋疼了很久。。
这个代码里面用了很多笨重方法,我当时想的就是先实现目标然后再考虑效率问题。
具体代码:
#include<iostream>
#include<string>
#include<algorithm>
#include<cmath>
using namespace std;
class Student
{
struct student
{
int num;
string name;
int mark;
student()
{
num=0;
name="";
mark=0;
}
};
public:
//static int count=0;
Student()
{
count=0;
member=0;
flag=0;
}
Student(int member,int flag,int count)
{
this->count=count;
this->member=member;
this->flag=flag;
num_=new int[member];
New_array=new student[member];
Array= new student[member];
}
~Student()
{
delete num_;
delete New_array;
delete Array;
}
void GetIn();
void Run(); //处理各种情况
void Print(); //输出
void Stu_num();
void Stu_name();
void Stu_mark();
void Swap(student &a,student &b); //交换函数
private:
int member;
int count;
int flag;
int *num_;
student *Array; //存放无序的学生
student* New_array; //存放按一定规则排序后的结果
};
void Student::Swap(Student::student &a, Student::student &b)
{
student temp;
temp=a;a=b;b=temp;
}
void Student::GetIn() //学生具体录入
{
int stu_num=0;
string stu_name="";
int stu_mark=0;
for(int i=0;i<member;i++)
{
cin>>stu_num>>stu_name>>stu_mark;
Array .num=stu_num;
Array.name=stu_name;
Array.mark=stu_mark;
num_=stu_num;
}
}
void Student::Run() //处理各种情况
{
//student* result;
switch(flag)
{
case 1:
Stu_num();break;
case 2:
return Stu_name();break;
case 3:
return Stu_mark();break;
}
}
void Student::Stu_num() //按成绩非减排列
{
sort(num_,num_+member);
for(int i=0;i<member;i++)
for(int j=0;j<member;j++)
if(num_[j]==Array.num)
{
New_array[j]=Array;
break;
}
}
void Student::Stu_name() //按姓名不增排列
{
for(int i=member-1;i>=0;i--) //冒泡排序(很低效)
{
for(int j=0;j<i;j++)
{
if(Array.name.compare(0,Array.name.length(),Array[j].name)<0) //把名字打的排在前面
Swap(Array,Array[j]);
if(Array.name.compare(0,Array.name.length(),Array[j].name)==0) //相等再比较学号
if(Array.num<Array[j].num)
Swap(Array,Array[j]);
}
}
New_array=Array;
}
void Student::Stu_mark() //按分数排列
{
for(int i=member-1;i>=0;i--) //冒泡排序(很低效)
{
for(int j=0;j<i;j++)
{
if(Array.mark<Array[j].mark) //把名字打的排在前面
Swap(Array,Array[j]);
if(Array.mark==Array[j].mark) //相等再比较学号
if(Array.num<Array[j].num)
Swap(Array,Array[j]);
}
}
New_array=Array;
}
void Student::Print()
{
Run();
cout<<"Case "<<count<<":"<<endl;
for(int i=0;i<member;i++)
{
printf("%06d ",New_array.num);
cout<<New_array.name<<' '<<New_array.mark<<endl;
}
}
//int count=0;
int main()
{
int count=0;
int member,flag;
while(cin>>member>>flag)
{
if(member<=0||member>10e5)
break;
else
{
count++;
Student oStudent(member,flag,count);
oStudent.GetIn();
oStudent.Print();
}
}
return 0;
}

高手看到了,希望能够指点哈。。。。。。。