#include<fstream.h>
#include<iomanip.h>
 const int N=5;
 class student
{
 public:
  void input(void);
  void sta(void);
  float get_av(void);
  int get_no(void);
  const char* get_na(void);
  void display(void);
 private:
  int sno;
  char name[20];
  int score[3];
  float aver;
};
 void student::input(void)
{
 int i;
 cout<<"请输入学生的信息："<<endl;
 cin>>sno>>name;
 for(i=0;i<3;i++)
  cin>>score[i];
}
 void student::sta(void)
{
 int i;
 float sum;
 for(i=0,sum=0;i<3;i++)
  sum+=score[i];
 aver=sum/3;
}
 float student::get_av(void)
{
 return(aver);
}
 int student::get_no(void)
{
 return(sno);
}
 const char* student::get_na(void)
{
 return(name);
}
 void student::display(void)
{
 int i;
 cout<<"学号："<<sno<<endl;
 cout<<"姓名："<<name<<endl;
 cout<<"成绩：";
 for(i=0;i<3;i++)
  cout<<setw(3)<<score[i];
 cout<<endl<<"平均成绩："<<aver<<endl;
}
 int main()
{
 ifstream file1;
 ofstream file2;
 int i,j,n,flag;
 student a[N],t;
 file1.open("stud.dat",ios::in|ios::binary);//二进制方式 
 if(!file1)
 {
  cerr<<"文件打开失败！"<<endl;
  return(1);
 }
 file2.open("sort.dat",ios::out|ios::binary);//二进制方式 
 if(!file2)
 {
  cerr<<"文件打开失败！"<<endl;
  return(1);
 }
 for(i=0;!file1.eof()&&i<N;i++)
  file1.read((char*)(a+i),sizeof(student));
 n=i;
 for(i=0;i<n-1;i++)
 {
  for(j=i+1,flag=i;j<n;j++)
   if(a[flag].get_av()>a[j].get_av())
    flag=j;
  if(flag!=i)
  {
   t=a[i];
   a[i]=a[flag];
   a[flag]=t;
  }
 }
 file2.write((char*)a,sizeof(student)*n);
 file1.close();//关闭文件
 file2.close();//关闭文件
 return(0);
}
