第十七週C++【報告一】學生成績處理:保存爲二進制文件

  1. 【任務1】學生成績處理:保存爲二進制文件 
  2. ASCII 文件score.dat 中保存的是100 名學生的姓名和C++課、高 
  3. 數和英語成績。 
  4. (1)定義學生類,其中包含姓名、C++課、高數和英語成績及總 
  5. 分、均分數據成員,成員函數根據需要確定。 
  6. (2)讀入學生的成績,並求出總分,用對象數組進行存儲。 
  7. (3)將所有數據保存到一個二進制文件binary_score.dat 中,最 
  8. 後在文件中寫入你自己的各科成績(咱不謙虛,也求個好運,全100 
  9. 分)。 
  10. (4)爲驗證輸出文件正確,再將binary_score.dat 中的記錄逐一 

    讀出到學生對象中並輸出查看。 

#include<iostream> 
#include <string>
using namespace std;
#include<fstream>
class Student
{
public:
	double get_total();
	double get_average();
	friend void input(Student *stu) ;
	friend void input1(Student *stu) ;
	friend void output(Student *stu);
	friend void output1(Student *stu);
	friend void output_max(Student *stu);
	friend void paixu(Student *stu);
	friend void get_total(Student *stu);
private:
	string name;
	double c_score;
	double m_score;
	double e_score;
	double total;
	double average;
};

double Student::get_total()
{
	(this->total) = (this->c_score + this->e_score + this->m_score);
	return (this->total);
}

double Student::get_average()
{
	(this->average) = (this->c_score + this->e_score + this->m_score)/3;
	return (this->average);
}
void input(Student stu[])
{
	string name;
	int i;
	ifstream inFile("score.dat",ios::in);
	if(!inFile)
	{
		cerr<<"open error!"<<endl;
		exit(1);
	}
	for( i=0;i<100;++i)
	{
		inFile>>stu[i].name;


		inFile>>stu[i].c_score;

		inFile>>stu[i].e_score;

		inFile>>stu[i].m_score;
	}
	inFile.close();
}

void input1(Student stu[])
{
	string name;
	ifstream inFile("binary_score.dat",ios::in);
	if(!inFile)
	{
		cerr<<"open error!"<<endl;
		exit(1);
	}
	for( int i=0;i<101;++i)
	{
		inFile>>stu[i].name;
		

		inFile>>stu[i].c_score;

		inFile>>stu[i].e_score;

		inFile>>stu[i].m_score;
		inFile>>stu[i].total;
	}
	inFile.close();
}
void output(Student *stu)
{
	ofstream writeFile("binary_score.dat",ios::out);
	if(!writeFile)
	{
		cerr<<"open error!"<<endl;
		exit(1);
	}
	for(int i=0;i<100;++i)
	{
		writeFile<<stu[i].name<<" ";

		writeFile<<stu[i].c_score<<" ";

		writeFile<<stu[i].e_score<<" ";

		writeFile<<stu[i].m_score<<" ";

		//writeFile<<stu[i].average<<" ";

		writeFile<<stu[i].total<<" ";
	}
	writeFile<<"馬琳"<<" ";
	
	writeFile<<"100"<<" ";
	writeFile<<"100"<<" ";
	writeFile<<"100"<<" ";
    writeFile<<"300"<<" ";
	writeFile.close();

}
void output1(Student *stu)
{
	for(int i=0;i<101;++i)
	{
		//writeFile<<stu[i].name;
		cout<<stu[i].name<<" ";
		//writeFile<<stu[i].c_score;
		cout<<stu[i].c_score<<" ";
		//writeFile<<stu[i].e_score;
		cout<<stu[i].e_score<<" ";
		//writeFile<<stu[i].m_score;
		cout<<stu[i].m_score<<" ";
		//writeFile<<stu[i].average;
		//cout<<stu[i].average<<" ";
		//writeFile<<stu[i].total;
		cout<<stu[i].total<<" ";
		cout<<endl;
	}
	//writeFile.close();

}
void output_max(Student *stu)
{
	double max1,max2,max3,max4;
	max1=stu[0].c_score;
	max2=stu[0].m_score;
	max3=stu[0].e_score;
	max4=stu[0].get_total();
	for(int i=0;i<101;++i)
	{
		if(stu[i].c_score>max1)
		{
			max1=stu[i].c_score;
		}

		if(stu[i].m_score>max2)
		{
			max2=stu[i].m_score;
		}

		if(stu[i].e_score>max3)
		{
			max3=stu[i].e_score;
		}

		if(stu[i].get_total()>max4)
		{
			max4=stu[i].get_total();
		}
	}
	cout<<max1<<endl;
	cout<<max2<<endl;
	cout<<max3<<endl;
	cout<<max4<<endl;

}

void paixu(Student *stu)
{

	Student t;
	for( int i=0;i<101;++i)
	{
		stu[i].get_total();
		stu[i].get_average();
	}
	for(int j=0;j<100;++j)
		for(int i=0;i<100-j;++i)
		{
			if(stu[i].total<stu[i+1].total)
			{
				t=stu[i];
				stu[i]=stu[i+1];
				stu[i+1]=t;
			}
		}
}
void get_total(Student *stu)
{
	for(int i=0;i<100;i++)
		stu[i].get_total();
}

	int main()
	{	
		Student stu[101]; 
		input(stu);
		get_total(stu);
		output(stu);
		input1(stu);
		output_max(stu);
		paixu(stu);
		output1(stu);

		system("PAUSE");  
		return 0;  


	}


發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章