/*
* 程序头部注释开始
* 程序的版权和版本声明部分
* 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);
}
}
上机感言:虽然很累,但依然很爽
还没有评论,来说两句吧...