`
txf2004
  • 浏览: 6853560 次
  • 性别: Icon_minigender_1
  • 来自: 上海
社区版块
存档分类
最新评论

《C++第十七周实验报告1-1》---学生成绩处理:保存为二进制文件

 
阅读更多
/*
【任务1】学生成绩处理:保存为二进制文件
ASCII 文件score.dat 中保存的是100 名学生的姓名和C++课、高
数和英语成绩。
(1)定义学生类,其中包含姓名、C++课、高数和英语成绩及总
分、均分数据成员,成员函数根据需要确定。
(2)读入学生的成绩,并求出总分,用对象数组进行存储。
(3)将所有数据保存到一个二进制文件binary_score.dat 中,最
后在文件中写入你自己的各科成绩(咱不谦虚,也求个好运,全100
分)。
(4)为验证输出文件正确,再将binary_score.dat 中的记录逐一
读出到学生对象中并输出查看。
*/
/* (程序头部注释开始)
* 程序的版权和版本声明部分
* Copyright (c) 2011, 烟台大学计算机学院学生 
* All rights reserved.
* 文件名称:   Student.cpp                           
* 作    者:   计114-3 王兴锋     
* 完成日期:    2012  年  6  月   11  日
* 版 本 号:       V 7.0
* 对任务及求解方法的描述部分 
* 程序头部的注释结束
*/
#include <fstream>
#include <iostream>
#include "iomanip"
#include "string"

using namespace std;

class Student
{
public:
	Student(){}
	Student(string na, double cpp, double math, double en):name(na),cpp_score(cpp), math_score(math), en_score(en)
	{total_score = cpp + math + en;aver_score = total_score / 3;}
	void set_name(string na);
	string get_name();
	void setcpp_score(double sc);
	double getcpp_score();
	void setmath_score(double sc);
	double getmath_score();
	void seten_score(double sc);
	double geten_score();
	void settotal_score(double sc);
	double gettotal_score();
	void setaver_score(double sc);
	double getaver_score();
	//
	void show_score();//输出成绩;
private:
	string name;
	double cpp_score;
	double math_score;
	double en_score;
	double total_score;
	double aver_score;
};
void Student::set_name(string na)
{
	name = na;
}
string Student::get_name()
{
	return name;
}
void Student::setcpp_score(double sc)
{
	cpp_score = sc;
}
double Student::getcpp_score()
{
	return cpp_score;
}
void Student::setmath_score(double sc)
{
	math_score = sc;
}
double Student::getmath_score()
{
	return math_score;
}
void Student::seten_score(double sc)
{
	en_score = sc;
}
double Student::geten_score()
{
	return en_score;
}
void Student::settotal_score(double sc)
{
	total_score = sc;
}
double Student::gettotal_score()
{
	return total_score;
}
void Student::setaver_score(double sc)
{
	aver_score = sc;
}
double Student::getaver_score()
{
	return aver_score;
}
//定义void show_score函数;
void Student::show_score()
{
	cout << setw(6) << setiosflags(ios::left) << name << " " 
		<< cpp_score << '\t' << math_score << '\t' << en_score << '\t' << total_score << '\t' << aver_score << '\t';		
	cout<<endl;
}
////////////////////////////////////////////////////////////////////////////
void cin_score(int num, Student st[]);//从文件得到成绩;
void write_score(int num, Student st[]);//储存成绩
void write_myscore();//写入我的成绩
void read_score(int num, Student st[]);//读取储存的成绩
////////////////////////////////////////////////////////////////////////////
int main( )
{	
	Student st[101];
	//从文件得到学生成绩并作相应的处理
	cin_score(100, st);
	//保存成绩
	write_score(100, st);
	//写入我的成绩
	write_myscore();
	//读取处理后的成绩
	read_score(101, st);
	//显示处理后的成绩
	for (int i = 0; i < 101; i++)
	{
		st[i].show_score();
	}

	system("PAUSE");
	return 0;
}
//定义从文件输入函数;
void cin_score(int num, Student st[])
{
	string name;
	double cpp_score;
	double math_score;
	double en_score;

	ifstream infile("score.dat", ios::in);
	if (!infile)
	{
		cerr << "open error!" << endl;
		exit(1);
	}
	for (int i = 0; i < num; i++)
	{
		infile >> name >> cpp_score >> math_score >> en_score;//读入
		st[i].set_name(name); 
		st[i].setcpp_score(cpp_score); 
		st[i].setmath_score(math_score); 
		st[i].seten_score(en_score);
		st[i].settotal_score(cpp_score+math_score+en_score);
		st[i].setaver_score((cpp_score+math_score+en_score)/3);
	}
	infile.close();
}
//定义写出数据函数
void write_score(int num, Student st[])
{
	fstream outfile("binary_score.dat", ios::out|ios::binary);
	if (!outfile)                        
	{
		cerr << "open error!" << endl;
		exit(1);
	}
	else
	{
		for (int i = 0; i < num; i++)
		{
			outfile.write((char *) &st[i], sizeof(st[i]));
		}
		outfile.close();

		cout<<"成绩已保存!"<<endl;
	}
}
//定义读取函数
void read_score(int num, Student st[])
{
	fstream infile("binary_score.dat", ios::in|ios::binary);
	if (!infile)                        
	{
		cerr << "open error!" << endl;
		exit(1);
	}
	else
	{
		for (int i = 0; i < num; i++)
		{
			infile.read((char *) &st[i], sizeof(st[i]));
		}
		infile.close();
		
		cout<<"成绩已读取!"<<endl;
	}
}
void write_myscore()
{
	fstream writems("binary_score.dat", ios::out|ios::app|ios::binary);//定义写入文件的方式
	if (!writems)                        
	{
		cerr << "open error!" << endl;
		exit(1);
	}
	else
	{
		Student st("王兴锋", 100, 100, 100);
		writems.write((char *) &st, sizeof(st));	
		cout<<"个人成绩已写入!"<<endl;
	}

}
/*
成绩已保存!
个人成绩已写入!
成绩已读取!
刘得意 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
请按任意键继续. . .
*/

分享到:
评论

相关推荐

Global site tag (gtag.js) - Google Analytics