解析: 注意要对输入数据不合格的情况进行处理
考试题目
基类说明: 现有CWorker 类
派生类说明:
请以CWorker类为基类进行公有继承,派生出CBenchWorker类用于描述钳工。CBenchWorker
类在继承CWorker所有数据成员的基础上,还需要添加1个私有成员用于描述钳工级别,成员
定义代码如下:
int m_Grade; //钳工级别 1-5,最大为5级
- 为CBenchWorker 类添加一个构造函数。构造函数通过6 个形式参数对钳工的6 个成员分别进行初始化。如果这6 个形式参数都没有提供初始值,则各成员的初始值如下所示:
- 工号:0
- 姓名:”No Name”
- 性别:’M’
- 年龄:18
- 级别:1
- 为CBenchWorker 类添加返回级别的成员函数GetGrade;
- 为CBenchWorker 类添加前自增运算符++。++运算符用于将钳工的级别加1;
- 为CBenchWorker 类重载流输出运算符<<。其中基类部分数据的输出格式与基类的
operator<<函数相同,CBenchWorker 类新增成员的输出格式要求如下: - 级别:右对齐,占5 列,不足部分补空格
- 不允许在题目要求以外添加其它成员变量、成员函数或友元函数。
程序业务流程说明
- 编写一个函数readData 。从下载的数据文件workers.txt 中读取数据, 逐个生成CBenchWorker 类的对象,并将这些对象存储到vector 对象myVect 中。
- 编写一个函数DisplayData。显示这些钳工信息。每个钳工数据占一行,每行中显示格式的要求与CBenchWorker 类operator<<函数的要求相同。
- 编写一个函数InecData。对所有钳工依次执行前自增运算,结果仍然保存在myVect 中。
- 编写一个函数DelData。删除所有年龄大于等于X 岁、级别小于等于Y 级的钳工,结果仍然保存在myVect 中,并返回删除人数。
- 编写一个函数DelData。删除所有姓名中包含(大小写不敏感)字符串X 的钳工,结果仍然保存在myVect 中,并返回删除人数。例如,以目标字符串“Tom”为例,“TOMWANG”“WANGtOM” “WANGtOm” “toMWANG”“ToMWANG” “tomWANG”中都包含了“Tom”子串。
- 编写一个函数SortData。对所有钳工按照性别(女士优先,女性在前、男性在后)进行排序,其中男性钳工中按照级别进行增序排列,女性钳工中按照级别进行降序排列。
- 编写一个函数WriteData。将经过上述处理后的所有钳工信息保存到指定文件中。每个钳工数据占一行,每行中文件保存格式的要求CBenchWorker 类operator<<函数的要求相
考试代码
/*******************************************
学号:1927405148
姓名:凌珑
手机号码:18261902240
*******************************************/
#include <iostream>
#include <fstream>
#include <iomanip>
#include <string>
#include <vector>
#include <algorithm>
using namespace std;
class CWorker
{
private:
int m_ID; //工号
string m_Name; //姓名
int m_Sex; //性别 0代表女性 1代表男性
int m_Age; //年龄
public:
CWorker(int ID, string Name, int Sex, int Age)
{
if (Sex<0 || Sex>1)
{
cout<<"性别初始值"<<Sex<<"不符合要求!"<<endl;
exit(0);
}
if (Age<=0 )
{
cout<<"年龄初始值"<<Age<<"不符合要求!"<<endl;
exit(0);
}
m_ID=ID;
m_Name=Name;
m_Sex=Sex;
m_Age=Age;
}
string GetName()const
{
return m_Name;
}
int GetSex()const
{
return m_Sex;
}
int GetAge()const
{
return m_Age;
}
friend ostream& operator<<(ostream& Out, const CWorker& Obj)
{
Out<<right<<setw(5)<<Obj.m_ID;
Out<<right<<setw(10)<<Obj.m_Name;
Out<<right<<setw(5)<<Obj.m_Sex;
Out<<right<<setw(6)<<Obj.m_Age