標籤: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++課、高數和英語成績