第十七周任务一(用二进制形式处理文件之学生分数)

来源:互联网 发布:毕向东java教程百度云 编辑:程序博客网 时间:2024/05/27 16:42
/** 程序头部注释开始  * 程序的版权和版本声明部分  * Copyright (c) 2011, 烟台大学计算机学院学生  * All rights reserved.  * 文件名称:学生成绩处理                              * 作    者:冯珍珍                              * 完成日期:2011  年 6 月  11  日  * 版 本号:x1.0           * 对任务及求解方法的描述部分  * 输入描述:文件score.dat * 问题描述:保存为二进制文件ASCII 文件score.dat 中保存的是100 名学生的姓名和C++课、高数和英语成绩。(1)定义学生类,其中包含姓名、C++课、高数和英语成绩及总分、均分数据成员,成员函数根据需要确定。(2)读入学生的成绩,并求出总分,用对象数组进行存储。(3)将所有数据保存到一个二进制文件binary_score.dat 中,最后在文件中写入你自己的各科成绩(咱不谦虚,也求个好运,全100分)。(4)为验证输出文件正确,再将binary_score.dat 中的记录逐一读出到学生对象中并输出查看。* 程序输出:binary_score.dat  * 程序头部的注释结束*/#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;}


 

原创粉丝点击