/*
* 程序头部注释开始
* 程序的版权和版本声明部分
* Copyright (c) 2011, 烟台大学计算机学院学生
* All rights reserved.
* 文件名称:
* 作 者:王引琳
* 完成日期:2011 年 06 月 5 日
* 版 本号:
* 对任务及求解方法的描述部分
* 输入描述:
* 问题描述:文件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 Cppgrade;
double Mathgrade;
double Englishgrade;
double Allscore;
double average;
public:
Student();
Student(string na, double Cpp, double Math, double English, double All, double ave);
void set_name(string na);
void set_Cppgrade(double Cpp);
void set_Mathgrade(double Math);
void set_Englishgrade(double English);
void set_Allscore(double All);
void set_average(double ave);
string get_name();
double get_Cppgrade();
double get_Mathgrade();
double get_Englishgrade();
double get_Allscore();
double get_average();
friend void top_score(Student s[]);
friend void Allscore(Student s[]);
friend void average(Student s[]);
friend void bubble_sort(Student s[]);
};
void cin_grade(Student s[]);//从文件得到数据;
void cout_grade(Student s[]);//储存数据;
Student::Student()
{
name = "0";
Cppgrade = 0;
Mathgrade = 0;
Englishgrade = 0;
Allscore = 0;
average = 0;
}
Student::Student(string na, double Cpp, double Math, double English, double All, double ave)
{
name = na;
Cppgrade = Cpp;
Mathgrade = Math;
Englishgrade = English;
Allscore = All;
average = ave;
}
void cin_grade(Student s[])
{
int i;
string name;
double Cppgrade;
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 >> Cppgrade >> Mathgrade >> Englishgrade;
s[i].set_name(name);
s[i].set_Cppgrade(Cppgrade);
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_Cppgrade()<<setw(8)<<s[i].get_Mathgrade()<<setw(8)<<s[i].get_Englishgrade()<<setw(8)<<s[i].get_Allscore()<<setw(8)<<s[i].get_average()<<endl;
outfile.close();
}
void Student::set_name(string na)
{
name = na;
}
void Student::set_Cppgrade(double Cpp)
{
Cppgrade = Cpp;
}
void Student::set_Mathgrade(double Math)
{
Mathgrade = Math;
}
void Student::set_Englishgrade(double English)
{
Englishgrade=English;
}
void Student::set_Allscore(double All)
{
Allscore=All;
}
void Student::set_average(double ave)
{
average=ave;
}
string Student::get_name()
{
return name;
}
double Student::get_Cppgrade()
{
return Cppgrade;
}
double Student::get_Mathgrade()
{
return Mathgrade;
}
double Student::get_Englishgrade()
{
return Englishgrade;
}
double Student::get_Allscore()
{
return Allscore;
}
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_Allscore()<s[j+1].get_Allscore())
{
stud=s[j+1];
s[j+1]=s[j];
s[j]=stud;
}
}
}
}
void top_score(Student s[])
{
Student max_stud("nobody",0,0,0,0,0);
for(int i=0;i<100;i++)
{
if(s[i].get_Cppgrade() > max_stud.get_Cppgrade())
{
max_stud.set_Cppgrade(s[i].get_Cppgrade());
}
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_Allscore() > max_stud.get_Allscore())
{
max_stud.set_Allscore(s[i].get_Allscore());
}
}
cout<<"C++的最高分为:"<<max_stud.get_Cppgrade()<<" ";
cout<<"高数的最高分为:"<<max_stud.get_Mathgrade()<<endl ;
cout<<"英语的最高分为:"<<max_stud.get_Englishgrade()<<" " ;
cout<<"总分的最高分为:"<<max_stud.get_Allscore()<<endl;
}
void Allscore(Student s[])
{
double grade;
for(int i=0;i<100;++i)
{
grade=s[i].get_Cppgrade()+s[i].get_Mathgrade()+s[i].get_Englishgrade();
s[i].set_Allscore(grade);
}
}
void average(Student s[])
{
double average;
for(int i=0;i<100;++i)
{
average=double(s[i].get_Cppgrade()+s[i].get_Mathgrade()+s[i].get_Englishgrade())/3;
s[i].set_average(average);
}
}
int main( )
{
Student t1[100];
cin_grade(t1);
Allscore(t1);
average(t1);
top_score(t1);
bubble_sort(t1);
cout_grade(t1);
cout<<endl;
system("PAUSE");
return 0;
}
运行结果:
C++的最高分为:100 高数的最高分为:100
英语的最高分为:100 总分的最高分为:291
请按任意键继续. . .