基于多态的职工管理系统------文件交互-读文件
Posted 千城明黛子
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了基于多态的职工管理系统------文件交互-读文件相关的知识,希望对你有一定的参考价值。
功能描述:将文件中的内容读取到程序中
虽然我们实现了添加职工后保存到文件的操作,但是每次开始运行程序,并没有将文件中数据读取到程序中
而我们的程序功能中还有清空文件的需求
因此构造函数初始化数据的情况分为三种
-
第一次使用,文件未创建
-
文件存在,但是数据被用户清空
-
文件存在,并且保存职工的所有数据
9.1 文件未创建
在workerManager.h中添加新的成员属性 m_FileIsEmpty标志文件是否为空
//标志文件是否为空 bool m_FileIsEmpty;
修改WorkerManager.cpp中构造函数代码
WorkerManager::WorkerManager() { ifstream ifs; ifs.open(FILENAME, ios::in); //文件不存在情况 if (!ifs.is_open()) { cout << "文件不存在" << endl; //测试输出 this->m_EmpNum = 0; //初始化人数 this->m_FileIsEmpty = true; //初始化文件为空标志 this->m_EmpArray = NULL; //初始化数组 ifs.close(); //关闭文件 return; } }
删除文件后,测试文件不存在时初始化数据功能
在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; }
追加代码位置如图:
我们发现文件不存在或者为空清空 m_FileIsEmpty 判断文件是否为空的标志都为真,那何时为假?
成功添加职工后,应该更改文件不为空的标志
在void WorkerManager::Add_Emp()
成员函数中添加:
//更新职工不为空标志 this->m_FileIsEmpty = false;
9.3.1 获取记录的职工人数
在workerManager.h中添加成员函数
//统计人数 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构造函数中继续追加代码:
int num = this->get_EmpNum(); cout << "职工个数为:" << num << endl; //测试代码 this->m_EmpNum = num; //更新成员属性
手动添加一些职工数据,测试获取职工数量函数
根据职工的数据以及职工数据,初始化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 index = 0; while (ifs >> id && ifs >> name && ifs >> dId) { Worker * worker = NULL; //根据不同的部门Id创建不同对象 if (dId == 1) // 1普通员工 { worker = new Employee(id, name, dId); } else if (dId == 2) //2经理 { worker = new Manager(id, name, dId); } else //总裁 { worker = new Boss(id, name, dId); } //存放在数组中 this->m_EmpArray[index] = worker; index++; } }
在workerManager.cpp构造函数中追加代码
//根据职工数创建数组 this->m_EmpArray = new Worker *[this->m_EmpNum]; //初始化职工 init_Emp(); //测试代码 for (int i = 0; i < m_EmpNum; i++) { cout << "职工号: " << this->m_EmpArray[i]->m_Id << " 职工姓名: " << this->m_EmpArray[i]->m_Name << " 部门编号: " << this->m_EmpArray[i]->m_DeptId << endl; }
运行程序,测试从文件中获取的数据
以上是关于基于多态的职工管理系统------文件交互-读文件的主要内容,如果未能解决你的问题,请参考以下文章