现在的位置: 首页 > 综合 > 正文

C++——二进制文件的操作

2013年12月08日 ⁄ 综合 ⁄ 共 3987字 ⁄ 字号 评论关闭

背景: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
请按任意键继续. . .

抱歉!评论已关闭.