第十七周

/*
* 程序头部注释开始  
* 程序的版权和版本声明部分  
* Copyright (c) 2011, 烟台大学计算机学院学生  
* All rights reserved.  
* 文件名称:学生成绩处理                              
* 作    者:刘杨                              
* 完成日期:2012年06月11日  
* 版 本号:x1.0           
  
* 对任务及求解方法的描述部分  
* 输入描述:文件score.dat 
* 问题描述:保存为二进制文件ASCII 文件score.dat 中保存的是100 名学生的姓名和C++课、高数和英语成绩。
           (1)定义学生类,其中包含姓名、C++课、高数和英语成绩及总分、均分数据成员,成员函数根据需要确定。
           (2)读入学生的成绩,并求出总分,用对象数组进行存储。
           (3)将所有数据保存到一个二进制文件binary_score.dat 中,最后在文件中写入你自己的各科成绩(咱不谦虚,也求个好运,全100分)。
           (4)为验证输出文件正确,再将binary_score.dat 中的记录逐一读出到学生对象中并输出查看。
* 程序输出:binary_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 scoregrade(Student  s[]);  
	friend void averagegrade(Student  s[]); 
	friend void bubble_sort(Student  s[]);//排序;
	friend void cin_grade(Student  s[]);//从文件得到数据;
	friend void cout_grade(Student  s[]);//储存数据;
};

int main( )
{    
	Student stud[101]; 
	cin_grade(stud);//读入101人的原始分数
	scoregrade(stud);  
	averagegrade(stud);
	bubble_sort(stud);  
	cout_grade(stud);  
	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<101;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  stud[])
{
	int i;
    ofstream outfile("binary_score.dat",ios::binary);
    if(!outfile)
	{
		cerr<<"open error!"<<endl;
       exit(1);
	}
	cout << setiosflags(ios::left) << setw(12) << "姓名" << setw(8) << "C++" << setw(8) << "高数" << setw(8) << "英语" << setw(8) <<"总分" << setw(8) << "平均分" << endl;
	for(int i = 0; i < 101; i++)
	{
		outfile.write((char *)&stud[i],sizeof(stud[i]));
		cout<<setiosflags(ios::left)<<setw(12)<<stud[i].get_name()<<setw(8)<<stud[i].get_cgrade()<<setw(8)<<stud[i].get_mathgrade()<<setw(8)<<stud[i].get_englishgrade()<<setw(8)<<stud[i].get_score()<<setw(8)<<stud[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<101-1;i++)   
    {  
        for(j=0;j<101-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 scoregrade(Student  s[])   
{  
    double grade;  
    for(int i=0;i<101;++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<101;++i)  
    {  
        average=double(s[i].get_cgrade()+s[i].get_mathgrade()+s[i].get_englishgrade())/3;  
        s[i].set_average(average);  
    }  
}  


运行结果:

刘杨  100     100     100
刘得意 60 98 75
王锐 63 90 96
何煜中 90 73 82
王磊 87 86 92
冯松 89 98 83
裴培 75 82 91
马骁 62 67 90
马婧 98 84 87
周俊升 57 68 96
贺祺 61 96 72
李桐 93 83 86
高路 63 74 98
冯佳媛 61 79 81
张迪 99 88 80
张里响 85 65 96
王瑞麒 89 83 91
徐金竹 75 89 73
赵媛媛 77 75 66
宋宗杰 94 100 92
张佳玮 61 98 96
王姝 70 91 90
宋媛媛 61 94 92
于莉 55 66 78
于浩 78 84 72
王竞 90 87 67
崔赞 91 67 93
宋静 69 85 73
王磊 71 78 77
方圆 70 79 76
李朋 90 82 97
马佳 60 90 100
张龙 62 100 78
马里 73 95 73
韩明 83 97 88
马立 73 90 83
吴清正 89 97 85
印虹 92 68 75
田苗苗 75 91 71
卫青 66 73 77
冷云 89 88 71
葛志伟 100 79 71
范振光 98 87 89
王芳 71 97 99
杨超 67 73 82
杨梦婕 89 99 67
梁雅宁 55 88 100
王琦 98 95 98
吴玮 69 76 68
杨阔 90 91 98
贾伟林 63 90 86
刘亚新 77 81 95
金昕 92 67 69
董一伟 93 88 80
汤娜 68 85 71
周恒 87 82 69
张笑 86 88 76
文静 93 88 85
杨华鑫 81 81 68
苏明霞 59 79 94
黄京 62 75 96
佟欣 60 79 98
张雯 69 70 93
刘京西 67 78 78
徐嘉琦 90 75 87
魏佳 100 94 80
高举 81 99 91
边里 56 94 87
何佳成 70 75 78
赵旭洋 87 91 94
孙大伟 65 69 98
鲁继森 84 79 75
白涛 57 82 75
蔺剑飞 88 75 79
兰天 83 66 74
王悦 79 82 70
陈世勃 70 92 65
张昊 94 83 96
高清 76 83 84
王欣欣 71 83 78
王欢欢 57 33 66
叶丹 87 80 96
李悦 63 79 97
郭倩 69 94 69
刘盈 99 72 93
杨洁 96 79 87
徐一菡 85 45 62
王蒙 67 97 89
张敏 85 75 89
桂佳 60 73 65
林倩 67 77 80
任盛达 57 86 88
吴佳林 96 65 82
黄金龙 85 90 78
陈美珠 82 72 83
冼丹 100 89 89
唐楠 68 97 77
张扬 77 65 93
宋航彬 80 71 91
薛淇文 89 71 75
刘紫亮 72 98 84

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值