(1)从文件中读出数据,存放到你定义的结构体数组中,即项目2(1);
(2)求出每名同学的总分(可以在读入过程中“顺便”计算);
(3)按总分排序(降序);
(4)输出排序后的成绩单;
(2)求出每名同学的总分(可以在读入过程中“顺便”计算);
(3)按总分排序(降序);
(4)输出排序后的成绩单;
(5)有30名同学可以获得奖学金,规则是总分高者优先,有挂科不能得奖学金。请输出可以得奖学金同学的名单。
#include <iostream>
#include<fstream>
#include<cstdlib>
#include<iomanip>
using namespace std;
struct Score
{
char num[14];
char name[10];
int cpp;
int math;
int english;
int sum;
Score *next;
friend istream &operator >>( istream &is, Score &a)
{
is>>a.num>>a.name>>a.cpp>>a.math>>a.english;
return is;
}
friend ostream &operator<<(ostream &os,const Score &a)
{
os<<a.num<<" "<<left<<setw(6)<<a.name<<" "<<a.cpp<<" "<<a.math<<" "<<a.english<<" "<<a.sum;
return os;
}
};
int main()
{
ifstream infile;
infile.open("haohaoxuexi.txt");
if(!infile){cerr<<"file can not open"<<endl; exit(1);}
Score a[10];
int i=0;
Score rep;
while(infile>>a[i]){a[i].sum=0;a[i].sum=a[i].cpp+a[i].math+a[i].english;i++;}
infile.close();
for(int j=0;j<10;j++)
cout<<a[j]<<endl;
for(int i=0;i<9;i++)//冒泡排序法
for(int j=0;j<9-i;j++)
if(a[j].sum<a[j+1].sum){rep=a[j];a[j]=a[j+1];a[j+1]=rep;}
cout<<endl;
for(int i=0;i<10;i++)cout<<a[i]<<endl;//输出排序后的名单
//输出前拿奖金(总分高,无挂科)
cout<<endl;
cout<<"拿奖学金的人名单:"<<endl;
int num=0;
for(int i=0;i<10;i++)
{
if(a[i].cpp>=60&&a[i].math>=60&&a[i].english>=60)
{cout<<a[i]<<endl;num++;}
if(3==num)break;
}
return 0;
}