15-3用文件保存的学生名单

来源:互联网 发布:淘宝宝贝标题测试 编辑:程序博客网 时间:2024/05/23 01:52
/** 作    者: 霍雨佳* 完成日期:2014 年6月3日* 版 本 号:v1.0* 问题描述:用文件保存的学生名单(文件score.dat中保存的是若干名学生的姓名和C++课、高数和英语成绩)* 样例输入:* 样例输出:* 问题分析:*(1)定义学生类,其中包含姓名、C++课、高数和英语成绩及总分数据成员,成员函数根据需要确定。*(2)用对象数组进行存储学生的成绩,读入成绩并计算总分;将总分高于平均总分且没挂科的同学的信息保存到文件pass_score.dat中。*/#include<iostream>#include<cstdio>   //支持freopen的头文件#include<cstdlib>#include<fstream>using namespace std;//定义学生类class Student{public:    //声明必要的成员函数    double gettotal();    static double get_total_sum();    static int get_stu_num();    bool panduan();    friend ostream& operator <<(ostream& output,Student&t);  //声明友元函数重载运算符“<<”函数    friend istream& operator >>(istream& output,Student&t);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;double Student::gettotal(){    return total;}double Student::get_total_sum(){    return total_sum;}int Student::get_stu_num(){    return stu_num;}bool Student::panduan(){    if(cpp>=60&&math>=60&&english>=60&&total-total_sum>=0)        return true;    else        return false;}istream& operator >>(istream& input,Student&t){    input>>t.name>>t.cpp>>t.math>>t.english;    t.total=t.cpp+t.math+t.english;    return input;}ostream& operator <<(ostream& output,Student&t)  //声明友元函数重载运算符“<<”函数{    output<<t.name<<"  "<<t.cpp<<"  "<<t.math<<"  "<<t.english<<"  "<<t.total<<endl;    return output;}int main( ){    Student stud[200],t; //stud[200]为保存数据的对象数组    string sname;    double total_ave=0;    int i=0;    //从文件score.dat中读入数据,保存到对象数组中    freopen("score.dat","r",stdin);  //以输入的方式打开文件 r=read    freopen("pass_score.dat","w",stdout); //输出结果 w=write    while(cin>>stud[i])    {        i++;   //从cin流读取数据    }    for(int j=0; j<=i; j++)    {        total_ave=stud[j].gettotal()+total_ave;    }    total_ave=Student::get_total_sum()/Student::get_stu_num();    for(int h=0; h<=i; h++)    {        if(stud[h].panduan()==true)        {            cout<<stud[h]<<endl;        }        else {}    }    //总分高于平均总分且没挂科的同学的信息保存到文件pass_score.dat中    fclose(stdin);    fclose(stdout);//关闭文件。用完了必须关闭,否则会丢失数据    return 0;}


运行结果

 

经历艰难困苦,终于弄出来了啊,哎哎,其实还是有很多地方不是很懂,

如为什么要用友元函数重载运算符“<<”函数,求高手指点迷津~~~

 

 

0 0
原创粉丝点击