源程序:
#include<iostream>
#include <fstream>
using namespace std;
class Student
{public:
Student(void){}
Student(char nam[20], double cs, double mas, double ens, double all, double avs):cscore(cs), mathscore(mas), englishscore(ens), allscore(all), averagescore(avs){strcpy(name,nam);}
// void setName(char nam[20]){strcpy(name,nam);}
// void setCscore()(float s){cscore = s;}
// void setMathscore()(float s){mathscore = s;}
// void setEnglishscore()(float s){englishscore = s;}
void display();
friend void cin_score(Student stud[]);
friend void out_score(Student stud[]);
private:
char name[20];
double cscore;
double mathscore;
double englishscore;
double allscore;
double averagescore;
};
void Student::display()
{
cout << name << '\t' << cscore << '\t' << mathscore << '\t' << englishscore << '\t' << allscore << '\t' << averagescore << endl;
}
void cin_score(Student stud[])
{
ifstream infile("score.dat",ios::in);
if(!infile)
{ cerr<<"open score.dat error!"<<endl;
abort( );
}
for(int i = 0; i < 101; i++)
{
if(i == 100)
{
strcpy(stud[i].name, "王涛");
stud[i].cscore = 100;
stud[i].mathscore = 100;
stud[i].englishscore = 100;
}
else
{
infile >> stud[i].name >> stud[i].cscore >> stud[i].mathscore >> stud[i].englishscore;
}
stud[i].allscore = stud[i].cscore + stud[i].mathscore + stud[i].englishscore;
stud[i].averagescore = stud[i].allscore / 3;
}
infile.close( );
}
void out_score(Student stud[])
{
ofstream outfile("binary_score.dat",ios::binary);
if(!outfile)
{ cerr<<"open binary_score.dat error!"<<endl;
abort( );
}
for(int i = 0; i < 101; ++ i)
{
outfile.write((char *) &stud[i], sizeof(stud[i]));
stud[i].display();
}
outfile.close( );
}
int main( )
{
Student stud[101];
cin_score(stud);
out_score(stud);
system("pause");
return 0;
}
截图:
这次的程序偷了个小懒···在添加自己的分数时没有用seek()函数···因为觉得这样比较简单···可是这样对学习可不适用·····
这次的程序又出现了很多意想不到的问题···开始时用iofile()结果出现又好多“烫烫烫”····真的被烫到了···经锋哥指点才知道是因为自己浪费的空间太多····
才及时改了过来····
后来在编辑添加自己的成绩时,输入姓名的地方卡了一下···直接用了“=”而没有用strcpy()····查看书本后才记了起来·····