续:
②文件存在但是数据为空
在workerManager.cpp中的构造函数追加代码:
//文件存在但是数据位空
char ch;
ifs >> ch;
if (ifs.eof()) {
cout << "文件为空!" << endl;
//初始化属性
this->m_EmpNum = 0;
this->m_EmpArray = NULL;
//初始化文件是否为空
this->m_FileIsEmpty = true;
ifs.close();
return;
}
问:何时m_FileIsEmpty==false呢?
在workerMangager.cpp的Add_Emp()中添加步骤:
//更新职工不为空的标志
this->m_FileIsEmpty = false;
注意:这里进行测试的话需要将一开始加入的含有张三信息的emp文件里的内容手动删除
!!!我这里不知道为什么一直只能走文件不存在的情况!!!
找到原因了!!!:
是以前一直担心的隐忧,在workerManager.cpp中的save()函数里面FINENAME,我改成了"empfile"造成了一系列错误
③文件存在并且初始化数据
在写之前记一下读文件是in,写文件是out。因为他们的这个是相对于数据存储程序而不是txt文件本身来说的。
1、获取记录的职工人数
在workerManager.h中添加成员函数 int get_EmpNum
//统计文件中人数
int get_EmpNum();
在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;
}
在workerManager.cpp的构造函数中追加:
//3、文件存在并且记录数据
int num = this->get_EmpNum();
cout << "职工人数为:" << num << endl;
this->m_EmpNum = num;
2、初始化数组
根据职工数据,初始化workerManager中的Worker **m_EmpArray指针
在WorkerManager.h中添加成员函数void init_Emp();
//初始化员工
void init_Emp();
在WorkerManager.cpp中具体实现:
//初始化员工
void WorkerManager::init_Emp() {
ifstream ifs;
ifs.open(FILENAME, ios::in);//打开文件 读
int id;
string name;
int dID;
int num = 0;
int index = 0;
while (ifs >> id && ifs >> name && ifs >> dID) {
Worker* worker = NULL;
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++;
}
ifs.close();
}
在WorkerManager.cpp的构造函数中追加:
//3、文件存在并且记录数据
int num = this->get_EmpNum();
cout << "职工人数为:" << num << endl;
this->m_EmpNum = num;
//开辟空间
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;
}
测试: