/* (程序头部注释开始) * 程序的版权和版本声明部分* Copyright (c) 2011, 烟台大学计算机学院学生 * All rights reserved.* 文件名称:二进制文件* 作 者: 张馨* 完成日期: 2012年 06月 13日* 版 本 号: * 对任务及求解方法的描述部分* 输入描述: * 问题描述:* 程序输出: * 程序头部的注释结束
#include <fstream> #include<iostream> #include<string> #include<iomanip> 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_total(){return total;} void set_cpp(double c){cpp=c;} void set_math(double m){math=m;} void set_english(double e){english=e;} void set_total(double t){total=t;} private: string name; double cpp; double math; double english; 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; } int main( ) { Student stud[102],t; //stud[100]为保存数据的对象数组 string sname; double scpp, smath, senglish; int i; //将score.dat文件中的数据读入到对象数组中 ifstream infile("score.dat",ios::in | ios::binary); //以输入的方式打开文件并定义为二进制文件 if(!infile) //测试是否成功打开 { cerr<<"open error!"<<endl; abort();//退出程序,与exit函数的作用相同 } for(i=0;i<101;i++) { infile>>sname>>scpp>>smath>>senglish; stud[i].set_value(sname, scpp, smath, senglish); } infile.close(); cout<<"请到文件binary_score.dat中查看学生求总分后的成绩结果"<<endl<<endl;、 //以输出方式打开binary_score.dat文件,并定义为二进制类型的文件 ofstream outfile("binary_score.dat",ios::binary); if(!outfile) //判断文件是否打开 { cerr<<"open error!"<<endl; exit(1); } stud[101].set_value("张培培",100,100,100);//调用函数输入我的信息 for(i=0;i<102;i++) { outfile.write((char*)&stud[i],sizeof(stud[i])); //用write函数以二进制形式将信息读入文件 } outfile.close(); //将binary_score.dat文件中的数据读入到对象数组中 ifstream onfile("binary_score.dat", ios::in|ios::binary); //以输入的方式打开文件 if(!onfile) //测试是否成功打开 { cerr<<"open error!"<<endl; abort(); //退出程序,与exit函数的作用相同 } cout << setiosflags(ios::left) << setw(12) << "姓名" << setw(8) << "C++" << setw(8) << "高数" << setw(8) << "英语" << setw(8) <<"总分" << setw(8) << endl; for(int i=0;i<102;i++) { onfile.read((char*)&stud[i],sizeof(stud[i])); //用read函数以二进制形式将信息从文件中读出来 cout<<setiosflags(ios::left)<<setw(12)<<stud[i].get_name()<<setw(8)<<stud[i].get_cpp()<<setw(8)<<stud[i].get_math()<<setw(8)<<stud[i].get_english()<<setw(8)<<stud[i].get_total()<<setw(8)<<endl; //在屏幕上显示分数信息 } onfile.close(); system("pause"); return 0; }