运行代码:
/* *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++课、高数和英语成绩
原文地址:http://blog.csdn.net/wh201458501106/article/details/46581683