码迷,mamicode.com
首页 > 编程语言 > 详细

第十四周 【项目2-用文件保存的学生名单】若干名学生的学号 姓名和C++课、高数和英语成绩

时间:2015-06-21 15:54:33      阅读:182      评论:0      收藏:0      [点我收藏+]

标签:namespace   c++   

运行代码:

/*
*Copyright (c)2014,烟台大学计算机与控制工程学院
*All rights reserved.
*文件名称:d.cpp
*作    者:张旺华
*完成日期:2015年6月3日
*版 本 号:v1.0
*/
/*
*【项目2-用文件保存的学生名单】
 * 文件score.dat中保存的是若干名学生的学号 姓名和C++课、高数和英语成绩。
 */
#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 num,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.num>>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.num<<"\t";
    out<<s.name<<"\t";
    out<<s.cpp<<"\t";
    out<<s.math<<"\t";
    out<<s.english<<"\t";
    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.txt",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;
}

测试数据:

201152501104 田程 65 69 68
201152501114 杨金龙 94 89 63
201152501115 周琳霄 92 84 60
201152501138 张强 67 62 84
201152501140 郑好 80 60 86
201152501145 曹为尚 88 56 67
201152501201 倪婷 80 92 71
201152501202 李奥 59 80 55
201152501203 张佳怡 62 62 95
201152501204 邓臣冬 100 65 91
201152501205 汪美娟 73 90 94
201152501206 赵格君 96 80 58
201152501207 张文韬 91 63 91
201152501208 车宜霖 88 84 79
201152501209 刘正 61 79 99
201152501210 李东航 62 58 66
201152501211 李华 96 96 83
201152501212 李晓鹏 73 88 93
201152501213 姜君孝 69 64 62
201152501214 董越 74 59 69
201152501215 赵浚源 63 58 96
201152501216 宫凡奇 89 82 60
201152501217 张咏晖 94 89 77
201152501218 丁梦瑶 78 93 58
201152501219 金婷 75 87 84
201152501220 张娟 90 65 62
201152501221 姜莉 76 78 81
201152501222 孙亚雯 90 87 73
201152501223 郭重 88 68 63
201152501224 王潇哲 85 94 97
201152501225 宋心洁 99 69 82
201152501226 杜婧霏 91 80 98
201152501227 于晓霞 69 72 99
201152501228 王莉莉 84 95 94
201152501229 万雅璐 98 95 64
201152501230 曲淑霞 67 100 83
201152501231 高晶 98 81 67
201152501232 于泽莹 67 64 77
201152501233 李婧怡 84 72 90
201152501234 姚宇 92 78 95
201152501235 于超 87 82 86
201152501236 李剑 78 86 95
201152501237 孟雨薇 66 64 58
201152501238 孙华泽 98 98 74
201152501239 朱绮梦 73 83 96
201152501240 周易 56 69 84
201152501241 蔡庆 60 78 71
201152501242 姜懿宸 86 94 59
201152501243 孙雪梅 64 92 66
201152501244 李芊潭 97 100 55
201152501245 周祥 100 86 74
201152501246 吐鲁洪江 73 94 75
201153503240 王婷婷 68 73 69
201153503242 宗雪燕 60 82 61
201153503243 于小涵 79 60 78
201153503245 钟艺 82 91 97
201153503246 耿清敏 67 77 60
201153503248 耿梦启 79 100 57
201153503249 刘轩辰 59 86 90
201153503251 贺巧霞 56 87 88
201153503254 张丽芳 57 81 87
201154503207 刘蕊 57 89 69
201158501330 李涛 96 89 73
201158501332 张新明 68 59 64
201158501334 曹文战 82 89 73
201160602108 孔令涛 63 86 80
201160602124 刘大伟 96 69 98
201163501101 孟站 58 100 70
201163501102 王超奇 75 63 89
201163501104 周涛 68 95 84
201163501105 贾治国 86 84 100
201163501106 杨磊 92 66 88
201163501107 万建新 71 56 83
201163501108 李宁 70 95 73
201163501110 赵江彦 58 63 79
201163501111 杜俊一 61 75 70
201163501113 邢士峰 56 70 66
201163501114 李传良 95 90 86

