十七周任务一:二进制读文件

/* (程序头部注释开始)
* 程序的版权和版本声明部分
* Copyright (c) 2011, 烟台大学计算机学院学生 
* All rights reserved.
* 文件名称:                              
* 作    者:           田庆                   
* 完成日期:   2012      年    6   月 13       日
* 版 本 号:          

* 对任务及求解方法的描述部分
* 输入描述: 
* 问题描述: 
* 程序输出: 
* 程序头部的注释结束
*/
#include <fstream>
#include<iostream>
#include<iomanip>
#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_total(){return total;}
	double get_average(){return average;}
	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;}
	void set_average(double a){average=a;}
private:
	string name;
	double cpp;
	double math;
	double english;
	double total;
	double average;
};

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],t; //stud[100]为保存数据的对象数组
	string sname;
	double scpp, smath, senglish;
	int i,j;

	//将文件中的数据读入到对象数组中
	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;
  //以输出方式打开binary_score.dat文件,并定义为二进制类型的文件 
	ofstream outfile("binary_score.dat",ios::binary);
	if(!outfile)    
	{
		cerr<<"open error!"<<endl;
		exit(1);
	}
	stud[100].set_value("田庆",100,100,100);
	for(i=0;i<101;i++)
	{
		
		outfile.write((char*)&stud[i],sizeof(stud[i]));
	}
    //将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(i=0;i<101;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)<<stud[i].get_average()<<endl; //在屏幕上显示分数信息    
	}  
	onfile.close();  
	system("pause");
	return 0;
}

运行结果:

请到文件binary_score.dat中查看学生求总分后的成绩结果
姓名        C++     高数    英语    总分    平均分
刘得意      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
请按任意键继续. . .

感言:这半学期的最后一个程序啦!谢谢老师这一年来对我们的指点。。。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值