#include<iostream> #include<fstream> #include<string> #include<iomanip> using namespace std; class Student { public: Student(); Student(string name,int C_plus_plus,int Math,int English,int All_score,double Average); void set_name(string name); void set_C_plus_plus(int C_plus_plus); void set_Math(int Math); void set_English(int English); void set_All_score(int All_score); void set_Average(double Average); string get_name(); int get_C_plus_plus(); int get_Math(); int get_English(); int get_All_score(); double get_Average(); friend void high_C_plus_plus_score(Student s[]); friend void high_Math_score(Student s[]) ; friend void high_English_score(Student s[]); friend void high_All_score(Student s[]); friend void Descending_order(Student s[]);//排序,降序; friend void All_score(Student s[]); friend void Average_score(Student s[]); friend ostream& operator << (ostream&,Student&); //重载流插入运算符“<<” ; friend void insert_data(Student s[]); friend void check_data(); private: string name; int C_plus_plus; int Math; int English; int All_score; double Average; }; void input_student(Student s[]); void ordered_student_dat(Student s[]); int main() { Student s1[101],s2,s3[1]; input_student(s1);//读入100人的原始分数 //ordered_student_dat(s1); insert_data(s1); All_score(s1); Average_score(s1); cout<<"C++的最高分为:"; high_C_plus_plus_score(s1); cout<<endl; cout<<"高数的最高分为:"; high_Math_score(s1); cout<<endl; cout<<"英语的最高分为:"; high_English_score(s1); cout<<endl; cout<<"总分的最高分为:"; high_All_score(s1); cout<<endl; Descending_order(s1); ordered_student_dat(s1); check_data(); cout<<endl; system("PAUSE"); return 0; } Student::Student() { name="unknow"; C_plus_plus=0; Math=0; English=0; All_score=0; Average=0.0; } Student::Student(string name,int C_plus_plus,int Math,int English,int All_score,double Average) { this->name=name; this->C_plus_plus=C_plus_plus; this->Math=Math; this->English=English; this->All_score=All_score; this->Average=Average; } void input_student(Student s[]) { int i=0; string name; int C_plus_plus; int Math; int English; ifstream infile("score.dat",ios::in); if (!infile) { cerr<<"open error!"<<endl; exit(1); } for (i=0;i<101;i++) { infile>>name; s[i].set_name(name); infile>>C_plus_plus; s[i].set_C_plus_plus(C_plus_plus); infile>>Math; s[i].set_Math(Math); infile>>English; s[i].set_English(English); } infile.close(); //cout<<endl; } void ordered_student_dat(Student s[]) { ofstream outfile("binary_score.dat",ios::out); if(!outfile) { cerr<<"open error!"<<endl; exit(1); } // outfile<<'\t'<<"\t"<<"\t"<<"\t"<<"姓名"<<'\t'<<'\t'<<"\t"<<"C++"<<"\t"<<"英语"<<"\t"<<"高数"<<"\t"<<"总分"<<"\t"<<"平均分"<<'\n'<<'\n'; for(int i=0;i<101;i++) outfile<<'\t'<<"\t"<<"\t"<<"\t"<<s[i].get_name()<<'\t'<<'\t'<<"\t"<<s[i].get_C_plus_plus()<<"\t"<<s[i].get_Math()<<"\t"<<s[i].get_English()<<"\t"<<s[i].get_All_score()<<"\t"<<setiosflags(ios::fixed)<<setprecision(2)<<s[i].get_Average()<<'\n'; outfile.close(); return ; } void Student::set_name(string name) { this->name=name; } void Student::set_C_plus_plus(int C_plus_plus) { this->C_plus_plus=C_plus_plus; } void Student::set_Math(int Math) { this->Math=Math; } void Student::set_English(int English) { this->English=English; } void Student::set_All_score(int All_score) { this->All_score=All_score; } void Student::set_Average(double Average) { this->Average=Average; } string Student::get_name() { return name; } int Student::get_C_plus_plus() { return C_plus_plus; } int Student::get_Math() { return Math; } int Student::get_English() { return English; } int Student::get_All_score() { return All_score; } double Student::get_Average() { return Average; } void high_C_plus_plus_score(Student s[]) { Student student; int score; int i=0,j=0; string name; score=s[i].get_C_plus_plus(); student.set_C_plus_plus(score); for(i=0;i<100;++i) { if(student.get_C_plus_plus()<s[i+1].get_C_plus_plus()) { score=s[i+1].get_C_plus_plus(); student.set_C_plus_plus(score); name=s[i+1].get_name(); student.set_name(name); } } cout<<student.get_C_plus_plus()<<'\n'; cout<<endl; cout<<"获得C++最高分的这几名同学叫:"; for(i=0;i<101;++i) { if(student.get_C_plus_plus()==s[i].get_C_plus_plus()) cout<<s[i].get_name()<<'\t'; } cout<<'\n'; return ; } void high_Math_score(Student s[]) { Student student; int score,i=0; string name; score=s[i].get_Math(); student.set_Math(score); for(i=0;i<100;++i) { if(student.get_Math()<s[i+1].get_Math()) { score=s[i+1].get_Math(); student.set_Math(score); name=s[i+1].get_name(); student.set_name(name); } } cout<<student.get_Math()<<'\n'; cout<<endl; cout<<"获得高数最高分的这几名同学叫:"; for(i=0;i<101;++i) { if(student.get_Math()==s[i].get_Math()) cout<<s[i].get_name()<<'\t'; } cout<<'\n'; return ; } void high_English_score(Student s[]) { Student student; int score,i=0; string name; score=s[i+1].get_English(); student.set_English(score); for(i=0;i<100;++i) { if(student.get_English()<s[i+1].get_English()) { score=s[i+1].get_English(); student.set_English(score); name=s[i+1].get_name(); student.set_name(name); } } cout<<student.get_English()<<'\n'; cout<<endl; cout<<"获得英语最高分的这几名同学叫:"; for(i=0;i<101;++i) { if(student.get_English()==s[i].get_English()) cout<<s[i].get_name()<<'\t'; } cout<<'\n'; return ; } void high_All_score(Student s[]) { Student student; int score,i=0; string name; score=s[i].get_All_score(); student.set_All_score(score); for(i=0;i<100;++i) { if(student.get_All_score()<s[i+1].get_All_score()) { score=s[i+1].get_All_score(); student.set_All_score(score); name=s[i+1].get_name(); student.set_name(name); } } cout<<student.get_All_score()<<'\n'; cout<<endl; cout<<"获得总分最高分的这几名同学叫:"; for(i=0;i<101;++i) { if(student.get_All_score()==s[i].get_All_score()) cout<<s[i].get_name()<<'\t'; } cout<<'\n'; return ; } void Descending_order(Student s[]) { Student student; string name; int i,j; for(i=0;i<101-1;i++) { for(j=0;j<101-i-1;j++) { if(s[j].get_All_score()<s[j+1].get_All_score()) { student=s[j+1]; s[j+1]=s[j]; s[j]=student; } } } /*for (i=0;i<101;i++) { cout<<s[i].get_All_score()<<" "; } */ } void All_score(Student s[]) { int score; for(int i=0;i<101;++i) { score=s[i].get_C_plus_plus()+s[i].get_Math()+s[i].get_English(); s[i].set_All_score(score); } } void Average_score(Student s[]) { double average; for(int i=0;i<101;++i) { average=double(s[i].get_C_plus_plus()+s[i].get_Math()+s[i].get_English())/3; s[i].set_Average(average); } } ostream& operator << (ostream&output,Student&s) { if(s.get_C_plus_plus()!=0) { output<<s.get_C_plus_plus()<<'\t'<<"该同学名叫:"<<s.get_name()<<endl; } else if(s.get_Math()!=0) { output<<s.get_Math()<<'\t'<<"该同学名叫:"<<s.get_name()<<endl; } else if(s.get_English()!=0) { output<<s.get_English()<<'\t'<<"该同学名叫:"<<s.get_name()<<endl; } else { output<<s.get_All_score()<<'\t'<<"该同学名叫:"<<s.get_name()<<endl; } return output; } void insert_data(Student s[]) { string name; int C_plus_plus; int Math; int English; cout<<"请输入您的姓名,C++成绩,高数成绩和英语成绩,中间以空格顿开:"<<'\n'; cin>>name>>C_plus_plus>>Math>>English; s[100].set_name(name); s[100].set_C_plus_plus(C_plus_plus); s[100].set_Math(Math); s[100].set_English(English); cout<<endl; /*-ifstream outfile("binary_score.dat",ios::in|ios::binary);//|ios::binary if(!outfile) { cerr<<"open error!"<<endl; abort( ); } outfile<<s[100].get_name()<<s[100].get_C_plus_plus()<<s[100].get_Math()<<s[100].get_English(); outfile.close();*/ } void check_data() { Student s[107]; int i=0; string name,str[6]; int C_plus_plus; int Math; int English; int All_score; double Average; ifstream infile("binary_score.dat",ios::in); if (!infile) { cerr<<"open error!"<<endl; exit(1); } /* for (i=0;i<6;i++) { infile>>str[i]; }*/ for (i=0;i<107;i++) { infile>>name; s[i].set_name(name); infile>>C_plus_plus; s[i].set_C_plus_plus(C_plus_plus); infile>>Math; s[i].set_Math(Math); infile>>English; s[i].set_English(English); infile>>All_score; s[i].set_All_score(All_score); infile>>Average; s[i].set_Average(Average); } infile.close(); /* for (i=0;i<6;i++) { cout<<str[i]; }*/ cout<<s[0].get_name()<<"\t"<<"\t"<<s[0].get_C_plus_plus()<<"\t"<<s[0].get_Math()<<"\t"<<s[0].get_English()<<"\t"<<s[0].get_All_score()<<"\t"<<setiosflags(ios::fixed)<<setprecision(2)<<s[0].get_Average()<<'\n'; for(i=1;i<101;i++) cout<<s[i].get_name()<<'\t'<<"\t"<<s[i].get_C_plus_plus()<<"\t"<<s[i].get_Math()<<"\t"<<s[i].get_English()<<"\t"<<s[i].get_All_score()<<"\t"<<setiosflags(ios::fixed)<<setprecision(2)<<s[i].get_Average()<<'\n'; }