pass 数据
201152501114 杨金龙 94 89 63 246
201152501115 周琳霄 92 84 60 236
201152501201 倪婷 80 92 71 243
201152501204 邓臣冬 100 65 91 256
201152501205 汪美娟 73 90 94 257
201152501207 张文韬 91 63 91 245
201152501208 车宜霖 88 84 79 251
201152501209 刘正 61 79 99 239
201152501211 李华 96 96 83 275
201152501212 李晓鹏 73 88 93 254
201152501217 张咏晖 94 89 77 260
201152501219 金婷 75 87 84 246
201152501221 姜莉 76 78 81 235
201152501222 孙亚雯 90 87 73 250
201152501224 王潇哲 85 94 97 276
201152501225 宋心洁 99 69 82 250
201152501226 杜婧霏 91 80 98 269
201152501227 于晓霞 69 72 99 240
201152501228 王莉莉 84 95 94 273
201152501229 万雅璐 98 95 64 257
201152501230 曲淑霞 67 100 83 250
201152501231 高晶 98 81 67 246
201152501233 李婧怡 84 72 90 246
201152501234 姚宇 92 78 95 265
201152501235 于超 87 82 86 255
201152501236 李剑 78 86 95 259
201152501238 孙华泽 98 98 74 270
201152501239 朱绮梦 73 83 96 252
201152501245 周祥 100 86 74 260
201152501246 吐鲁洪江 73 94 75 242
201153503245 钟艺 82 91 97 270
201158501330 李涛 96 89 73 258
201158501334 曹文战 82 89 73 244
201160602124 刘大伟 96 69 98 263
201163501104 周涛 68 95 84 247
201163501105 贾治国 86 84 100 270
201163501106 杨磊 92 66 88 246
201163501108 李宁 70 95 73 238
201163501114 李传良 95 90 86 271

学习心得:

一开始一直无法存入数据,后发现是因为数据太大,超出double 的范围

float       32            6-7               -3.4*10(-38)~3.4*10(38)
double      64           15-16            -1.7*10(-308)~1.7*10(308)
long double 128          18-19         -1.2*10(-4932)~1.2*10(4932)
后修改了数据!和减少数据!

最终代码:

/*
*Copyright (c)2014,烟台大学计算机与控制工程学院
*All rights reserved.
*文件名称:d.cpp
*作    者:张旺华
*完成日期:2015年6月3日
*版 本 号:v1.0
*/
/*
*【项目2-用文件保存的学生名单】
 * 文件score.dat中保存的是若干名学生的学号 姓名和C++课、高数和英语成绩。
 */
#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    int get_total_sum();
    friend istream& operator>>(istream &in, Student &s);  //可以定义input函数替代
    friend ostream& operator<<(ostream &out, Student &s); //可以定义display函数替代
    bool pass();
private:
    string num,name;
    double cpp;
    double math;
    double english;
    double total;
    static int stu_num;  //学生人数,处理为类的静态成员合适
    static  int  total_sum; //学生总分和
};

int Student::stu_num = 0;
int  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;
}

int Student::get_total_sum()
{
    return total_sum;
}

istream& operator>>(istream &in, Student &s)
{
    in>>s.num>>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.num<<"\t";
    out<<s.name<<"\t";
    out<<s.cpp<<"\t";
    out<<s.math<<"\t";
    out<<s.english<<"\t";
    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.txt",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;
}


第十四周 【项目2-用文件保存的学生名单】若干名学生的学号 姓名和C++课、高数和英语成绩

标签:namespace   c++   

原文地址:http://blog.csdn.net/wh201458501106/article/details/46581683

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!