【题目】
文件score.dat中保存的是100名学生的姓名和C++课、高数和英语成绩。
(1)定义学生类,其中包含姓名、C++课、高数和英语成绩及总分、均分数据成员,成员函数根据需要确定。
(2)读入这名学生的成绩,用对象数组进行存储。
(3)求出各科和总分的最高分。
(4)请按总分的降序(高成绩在前,低成绩在后)排序
(5)在屏幕上显示各科及总分的最高分,排序后的成绩单(包括总分)保存到文件odered_score.dat中。
【一点说明】
本题中专门提出了设计学生类。我对课本中的程序有点意见,讲文件了,对象却找不到了。通过此题,要知道文件操作拓展了们操纵数据的范围,而程序用面向对象的方法做,还是用面向过程的方法编,真是无所谓。
【参考解答】
#include <fstream> #include<iostream> #include<string> using namespace std; //定义学生类 class Student { public: Student(){}; Student(string nam, double c, double m, double e):name(nam),cpp(c),math(m),english(e){total=c+m+e;} void set_value(string nam, double c, double m, double e); string get_name(){return name;} double get_cpp(){return cpp;} double get_math(){return math;} double get_english(){return english;} double get_total(){return total;} void set_cpp(double c){cpp=c;} void set_math(double m){math=m;} void set_english(double e){english=e;} void set_total(double t){total=t;} private: string name; double cpp; double math; double english; double total; }; void Student::set_value(string nam, double c, double m, double e) { name=nam; cpp=c; math=m; english=e; total=c+m+e; } int main( ) { Student stud[100],t; //stud[100]为保存数据的对象数组 string sname; double scpp, smath, senglish; int i,j; //将文件中的数据读入到对象数组中 ifstream infile("score.dat",ios::in); //以输入的方式打开文件 if(!infile) //测试是否成功打开 { cerr<<"open error!"<<endl; exit(1); } for(i=0;i<100;i++) { infile>>sname>>scpp>>smath>>senglish; stud[i].set_value(sname, scpp, smath, senglish); } infile.close(); //求各科最高分及总分最高分 Student max_stud("nobody",0,0,0); //max_stud是一个不存在的学生,存储最高分 for(i=0;i<100;i++) { if(stud[i].get_cpp()>max_stud.get_cpp()) max_stud.set_cpp(stud[i].get_cpp()); if(stud[i].get_math()>max_stud.get_math()) max_stud.set_math(stud[i].get_math()); if(stud[i].get_english()>max_stud.get_english()) max_stud.set_english(stud[i].get_english()); if(stud[i].get_total()>max_stud.get_total()) max_stud.set_total(stud[i].get_total()); } //按总分排序 for(j=0;j<100-2;j++) { for(i=0;i<100-j-1;i++) if (stud[i].get_total()<stud[i+1].get_total()) { t=stud[i]; stud[i]=stud[i+1]; stud[i+1]=t; } } //显示各科及总分的最高分 cout<<"C++最高分为: "<<max_stud.get_cpp()<<endl; cout<<"高等数学最高分为: "<<max_stud.get_math()<<endl; cout<<"英语最高分为: "<<max_stud.get_english()<<endl; cout<<"总分最高分为: "<<max_stud.get_total()<<endl; //将按总分排序后的结果存入文件 cout<<"请到文件ordered_salary.txt中查看排序后的结果"<<endl; ofstream outfile("ordered_salary.txt",ios::out); if(!outfile) { cerr<<"open error!"<<endl; exit(1); } for(i=0;i<100;i++) { outfile<<stud[i].get_name()<<"\t"; outfile<<stud[i].get_cpp()<<"\t"; outfile<<stud[i].get_math()<<"\t"; outfile<<stud[i].get_english()<<"\t"; outfile<<stud[i].get_total()<<endl; } outfile.close(); system("pause"); return 0; }
时间: 2024-11-14 12:04:33