使用了容器vector。还有就是number类型设置整形错误,导致文件打开了,但是数据没有读入。。。
=,(),[],->只能成员重载。。。
如何定义<,让sort函数自动排序
// 2014-03-10-13.07
#include<iostream>
#include<fstream>
#include<cstdlib>
#include<vector>
#include<iomanip>
#include<algorithm>
using namespace std;
void Show()
{
cout<<"选择功能:"<<endl;
cout<<"1 ,输出成绩单:"<<endl;
cout<<"2 ,总分排序并且输出成绩单:"<<endl;
cout<<"3 ,获得奖学金同学名单:"<<endl;
cout<<"输入序号(0退出):";
}
class Student
{
private:
string number;
string name;
int cpp;
int math;
int english;
int grade;
public:
Student(){};
int Grade(){grade=cpp+math+english;return grade;}
Student operator=(Student&bb)
{
number=bb.number;
name=bb.name;
cpp=bb.cpp;
math=bb.math;
english=bb.english;
grade=bb.grade;
return *this;
}
// friend bool operator<(Student&a,Student&b)
// {
// return a.Grade()<b.Grade();
// }
friend istream &operator>>(istream& is,Student &ss)
{
is>>ss.number>>ss.name>>ss.cpp>>ss.math>>ss.english;
return is;
}
friend ostream &operator<<(ostream&os,const Student &ss)
{
os<<ss.number<<" "<<left<<setw(6)<<ss.name<<"\t"<<ss.cpp<<"\t"<<ss.math<<"\t"<<ss.english<<"\t"<<ss.grade<<endl;
return os;
}
};
//从文件中读出数据,存放到你定义的结构体数组中;
int main()
{
ifstream infile("score.txt",ios::in); //以输入的方式打开文件
if(!infile) //测试是否成功打开
{
cerr<<"open error!"<<endl;
exit(1);
}
vector<Student> vec;
Student ss;
while(infile>>ss)
{
ss.Grade();
vec.push_back(ss);
}
infile.clear();
infile.close();
cout<<"数据读取完毕。。"<<endl;
Show();
int num;
vector<Student>::iterator iter=vec.begin();
typedef vector<int>::size_type TT;
bool qq=false;
while(cin>>num)
{
switch(num)
{
case 0:qq=true;break;
case 1:
{
cout<<"2133"<<endl;
while(iter!=vec.end())
{
cout<<*iter;
++iter;
}
cout<<endl;
break;
}
case 2:
{
// sort(vec.begin(),vec.end());
Student ss;
for(TT i=0;i<vec.size()-1;i++)
for(TT j=i+1;j<vec.size();j++)
if(vec[i].Grade()<vec[j].Grade())
{
ss=vec[i];
vec[i]=vec[j];
vec[j]=ss;
}
cout<<"排序完成。。"<<endl;
break;
}
case 3:
{
cout<<"没课大于80得到奖学金。。"<<endl;break;
}
default:cout<<"输入不对,重新输入。。"<<endl;
break;
}
if(qq)break;
Show();
}
cout<<endl;
cout<<"程序完成。。。"<<endl;
return 0;
}