#include <fstream>
#include<iostream>
#include <iomanip>
#include <string>
using namespace std;
struct student
{
char num[12];
string name;
int grade[3];
int sum;
};
int main( )
{
void open_file(student *p);
void select_score(student *p);
void show_score(student *p);
void school_reward(student *p);
student student[180],score,*p;
p=student;
open_file(p);
select_score(p);
cout<<"学号为"<<setw(16)<<"人名"<<setw(8)<<"c++"<<setw(8)<<"高数"<<setw(8)<<"英语"<<setw(8)<<"总成绩"<<endl;
show_score(p);
cout<<"获得奖学金的同学名单为:"<<endl;
school_reward(p);
return 0;
}
void open_file(student *p)
{
int j;
ifstream infile("score.txt",ios::in);
if(!infile)
{
cerr<<"open error!"<<endl;
exit(1);
}
for(j=0;j<180;j++)
{
infile>>(p+j)->num>>(p+j)->name>>(p+j)->grade[0]>>(p+j)->grade[1]>>(p+j)->grade[2];//读入学生成绩;
(p+j)->sum=((p+j)->grade[0]+(p+j)->grade[1]+(p+j)->grade[2]);
}
infile.close();
}
void show_score(student *p)
{
for(int j=0;j<180;j++)
{
cout<<(p+j)->num<<" "<<setw(8)<<(p+j)->name<<setw(8)<<(p+j)->grade[0]
<<" "<<(p+j)->grade[1]<<" "<<(p+j)->grade[2]<<"\t"<<(p+j)->sum<<endl;
}
cout<<endl;
}
void select_score(student *p)
{
int i,j;
student score;
for(i=0;i<179;i++)
for(j=0;j<179-i;j++)
{
if((p+j)->sum<(p+j+1)->sum)
{
score=*(p+j);
*(p+j)=*(p+j+1);
*(p+j+1)=score;
}
}
}
void school_reward(student *p)
{
for(int j=0;j<30;j++)
{
if((p+j)->grade[0]>=60&&(p+j)->grade[1]>=60&&(p+j)->grade[2]>=60)
{
if(j%5==0)
cout<<endl;
cout<<setw(8)<<(p+j)->name<<" "<<setiosflags(ios::left);
}
else j--;
}
}