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