14.8 文件交互-写文件
功能描述:对文件进行读写
在上一个添加功能中,我们只是将所有的数据添加到了内存中,一旦程序结束就无法保存了。
因此职工管理类中需要一个与文件进行交互的功能,对文件进行读写操作。
1、设定文件路径
在workerManager.h中添加宏定义和头文件
#include<fstream>
#define FILENAME "empFile.txt"
2、在workerManager.h中添加成员函数Save()
//保存文件
void Save();
3、在workerManager.cpp中实现成员函数Save()
//保存文件
void WorkerManager::Save()
{
ofstream ofs;
ofs.open(FILENAME, ios::out);
for (int i = 0;i < m_EmpNum;i++)
{
ofs << m_EmpArray[i]->m_Id << '\t'
<< m_EmpArray[i]->m_Name << '\t'
<< m_EmpArray[i]->m_DId << endl;
}
ofs.close();
}
4、保存功能实现好后,在添加职工完成后自动保存
所以在上节的AddEmp()函数后加上一句:
//添加职工
void WorkerManager::AddEmp()
{
cout << "请输入添加职工的数量:";
int addNum = 0;
cin >> addNum;
if (addNum > 0)
{
//计算新空间大小
int newSize = this->m_EmpNum + addNum;
Worker** newSpace = new Worker *[newSize];
//将原来的数据拷贝到新空间
if (m_EmpArray != NULL)
{
for (int i = 0; i < m_EmpNum; i++)
{
newSpace[i] = m_EmpArray[i];
}
}
//开始添加新数据
for (int i = 0; i < addNum; i++)
{
int id;
string name;
int dSelect;
cout << "请输入第" << i + 1 << "个新职工的编号:";
cin >> id;
cout << "请输入第" << i + 1 << "个新职工的姓名:";
cin >> name;
Worker* worker = NULL;
while (true)
{
cout << "请输入第" << i + 1 << "个新职工的岗位:" << endl;;
cout << "1、普通职工" << endl;
cout << "2、经理" << endl;
cout << "3、老板" << endl;
cin >> dSelect;
switch (dSelect)
{
case 1:
worker = new Employee(id, name, dSelect);
break;
case 2:
worker = new Manager(id, name, dSelect);
break;
case 3:
worker = new Boss(id, name, dSelect);
break;
default:
cout << "输入的数据有误,请重新选择" << endl;
break;
}
if (worker != NULL)
{
break;
}
}
newSpace[m_EmpNum + i] = worker;
}
delete[]this->m_EmpArray;
//更改新空间指向
this->m_EmpArray = newSpace;
m_EmpNum = newSize;
cout << "成功添加了" << addNum << "名新职工!" << endl;
this->Save();
}
else
{
cout << "数据有误" << endl;
}
}
5、测试
成功添加两名员工后,看到项目路径下有个empFile.txt文件,打开:
自此,保存功能完成。