C++第15周(春)项目2 - 用文件保存的学生名单
课程首页在:http://blog.csdn.net/sxhelijian/article/details/11890759。内有完整教学方案及资源链接
本程序中须要的相关文件。请到http://pan.baidu.com/s/1qW59HTi下载。
【项目2-用文件保存的学生名单】
文件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 <fstream>
#include<iostream>
#include<string>
#include<cstdlib>
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); //能够定义input函数替代
friend ostream& operator<<(ostream &out, Student &s); //能够定义display函数替代
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";
out<<s.cpp<<"\t";
out<<s.math<<"\t";
out<<s.english<<"\t";
out<<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; //将文件里的数据读入到对象数组中
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 = Student::get_total_sum() / Student::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;
}
=================== 迂者 贺利坚 CSDN博客专栏================= |
C++第15周(春)项目2 - 用文件保存的学生名单的更多相关文章
- 2013级C++第15周(春)项目——输入输出流及文件文件操作
课程首页在:http://blog.csdn.net/sxhelijian/article/details/11890759.内有完整教学方案及资源链接 本周程序阅读及程序调试中须要的文件,请到htt ...
- C++第11周(春)项目1 - 存储班长信息的学生类
课程首页在:http://blog.csdn.net/sxhelijian/article/details/11890759,内有完整教学方案及资源链接 [项目1 - 存储班长信息的学生类] clas ...
- C++第15周(春)项目3 - OOP版电子词典(一)
课程首页在:http://blog.csdn.net/sxhelijian/article/details/11890759.内有完整教学方案及资源链接 [项目3-OOP版电子词典](本程序中须要的相 ...
- C++第15周(春)项目3 - OOP版电子词典(二)
课程首页在:http://blog.csdn.net/sxhelijian/article/details/11890759,内有完整教学方案及资源链接 [项目3-OOP版电子词典](本程序须要的相关 ...
- C++第11周(春)项目4 - 类族的设计
课程首页在:http://blog.csdn.net/sxhelijian/article/details/11890759,内有完整教学方案及资源链接 [项目4 - 类族的设计]按下面的提示,由基类 ...
- C++第11周(春)项目2 - 职员有薪水了
课程首页在:http://blog.csdn.net/sxhelijian/article/details/11890759,内有完整教学方案及资源链接 [项目2 - 职员有薪水了]定义一个名为CPe ...
- C++第13周(春)项目1 - 点、圆的关系
课程首页在:http://blog.csdn.net/sxhelijian/article/details/11890759.内有完整教学方案及资源链接 [项目1 - 点.圆的关系](1)先建立一个P ...
- 2013级C++第13周(春)项目——继承的进一步话题与GUI应用开发
课程首页在:http://blog.csdn.net/sxhelijian/article/details/11890759,内有完整教学方案及资源链接 第一部分 程序阅读:阅读以下类的定义,请说出在 ...
- 2013级C++第14周(春)项目——多态性、虚函数和抽象类
课程首页在:http://blog.csdn.net/sxhelijian/article/details/11890759,内有完整教学方案及资源链接 第一部分 阅读程序1.阅读.改动和执行关于交通 ...
随机推荐
- 伪元素 :Before 和 :After的学习
层叠样式表(CSS)的主要目的是给HTML元素添加样式,然而,在一些案例中给文档添加额外的元素是多余的或是不可能的.事实上CSS中有一个特性允许我们添加额外元素而不扰乱文档本身,这就是“伪元素”. 你 ...
- IOS程式语法之block的使用掌握
在现阶IOBlock 是iOS在4.0之后新增的程式语法,严格来说block的概念并不算是基础程式设计的范围,对初学者来说也不是很容易了解,但是在iOS SDK 4.0之后,block几乎出现在所有新 ...
- statickeyword
static词义:静态的,可以用于修饰变量和方法,static方法块可以优先于构造函数运行. 被static修饰的变量,叫静态变量,静态变量在内存中仅仅有一份拷贝 public static Stri ...
- java中boolean与字符串或者数字1和0的转换
mysql有个字段是bit,只存储1和0,是二进制存储,那么在java的dao层如何映射成boolean呢 @Column(name="is_standard") private ...
- POJ--2449--Remmarguts' Date【dijkstra_heap+A*】第K短路
链接:http://poj.org/problem?id=2449 题意:告诉你有n个顶点,m条边.并把这些边的信息告诉你:起点.终点.权值.再告诉你s.t.k.需求出s到t的第k短路,没有则输出-1 ...
- shell命令xargs解析
1.多行变成单行 -bash-3.2# cat test.txt a b c d e f g o p q -bash-3.2# cat test.txt |xargs a b c d e f g o ...
- cocos lua 加密与解密 混淆 (版本号cocos3.4)
cocos luacompile cocos luacompile Overview Usage Available Arguments Samples Overview Compile the .l ...
- SqlServer 之 系统视图
一.了解系统视图 1. 系统视图:从名字上看就知道,就是存放一些sqlserver系统的一些信息. 2. 存在位置: 下面截图看看,从截图中你可以看到,不管是“系统数据库”还是“用户数据库”都是有这些 ...
- IDEA+Gradle相关资料
要注意下载的版本,不能过于陈旧,否则会报错,导致无法正常配置. 具体配置参考:https://my.oschina.net/u/1994816/blog/297967 IDEA下载地址:https:/ ...
- wepy - 与原生有什么不同(x.wpy)使用实例
源码 <template> <view class='mark' wx:if="{{showMark}}"> <view animation=&quo ...