第14周项目2用文件保存的学生名单

来源:互联网 发布:nba2kol自建中锋数据 编辑:程序博客网 时间:2024/05/01 11:35
#include <iostream>#include <fstream>#include <cstdlib>#include <string>using namespace std;class Student{public:    Student(){};    ~Student();    double get_total();    static int get_stu_num();    static double get_total_sum();    friend istream &operator>>(istream &input,Student &s);    friend ostream &operator<<(ostream &output,Student &s);    bool pass();private:    string name;    double cpp;    double math;    double english;    double total;    static int stu_num;  //学生人数,处理为类的静态成员合适    static double total_sum; //学生总分和};int Student::stu_num = 0;double Student::total_sum = 0;Student::~Student(){    total_sum-=total;    stu_num--;}double Student::get_total(){    return total;}int Student::get_stu_num(){    return stu_num;}double Student::get_total_sum(){    return total_sum;}istream &operator>>(istream &input,Student &s){    input>>s.name>>s.cpp>>s.math>>s.english;    s.total=s.cpp+s.math+s.english;    Student::stu_num++;   //在读入数据过程中,用静态成员记录下来具体的学生人数和总分和    Student::total_sum+=s.total;    return input;}ostream &operator<<(ostream &output,Student &s){    output<<s.name<<"\t";    output<<s.cpp<<"\t";    output<<s.math<<"\t";    output<<s.english<<"\t";    output<<s.total;    return output;}bool Student::pass(){    bool ipass=false;    if(cpp>=60 && math>=60 && english>=60)    ipass=true;    return ipass;}int main(){    Student stud[200],t; //stud[200]为保存数据的对象数组    string sname;    double total_avg;    int i=0;    ifstream infile("score.txt",ios::in);    if(!infile)    {        cerr<<"opening error"<<endl;        exit(1);    }    while(!infile.eof())    {        infile>>stud[i];        i++;    }        infile.close();    total_avg=Student::get_total_sum()/Student::get_stu_num();    ofstream outfile("pass.txt",ios::out);    if(!outfile)    {        cerr<<"opening error"<<endl;        exit(1);    }    for(i=0;i<Student::get_stu_num();i++)    {        if(stud[i].get_total()>total_avg&&stud[i].pass())        outfile<<stud[i]<<endl;    }    outfile.close();    cout<<"请到文件pass.txt中查看名单:"<<endl;}

0 0