15第十四周项目二——用文件保存的学生名单
2015-06-08 22:29
579 查看
/*
* Copyright (c) 2014, 烟台大学计算机学院
* All rights reserved.
* 文件名称:test.cpp
* 作 者:李晓凯
* 完成日期:2015年 6 月 8 日
* 版 本 号:v1.0
*
* 问题描述:(1)文件score.dat中保存的是若干名学生的姓名和C++课、高数和英语成绩。
(2)用对象数组进行存储学生的成绩,读入成绩并计算总分;将总分高于平均总分且没挂科的同学的信息保存到文件pass_score.dat中。
* 输入描述:学生姓名,各科成绩
* 程序输出:以文件形式输出各科都及格的学生名单
*/
* Copyright (c) 2014, 烟台大学计算机学院
* All rights reserved.
* 文件名称:test.cpp
* 作 者:李晓凯
* 完成日期:2015年 6 月 8 日
* 版 本 号:v1.0
*
* 问题描述:(1)文件score.dat中保存的是若干名学生的姓名和C++课、高数和英语成绩。
(2)用对象数组进行存储学生的成绩,读入成绩并计算总分;将总分高于平均总分且没挂科的同学的信息保存到文件pass_score.dat中。
* 输入描述:学生姓名,各科成绩
* 程序输出:以文件形式输出各科都及格的学生名单
*/
#include <iostream> #include <cstdlib>' #include <fstream> using namespace std; //定义学生类 class Student { public: //声明必要的成员函数 Student() {} double get_total(); static double get_total_sum(); static int get_stu_num(); friend istream &operator>>(istream &input,Student &s); friend ostream &operator<<(ostream &output,const Student &s); bool is_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; istream &operator>>(istream &input,Student &s) { input>>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 input; } ostream &operator<<(ostream &output,const Student &s) { output<<"name:"<<s.name<<'\n'; output<<"cpp:"<<s.cpp<<'\t'; output<<"english:"<<s.english<<'\t'; output<<"math:"<<s.math<<'\n'; return output; } int Student::get_stu_num() { return stu_num; } double Student::get_total_sum() { return total_sum; } double Student::get_total() { return total; } bool Student::is_pass() { return cpp>=60&&math>=60&&english>=60; } int main( ) { Student stud[200],t; //stud[200]为保存数据的对象数组 string sname; double total_avg; int i=0; //从文件score.dat中读入数据,保存到对象数组中 ifstream infile("score.dat",ios::in); if(!infile) { cerr<<"open,error!"<<endl; exit(1); } while(!infile.eof()) { infile>>stud[i++]; } infile.close(); //总分高于平均总分且没挂科的同学的信息保存到文件pass_score.dat中 if(Student::get_stu_num()>0) { total_avg=Student::get_total_sum()/Student::get_stu_num(); ofstream outfile("pass_score.txt",ios::out); if(!outfile) { cerr<<"open error!"<<endl; exit(1); } for(int i=0;i<Student::get_stu_num();++i) { if(stud[i].get_total()>total_avg&&stud[i].is_pass()) outfile<<stud[i]<<endl; } outfile.close(); cout<<"已写入文件,请到文件查看。"<<endl; } return 0; }
相关文章推荐
- schedule vs scheduleAtFixedRate
- 算法-链表实现队列
- 返回一个二维整数数组中最大子数组的和5
- ClangFormat代码格式化
- 邮箱mail 发送类 ASP.NET C#
- java PriorityBlockingQueue 基础的优先级队列,可阻塞的读取操作.
- Android开发之EditText属性详解
- 搭建showslow:前端性能跑分及优化工具
- 2.1 数据类型与标识符
- 余波:技术人员如何走出职业迷茫
- 分享8年开发经验,浅谈程序员职业规划
- Jmeter- Building a Web test plan(2)
- php无法正常发送邮件
- [leetcode] Combinations
- 初学MFC——加载位图
- Spark Srreaming与Storm的区别
- Android 数字动画
- /etc/rc.d/init.d/iptables: No such file or directory 错误原因
- 冲刺5
- [LeetCode] Linked List Cycle II