/* * 程序头部注释开始 * 程序的版权和版本声明部分 * Copyright (c) 2011, 烟台大学计算机学院学生 * All rights reserved. * 文件名称:学生成绩排序 * 作 者:薛广晨 * 完成日期:2011 年 06 月 02 日 * 版 本号:x1.0 * 对任务及求解方法的描述部分 * 输入描述:文件score.dat * 问题描述:文件score.dat 中保存的是100 名学生的姓名和C++课、高数和英语成绩。 (1)定义学生类,其中包含姓名、C++课、高数和英语成绩及总分、均分数据成员,成员函数根据需要确定。 (2)读入这名学生的成绩,用对象数组进行存储。 (3)求出各科和总分的最高分。 (4)请按总分的降序(高成绩在前,低成绩在后)排序 (5)在屏幕上显示各科及总分的最高分,排序后的成绩单(包括总分)保存到文件odered_score.dat中。 * 程序输出:odered_score.dat * 程序头部的注释结束 */ #include <fstream> #include<iomanip> #include <string> #include<iostream> using namespace std; class Student { private: string name; double cgrade; double mathgrade; double englishgrade; double score; double average; public: Student(); Student(string name, double cgrade, double mathgrade, double englishgrade, double score, double average); void set_name(string name); void set_cgrade(double cgrade); void set_mathgrade(double mathgrade); void set_englishgrade(double englishgrade); void set_score(double score); void set_average(double average); string get_name(); double get_cgrade(); double get_mathgrade(); double get_englishgrade(); double get_score(); double get_average(); friend void high_grade(Student s[]); friend void scoregrade(Student s[]); friend void averagegrade(Student s[]); friend void bubble_sort(Student s[]);//排序; }; void cin_grade(Student s[]);//从文件得到数据; void cout_grade(Student s[]);//储存数据; int main( ) { Student s1[100],s2; cin_grade(s1);//读入100人的原始分数 scoregrade(s1); averagegrade(s1); high_grade(s1); bubble_sort(s1); cout_grade(s1); cout<<endl; system("PAUSE"); return 0; } Student::Student() { this->name = "NULL"; this->cgrade = 0; this->mathgrade = 0; this->englishgrade = 0; this->score = 0; this->average = 0; } Student::Student(string name, double cgrade, double mathgrade, double englishgrade, double score, double average) { this->name = name; this->cgrade = cgrade; this->mathgrade = mathgrade; this->englishgrade = englishgrade; this->score = score; this->average = average; } void cin_grade(Student s[]) { int i; string name; double cgrade; double mathgrade; double englishgrade; ifstream infile("score.dat",ios::in); if(!infile) { cerr<<"open error!"<<endl; exit(1); } for(i=0;i<100;i++) { infile >> name >> cgrade >> mathgrade >> englishgrade; s[i].set_name(name); s[i].set_cgrade(cgrade); s[i].set_mathgrade(mathgrade); s[i].set_englishgrade(englishgrade); } infile.close(); cout<<endl; } void cout_grade(Student s[]) { int i; ofstream outfile("odered_score.dat",ios::out); if(!outfile) { cerr<<"open error!"<<endl; exit(1); } outfile << setiosflags(ios::left) << setw(12) << "姓名" << setw(8) << "C++" << setw(8) << "高数" << setw(8) << "英语" << setw(8) <<"总分" << setw(8) << "平均分" << endl; for(i=0;i<100;i++) outfile<<setiosflags(ios::left)<<setw(12)<<s[i].get_name()<<setw(8)<<s[i].get_cgrade()<<setw(8)<<s[i].get_mathgrade()<<setw(8)<<s[i].get_englishgrade()<<setw(8)<<s[i].get_score()<<setw(8)<<s[i].get_average()<<endl; outfile.close(); } void Student::set_name(string name) { this->name = name; } void Student::set_cgrade(double cgrade) { this->cgrade = cgrade; } void Student::set_mathgrade(double mathgrade) { this->mathgrade = mathgrade; } void Student::set_englishgrade(double englishgrade) { this->englishgrade=englishgrade; } void Student::set_score(double score) { this->score=score; } void Student::set_average(double average) { this->average=average; } string Student::get_name() { return name; } double Student::get_cgrade() { return cgrade; } double Student::get_mathgrade() { return mathgrade; } double Student::get_englishgrade() { return englishgrade; } double Student::get_score() { return score; } double Student::get_average() { return average; } void bubble_sort(Student s[]) { Student stud; int i,j; for(i=0;i<100-1;i++) { for(j=0;j<100-i-1;j++) { if(s[j].get_score()<s[j+1].get_score()) { stud=s[j+1]; s[j+1]=s[j]; s[j]=stud; } } } } void high_grade(Student s[]) { Student max_stud("nobody",0,0,0,0,0); for(int i=0;i<100;i++) { if(s[i].get_cgrade() > max_stud.get_cgrade()) { max_stud.set_cgrade(s[i].get_cgrade()); } if(s[i].get_mathgrade() > max_stud.get_mathgrade()) { max_stud.set_mathgrade(s[i].get_mathgrade()); } if(s[i].get_englishgrade() > max_stud.get_englishgrade()) { max_stud.set_englishgrade(s[i].get_englishgrade()); } if(s[i].get_score() > max_stud.get_score()) { max_stud.set_score(s[i].get_score()); } } cout<<"C++的最高分为:"<<max_stud.get_cgrade()<<endl; cout<<"高数的最高分为:"<<max_stud.get_mathgrade()<<endl ; cout<<"英语的最高分为:"<<max_stud.get_englishgrade()<<endl ; cout<<"总分的最高分为:"<<max_stud.get_score()<<endl; } void scoregrade(Student s[]) { double grade; for(int i=0;i<100;++i) { grade=s[i].get_cgrade()+s[i].get_mathgrade()+s[i].get_englishgrade(); s[i].set_score(grade); } } void averagegrade(Student s[]) { double average; for(int i=0;i<100;++i) { average=double(s[i].get_cgrade()+s[i].get_mathgrade()+s[i].get_englishgrade())/3; s[i].set_average(average); } }
上机感言:虽然很累,但依然很爽
第十六周 任务二
最新推荐文章于 2024-08-12 16:55:46 发布