C++趣事

這個程序還是前幾天開始的中途把它忘了,隔了好幾天纔想起來,於是乎就繼續寫。寫完,出現一個不知道的窗口提示:
蛋疼了很久。。
這個代碼裏面用了很多笨重方法,我當時想的就是先實現目標然後再考慮效率問題。
具體代碼:
#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;
}

高手看到了,希望能夠指點哈。。。。。。。
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章