文件交互-读文件
功能描述:将文件中的内容读取到程序中
 虽然我们实现了添加职工后保存到文件的操作,但是每次开始执行程序,并没有将文件中数据读取到程序中
 而我们的程序功能中还有清空文件的需求
 因此构造函数初始化数据的情况分为三种:
1. 第一次使用,文件未创建
在workerManager.h中添加新的成员属性m_FilelsEmpty标志文件是否为空
//判断文件是否为空 标志
	bool m_FileIsEmpty;修改 workerManager.cpp中构造函数代码
WorkerManager::WorkerManager()
{
	//1. 文件不存在情况
	ifstream ifs;
	ifs.open(FILENAME, ios::in);//读文件
	if (!ifs.is_open())
	{
		cout << "文件不存在" << endl;
		//初始化人数
		this->m_EmpNum = 0;
		//初始化数组指针
		this->m_EmpArray = NULL;
		//初始化文件是否为空
		this->m_FileIsEmpty = true;
		ifs.close();
		return;
	}删除文件后,测试文件不存在时初始化数据功能
2. 文件存在,但是数据被用户清空
在workerManager.cpp中的构造函数追加代码
//文件存在,并且没有记录
char ch;
ifs >> ch;//读到文件末尾
if (ifs.eof())//为真,则为空文件
{
	cout << "文件为空" << endl;
	this->m_EmpNum = 0;
	this->m_FileIsEmpty = true;
	this->m_EmpArray = NULL;
	ifs.close();
	return;
}在文件创建后清空文件内容,并测试情况下初始化功能
再添加职工成功后添加一行
//更新职工不为空
this->m_FileIsEmpty = false;3. 文件存在,并且保存职工的所有数据
1)获取记录的职工人数
在workerManager.h中添加成员函数
//统计人数
int get_EmpNum();2)在workerManager.cpp中实现
int WorkerManager::get_EmpNum()
{
	ifstream ifs;
	ifs.open(FILENAME, ios::in);//打开文件 读文件
	int id;
	string name;
	int dId;
	int num = 0;
	while (ifs >> id && ifs >> name && ifs >> dId)//数据存储是以空格的方式间隔开,读完一行记录一次
	{
		//记录人数
		num++;
	}
	ifs.close();
	return num;
}3)在workerManager.cpp构造函数 中继续追加代码
//3. 文件存在,并且保存职工的所有数据
	int num = this->get_EmpNum();
	cout << "职工个数为:" << num << endl;
	this->m_EmpNum = num;//更新成员属性初始化数组
根据职工的数据以及职工数据,初始化workerManager中的Worker ** m_EmpArray指针
 1)在workerManager.h中添加成员函数
//初始化 员工
	void init_Emp();2)在workerManager.cpp中实现
void WorkerManager::init_Emp()
{
	ifstream ifs;
	ifs.open(FILENAME, ios::in);//打开文件,读文件
	int id;
	string name;
	int dId;
	int index = 0;
	while (ifs >> id && ifs >> name && ifs >> dId)//数据存储是以空格的方式间隔开,读完一行记录一次
	{
		//记录人数
		Worker * worker = NULL;
		//根据不同的部门Id创建不同的对象
		if (dId == 1)//普通员工
		{
			worker = new Employee(id, name, dId);
		}
		else if (dId == 2)//经理
		{
			worker = new Manager(id, name, dId);
		}
		else //老板
		{
			worker = new Boss(id, name, dId);
		}
		//存放在数组中
		this->m_EmpArray[index] = worker;
		index++;//数组中索引的位置
	}
}3)在workerManager.cpp构造函数中继续追加代码
//根据职工数创建数组
	this->m_EmpArray = new Worker *[this->m_EmpNum];
	//初始化职工
	this->init_Emp();
	//测试代码
	for(int i=0;i<this->m_EmpNum;i++)
	{
		cout << "职工号" << this->m_EmpArray[i]->m_ID
			<< "职工姓名" << this->m_EmpArray[i]->m_Name
			<< "职工编号" << this->m_EmpArray[i]->m_DeptID << endl;
	}









