背景:ASCII文件score.dat中保存的是100名学生的姓名和C++,高数,英语的成绩。
步骤:(1)定义学生类,其中包含姓名c++高数英语的成绩以及总分平均分。
(2)读入学生成绩,并求出总分,用对象数组进行储存。
(3)将所有的数据保存到一个二进制的文件中,最后在文件中写入你自己的成绩。
(4)为验证输入的文件正确,再将文件中的记录注意读入到学生的对象中并输出查看。
#include <iostream> #include <fstream> #include <string> using namespace std; class Student { public: Student(){}; Student(string nam, double c, double m, double e):name(nam),cpp(c),math(m),english(e){total=c+m+e;} void set_value(string nam, double c, double m, double e); string get_name(){return name;} double get_cpp(){return cpp;} double get_math(){return math;} double get_english(){return english;} double get_average(){return average;} double get_total(){return total;} void set_name(string nam){name = nam;} void set_cpp(double c){cpp=c;} void set_math(double m){math=m;} void set_english(double e){english=e;} void set_average(double a){average = a;} void set_total(double t){total=t;} void show(){cout<<name<<" "<<cpp<<" "<<math<<" "<<english<<" "<<total<<" "<<average<<endl;} private: string name; double cpp; double math; double english; double average; double total; }; void Student::set_value(string nam, double c, double m, double e) { name=nam; cpp=c; math=m; english=e; total=c+m+e; average = total/3; } int main() { Student stud[101],stu[101],t; //stud[101]为保存数据的对象数组 string sname; double scpp, smath, senglish; int i; //将文件中的数据读入到对象数组中 ifstream infile("score.dat",ios::in); //以输入的方式打开文件 打开存有数据的score文件已输入的方式(输入输出相对于内存来说吧) if(!infile) //测试是否成功打开 { cerr<<"open error!"<<endl; exit(1); } for(i=0;i<100;i++) { infile>>sname>>scpp>>smath>>senglish; stud[i].set_value(sname, scpp, smath, senglish); } infile.close(); stud[100].set_value("殷华哲",100,100,100); //将自己的数据写进去 ofstream outfile("stud.dat",ios::binary); //以二进制形式(计算机能看懂的)打开以输出的方式 for(i=0;i<101;i++) { outfile.write((char *)&stud[i],sizeof(stud[i])); } outfile.close(); if(!outfile) { cout<<"打开成功"<<endl; abort(); } ifstream out("stud.dat",ios::binary); //以二进制的形式以输入的方式打开 if(!out) { cout<<"打开成功"<<endl; abort(); } for(i=0;i<101;i++) { out.read((char *)&stu[i],sizeof(stu[i])); //把二进制文件读出也就是把文件里的数据放到新建立的对象数组了。 } for(i=0;i<101;i++) { stu[i].show(); } out.close(); return 0; }
刘得意 60 98 75 233 77.6667
王锐 63 90 96 249 83
何煜中 90 73 82 245 81.6667
王磊 87 86 92 265 88.3333
冯松 89 98 83 270 90
裴培 75 82 91 248 82.6667
马骁 62 67 90 219 73
马婧 98 84 87 269 89.6667
周俊升 57 68 96 221 73.6667
贺祺 61 96 72 229 76.3333
李桐 93 83 86 262 87.3333
高路 63 74 98 235 78.3333
冯佳媛 61 79 81 221 73.6667
张迪 99 88 80 267 89
张里响 85 65 96 246 82
王瑞麒 89 83 91 263 87.6667
徐金竹 75 89 73 237 79
赵媛媛 77 75 66 218 72.6667
宋宗杰 94 100 92 286 95.3333
张佳玮 61 98 96 255 85
王姝 70 91 90 251 83.6667
宋媛媛 61 94 92 247 82.3333
于莉 55 66 78 199 66.3333
于浩 78 84 72 234 78
王竞 90 87 67 244 81.3333
崔赞 91 67 93 251 83.6667
宋静 69 85 73 227 75.6667
王磊 71 78 77 226 75.3333
方圆 70 79 76 225 75
李朋 90 82 97 269 89.6667
马佳 60 90 100 250 83.3333
张龙 62 100 78 240 80
马里 73 95 73 241 80.3333
韩明 83 97 88 268 89.3333
马立 73 90 83 246 82
吴清正 89 97 85 271 90.3333
印虹 92 68 75 235 78.3333
田苗苗 75 91 71 237 79
卫青 66 73 77 216 72
冷云 89 88 71 248 82.6667
葛志伟 100 79 71 250 83.3333
范振光 98 87 89 274 91.3333
王芳 71 97 99 267 89
杨超 67 73 82 222 74
杨梦婕 89 99 67 255 85
梁雅宁 55 88 100 243 81
王琦 98 95 98 291 97
吴玮 69 76 68 213 71
杨阔 90 91 98 279 93
贾伟林 63 90 86 239 79.6667
刘亚新 77 81 95 253 84.3333
金昕 92 67 69 228 76
董一伟 93 88 80 261 87
汤娜 68 85 71 224 74.6667
周恒 87 82 69 238 79.3333
张笑 86 88 76 250 83.3333
文静 93 88 85 266 88.6667
杨华鑫 81 81 68 230 76.6667
苏明霞 59 79 94 232 77.3333
黄京 62 75 96 233 77.6667
佟欣 60 79 98 237 79
张雯 69 70 93 232 77.3333
刘京西 67 78 78 223 74.3333
徐嘉琦 90 75 87 252 84
魏佳 100 94 80 274 91.3333
高举 81 99 91 271 90.3333
边里 56 94 87 237 79
何佳成 70 75 78 223 74.3333
赵旭洋 87 91 94 272 90.6667
孙大伟 65 69 98 232 77.3333
鲁继森 84 79 75 238 79.3333
白涛 57 82 75 214 71.3333
蔺剑飞 88 75 79 242 80.6667
兰天 83 66 74 223 74.3333
王悦 79 82 70 231 77
陈世勃 70 92 65 227 75.6667
张昊 94 83 96 273 91
高清 76 83 84 243 81
王欣欣 71 83 78 232 77.3333
王欢欢 57 33 66 156 52
叶丹 87 80 96 263 87.6667
李悦 63 79 97 239 79.6667
郭倩 69 94 69 232 77.3333
刘盈 99 72 93 264 88
杨洁 96 79 87 262 87.3333
徐一菡 85 45 62 192 64
王蒙 67 97 89 253 84.3333
张敏 85 75 89 249 83
桂佳 60 73 65 198 66
林倩 67 77 80 224 74.6667
任盛达 57 86 88 231 77
吴佳林 96 65 82 243 81
黄金龙 85 90 78 253 84.3333
陈美珠 82 72 83 237 79
冼丹 100 89 89 278 92.6667
唐楠 68 97 77 242 80.6667
张扬 77 65 93 235 78.3333
宋航彬 80 71 91 242 80.6667
薛淇文 89 71 75 235 78.3333
刘紫亮 72 98 84 254 84.6667
殷华哲 100 100 100 300 100
请按任意键继续. . .