输入代码:
/* *Copyright (c)2015,烟台大学计算机与控制工程学院 *All rights reserved. *文件名称:sum123.cpp *作 者:林海云 *完成日期:2015年8月18日 *版 本 号:v2.0 *问题描述: 文件score.dat中保存的是若干名学生的姓名和C++课、高数和英语成绩。 (1)定义学生类,其中包含姓名、C++课、高数和英语成绩及总分数据成员。 (2)用对象数组进行存储学生的成绩,读入成绩并计算总分;将总分高于平均总分且没挂科的同学的信息保存到文件pass_score.dat中。 *程序输入:文件读取。 *程序输出:将总分高于平均总分且没挂科的同学的信息保存到文件pass_score.dat中。 */ #include <fstream>//文件使用的必备文件 #include<iostream> #include<string> #include<cstdlib>//为了使用exit() using namespace std; class Student { public: Student() {}; ~Student(); double get_total(); static int get_stu_num(); static double get_total_sum(); friend istream& operator>>(istream &in, Student &s); friend ostream& operator<<(ostream &out, Student &s); bool pass(); private: string name; double cpp; double math; double english; double total; static int stu_num; //学生人数,处理为类的静态成员合适 static double total_sum; //学生总分和 }; int Student::stu_num = 0; double Student::total_sum = 0; Student::~Student() { total_sum-=total; stu_num--; } double Student::get_total() { return total; } int Student::get_stu_num() { return stu_num; } double Student::get_total_sum() { return total_sum; } istream& operator>>(istream &in, Student &s) { in>>s.name>>s.cpp>>s.math>>s.english; s.total=s.cpp+s.math+s.english; Student::stu_num++; //人数增加 Student::total_sum+=s.total;//总分增加 return in; } ostream& operator<<(ostream &out, Student &s) { out<<s.name<<'\t'<<s.cpp<<'\t'<<s.math<<'\t'<<s.english<<'\t'<<s.total; return out; } //返回是否所有课程全过了 bool Student::pass() { return cpp>=60 && math>=60 && english>=60; } int main( ) { Student stud[200],t; //stud[200]为保存数据的对象数组 string sname; double total_avg; int i=0,count=0; ifstream infile("score.dat",ios::in);//以输入的方式打开文件 if(!infile)//测试是否成功打开 { cerr<<"open error!"<<endl; abort(); } ofstream outfile("pass_score.dat",ios::out);//定义文件流对象,打开磁盘文件"pass_score.dat" if(!outfile) { cerr<<"Can’t open the file."<<endl; abort(); } while(!infile.eof())//判断否达文件尾部防止现文件读取错误 { infile>>stud[count]; count++; } infile.close(); //求总分平均并输出 if(Student::get_stu_num()>0) { total_avg=Student::get_total_sum()/Student::get_stu_num(); //总分高于平均总分且没挂科的同学的信息保存到文件pass_score.dat中 ofstream outfile("pass_score.dat",ios::out); if(!outfile) { cerr<<"open error!"<<endl; abort(); } for(i=0; i<Student::get_stu_num(); i++) { if(stud[i].get_total()>total_avg&&stud[i].pass()) { outfile<<stud[i]<<endl; } } outfile.close(); cout<<"请到文件pass_score.dat中查看名单:"<<endl; } return 0; }
后台文件读取编写情况
score.dat
pass_score
版权声明:本文为博主原创文章,未经博主允许不得转载。
原文地址:http://blog.csdn.net/linhaiyun_ytdx/article/details/47760813