第14周项目2-用文件保存的学生名单
2015-06-14 11:03
260 查看
【项目2-用文件保存的学生名单】
文件score.dat中保存的是若干名学生的姓名和C++课、高数和英语成绩。
(1)定义学生类,其中包含姓名、C++课、高数和英语成绩及总分数据成员。
(2)用对象数组进行存储学生的成绩,读入成绩并计算总分;将总分高于平均总分且没挂科的同学的信息保存到文件pass_score.dat中。
代码:
运行结果:
![](http://img.blog.csdn.net/20150614110525204?watermark/2/text/aHR0cDovL2Jsb2cuY3Nkbi5uZXQvc2luYXRfMjEzODI0Mjk=/font/5a6L5L2T/fontsize/400/fill/I0JBQkFCMA==/dissolve/70/gravity/Center)
文件score.dat中保存的是若干名学生的姓名和C++课、高数和英语成绩。
(1)定义学生类,其中包含姓名、C++课、高数和英语成绩及总分数据成员。
//定义学生类 class Student{ public: //声明必要的成员函数 private: string name; double cpp; double math; double english; double total; static int stu_num; //学生人数,处理为类的静态成员合适 static double total_sum; //学生总分和 };
(2)用对象数组进行存储学生的成绩,读入成绩并计算总分;将总分高于平均总分且没挂科的同学的信息保存到文件pass_score.dat中。
int main( ) { Student stud[200],t; //stud[200]为保存数据的对象数组 string sname; double total_avg; int i=0; //从文件score.dat中读入数据,保存到对象数组中 //总分高于平均总分且没挂科的同学的信息保存到文件pass_score.dat中 return 0; }
代码:
#include <iostream> #include <fstream> #include <cstdlib> #include <string> using namespace std; class Student { public: 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; 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<<endl; return out; } bool Student::pass() { return cpp>=60&&math>=60&&english>=60; } int main( ) { Student stud[200],t; string sname; double total_avg; int i=0; ifstream infile("score.dat",ios::in); if(!infile) { cerr<<"open error!"<<endl; exit(1); } while(!infile.eof()) { infile>>stud[i++]; } infile.close(); if(Student::get_stu_num()>0) { total_avg=t.get_total_sum()/t.get_stu_num(); ofstream outfile("pass_score.dat",ios::out); if(!outfile) { cerr<<"open error!"<<endl; exit(1); } 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; }
运行结果:
相关文章推荐
- Spring Security实现权限管理
- shell学习十四天----使用cut选定字段
- Linux 权限修改
- Java命名规范
- Git 的BUG小结
- MAC 快捷键
- 图形处理(十一)Stroke Parameterization
- 21 Merge Two Sorted Lists(两链表归并排序Easy)
- Memcached 实例
- Tone Mapping
- 异常断点和僵尸对象的使用
- 母函数
- 丑数
- 有深度,面试有用的题
- C++:模板实参推断及引用折叠
- boost内存管理机制
- java基础 第5章 隐藏实施过程
- respondsToSelector使用
- 图形处理(十)测地极坐标参数化
- BZOJ 1787: [Ahoi2008]Meet 紧急集合( 树链剖分 )