#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 Student high_C_plus_plus_score(Student s[]); friend Student high_Math_score(Student s[]) ; friend Student high_English_score(Student s[]); friend Student 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&); //重载流插入运算符“<<” ; 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[100],s2; input_student(s1);//读入100人的原始分数 All_score(s1); Average_score(s1); s2=high_C_plus_plus_score(s1); cout<<"C++的最高分为:"<<s2<<endl; s2=high_Math_score(s1); cout<<"高数的最高分为:"<<s2<<'\n' ; s2=high_English_score(s1); cout<<"英语的最高分为:"<<s2<<'\n' ; s2=high_All_score(s1); cout<<"总分的最高分为:"<<s2<<'\n' ; Descending_order(s1); ordered_student_dat(s1); 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<100;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("ordered_student.dat",ios::out); if(!outfile) { cerr<<"open error!"<<endl; exit(1); } for(int i=0;i<100;i++) outfile<<s[i].get_name()<<"\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; } Student 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<99;++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); } } return student; } Student 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<99;++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); } } return student; } Student 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<99;++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); } } return student; } Student 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<99;++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); } } return student; } void Descending_order(Student s[]) { Student student; string name; int i,j; for(i=0;i<100-1;i++) { for(j=0;j<100-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<100;i++) { cout<<s[i].get_All_score()<<" "; } } void All_score(Student s[]) { int score; for(int i=0;i<100;++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<100;++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; }
C++的最高分为:100 该同学名叫:葛志伟
高数的最高分为:100 该同学名叫:宋宗杰
英语的最高分为:100 该同学名叫:马佳
总分的最高分为:291 该同学名叫:王琦
291 286 279 278 274 274 273 272 271 271 270 269 269 268 267 267
266 265 264 263 263 262 262 261 255 255 254 253 253 253 252 251
251 250 250 250 249 249 248 248 247 246 246 245 244 243 243 243
242 242 242 241 240 239 239 238 238 237 237 237 237 237 235 235
235 235 234 233 233 232 232 232 232 232 231 231 230 229 228 227
227 226 225 224 224 223 223 223 222 221 221 219 218 216 214 213
199 198 192 156
请按任意键继续. . .