• C++第15周(春)项目2


    课程首页在:http://blog.csdn.net/sxhelijian/article/details/11890759。内有完整教学方案及资源链接


    本程序中须要的相关文件。请到http://pan.baidu.com/s/1qW59HTi下载。

    【项目2-用文件保存的学生名单】

      文件score.dat中保存的是若干名学生的姓名和C++课、高数和英语成绩。
      (1)定义学生类,当中包括姓名、C++课、高数和英语成绩及总分数据成员,成员函数依据须要确定。


    //定义学生类
    class Student
    {
    public:
        //声明必要的成员函数
    private:
        string name;
        double cpp;
        double math;
        double english;
        double total;
        static int stu_num;  //学生人数,处理为类的静态成员合适
        static double total_sum; //学生总分和
    };

      (2)用对象数组进行存储学生的成绩。读入成绩并计算总分。将总分高于平均总分且没挂科的同学的信息保存到文件pass_score.dat中。
    int main( )
    {
        Student stud[200],t; //stud[200]为保存数据的对象数组
        string sname;
        double total_avg;
        int i=0;
        //从文件score.dat中读入数据,保存到对象数组中
    
    
        //总分高于平均总分且没挂科的同学的信息保存到文件pass_score.dat中
        return 0;
    }

      讨论:学生人数和总分的第二种解决方法是用全局变量。

    但这两种信息与学生有关,是学生的“属性”。成为学生类的数据成员合适。这两种信息由学生总体决定,用作静态数据成员合适。

    查看教材中的相关部分,复习怎样进行处理。


    參考解答:

    #include <fstream>
    #include<iostream>
    #include<string>
    #include<cstdlib>
    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 &in, Student &s);  //能够定义input函数替代
        friend ostream& operator<<(ostream &out, Student &s); //能够定义display函数替代
        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 &in, Student &s)
    {
        in>>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 in;
    }
    
    ostream &operator<<(ostream &out, Student &s)
    {
        out<<s.name<<"	";
        out<<s.cpp<<"	";
        out<<s.math<<"	";
        out<<s.english<<"	";
        out<<s.total;
        return out;
    }
    
    //返回是否全部课程全过了
    bool Student::pass()
    {
        return cpp>=60 && math>=60 && english>=60;
    }
    
    int main( )
    {
        Student stud[200],t; //stud[200]为保存数据的对象数组
        string sname;
        double total_avg;
        int i=0;
    
        //将文件里的数据读入到对象数组中
        ifstream infile("score.dat",ios::in);  //以输入的方式打开文件
        if(!infile)       //測试是否成功打开
        {
            cerr<<"open error!"<<endl;
            exit(1);
        }
        while(!infile.eof())
        {
            infile>>stud[i++];   //读数据中。人数等信息自己主动地记录到静态成员中。见运算符重载的实现
        }
        infile.close();
    
        //求总分平均并输出
        if(Student::get_stu_num()>0)
        {
            total_avg = Student::get_total_sum() / Student::get_stu_num();
            ofstream outfile("pass_score.dat",ios::out);
            if(!outfile)
            {
                cerr<<"open 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_score.dat中查看名单:"<<endl;
        }
        return 0;
    }




    =================== 迂者 贺利坚 CSDN博客专栏=================
    |== IT学子成长指导专栏 专栏文章的分类文件夹(不定期更新) ==|
    |== C++ 课堂在线专栏  贺利坚课程教学链接(分课程年级) ==|
    |== 我写的书——《逆袭大学——传给IT学子的正能量》    ==|
    ===== 为IT菜鸟起飞铺跑道。和学生一起享受快乐和激情的大学 =====




  • 相关阅读:
    java基础知识--数据结构
    java基础知识--Iterator迭代器
    java基础知识--Collection、Collections、泛型
    java基础知识--包装类
    java基础知识--日期时间类
    java基础知识--final关键字
    java基础知识--类和接口
    Mina学习之---mina整体流程介绍
    多线程之----线程互斥再续
    多线程之----线程互斥
  • 原文地址:https://www.cnblogs.com/claireyuancy/p/6709453.html
Copyright © 2020-2023  润新知