1、管理系统需求
职工管理系统可以用来管理公司内所有员工的信息
本教程主要利用C++来实现一个基于多态的职工管理系统
公司中职工分为三类:普通员工、经理、老板,显示信息时,需要显示职工编号、职工姓名、职工岗位、以及职责普通员工职责:完成经理交给的任务
经理职责:完成老板交给的任务,并下发任务给员工老板职责:管理公司所有事务
管理系统中需要实现的功能如下:
- 退出管理程序:退出当前管理系统
- 增加职工信息:实现批量添加职工功能,将信息录入到文件中,职工信息为:职工编号、姓名、部门编号
- 显示职工信息:显示公司内部所有职工的信息
- 删除离职职工:按照编号删除指定的职工
- 修改职工信息:按照编号修改职工个人信息
- 查找职工信息:按照职工的编号或者职工的姓名进行查找相关的人员信息
- 按照编号排序:按照职工编号,进行排序,排序规则由用户指定
- 清空所有文档:清空文件中记录的所有职工信息(清空前需要再次确认,防止误删)
2、创建管理类
管理类负责的内容如下:
- 与用户的沟通菜单界面
- 对职工增删改查的操作
- 与文件的读写交互
workManager.h
#pragma once #include
using namespace std; class WorkerManager { public: //构造函数 WorkerManager(); //析构函数 ~WorkerManager(); }; workManager.cpp
#include "workerManager.h" WorkerManager::WorkerManager() { } WorkerManager::~WorkerManager() { }
3、菜单功能实现
workManager.h
#pragma once #include
using namespace std; class WorkerManager { public: //构造函数 WorkerManager(); //展示菜单 void Show_Menu(); //析构函数 ~WorkerManager(); }; workManager.cpp
#include "workerManager.h" WorkerManager::WorkerManager() { } //展示菜单 void WorkerManager::Show_Menu() { cout << "**********************************************" << endl; cout << "***********欢迎使用职工管理系统***************" << endl; cout << "************ 0.退出管理程序 ******************" << endl; cout << "************ 1.增加职工信息 ******************" << endl; cout << "************ 2.显示职工信息 ******************" << endl; cout << "************ 3.删除离职职工 ******************" << endl; cout << "************ 4.修改职工信息 ******************" << endl; cout << "************ 5.查找职工信息 ******************" << endl; cout << "************ 6.按照编号排序 ******************" << endl; cout << "************ 7.清空所有文件 ******************" << endl; cout << endl; } WorkerManager::~WorkerManager() { }
职工管理系统.cpp
#include
using namespace std; #include "workerManager.h" int main() { //实例化管理者对象 WorkerManager wm; //调用展示菜单成员函数 wm.Show_Menu(); system("pause"); return 0; }
4、退出功能实现
workManager.h
#pragma once #include
using namespace std; class WorkerManager { public: //构造函数 WorkerManager(); //展示菜单 void Show_Menu(); //退出功能 void ExitSystem(); //析构函数 ~WorkerManager(); }; workManager.cpp
#include "workerManager.h" WorkerManager::WorkerManager() { } //展示菜单 void WorkerManager::Show_Menu() { cout << "**********************************************" << endl; cout << "***********欢迎使用职工管理系统***************" << endl; cout << "************ 0.退出管理程序 ******************" << endl; cout << "************ 1.增加职工信息 ******************" << endl; cout << "************ 2.显示职工信息 ******************" << endl; cout << "************ 3.删除离职职工 ******************" << endl; cout << "************ 4.修改职工信息 ******************" << endl; cout << "************ 5.查找职工信息 ******************" << endl; cout << "************ 6.按照编号排序 ******************" << endl; cout << "************ 7.清空所有文件 ******************" << endl; cout << endl; } //退出功能 void WorkerManager::ExitSystem() { cout << "欢迎下次使用" << endl; system("pause"); exit(0);//退出程序 } WorkerManager::~WorkerManager() { }
职工管理系统.cpp
#include
using namespace std; #include "workerManager.h" int main() { //实例化管理者对象 WorkerManager wm; int choice = 0;//用来存储用户的选项 while (true) { //调用展示菜单成员函数 wm.Show_Menu(); cout << "请输入您的选择:" << endl; cin >> choice;//接受用户的选项 switch (choice) { case 0: //退出系统 wm.ExitSystem(); break; case 1: //增加职工 break; case 2: //显示职工 break; case 3: //删除职工 break; case 4: //修改职工 break; case 5: //查找职工 break; case 6: //排序职工 break; case 7: //清空文档 break; default: system("cls");//清屏操作 break; } } system("pause"); return 0; }
5、创建职工类
职工的分类为:普通员工、经理、老板
将三种职工抽象到一个类 (worker) 中,利用多态管理不同职工种类
职工的属性为:职工编号、职工姓名、职工所在部门编号
职工的行为为:岗位职责信息描述,获取岗位名称
worker.h
#pragma once #include
using namespace std; #include //职工抽象类 class Worker { public: //显示个人信息 virtual void showInfo() = 0; //获取岗位名称 virtual string getDeptName() = 0; //职工编号 int m_Id; //职工姓名 string m_Name; //部门编号 int m_DeptId; }; employee.h
#pragma once //普通员工文件 #include
using namespace std; #include "worker.h" class Employee :public Worker { public: //构造函数 Employee(int id,string name,int dId); //显示个人信息 virtual void showInfo(); //获取岗位名称 virtual string getDeptName(); }; employee.cpp
#include"employee.h" //构造函数 Employee::Employee(int id, string name, int dId) { this->m_Id = id; this->m_Name = name; this->m_DeptId = dId; } //显示个人信息 void Employee::showInfo() { cout << "职业编号:" << this->m_Id << "\t职业岗位:" << this->m_Name << "\t岗位:" << this->getDeptName() << "\t岗位职责: 完成经理交给的任务" << endl; } //获取岗位名称 string Employee::getDeptName() { return string("员工"); }
职工管理系统.cpp
#include
using namespace std; #include "workerManager.h" #include"worker.h" #include"employee.h" int main() { //测试代码: Worker* worker = NULL; worker = new Employee(1,"张三",1); worker->showInfo(); 实例化管理者对象 //WorkerManager wm; //int choice = 0;//用来存储用户的选项 //while (true) { // //调用展示菜单成员函数 // wm.Show_Menu(); // cout << "请输入您的选择:" << endl; // cin >> choice;//接受用户的选项 // switch (choice) // { // case 0: //退出系统 // wm.ExitSystem(); // break; // case 1: //增加职工 // break; // case 2: //显示职工 // break; // case 3: //删除职工 // break; // case 4: //修改职工 // break; // case 5: //查找职工 // break; // case 6: //排序职工 // break; // case 7: //清空文档 // break; // default: // system("cls");//清屏操作 // break; // } //} system("pause"); return 0; }
6、经理类和老板类实现
manager.h
#pragma once #include
using namespace std; #include "worker.h" //经理类 class Manager :public Worker { public: //构造函数 Manager(int id, string name, int dId); //显示个人信息 virtual void showInfo(); //获取岗位名称 virtual string getDeptName(); }; manager.cpp
#include "manager.h" //构造函数 Manager::Manager(int id, string name, int dId) { this->m_Id = id; this->m_Name = name; this->m_DeptId = dId; } //显示个人信息 void Manager::showInfo() { cout << "职业编号:" << this->m_Id << "\t职业岗位:" << this->m_Name << "\t岗位:" << this->getDeptName() << "\t岗位职责: 完成老板交给的任务,并下发任务给员工" << endl; } //获取岗位名称 string Manager::getDeptName() { return string("经理"); }
boss.h
#pragma once #include
using namespace std; #include "worker.h" //老板类 class Boss :public Worker { public: //构造函数 Boss(int id, string name, int dId); //显示个人信息 virtual void showInfo(); //获取岗位名称 virtual string getDeptName(); }; boss.cpp
#include "boss.h" //构造函数 Boss::Boss(int id, string name, int dId) { this->m_Id = id; this->m_Name = name; this->m_DeptId = dId; } //显示个人信息 void Boss::showInfo() { cout << "职业编号:" << this->m_Id << "\t职业岗位:" << this->m_Name << "\t岗位:" << this->getDeptName() << "\t岗位职责:管理公司所有事务" << endl; } //获取岗位名称 string Boss::getDeptName() { return string("总裁"); }
职工管理系统.cpp
#include
using namespace std; #include "workerManager.h" //#include"worker.h" //#include"employee.h" //#include"manager.h" //#include"boss.h" int main() { 测试代码: //Worker* worker = NULL; //worker = new Employee(1,"张三",1); //worker->showInfo(); //delete worker; //worker = new Manager(2, "李四", 2); //worker->showInfo(); //delete worker; //worker = new Boss(3, "王五", 3); //worker->showInfo(); //delete worker; //实例化管理者对象 WorkerManager wm; int choice = 0;//用来存储用户的选项 while (true) { //调用展示菜单成员函数 wm.Show_Menu(); cout << "请输入您的选择:" << endl; cin >> choice;//接受用户的选项 switch (choice) { case 0: //退出系统 wm.ExitSystem(); break; case 1: //增加职工 break; case 2: //显示职工 break; case 3: //删除职工 break; case 4: //修改职工 break; case 5: //查找职工 break; case 6: //排序职工 break; case 7: //清空文档 break; default: system("cls");//清屏操作 break; } } system("pause"); return 0; }
7、添加职工功能实现
workerManager.h
#pragma once #include
using namespace std; #include "worker.h" #include"employee.h" #include"manager.h" #include"boss.h" class WorkerManager { public: //构造函数 WorkerManager(); //展示菜单 void Show_Menu(); //退出功能 void ExitSystem(); //记录职工人数 int m_EmpNum; //职工数组指针 Worker** m_EmpArray; //添加职工 void Add_Emp(); //析构函数 ~WorkerManager(); }; workerManager.cpp
#include "workerManager.h" WorkerManager::WorkerManager() { //初始化属性 this->m_EmpNum = 0; this->m_EmpArray = NULL; } //添加职工 void WorkerManager::Add_Emp() { cout << "请输入添加职工数量:" << endl; int addNum = 0;//保护用户的输入数量 cin >> addNum; if (addNum > 0) { //添加 //计算添加新空间大小 int newSize = this->m_EmpNum + addNum;//新空间人数=原来记录人数+新增人数 //开辟新空间 Worker ** newSpace=new Worker* [newSize]; //将原来空间下数据 拷贝到新空间下 if (this->m_EmpArray != NULL) { for (int i = 0; i < this->m_EmpNum; i++) { newSpace[i] = this->m_EmpArray[i]; } } //批量添加新的数据 for (int i = 0; i < addNum; i++) { int id;//职工编号 string name;//职工部门 int dSelect;//部门选择 cout << "请输入第" << i + 1 << "个新职工编号:" << endl; cin >> id; cout << "请输入第" << i + 1 << "个新职工姓名:" << endl; cin >> name; cout << "请选择该职工岗位:" << endl; cout << "1、普通职工" << endl; cout << "2、经理" << endl; cout << "3、老板" << endl; cin >> dSelect; Worker* worker = NULL; switch (dSelect) { case 1: worker = new Employee(id, name, 1); break; case 2: worker = new Manager(id, name, 2); break; case 3: worker = new Boss(id, name, 3); break; default: break; } //将创建的职工指针,保存到数组中 newSpace[this->m_EmpNum + i] = worker; } //释放原有空间 delete[] this->m_EmpArray; //更改新空间的指向 this->m_EmpArray = newSpace; //更新新的职工人数 this->m_EmpNum = newSize; //提示添加成功 cout << "添加成功" << addNum << "名新职工" << endl; } else { cout << "输入数据有误" << endl; } //按任意键后 清屏回到上级目录 system("pasue"); system("cls"); } //展示菜单 void WorkerManager::Show_Menu() { cout << "**********************************************" << endl; cout << "***********欢迎使用职工管理系统***************" << endl; cout << "************ 0.退出管理程序 ******************" << endl; cout << "************ 1.增加职工信息 ******************" << endl; cout << "************ 2.显示职工信息 ******************" << endl; cout << "************ 3.删除离职职工 ******************" << endl; cout << "************ 4.修改职工信息 ******************" << endl; cout << "************ 5.查找职工信息 ******************" << endl; cout << "************ 6.按照编号排序 ******************" << endl; cout << "************ 7.清空所有文件 ******************" << endl; cout << endl; } //退出功能 void WorkerManager::ExitSystem() { cout << "欢迎下次使用" << endl; system("pause"); exit(0);//退出程序 } WorkerManager::~WorkerManager() { if (this->m_EmpArray != NULL) { delete[] this->m_EmpArray; this->m_EmpArray = NULL; } }
职工管理系统.cpp
#include
using namespace std; #include "workerManager.h" //#include"worker.h" //#include"employee.h" //#include"manager.h" //#include"boss.h" int main() { 测试代码: //Worker* worker = NULL; //worker = new Employee(1,"张三",1); //worker->showInfo(); //delete worker; //worker = new Manager(2, "李四", 2); //worker->showInfo(); //delete worker; //worker = new Boss(3, "王五", 3); //worker->showInfo(); //delete worker; //实例化管理者对象 WorkerManager wm; int choice = 0;//用来存储用户的选项 while (true) { //调用展示菜单成员函数 wm.Show_Menu(); cout << "请输入您的选择:" << endl; cin >> choice;//接受用户的选项 switch (choice) { case 0: //退出系统 wm.ExitSystem(); break; case 1: //增加职工 wm.Add_Emp(); break; case 2: //显示职工 break; case 3: //删除职工 break; case 4: //修改职工 break; case 5: //查找职工 break; case 6: //排序职工 break; case 7: //清空文档 break; default: system("cls");//清屏操作 break; } } system("pause"); return 0; }
8、文件交互
写文件
workerManager.h
#pragma once #include
using namespace std; #include "worker.h" #include"employee.h" #include"manager.h" #include"boss.h" #include #define FILENAME "empFile.txt" class WorkerManager { public: //构造函数 WorkerManager(); //展示菜单 void Show_Menu(); //退出功能 void ExitSystem(); //记录职工人数 int m_EmpNum; //职工数组指针 Worker** m_EmpArray; //添加职工 void Add_Emp(); //保存文件 void save(); //析构函数 ~WorkerManager(); }; workManager.cpp
#include "workerManager.h" WorkerManager::WorkerManager() { //初始化属性 this->m_EmpNum = 0; this->m_EmpArray = NULL; } //添加职工 void WorkerManager::Add_Emp() { cout << "请输入添加职工数量:" << endl; int addNum = 0;//保护用户的输入数量 cin >> addNum; if (addNum > 0) { //添加 //计算添加新空间大小 int newSize = this->m_EmpNum + addNum;//新空间人数=原来记录人数+新增人数 //开辟新空间 Worker ** newSpace=new Worker* [newSize]; //将原来空间下数据 拷贝到新空间下 if (this->m_EmpArray != NULL) { for (int i = 0; i < this->m_EmpNum; i++) { newSpace[i] = this->m_EmpArray[i]; } } //批量添加新的数据 for (int i = 0; i < addNum; i++) { int id;//职工编号 string name;//职工部门 int dSelect;//部门选择 cout << "请输入第" << i + 1 << "个新职工编号:" << endl; cin >> id; cout << "请输入第" << i + 1 << "个新职工姓名:" << endl; cin >> name; cout << "请选择该职工岗位:" << endl; cout << "1、普通职工" << endl; cout << "2、经理" << endl; cout << "3、老板" << endl; cin >> dSelect; Worker* worker = NULL; switch (dSelect) { case 1: worker = new Employee(id, name, 1); break; case 2: worker = new Manager(id, name, 2); break; case 3: worker = new Boss(id, name, 3); break; default: break; } //将创建的职工指针,保存到数组中 newSpace[this->m_EmpNum + i] = worker; } //释放原有空间 delete[] this->m_EmpArray; //更改新空间的指向 this->m_EmpArray = newSpace; //更新新的职工人数 this->m_EmpNum = newSize; //提示添加成功 cout << "添加成功" << addNum << "名新职工" << endl; //保存数据到文件中 this->save(); } else { cout << "输入数据有误" << endl; } //按任意键后 清屏回到上级目录 system("pasue"); system("cls"); } //展示菜单 void WorkerManager::Show_Menu() { cout << "**********************************************" << endl; cout << "***********欢迎使用职工管理系统***************" << endl; cout << "************ 0.退出管理程序 ******************" << endl; cout << "************ 1.增加职工信息 ******************" << endl; cout << "************ 2.显示职工信息 ******************" << endl; cout << "************ 3.删除离职职工 ******************" << endl; cout << "************ 4.修改职工信息 ******************" << endl; cout << "************ 5.查找职工信息 ******************" << endl; cout << "************ 6.按照编号排序 ******************" << endl; cout << "************ 7.清空所有文件 ******************" << endl; cout << endl; } //退出功能 void WorkerManager::ExitSystem() { cout << "欢迎下次使用" << endl; system("pause"); exit(0);//退出程序 } //保存文件 void WorkerManager::save() { ofstream ofs; ofs.open(FILENAME, ios::out);//用输出方式打开文件--写文件 //将每个人数据写入到文件中 for (int i = 0; i < this->m_EmpNum; i++) { ofs << this->m_EmpArray[i]->m_Id << " " << this->m_EmpArray[i]->m_Name << " " << this->m_EmpArray[i]->m_DeptId << endl; } //关闭文件 ofs.close(); } WorkerManager::~WorkerManager() { if (this->m_EmpArray != NULL) { delete[] this->m_EmpArray; this->m_EmpArray = NULL; } }
读文件
文件未创建
workerManager.h
#pragma once #include
using namespace std; #include "worker.h" #include"employee.h" #include"manager.h" #include"boss.h" #include #define FILENAME "empFile.txt" class WorkerManager { public: //构造函数 WorkerManager(); //展示菜单 void Show_Menu(); //退出功能 void ExitSystem(); //记录职工人数 int m_EmpNum; //职工数组指针 Worker** m_EmpArray; //添加职工 void Add_Emp(); //保存文件 void save(); //判断文件是否为空 标志 bool m_FileIsEmpty; //析构函数 ~WorkerManager(); }; workerManager.cpp
#include "workerManager.h" 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; } } //添加职工 void WorkerManager::Add_Emp() { cout << "请输入添加职工数量:" << endl; int addNum = 0;//保护用户的输入数量 cin >> addNum; if (addNum > 0) { //添加 //计算添加新空间大小 int newSize = this->m_EmpNum + addNum;//新空间人数=原来记录人数+新增人数 //开辟新空间 Worker ** newSpace=new Worker* [newSize]; //将原来空间下数据 拷贝到新空间下 if (this->m_EmpArray != NULL) { for (int i = 0; i < this->m_EmpNum; i++) { newSpace[i] = this->m_EmpArray[i]; } } //批量添加新的数据 for (int i = 0; i < addNum; i++) { int id;//职工编号 string name;//职工部门 int dSelect;//部门选择 cout << "请输入第" << i + 1 << "个新职工编号:" << endl; cin >> id; cout << "请输入第" << i + 1 << "个新职工姓名:" << endl; cin >> name; cout << "请选择该职工岗位:" << endl; cout << "1、普通职工" << endl; cout << "2、经理" << endl; cout << "3、老板" << endl; cin >> dSelect; Worker* worker = NULL; switch (dSelect) { case 1: worker = new Employee(id, name, 1); break; case 2: worker = new Manager(id, name, 2); break; case 3: worker = new Boss(id, name, 3); break; default: break; } //将创建的职工指针,保存到数组中 newSpace[this->m_EmpNum + i] = worker; } //释放原有空间 delete[] this->m_EmpArray; //更改新空间的指向 this->m_EmpArray = newSpace; //更新新的职工人数 this->m_EmpNum = newSize; //提示添加成功 cout << "添加成功" << addNum << "名新职工" << endl; //保存数据到文件中 this->save(); } else { cout << "输入数据有误" << endl; } //按任意键后 清屏回到上级目录 system("pasue"); system("cls"); } //展示菜单 void WorkerManager::Show_Menu() { cout << "**********************************************" << endl; cout << "***********欢迎使用职工管理系统***************" << endl; cout << "************ 0.退出管理程序 ******************" << endl; cout << "************ 1.增加职工信息 ******************" << endl; cout << "************ 2.显示职工信息 ******************" << endl; cout << "************ 3.删除离职职工 ******************" << endl; cout << "************ 4.修改职工信息 ******************" << endl; cout << "************ 5.查找职工信息 ******************" << endl; cout << "************ 6.按照编号排序 ******************" << endl; cout << "************ 7.清空所有文件 ******************" << endl; cout << endl; } //退出功能 void WorkerManager::ExitSystem() { cout << "欢迎下次使用" << endl; system("pause"); exit(0);//退出程序 } //保存文件 void WorkerManager::save() { ofstream ofs; ofs.open(FILENAME, ios::out);//用输出方式打开文件--写文件 //将每个人数据写入到文件中 for (int i = 0; i < this->m_EmpNum; i++) { ofs << this->m_EmpArray[i]->m_Id << " " << this->m_EmpArray[i]->m_Name << " " << this->m_EmpArray[i]->m_DeptId << endl; } //关闭文件 ofs.close(); } WorkerManager::~WorkerManager() { if (this->m_EmpArray != NULL) { delete[] this->m_EmpArray; this->m_EmpArray = NULL; } }
文件为空
workerManager.cpp
#include "workerManager.h" 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、文件存在 数据为空 char ch; ifs >> ch; if (ifs.eof()) { //文件为空 cout << "文件为空" << endl; //初始化记录人数 this->m_EmpNum = 0; //初始化数组指针 this->m_EmpArray = NULL; //初始化文件是否为空 this->m_FileIsEmpty = true; ifs.close(); return; } } //添加职工 void WorkerManager::Add_Emp() { cout << "请输入添加职工数量:" << endl; int addNum = 0;//保护用户的输入数量 cin >> addNum; if (addNum > 0) { //添加 //计算添加新空间大小 int newSize = this->m_EmpNum + addNum;//新空间人数=原来记录人数+新增人数 //开辟新空间 Worker ** newSpace=new Worker* [newSize]; //将原来空间下数据 拷贝到新空间下 if (this->m_EmpArray != NULL) { for (int i = 0; i < this->m_EmpNum; i++) { newSpace[i] = this->m_EmpArray[i]; } } //批量添加新的数据 for (int i = 0; i < addNum; i++) { int id;//职工编号 string name;//职工部门 int dSelect;//部门选择 cout << "请输入第" << i + 1 << "个新职工编号:" << endl; cin >> id; cout << "请输入第" << i + 1 << "个新职工姓名:" << endl; cin >> name; cout << "请选择该职工岗位:" << endl; cout << "1、普通职工" << endl; cout << "2、经理" << endl; cout << "3、老板" << endl; cin >> dSelect; Worker* worker = NULL; switch (dSelect) { case 1: worker = new Employee(id, name, 1); break; case 2: worker = new Manager(id, name, 2); break; case 3: worker = new Boss(id, name, 3); break; default: break; } //将创建的职工指针,保存到数组中 newSpace[this->m_EmpNum + i] = worker; } //释放原有空间 delete[] this->m_EmpArray; //更改新空间的指向 this->m_EmpArray = newSpace; //更新新的职工人数 this->m_EmpNum = newSize; //更新职工不为空标志 this->m_FileIsEmpty = false; //提示添加成功 cout << "添加成功" << addNum << "名新职工" << endl; //保存数据到文件中 this->save(); } else { cout << "输入数据有误" << endl; } //按任意键后 清屏回到上级目录 system("pasue"); system("cls"); } //展示菜单 void WorkerManager::Show_Menu() { cout << "**********************************************" << endl; cout << "***********欢迎使用职工管理系统***************" << endl; cout << "************ 0.退出管理程序 ******************" << endl; cout << "************ 1.增加职工信息 ******************" << endl; cout << "************ 2.显示职工信息 ******************" << endl; cout << "************ 3.删除离职职工 ******************" << endl; cout << "************ 4.修改职工信息 ******************" << endl; cout << "************ 5.查找职工信息 ******************" << endl; cout << "************ 6.按照编号排序 ******************" << endl; cout << "************ 7.清空所有文件 ******************" << endl; cout << endl; } //退出功能 void WorkerManager::ExitSystem() { cout << "欢迎下次使用" << endl; system("pause"); exit(0);//退出程序 } //保存文件 void WorkerManager::save() { ofstream ofs; ofs.open(FILENAME, ios::out);//用输出方式打开文件--写文件 //将每个人数据写入到文件中 for (int i = 0; i < this->m_EmpNum; i++) { ofs << this->m_EmpArray[i]->m_Id << " " << this->m_EmpArray[i]->m_Name << " " << this->m_EmpArray[i]->m_DeptId << endl; } //关闭文件 ofs.close(); } WorkerManager::~WorkerManager() { if (this->m_EmpArray != NULL) { delete[] this->m_EmpArray; this->m_EmpArray = NULL; } }
统计人数
workerManager.h
#pragma once #include
using namespace std; #include "worker.h" #include"employee.h" #include"manager.h" #include"boss.h" #include #define FILENAME "empFile.txt" class WorkerManager { public: //构造函数 WorkerManager(); //展示菜单 void Show_Menu(); //退出功能 void ExitSystem(); //记录职工人数 int m_EmpNum; //职工数组指针 Worker** m_EmpArray; //添加职工 void Add_Emp(); //保存文件 void save(); //判断文件是否为空 标志 bool m_FileIsEmpty; //统计文件中人数 int get_EmpNum(); //析构函数 ~WorkerManager(); }; workerManager.cpp
#include "workerManager.h" 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、文件存在 数据为空 char ch; ifs >> ch; if (ifs.eof()) { //文件为空 cout << "文件为空" << endl; //初始化记录人数 this->m_EmpNum = 0; //初始化数组指针 this->m_EmpArray = NULL; //初始化文件是否为空 this->m_FileIsEmpty = true; ifs.close(); return; } //3、文件存在,并且记录数据 int num = this->get_EmpNum(); cout << "职工人数为:" << num << endl; this->m_EmpNum = num; } //添加职工 void WorkerManager::Add_Emp() { cout << "请输入添加职工数量:" << endl; int addNum = 0;//保护用户的输入数量 cin >> addNum; if (addNum > 0) { //添加 //计算添加新空间大小 int newSize = this->m_EmpNum + addNum;//新空间人数=原来记录人数+新增人数 //开辟新空间 Worker ** newSpace=new Worker* [newSize]; //将原来空间下数据 拷贝到新空间下 if (this->m_EmpArray != NULL) { for (int i = 0; i < this->m_EmpNum; i++) { newSpace[i] = this->m_EmpArray[i]; } } //批量添加新的数据 for (int i = 0; i < addNum; i++) { int id;//职工编号 string name;//职工部门 int dSelect;//部门选择 cout << "请输入第" << i + 1 << "个新职工编号:" << endl; cin >> id; cout << "请输入第" << i + 1 << "个新职工姓名:" << endl; cin >> name; cout << "请选择该职工岗位:" << endl; cout << "1、普通职工" << endl; cout << "2、经理" << endl; cout << "3、老板" << endl; cin >> dSelect; Worker* worker = NULL; switch (dSelect) { case 1: worker = new Employee(id, name, 1); break; case 2: worker = new Manager(id, name, 2); break; case 3: worker = new Boss(id, name, 3); break; default: break; } //将创建的职工指针,保存到数组中 newSpace[this->m_EmpNum + i] = worker; } //释放原有空间 delete[] this->m_EmpArray; //更改新空间的指向 this->m_EmpArray = newSpace; //更新新的职工人数 this->m_EmpNum = newSize; //更新职工不为空标志 this->m_FileIsEmpty = false; //提示添加成功 cout << "添加成功" << addNum << "名新职工" << endl; //保存数据到文件中 this->save(); } else { cout << "输入数据有误" << endl; } //按任意键后 清屏回到上级目录 system("pasue"); system("cls"); } //展示菜单 void WorkerManager::Show_Menu() { cout << "**********************************************" << endl; cout << "***********欢迎使用职工管理系统***************" << endl; cout << "************ 0.退出管理程序 ******************" << endl; cout << "************ 1.增加职工信息 ******************" << endl; cout << "************ 2.显示职工信息 ******************" << endl; cout << "************ 3.删除离职职工 ******************" << endl; cout << "************ 4.修改职工信息 ******************" << endl; cout << "************ 5.查找职工信息 ******************" << endl; cout << "************ 6.按照编号排序 ******************" << endl; cout << "************ 7.清空所有文件 ******************" << endl; cout << endl; } //退出功能 void WorkerManager::ExitSystem() { cout << "欢迎下次使用" << endl; system("pause"); exit(0);//退出程序 } //保存文件 void WorkerManager::save() { ofstream ofs; ofs.open(FILENAME, ios::out);//用输出方式打开文件--写文件 //将每个人数据写入到文件中 for (int i = 0; i < this->m_EmpNum; i++) { ofs << this->m_EmpArray[i]->m_Id << " " << this->m_EmpArray[i]->m_Name << " " << this->m_EmpArray[i]->m_DeptId << endl; } //关闭文件 ofs.close(); } //统计文件中人数 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++; } return num; } WorkerManager::~WorkerManager() { if (this->m_EmpArray != NULL) { delete[] this->m_EmpArray; this->m_EmpArray = NULL; } }
初始化完毕
workerManager.h
#pragma once #include
using namespace std; #include "worker.h" #include"employee.h" #include"manager.h" #include"boss.h" #include #define FILENAME "empFile.txt" class WorkerManager { public: //构造函数 WorkerManager(); //展示菜单 void Show_Menu(); //退出功能 void ExitSystem(); //记录职工人数 int m_EmpNum; //职工数组指针 Worker** m_EmpArray; //添加职工 void Add_Emp(); //保存文件 void save(); //判断文件是否为空 标志 bool m_FileIsEmpty; //统计文件中人数 int get_EmpNum(); //初始化员工 void init_Emp(); //析构函数 ~WorkerManager(); }; workerManager.cpp
#include "workerManager.h" 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、文件存在 数据为空 char ch; ifs >> ch; if (ifs.eof()) { //文件为空 //cout << "文件为空" << endl; //初始化记录人数 this->m_EmpNum = 0; //初始化数组指针 this->m_EmpArray = NULL; //初始化文件是否为空 this->m_FileIsEmpty = true; ifs.close(); return; } //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; }*/ } //添加职工 void WorkerManager::Add_Emp() { cout << "请输入添加职工数量:" << endl; int addNum = 0;//保护用户的输入数量 cin >> addNum; if (addNum > 0) { //添加 //计算添加新空间大小 int newSize = this->m_EmpNum + addNum;//新空间人数=原来记录人数+新增人数 //开辟新空间 Worker ** newSpace=new Worker* [newSize]; //将原来空间下数据 拷贝到新空间下 if (this->m_EmpArray != NULL) { for (int i = 0; i < this->m_EmpNum; i++) { newSpace[i] = this->m_EmpArray[i]; } } //批量添加新的数据 for (int i = 0; i < addNum; i++) { int id;//职工编号 string name;//职工部门 int dSelect;//部门选择 cout << "请输入第" << i + 1 << "个新职工编号:" << endl; cin >> id; cout << "请输入第" << i + 1 << "个新职工姓名:" << endl; cin >> name; cout << "请选择该职工岗位:" << endl; cout << "1、普通职工" << endl; cout << "2、经理" << endl; cout << "3、老板" << endl; cin >> dSelect; Worker* worker = NULL; switch (dSelect) { case 1: worker = new Employee(id, name, 1); break; case 2: worker = new Manager(id, name, 2); break; case 3: worker = new Boss(id, name, 3); break; default: break; } //将创建的职工指针,保存到数组中 newSpace[this->m_EmpNum + i] = worker; } //释放原有空间 delete[] this->m_EmpArray; //更改新空间的指向 this->m_EmpArray = newSpace; //更新新的职工人数 this->m_EmpNum = newSize; //更新职工不为空标志 this->m_FileIsEmpty = false; //提示添加成功 cout << "添加成功" << addNum << "名新职工" << endl; //保存数据到文件中 this->save(); } else { cout << "输入数据有误" << endl; } //按任意键后 清屏回到上级目录 system("pasue"); system("cls"); } //展示菜单 void WorkerManager::Show_Menu() { cout << "**********************************************" << endl; cout << "***********欢迎使用职工管理系统***************" << endl; cout << "************ 0.退出管理程序 ******************" << endl; cout << "************ 1.增加职工信息 ******************" << endl; cout << "************ 2.显示职工信息 ******************" << endl; cout << "************ 3.删除离职职工 ******************" << endl; cout << "************ 4.修改职工信息 ******************" << endl; cout << "************ 5.查找职工信息 ******************" << endl; cout << "************ 6.按照编号排序 ******************" << endl; cout << "************ 7.清空所有文件 ******************" << endl; cout << endl; } //退出功能 void WorkerManager::ExitSystem() { cout << "欢迎下次使用" << endl; system("pause"); exit(0);//退出程序 } //保存文件 void WorkerManager::save() { ofstream ofs; ofs.open(FILENAME, ios::out);//用输出方式打开文件--写文件 //将每个人数据写入到文件中 for (int i = 0; i < this->m_EmpNum; i++) { ofs << this->m_EmpArray[i]->m_Id << " " << this->m_EmpArray[i]->m_Name << " " << this->m_EmpArray[i]->m_DeptId << endl; } //关闭文件 ofs.close(); } //统计文件中人数 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++; } return num; } //初始化员工 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; 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::~WorkerManager() { if (this->m_EmpArray != NULL) { delete[] this->m_EmpArray; this->m_EmpArray = NULL; } }
9、显示职工功能
workerManager.h
#pragma once #include
using namespace std; #include "worker.h" #include"employee.h" #include"manager.h" #include"boss.h" #include #define FILENAME "empFile.txt" class WorkerManager { public: //构造函数 WorkerManager(); //展示菜单 void Show_Menu(); //退出功能 void ExitSystem(); //记录职工人数 int m_EmpNum; //职工数组指针 Worker** m_EmpArray; //添加职工 void Add_Emp(); //保存文件 void save(); //判断文件是否为空 标志 bool m_FileIsEmpty; //统计文件中人数 int get_EmpNum(); //初始化员工 void init_Emp(); //显示职工 void Show_Emp(); //析构函数 ~WorkerManager(); }; workerManager.cpp
#include "workerManager.h" 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、文件存在 数据为空 char ch; ifs >> ch; if (ifs.eof()) { //文件为空 //cout << "文件为空" << endl; //初始化记录人数 this->m_EmpNum = 0; //初始化数组指针 this->m_EmpArray = NULL; //初始化文件是否为空 this->m_FileIsEmpty = true; ifs.close(); return; } //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; }*/ } //添加职工 void WorkerManager::Add_Emp() { cout << "请输入添加职工数量:" << endl; int addNum = 0;//保护用户的输入数量 cin >> addNum; if (addNum > 0) { //添加 //计算添加新空间大小 int newSize = this->m_EmpNum + addNum;//新空间人数=原来记录人数+新增人数 //开辟新空间 Worker ** newSpace=new Worker* [newSize]; //将原来空间下数据 拷贝到新空间下 if (this->m_EmpArray != NULL) { for (int i = 0; i < this->m_EmpNum; i++) { newSpace[i] = this->m_EmpArray[i]; } } //批量添加新的数据 for (int i = 0; i < addNum; i++) { int id;//职工编号 string name;//职工部门 int dSelect;//部门选择 cout << "请输入第" << i + 1 << "个新职工编号:" << endl; cin >> id; cout << "请输入第" << i + 1 << "个新职工姓名:" << endl; cin >> name; cout << "请选择该职工岗位:" << endl; cout << "1、普通职工" << endl; cout << "2、经理" << endl; cout << "3、老板" << endl; cin >> dSelect; Worker* worker = NULL; switch (dSelect) { case 1: worker = new Employee(id, name, 1); break; case 2: worker = new Manager(id, name, 2); break; case 3: worker = new Boss(id, name, 3); break; default: break; } //将创建的职工指针,保存到数组中 newSpace[this->m_EmpNum + i] = worker; } //释放原有空间 delete[] this->m_EmpArray; //更改新空间的指向 this->m_EmpArray = newSpace; //更新新的职工人数 this->m_EmpNum = newSize; //更新职工不为空标志 this->m_FileIsEmpty = false; //提示添加成功 cout << "添加成功" << addNum << "名新职工" << endl; //保存数据到文件中 this->save(); } else { cout << "输入数据有误" << endl; } //按任意键后 清屏回到上级目录 system("pasue"); system("cls"); } //展示菜单 void WorkerManager::Show_Menu() { cout << "**********************************************" << endl; cout << "***********欢迎使用职工管理系统***************" << endl; cout << "************ 0.退出管理程序 ******************" << endl; cout << "************ 1.增加职工信息 ******************" << endl; cout << "************ 2.显示职工信息 ******************" << endl; cout << "************ 3.删除离职职工 ******************" << endl; cout << "************ 4.修改职工信息 ******************" << endl; cout << "************ 5.查找职工信息 ******************" << endl; cout << "************ 6.按照编号排序 ******************" << endl; cout << "************ 7.清空所有文件 ******************" << endl; cout << endl; } //退出功能 void WorkerManager::ExitSystem() { cout << "欢迎下次使用" << endl; system("pause"); exit(0);//退出程序 } //保存文件 void WorkerManager::save() { ofstream ofs; ofs.open(FILENAME, ios::out);//用输出方式打开文件--写文件 //将每个人数据写入到文件中 for (int i = 0; i < this->m_EmpNum; i++) { ofs << this->m_EmpArray[i]->m_Id << " " << this->m_EmpArray[i]->m_Name << " " << this->m_EmpArray[i]->m_DeptId << endl; } //关闭文件 ofs.close(); } //统计文件中人数 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++; } return num; } //初始化员工 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; 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(); } //显示职工 void WorkerManager::Show_Emp() { //判断文件是否为空 if (this->m_FileIsEmpty) { cout << "文件不存在或记录为空" << endl; } else { for (int i = 0; i < m_EmpNum; i++) { //利用多态调用程序接口 this->m_EmpArray[i]->showInfo(); } } //按任意键清屏 system("pause"); system("cls"); } WorkerManager::~WorkerManager() { if (this->m_EmpArray != NULL) { delete[] this->m_EmpArray; this->m_EmpArray = NULL; } }
职工管理系统.cpp
#include
using namespace std; #include "workerManager.h" //#include"worker.h" //#include"employee.h" //#include"manager.h" //#include"boss.h" int main() { 测试代码: //Worker* worker = NULL; //worker = new Employee(1,"张三",1); //worker->showInfo(); //delete worker; //worker = new Manager(2, "李四", 2); //worker->showInfo(); //delete worker; //worker = new Boss(3, "王五", 3); //worker->showInfo(); //delete worker; //实例化管理者对象 WorkerManager wm; int choice = 0;//用来存储用户的选项 while (true) { //调用展示菜单成员函数 wm.Show_Menu(); cout << "请输入您的选择:" << endl; cin >> choice;//接受用户的选项 switch (choice) { case 0: //退出系统 wm.ExitSystem(); break; case 1: //增加职工 wm.Add_Emp(); break; case 2: //显示职工 wm.Show_Emp(); break; case 3: //删除职工 break; case 4: //修改职工 break; case 5: //查找职工 break; case 6: //排序职工 break; case 7: //清空文档 break; default: system("cls");//清屏操作 break; } } system("pause"); return 0; }
10、删除职工
判断职工是否存在
workerManager.h
#pragma once #include
using namespace std; #include "worker.h" #include"employee.h" #include"manager.h" #include"boss.h" #include #define FILENAME "empFile.txt" class WorkerManager { public: //构造函数 WorkerManager(); //展示菜单 void Show_Menu(); //退出功能 void ExitSystem(); //记录职工人数 int m_EmpNum; //职工数组指针 Worker** m_EmpArray; //添加职工 void Add_Emp(); //保存文件 void save(); //判断文件是否为空 标志 bool m_FileIsEmpty; //统计文件中人数 int get_EmpNum(); //初始化员工 void init_Emp(); //显示职工 void Show_Emp(); //删除职工 void Del_Emp(); //判断职工是否存在 如果存在返回职工所在数组中的位置,不存在返回-1 int IsExist(int id); //析构函数 ~WorkerManager(); }; workerManager.cpp
#include "workerManager.h" 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、文件存在 数据为空 char ch; ifs >> ch; if (ifs.eof()) { //文件为空 //cout << "文件为空" << endl; //初始化记录人数 this->m_EmpNum = 0; //初始化数组指针 this->m_EmpArray = NULL; //初始化文件是否为空 this->m_FileIsEmpty = true; ifs.close(); return; } //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; }*/ } //添加职工 void WorkerManager::Add_Emp() { cout << "请输入添加职工数量:" << endl; int addNum = 0;//保护用户的输入数量 cin >> addNum; if (addNum > 0) { //添加 //计算添加新空间大小 int newSize = this->m_EmpNum + addNum;//新空间人数=原来记录人数+新增人数 //开辟新空间 Worker ** newSpace=new Worker* [newSize]; //将原来空间下数据 拷贝到新空间下 if (this->m_EmpArray != NULL) { for (int i = 0; i < this->m_EmpNum; i++) { newSpace[i] = this->m_EmpArray[i]; } } //批量添加新的数据 for (int i = 0; i < addNum; i++) { int id;//职工编号 string name;//职工部门 int dSelect;//部门选择 cout << "请输入第" << i + 1 << "个新职工编号:" << endl; cin >> id; cout << "请输入第" << i + 1 << "个新职工姓名:" << endl; cin >> name; cout << "请选择该职工岗位:" << endl; cout << "1、普通职工" << endl; cout << "2、经理" << endl; cout << "3、老板" << endl; cin >> dSelect; Worker* worker = NULL; switch (dSelect) { case 1: worker = new Employee(id, name, 1); break; case 2: worker = new Manager(id, name, 2); break; case 3: worker = new Boss(id, name, 3); break; default: break; } //将创建的职工指针,保存到数组中 newSpace[this->m_EmpNum + i] = worker; } //释放原有空间 delete[] this->m_EmpArray; //更改新空间的指向 this->m_EmpArray = newSpace; //更新新的职工人数 this->m_EmpNum = newSize; //更新职工不为空标志 this->m_FileIsEmpty = false; //提示添加成功 cout << "添加成功" << addNum << "名新职工" << endl; //保存数据到文件中 this->save(); } else { cout << "输入数据有误" << endl; } //按任意键后 清屏回到上级目录 system("pasue"); system("cls"); } //展示菜单 void WorkerManager::Show_Menu() { cout << "**********************************************" << endl; cout << "***********欢迎使用职工管理系统***************" << endl; cout << "************ 0.退出管理程序 ******************" << endl; cout << "************ 1.增加职工信息 ******************" << endl; cout << "************ 2.显示职工信息 ******************" << endl; cout << "************ 3.删除离职职工 ******************" << endl; cout << "************ 4.修改职工信息 ******************" << endl; cout << "************ 5.查找职工信息 ******************" << endl; cout << "************ 6.按照编号排序 ******************" << endl; cout << "************ 7.清空所有文件 ******************" << endl; cout << endl; } //退出功能 void WorkerManager::ExitSystem() { cout << "欢迎下次使用" << endl; system("pause"); exit(0);//退出程序 } //保存文件 void WorkerManager::save() { ofstream ofs; ofs.open(FILENAME, ios::out);//用输出方式打开文件--写文件 //将每个人数据写入到文件中 for (int i = 0; i < this->m_EmpNum; i++) { ofs << this->m_EmpArray[i]->m_Id << " " << this->m_EmpArray[i]->m_Name << " " << this->m_EmpArray[i]->m_DeptId << endl; } //关闭文件 ofs.close(); } //统计文件中人数 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++; } return num; } //初始化员工 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; 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(); } //显示职工 void WorkerManager::Show_Emp() { //判断文件是否为空 if (this->m_FileIsEmpty) { cout << "文件不存在或记录为空" << endl; } else { for (int i = 0; i < m_EmpNum; i++) { //利用多态调用程序接口 this->m_EmpArray[i]->showInfo(); } } //按任意键清屏 system("pause"); system("cls"); } //删除职工 void WorkerManager::Del_Emp() { } //判断职工是否存在 如果存在返回职工所在数组中的位置,不存在返回-1 int WorkerManager::IsExist(int id) { int index = -1; for (int i = 0; i < this->m_EmpNum; i++) { if (this->m_EmpArray[i]->m_Id == id) { //找到职工 index = 1; break; } } return index; } WorkerManager::~WorkerManager() { if (this->m_EmpArray != NULL) { delete[] this->m_EmpArray; this->m_EmpArray = NULL; } }
功能实现
workerManager.h
#pragma once #include
using namespace std; #include "worker.h" #include"employee.h" #include"manager.h" #include"boss.h" #include #define FILENAME "empFile.txt" class WorkerManager { public: //构造函数 WorkerManager(); //展示菜单 void Show_Menu(); //退出功能 void ExitSystem(); //记录职工人数 int m_EmpNum; //职工数组指针 Worker** m_EmpArray; //添加职工 void Add_Emp(); //保存文件 void save(); //判断文件是否为空 标志 bool m_FileIsEmpty; //统计文件中人数 int get_EmpNum(); //初始化员工 void init_Emp(); //显示职工 void Show_Emp(); //删除职工 void Del_Emp(); //判断职工是否存在 如果存在返回职工所在数组中的位置,不存在返回-1 int IsExist(int id); //析构函数 ~WorkerManager(); }; workerManager.cpp
#include "workerManager.h" 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、文件存在 数据为空 char ch; ifs >> ch; if (ifs.eof()) { //文件为空 //cout << "文件为空" << endl; //初始化记录人数 this->m_EmpNum = 0; //初始化数组指针 this->m_EmpArray = NULL; //初始化文件是否为空 this->m_FileIsEmpty = true; ifs.close(); return; } //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; }*/ } //添加职工 void WorkerManager::Add_Emp() { cout << "请输入添加职工数量:" << endl; int addNum = 0;//保护用户的输入数量 cin >> addNum; if (addNum > 0) { //添加 //计算添加新空间大小 int newSize = this->m_EmpNum + addNum;//新空间人数=原来记录人数+新增人数 //开辟新空间 Worker ** newSpace=new Worker* [newSize]; //将原来空间下数据 拷贝到新空间下 if (this->m_EmpArray != NULL) { for (int i = 0; i < this->m_EmpNum; i++) { newSpace[i] = this->m_EmpArray[i]; } } //批量添加新的数据 for (int i = 0; i < addNum; i++) { int id;//职工编号 string name;//职工部门 int dSelect;//部门选择 cout << "请输入第" << i + 1 << "个新职工编号:" << endl; cin >> id; cout << "请输入第" << i + 1 << "个新职工姓名:" << endl; cin >> name; cout << "请选择该职工岗位:" << endl; cout << "1、普通职工" << endl; cout << "2、经理" << endl; cout << "3、老板" << endl; cin >> dSelect; Worker* worker = NULL; switch (dSelect) { case 1: worker = new Employee(id, name, 1); break; case 2: worker = new Manager(id, name, 2); break; case 3: worker = new Boss(id, name, 3); break; default: break; } //将创建的职工指针,保存到数组中 newSpace[this->m_EmpNum + i] = worker; } //释放原有空间 delete[] this->m_EmpArray; //更改新空间的指向 this->m_EmpArray = newSpace; //更新新的职工人数 this->m_EmpNum = newSize; //更新职工不为空标志 this->m_FileIsEmpty = false; //提示添加成功 cout << "添加成功" << addNum << "名新职工" << endl; //保存数据到文件中 this->save(); } else { cout << "输入数据有误" << endl; } //按任意键后 清屏回到上级目录 system("pasue"); system("cls"); } //展示菜单 void WorkerManager::Show_Menu() { cout << "**********************************************" << endl; cout << "***********欢迎使用职工管理系统***************" << endl; cout << "************ 0.退出管理程序 ******************" << endl; cout << "************ 1.增加职工信息 ******************" << endl; cout << "************ 2.显示职工信息 ******************" << endl; cout << "************ 3.删除离职职工 ******************" << endl; cout << "************ 4.修改职工信息 ******************" << endl; cout << "************ 5.查找职工信息 ******************" << endl; cout << "************ 6.按照编号排序 ******************" << endl; cout << "************ 7.清空所有文件 ******************" << endl; cout << endl; } //退出功能 void WorkerManager::ExitSystem() { cout << "欢迎下次使用" << endl; system("pause"); exit(0);//退出程序 } //保存文件 void WorkerManager::save() { ofstream ofs; ofs.open(FILENAME, ios::out);//用输出方式打开文件--写文件 //将每个人数据写入到文件中 for (int i = 0; i < this->m_EmpNum; i++) { ofs << this->m_EmpArray[i]->m_Id << " " << this->m_EmpArray[i]->m_Name << " " << this->m_EmpArray[i]->m_DeptId << endl; } //关闭文件 ofs.close(); } //统计文件中人数 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++; } return num; } //初始化员工 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; 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(); } //显示职工 void WorkerManager::Show_Emp() { //判断文件是否为空 if (this->m_FileIsEmpty) { cout << "文件不存在或记录为空" << endl; } else { for (int i = 0; i < m_EmpNum; i++) { //利用多态调用程序接口 this->m_EmpArray[i]->showInfo(); } } //按任意键清屏 system("pause"); system("cls"); } //删除职工 void WorkerManager::Del_Emp() { if (this->m_FileIsEmpty) { cout << "文件不存在或记录为空" << endl; } else { //按照职工编号删除 cout << "请输入想要删除职工编号:" << endl; int id = 0; cin >> id; int index = this->IsExist(id); if (index != -1) {//说明职工存在,并且要删除掉index位置上的职工 //数据迁移 for (int i = index; i < this->m_EmpNum; i++) { this->m_EmpArray[i] = this->m_EmpArray[i + i]; } this->m_EmpNum--;//更新数组中记录人员个数 //数据同步更新到文件中 this->save(); cout << "删除成功" << endl; } else { cout << "删除失败,未找到该职工" << endl; } } //按任意键 清屏 system("pause"); system("cls"); } //判断职工是否存在 如果存在返回职工所在数组中的位置,不存在返回-1 int WorkerManager::IsExist(int id) { int index = -1; for (int i = 0; i < this->m_EmpNum; i++) { if (this->m_EmpArray[i]->m_Id == id) { //找到职工 index = 1; break; } } return index; } WorkerManager::~WorkerManager() { if (this->m_EmpArray != NULL) { delete[] this->m_EmpArray; this->m_EmpArray = NULL; } }
职工管理系统.cpp
#include
using namespace std; #include "workerManager.h" //#include"worker.h" //#include"employee.h" //#include"manager.h" //#include"boss.h" int main() { 测试代码: //Worker* worker = NULL; //worker = new Employee(1,"张三",1); //worker->showInfo(); //delete worker; //worker = new Manager(2, "李四", 2); //worker->showInfo(); //delete worker; //worker = new Boss(3, "王五", 3); //worker->showInfo(); //delete worker; //实例化管理者对象 WorkerManager wm; int choice = 0;//用来存储用户的选项 while (true) { //调用展示菜单成员函数 wm.Show_Menu(); cout << "请输入您的选择:" << endl; cin >> choice;//接受用户的选项 switch (choice) { case 0: //退出系统 wm.ExitSystem(); break; case 1: //增加职工 wm.Add_Emp(); break; case 2: //显示职工 wm.Show_Emp(); break; case 3: //删除职工 wm.Del_Emp(); break; case 4: //修改职工 break; case 5: //查找职工 break; case 6: //排序职工 break; case 7: //清空文档 break; default: system("cls");//清屏操作 break; } } system("pause"); return 0; }
11、修改职工功能实现
workerManager.h
#pragma once #include
using namespace std; #include "worker.h" #include"employee.h" #include"manager.h" #include"boss.h" #include #define FILENAME "empFile.txt" class WorkerManager { public: //构造函数 WorkerManager(); //展示菜单 void Show_Menu(); //退出功能 void ExitSystem(); //记录职工人数 int m_EmpNum; //职工数组指针 Worker** m_EmpArray; //添加职工 void Add_Emp(); //保存文件 void save(); //判断文件是否为空 标志 bool m_FileIsEmpty; //统计文件中人数 int get_EmpNum(); //初始化员工 void init_Emp(); //显示职工 void Show_Emp(); //删除职工 void Del_Emp(); //判断职工是否存在 如果存在返回职工所在数组中的位置,不存在返回-1 int IsExist(int id); //修改职工 void Mod_Emp(); //析构函数 ~WorkerManager(); }; workerManager.cpp
#include "workerManager.h" 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、文件存在 数据为空 char ch; ifs >> ch; if (ifs.eof()) { //文件为空 //cout << "文件为空" << endl; //初始化记录人数 this->m_EmpNum = 0; //初始化数组指针 this->m_EmpArray = NULL; //初始化文件是否为空 this->m_FileIsEmpty = true; ifs.close(); return; } //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; }*/ } //添加职工 void WorkerManager::Add_Emp() { cout << "请输入添加职工数量:" << endl; int addNum = 0;//保护用户的输入数量 cin >> addNum; if (addNum > 0) { //添加 //计算添加新空间大小 int newSize = this->m_EmpNum + addNum;//新空间人数=原来记录人数+新增人数 //开辟新空间 Worker ** newSpace=new Worker* [newSize]; //将原来空间下数据 拷贝到新空间下 if (this->m_EmpArray != NULL) { for (int i = 0; i < this->m_EmpNum; i++) { newSpace[i] = this->m_EmpArray[i]; } } //批量添加新的数据 for (int i = 0; i < addNum; i++) { int id;//职工编号 string name;//职工部门 int dSelect;//部门选择 cout << "请输入第" << i + 1 << "个新职工编号:" << endl; cin >> id; cout << "请输入第" << i + 1 << "个新职工姓名:" << endl; cin >> name; cout << "请选择该职工岗位:" << endl; cout << "1、普通职工" << endl; cout << "2、经理" << endl; cout << "3、老板" << endl; cin >> dSelect; Worker* worker = NULL; switch (dSelect) { case 1: worker = new Employee(id, name, 1); break; case 2: worker = new Manager(id, name, 2); break; case 3: worker = new Boss(id, name, 3); break; default: break; } //将创建的职工指针,保存到数组中 newSpace[this->m_EmpNum + i] = worker; } //释放原有空间 delete[] this->m_EmpArray; //更改新空间的指向 this->m_EmpArray = newSpace; //更新新的职工人数 this->m_EmpNum = newSize; //更新职工不为空标志 this->m_FileIsEmpty = false; //提示添加成功 cout << "添加成功" << addNum << "名新职工" << endl; //保存数据到文件中 this->save(); } else { cout << "输入数据有误" << endl; } //按任意键后 清屏回到上级目录 system("pasue"); system("cls"); } //展示菜单 void WorkerManager::Show_Menu() { cout << "**********************************************" << endl; cout << "***********欢迎使用职工管理系统***************" << endl; cout << "************ 0.退出管理程序 ******************" << endl; cout << "************ 1.增加职工信息 ******************" << endl; cout << "************ 2.显示职工信息 ******************" << endl; cout << "************ 3.删除离职职工 ******************" << endl; cout << "************ 4.修改职工信息 ******************" << endl; cout << "************ 5.查找职工信息 ******************" << endl; cout << "************ 6.按照编号排序 ******************" << endl; cout << "************ 7.清空所有文件 ******************" << endl; cout << endl; } //退出功能 void WorkerManager::ExitSystem() { cout << "欢迎下次使用" << endl; system("pause"); exit(0);//退出程序 } //保存文件 void WorkerManager::save() { ofstream ofs; ofs.open(FILENAME, ios::out);//用输出方式打开文件--写文件 //将每个人数据写入到文件中 for (int i = 0; i < this->m_EmpNum; i++) { ofs << this->m_EmpArray[i]->m_Id << " " << this->m_EmpArray[i]->m_Name << " " << this->m_EmpArray[i]->m_DeptId << endl; } //关闭文件 ofs.close(); } //统计文件中人数 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++; } return num; } //初始化员工 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; 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(); } //显示职工 void WorkerManager::Show_Emp() { //判断文件是否为空 if (this->m_FileIsEmpty) { cout << "文件不存在或记录为空" << endl; } else { for (int i = 0; i < m_EmpNum; i++) { //利用多态调用程序接口 this->m_EmpArray[i]->showInfo(); } } //按任意键清屏 system("pause"); system("cls"); } //删除职工 void WorkerManager::Del_Emp() { if (this->m_FileIsEmpty) { cout << "文件不存在或记录为空" << endl; } else { //按照职工编号删除 cout << "请输入想要删除职工编号:" << endl; int id = 0; cin >> id; int index = this->IsExist(id); if (index != -1) {//说明职工存在,并且要删除掉index位置上的职工 //数据迁移 for (int i = index; i < this->m_EmpNum; i++) { this->m_EmpArray[i] = this->m_EmpArray[i + i]; } this->m_EmpNum--;//更新数组中记录人员个数 //数据同步更新到文件中 this->save(); cout << "删除成功" << endl; } else { cout << "删除失败,未找到该职工" << endl; } } //按任意键 清屏 system("pause"); system("cls"); } //判断职工是否存在 如果存在返回职工所在数组中的位置,不存在返回-1 int WorkerManager::IsExist(int id) { int index = -1; for (int i = 0; i < this->m_EmpNum; i++) { if (this->m_EmpArray[i]->m_Id == id) { //找到职工 index = 1; break; } } return index; } //修改职工 void WorkerManager::Mod_Emp() { if (this->m_FileIsEmpty) { cout << "文件不存在或记录为空" << endl; } else { cout << "请输入修改职工的编号:" << endl; int id; cin >> id; int ret = this->IsExist(id); if (ret != -1) { //查找到编号的职工 delete this->m_EmpArray[ret]; int newId = 0; string newName = ""; int dSelect = 0; cout << "查到:" << id << "号职工,请输入新职工号:" << endl; cin >> newId; cout << "请输入新姓名:" << endl; cin >> newName; cout << "请输入岗位:" << endl; cout << "1、普通职工" << endl; cout << "2、经理" << endl; cout << "3、老板" << endl; cin >> dSelect; Worker* worker = NULL; switch (dSelect) { case 1: worker = new Employee(newId, newName, dSelect); break; case 2: worker = new Manager(newId, newName, dSelect); break; case 3: worker = new Boss(newId, newName, dSelect); break; default: break; } //更新数据 到数组中 this->m_EmpArray[ret] = worker; cout << "修改成功" << endl; //保存到文件中 this->save(); } else { cout << "修改失败,查无此人" << endl; } } system("pause"); system("cls"); } WorkerManager::~WorkerManager() { if (this->m_EmpArray != NULL) { delete[] this->m_EmpArray; this->m_EmpArray = NULL; } }
12、查找职工功能实现
workerManager.h
#pragma once #include
using namespace std; #include "worker.h" #include"employee.h" #include"manager.h" #include"boss.h" #include #define FILENAME "empFile.txt" class WorkerManager { public: //构造函数 WorkerManager(); //展示菜单 void Show_Menu(); //退出功能 void ExitSystem(); //记录职工人数 int m_EmpNum; //职工数组指针 Worker** m_EmpArray; //添加职工 void Add_Emp(); //保存文件 void save(); //判断文件是否为空 标志 bool m_FileIsEmpty; //统计文件中人数 int get_EmpNum(); //初始化员工 void init_Emp(); //显示职工 void Show_Emp(); //删除职工 void Del_Emp(); //判断职工是否存在 如果存在返回职工所在数组中的位置,不存在返回-1 int IsExist(int id); //修改职工 void Mod_Emp(); //查找职工 void Find_Emp(); //析构函数 ~WorkerManager(); }; workerManager.cpp
#include "workerManager.h" 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、文件存在 数据为空 char ch; ifs >> ch; if (ifs.eof()) { //文件为空 //cout << "文件为空" << endl; //初始化记录人数 this->m_EmpNum = 0; //初始化数组指针 this->m_EmpArray = NULL; //初始化文件是否为空 this->m_FileIsEmpty = true; ifs.close(); return; } //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; }*/ } //添加职工 void WorkerManager::Add_Emp() { cout << "请输入添加职工数量:" << endl; int addNum = 0;//保护用户的输入数量 cin >> addNum; if (addNum > 0) { //添加 //计算添加新空间大小 int newSize = this->m_EmpNum + addNum;//新空间人数=原来记录人数+新增人数 //开辟新空间 Worker ** newSpace=new Worker* [newSize]; //将原来空间下数据 拷贝到新空间下 if (this->m_EmpArray != NULL) { for (int i = 0; i < this->m_EmpNum; i++) { newSpace[i] = this->m_EmpArray[i]; } } //批量添加新的数据 for (int i = 0; i < addNum; i++) { int id;//职工编号 string name;//职工部门 int dSelect;//部门选择 cout << "请输入第" << i + 1 << "个新职工编号:" << endl; cin >> id; cout << "请输入第" << i + 1 << "个新职工姓名:" << endl; cin >> name; cout << "请选择该职工岗位:" << endl; cout << "1、普通职工" << endl; cout << "2、经理" << endl; cout << "3、老板" << endl; cin >> dSelect; Worker* worker = NULL; switch (dSelect) { case 1: worker = new Employee(id, name, 1); break; case 2: worker = new Manager(id, name, 2); break; case 3: worker = new Boss(id, name, 3); break; default: break; } //将创建的职工指针,保存到数组中 newSpace[this->m_EmpNum + i] = worker; } //释放原有空间 delete[] this->m_EmpArray; //更改新空间的指向 this->m_EmpArray = newSpace; //更新新的职工人数 this->m_EmpNum = newSize; //更新职工不为空标志 this->m_FileIsEmpty = false; //提示添加成功 cout << "添加成功" << addNum << "名新职工" << endl; //保存数据到文件中 this->save(); } else { cout << "输入数据有误" << endl; } //按任意键后 清屏回到上级目录 system("pasue"); system("cls"); } //展示菜单 void WorkerManager::Show_Menu() { cout << "**********************************************" << endl; cout << "***********欢迎使用职工管理系统***************" << endl; cout << "************ 0.退出管理程序 ******************" << endl; cout << "************ 1.增加职工信息 ******************" << endl; cout << "************ 2.显示职工信息 ******************" << endl; cout << "************ 3.删除离职职工 ******************" << endl; cout << "************ 4.修改职工信息 ******************" << endl; cout << "************ 5.查找职工信息 ******************" << endl; cout << "************ 6.按照编号排序 ******************" << endl; cout << "************ 7.清空所有文件 ******************" << endl; cout << endl; } //退出功能 void WorkerManager::ExitSystem() { cout << "欢迎下次使用" << endl; system("pause"); exit(0);//退出程序 } //保存文件 void WorkerManager::save() { ofstream ofs; ofs.open(FILENAME, ios::out);//用输出方式打开文件--写文件 //将每个人数据写入到文件中 for (int i = 0; i < this->m_EmpNum; i++) { ofs << this->m_EmpArray[i]->m_Id << " " << this->m_EmpArray[i]->m_Name << " " << this->m_EmpArray[i]->m_DeptId << endl; } //关闭文件 ofs.close(); } //统计文件中人数 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++; } return num; } //初始化员工 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; 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(); } //显示职工 void WorkerManager::Show_Emp() { //判断文件是否为空 if (this->m_FileIsEmpty) { cout << "文件不存在或记录为空" << endl; } else { for (int i = 0; i < m_EmpNum; i++) { //利用多态调用程序接口 this->m_EmpArray[i]->showInfo(); } } //按任意键清屏 system("pause"); system("cls"); } //删除职工 void WorkerManager::Del_Emp() { if (this->m_FileIsEmpty) { cout << "文件不存在或记录为空" << endl; } else { //按照职工编号删除 cout << "请输入想要删除职工编号:" << endl; int id = 0; cin >> id; int index = this->IsExist(id); if (index != -1) {//说明职工存在,并且要删除掉index位置上的职工 //数据迁移 for (int i = index; i < this->m_EmpNum; i++) { this->m_EmpArray[i] = this->m_EmpArray[i + i]; } this->m_EmpNum--;//更新数组中记录人员个数 //数据同步更新到文件中 this->save(); cout << "删除成功" << endl; } else { cout << "删除失败,未找到该职工" << endl; } } //按任意键 清屏 system("pause"); system("cls"); } //判断职工是否存在 如果存在返回职工所在数组中的位置,不存在返回-1 int WorkerManager::IsExist(int id) { int index = -1; for (int i = 0; i < this->m_EmpNum; i++) { if (this->m_EmpArray[i]->m_Id == id) { //找到职工 index = 1; break; } } return index; } //修改职工 void WorkerManager::Mod_Emp() { if (this->m_FileIsEmpty) { cout << "文件不存在或记录为空" << endl; } else { cout << "请输入修改职工的编号:" << endl; int id; cin >> id; int ret = this->IsExist(id); if (ret != -1) { //查找到编号的职工 delete this->m_EmpArray[ret]; int newId = 0; string newName = ""; int dSelect = 0; cout << "查到:" << id << "号职工,请输入新职工号:" << endl; cin >> newId; cout << "请输入新姓名:" << endl; cin >> newName; cout << "请输入岗位:" << endl; cout << "1、普通职工" << endl; cout << "2、经理" << endl; cout << "3、老板" << endl; cin >> dSelect; Worker* worker = NULL; switch (dSelect) { case 1: worker = new Employee(newId, newName, dSelect); break; case 2: worker = new Manager(newId, newName, dSelect); break; case 3: worker = new Boss(newId, newName, dSelect); break; default: break; } //更新数据 到数组中 this->m_EmpArray[ret] = worker; cout << "修改成功" << endl; //保存到文件中 this->save(); } else { cout << "修改失败,查无此人" << endl; } } system("pause"); system("cls"); } //查找职工 void WorkerManager::Find_Emp() { if (this->m_FileIsEmpty) { cout << "文件不存在或记录为空" << endl; } else { cout << "请输入查找的方式 " << endl; cout << "1、按职工编号查找" << endl; cout << "2、按职工姓名查找" << endl; int select = 0; cin >> select; if (select == 1) { //按照编号查 int id; cout << "请输入查找的职工编号:" << endl; cin >> id; int ret = IsExist(id); if (ret != -1) { //找到职工 cout << "查找成功,该职工信息如下:" << endl; this->m_EmpArray[ret]->showInfo(); } else { cout << "查找失败,查无此人" << endl; } } else if (select == 2) { //按照姓名查 string name; cout << "请输入查找的姓名:" << endl; cin >> name; //加入判断是否查到的标志 bool flag = false;//默认未找到职工 for (int i = 0; i < m_EmpNum; i++) { if (this->m_EmpArray[i]->m_Name == name) { cout << "查找成功,职工编号为:" << this->m_EmpArray[i]->m_Id << "号职工信息如下:" << endl; flag = true; //调用显示信息接口 this->m_EmpArray[i]->showInfo(); } } if (flag == false) { cout << "查找失败,查无此人" << endl; } } else { cout << "输入选项有误" << endl; } } system("pause"); system("cls"); } WorkerManager::~WorkerManager() { if (this->m_EmpArray != NULL) { delete[] this->m_EmpArray; this->m_EmpArray = NULL; } }
13、按职工编号排序
workerManager.h
#pragma once #include
using namespace std; #include "worker.h" #include"employee.h" #include"manager.h" #include"boss.h" #include #define FILENAME "empFile.txt" class WorkerManager { public: //构造函数 WorkerManager(); //展示菜单 void Show_Menu(); //退出功能 void ExitSystem(); //记录职工人数 int m_EmpNum; //职工数组指针 Worker** m_EmpArray; //添加职工 void Add_Emp(); //保存文件 void save(); //判断文件是否为空 标志 bool m_FileIsEmpty; //统计文件中人数 int get_EmpNum(); //初始化员工 void init_Emp(); //显示职工 void Show_Emp(); //删除职工 void Del_Emp(); //判断职工是否存在 如果存在返回职工所在数组中的位置,不存在返回-1 int IsExist(int id); //修改职工 void Mod_Emp(); //查找职工 void Find_Emp(); //按照编号排序 void Sort_Emp(); //析构函数 ~WorkerManager(); }; workerManager.cpp
#include "workerManager.h" 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、文件存在 数据为空 char ch; ifs >> ch; if (ifs.eof()) { //文件为空 //cout << "文件为空" << endl; //初始化记录人数 this->m_EmpNum = 0; //初始化数组指针 this->m_EmpArray = NULL; //初始化文件是否为空 this->m_FileIsEmpty = true; ifs.close(); return; } //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; }*/ } //添加职工 void WorkerManager::Add_Emp() { cout << "请输入添加职工数量:" << endl; int addNum = 0;//保护用户的输入数量 cin >> addNum; if (addNum > 0) { //添加 //计算添加新空间大小 int newSize = this->m_EmpNum + addNum;//新空间人数=原来记录人数+新增人数 //开辟新空间 Worker ** newSpace=new Worker* [newSize]; //将原来空间下数据 拷贝到新空间下 if (this->m_EmpArray != NULL) { for (int i = 0; i < this->m_EmpNum; i++) { newSpace[i] = this->m_EmpArray[i]; } } //批量添加新的数据 for (int i = 0; i < addNum; i++) { int id;//职工编号 string name;//职工部门 int dSelect;//部门选择 cout << "请输入第" << i + 1 << "个新职工编号:" << endl; cin >> id; cout << "请输入第" << i + 1 << "个新职工姓名:" << endl; cin >> name; cout << "请选择该职工岗位:" << endl; cout << "1、普通职工" << endl; cout << "2、经理" << endl; cout << "3、老板" << endl; cin >> dSelect; Worker* worker = NULL; switch (dSelect) { case 1: worker = new Employee(id, name, 1); break; case 2: worker = new Manager(id, name, 2); break; case 3: worker = new Boss(id, name, 3); break; default: break; } //将创建的职工指针,保存到数组中 newSpace[this->m_EmpNum + i] = worker; } //释放原有空间 delete[] this->m_EmpArray; //更改新空间的指向 this->m_EmpArray = newSpace; //更新新的职工人数 this->m_EmpNum = newSize; //更新职工不为空标志 this->m_FileIsEmpty = false; //提示添加成功 cout << "添加成功" << addNum << "名新职工" << endl; //保存数据到文件中 this->save(); } else { cout << "输入数据有误" << endl; } //按任意键后 清屏回到上级目录 system("pasue"); system("cls"); } //展示菜单 void WorkerManager::Show_Menu() { cout << "**********************************************" << endl; cout << "***********欢迎使用职工管理系统***************" << endl; cout << "************ 0.退出管理程序 ******************" << endl; cout << "************ 1.增加职工信息 ******************" << endl; cout << "************ 2.显示职工信息 ******************" << endl; cout << "************ 3.删除离职职工 ******************" << endl; cout << "************ 4.修改职工信息 ******************" << endl; cout << "************ 5.查找职工信息 ******************" << endl; cout << "************ 6.按照编号排序 ******************" << endl; cout << "************ 7.清空所有文件 ******************" << endl; cout << endl; } //退出功能 void WorkerManager::ExitSystem() { cout << "欢迎下次使用" << endl; system("pause"); exit(0);//退出程序 } //保存文件 void WorkerManager::save() { ofstream ofs; ofs.open(FILENAME, ios::out);//用输出方式打开文件--写文件 //将每个人数据写入到文件中 for (int i = 0; i < this->m_EmpNum; i++) { ofs << this->m_EmpArray[i]->m_Id << " " << this->m_EmpArray[i]->m_Name << " " << this->m_EmpArray[i]->m_DeptId << endl; } //关闭文件 ofs.close(); } //统计文件中人数 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++; } return num; } //初始化员工 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; 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(); } //显示职工 void WorkerManager::Show_Emp() { //判断文件是否为空 if (this->m_FileIsEmpty) { cout << "文件不存在或记录为空" << endl; } else { for (int i = 0; i < m_EmpNum; i++) { //利用多态调用程序接口 this->m_EmpArray[i]->showInfo(); } } //按任意键清屏 system("pause"); system("cls"); } //删除职工 void WorkerManager::Del_Emp() { if (this->m_FileIsEmpty) { cout << "文件不存在或记录为空" << endl; } else { //按照职工编号删除 cout << "请输入想要删除职工编号:" << endl; int id = 0; cin >> id; int index = this->IsExist(id); if (index != -1) {//说明职工存在,并且要删除掉index位置上的职工 //数据迁移 for (int i = index; i < this->m_EmpNum; i++) { this->m_EmpArray[i] = this->m_EmpArray[i + i]; } this->m_EmpNum--;//更新数组中记录人员个数 //数据同步更新到文件中 this->save(); cout << "删除成功" << endl; } else { cout << "删除失败,未找到该职工" << endl; } } //按任意键 清屏 system("pause"); system("cls"); } //判断职工是否存在 如果存在返回职工所在数组中的位置,不存在返回-1 int WorkerManager::IsExist(int id) { int index = -1; for (int i = 0; i < this->m_EmpNum; i++) { if (this->m_EmpArray[i]->m_Id == id) { //找到职工 index = 1; break; } } return index; } //修改职工 void WorkerManager::Mod_Emp() { if (this->m_FileIsEmpty) { cout << "文件不存在或记录为空" << endl; } else { cout << "请输入修改职工的编号:" << endl; int id; cin >> id; int ret = this->IsExist(id); if (ret != -1) { //查找到编号的职工 delete this->m_EmpArray[ret]; int newId = 0; string newName = ""; int dSelect = 0; cout << "查到:" << id << "号职工,请输入新职工号:" << endl; cin >> newId; cout << "请输入新姓名:" << endl; cin >> newName; cout << "请输入岗位:" << endl; cout << "1、普通职工" << endl; cout << "2、经理" << endl; cout << "3、老板" << endl; cin >> dSelect; Worker* worker = NULL; switch (dSelect) { case 1: worker = new Employee(newId, newName, dSelect); break; case 2: worker = new Manager(newId, newName, dSelect); break; case 3: worker = new Boss(newId, newName, dSelect); break; default: break; } //更新数据 到数组中 this->m_EmpArray[ret] = worker; cout << "修改成功" << endl; //保存到文件中 this->save(); } else { cout << "修改失败,查无此人" << endl; } } system("pause"); system("cls"); } //查找职工 void WorkerManager::Find_Emp() { if (this->m_FileIsEmpty) { cout << "文件不存在或记录为空" << endl; } else { cout << "请输入查找的方式 " << endl; cout << "1、按职工编号查找" << endl; cout << "2、按职工姓名查找" << endl; int select = 0; cin >> select; if (select == 1) { //按照编号查 int id; cout << "请输入查找的职工编号:" << endl; cin >> id; int ret = IsExist(id); if (ret != -1) { //找到职工 cout << "查找成功,该职工信息如下:" << endl; this->m_EmpArray[ret]->showInfo(); } else { cout << "查找失败,查无此人" << endl; } } else if (select == 2) { //按照姓名查 string name; cout << "请输入查找的姓名:" << endl; cin >> name; //加入判断是否查到的标志 bool flag = false;//默认未找到职工 for (int i = 0; i < m_EmpNum; i++) { if (this->m_EmpArray[i]->m_Name == name) { cout << "查找成功,职工编号为:" << this->m_EmpArray[i]->m_Id << "号职工信息如下:" << endl; flag = true; //调用显示信息接口 this->m_EmpArray[i]->showInfo(); } } if (flag == false) { cout << "查找失败,查无此人" << endl; } } else { cout << "输入选项有误" << endl; } } system("pause"); system("cls"); } //按照编号排序 void WorkerManager::Sort_Emp() { if (this->m_FileIsEmpty) { cout << "文件不存在或者记录为空" << endl; system("pause"); system("cls"); } else { cout << "请选择排序方式" << endl; cout << "1、按照职工号进行升序" << endl; cout << "2、按照职工号进行降序" << endl; int select = 0; cin >> select; for (int i = 0; i < m_EmpNum; i++) { int minOrMax = 1;//声明最小值或 最大值下标 for (int j = i + 1; j < this->m_EmpNum; j++) { if (select == 1) {//升序 if (this->m_EmpArray[minOrMax]->m_Id>this->m_EmpArray[j]->m_Id) { minOrMax = j; } } else {//降序 if (this->m_EmpArray[minOrMax]->m_Id
m_EmpArray[j]->m_Id) { minOrMax = j; } } } //判断一开始认定 最小值或最大值 是不是 计算的最小值或最大值,如果不是 交换数据 if (i != minOrMax) { Worker* temp = this->m_EmpArray[i]; this->m_EmpArray[i] = this->m_EmpArray[minOrMax]; this->m_EmpArray[minOrMax] = temp; } } cout << "排序成功,排序后的结果为:" << endl; this->save();//排序后结果保存到文件中 this->Show_Emp();//展示所有职工 } } WorkerManager::~WorkerManager() { if (this->m_EmpArray != NULL) { delete[] this->m_EmpArray; this->m_EmpArray = NULL; } }
14、清空文件
workerManager.h
#pragma once #include
using namespace std; #include "worker.h" #include"employee.h" #include"manager.h" #include"boss.h" #include #define FILENAME "empFile.txt" class WorkerManager { public: //构造函数 WorkerManager(); //展示菜单 void Show_Menu(); //退出功能 void ExitSystem(); //记录职工人数 int m_EmpNum; //职工数组指针 Worker** m_EmpArray; //添加职工 void Add_Emp(); //保存文件 void save(); //判断文件是否为空 标志 bool m_FileIsEmpty; //统计文件中人数 int get_EmpNum(); //初始化员工 void init_Emp(); //显示职工 void Show_Emp(); //删除职工 void Del_Emp(); //判断职工是否存在 如果存在返回职工所在数组中的位置,不存在返回-1 int IsExist(int id); //修改职工 void Mod_Emp(); //查找职工 void Find_Emp(); //按照编号排序 void Sort_Emp(); //清空文件 void Clean_File(); //析构函数 ~WorkerManager(); }; workerManager.cpp
#include "workerManager.h" 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、文件存在 数据为空 char ch; ifs >> ch; if (ifs.eof()) { //文件为空 //cout << "文件为空" << endl; //初始化记录人数 this->m_EmpNum = 0; //初始化数组指针 this->m_EmpArray = NULL; //初始化文件是否为空 this->m_FileIsEmpty = true; ifs.close(); return; } //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; }*/ } //添加职工 void WorkerManager::Add_Emp() { cout << "请输入添加职工数量:" << endl; int addNum = 0;//保护用户的输入数量 cin >> addNum; if (addNum > 0) { //添加 //计算添加新空间大小 int newSize = this->m_EmpNum + addNum;//新空间人数=原来记录人数+新增人数 //开辟新空间 Worker ** newSpace=new Worker* [newSize]; //将原来空间下数据 拷贝到新空间下 if (this->m_EmpArray != NULL) { for (int i = 0; i < this->m_EmpNum; i++) { newSpace[i] = this->m_EmpArray[i]; } } //批量添加新的数据 for (int i = 0; i < addNum; i++) { int id;//职工编号 string name;//职工部门 int dSelect;//部门选择 cout << "请输入第" << i + 1 << "个新职工编号:" << endl; cin >> id; cout << "请输入第" << i + 1 << "个新职工姓名:" << endl; cin >> name; cout << "请选择该职工岗位:" << endl; cout << "1、普通职工" << endl; cout << "2、经理" << endl; cout << "3、老板" << endl; cin >> dSelect; Worker* worker = NULL; switch (dSelect) { case 1: worker = new Employee(id, name, 1); break; case 2: worker = new Manager(id, name, 2); break; case 3: worker = new Boss(id, name, 3); break; default: break; } //将创建的职工指针,保存到数组中 newSpace[this->m_EmpNum + i] = worker; } //释放原有空间 delete[] this->m_EmpArray; //更改新空间的指向 this->m_EmpArray = newSpace; //更新新的职工人数 this->m_EmpNum = newSize; //更新职工不为空标志 this->m_FileIsEmpty = false; //提示添加成功 cout << "添加成功" << addNum << "名新职工" << endl; //保存数据到文件中 this->save(); } else { cout << "输入数据有误" << endl; } //按任意键后 清屏回到上级目录 system("pasue"); system("cls"); } //展示菜单 void WorkerManager::Show_Menu() { cout << "**********************************************" << endl; cout << "***********欢迎使用职工管理系统***************" << endl; cout << "************ 0.退出管理程序 ******************" << endl; cout << "************ 1.增加职工信息 ******************" << endl; cout << "************ 2.显示职工信息 ******************" << endl; cout << "************ 3.删除离职职工 ******************" << endl; cout << "************ 4.修改职工信息 ******************" << endl; cout << "************ 5.查找职工信息 ******************" << endl; cout << "************ 6.按照编号排序 ******************" << endl; cout << "************ 7.清空所有文件 ******************" << endl; cout << endl; } //退出功能 void WorkerManager::ExitSystem() { cout << "欢迎下次使用" << endl; system("pause"); exit(0);//退出程序 } //保存文件 void WorkerManager::save() { ofstream ofs; ofs.open(FILENAME, ios::out);//用输出方式打开文件--写文件 //将每个人数据写入到文件中 for (int i = 0; i < this->m_EmpNum; i++) { ofs << this->m_EmpArray[i]->m_Id << " " << this->m_EmpArray[i]->m_Name << " " << this->m_EmpArray[i]->m_DeptId << endl; } //关闭文件 ofs.close(); } //统计文件中人数 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++; } return num; } //初始化员工 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; 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(); } //显示职工 void WorkerManager::Show_Emp() { //判断文件是否为空 if (this->m_FileIsEmpty) { cout << "文件不存在或记录为空" << endl; } else { for (int i = 0; i < m_EmpNum; i++) { //利用多态调用程序接口 this->m_EmpArray[i]->showInfo(); } } //按任意键清屏 system("pause"); system("cls"); } //删除职工 void WorkerManager::Del_Emp() { if (this->m_FileIsEmpty) { cout << "文件不存在或记录为空" << endl; } else { //按照职工编号删除 cout << "请输入想要删除职工编号:" << endl; int id = 0; cin >> id; int index = this->IsExist(id); if (index != -1) {//说明职工存在,并且要删除掉index位置上的职工 //数据迁移 for (int i = index; i < this->m_EmpNum; i++) { this->m_EmpArray[i] = this->m_EmpArray[i + i]; } this->m_EmpNum--;//更新数组中记录人员个数 //数据同步更新到文件中 this->save(); cout << "删除成功" << endl; } else { cout << "删除失败,未找到该职工" << endl; } } //按任意键 清屏 system("pause"); system("cls"); } //判断职工是否存在 如果存在返回职工所在数组中的位置,不存在返回-1 int WorkerManager::IsExist(int id) { int index = -1; for (int i = 0; i < this->m_EmpNum; i++) { if (this->m_EmpArray[i]->m_Id == id) { //找到职工 index = 1; break; } } return index; } //修改职工 void WorkerManager::Mod_Emp() { if (this->m_FileIsEmpty) { cout << "文件不存在或记录为空" << endl; } else { cout << "请输入修改职工的编号:" << endl; int id; cin >> id; int ret = this->IsExist(id); if (ret != -1) { //查找到编号的职工 delete this->m_EmpArray[ret]; int newId = 0; string newName = ""; int dSelect = 0; cout << "查到:" << id << "号职工,请输入新职工号:" << endl; cin >> newId; cout << "请输入新姓名:" << endl; cin >> newName; cout << "请输入岗位:" << endl; cout << "1、普通职工" << endl; cout << "2、经理" << endl; cout << "3、老板" << endl; cin >> dSelect; Worker* worker = NULL; switch (dSelect) { case 1: worker = new Employee(newId, newName, dSelect); break; case 2: worker = new Manager(newId, newName, dSelect); break; case 3: worker = new Boss(newId, newName, dSelect); break; default: break; } //更新数据 到数组中 this->m_EmpArray[ret] = worker; cout << "修改成功" << endl; //保存到文件中 this->save(); } else { cout << "修改失败,查无此人" << endl; } } system("pause"); system("cls"); } //查找职工 void WorkerManager::Find_Emp() { if (this->m_FileIsEmpty) { cout << "文件不存在或记录为空" << endl; } else { cout << "请输入查找的方式 " << endl; cout << "1、按职工编号查找" << endl; cout << "2、按职工姓名查找" << endl; int select = 0; cin >> select; if (select == 1) { //按照编号查 int id; cout << "请输入查找的职工编号:" << endl; cin >> id; int ret = IsExist(id); if (ret != -1) { //找到职工 cout << "查找成功,该职工信息如下:" << endl; this->m_EmpArray[ret]->showInfo(); } else { cout << "查找失败,查无此人" << endl; } } else if (select == 2) { //按照姓名查 string name; cout << "请输入查找的姓名:" << endl; cin >> name; //加入判断是否查到的标志 bool flag = false;//默认未找到职工 for (int i = 0; i < m_EmpNum; i++) { if (this->m_EmpArray[i]->m_Name == name) { cout << "查找成功,职工编号为:" << this->m_EmpArray[i]->m_Id << "号职工信息如下:" << endl; flag = true; //调用显示信息接口 this->m_EmpArray[i]->showInfo(); } } if (flag == false) { cout << "查找失败,查无此人" << endl; } } else { cout << "输入选项有误" << endl; } } system("pause"); system("cls"); } //按照编号排序 void WorkerManager::Sort_Emp() { if (this->m_FileIsEmpty) { cout << "文件不存在或者记录为空" << endl; system("pause"); system("cls"); } else { cout << "请选择排序方式" << endl; cout << "1、按照职工号进行升序" << endl; cout << "2、按照职工号进行降序" << endl; int select = 0; cin >> select; for (int i = 0; i < m_EmpNum; i++) { int minOrMax = 1;//声明最小值或 最大值下标 for (int j = i + 1; j < this->m_EmpNum; j++) { if (select == 1) {//升序 if (this->m_EmpArray[minOrMax]->m_Id>this->m_EmpArray[j]->m_Id) { minOrMax = j; } } else {//降序 if (this->m_EmpArray[minOrMax]->m_Id
m_EmpArray[j]->m_Id) { minOrMax = j; } } } //判断一开始认定 最小值或最大值 是不是 计算的最小值或最大值,如果不是 交换数据 if (i != minOrMax) { Worker* temp = this->m_EmpArray[i]; this->m_EmpArray[i] = this->m_EmpArray[minOrMax]; this->m_EmpArray[minOrMax] = temp; } } cout << "排序成功,排序后的结果为:" << endl; this->save();//排序后结果保存到文件中 this->Show_Emp();//展示所有职工 } } //清空文件 void WorkerManager::Clean_File() { cout << "确定清空?" << endl; cout << "1、确定" << endl; cout << "2、返回" << endl; int select = 0; cin >> select; if (select == 1) { //清空文件 ofstream ofs(FILENAME, ios::trunc);//删除文件后重新创建 ofs.close(); if (this->m_EmpArray != NULL) { //删除堆区的每个职工对象 for (int i = 0; i < this->m_EmpNum; i++) { delete this->m_EmpArray[i]; this->m_EmpArray[i] = NULL; } //删除堆区的数组指针 delete[] this->m_EmpArray; this->m_EmpArray = NULL; this->m_EmpNum = 0; this->m_FileIsEmpty = true; } cout << "清空成功" << endl; } system("pause"); system("cls"); } WorkerManager::~WorkerManager() { if (this->m_EmpArray != NULL) { for (int i = 0; i < this->m_EmpNum; i++) { if (this->m_EmpArray[i] != NULL) { delete this->m_EmpArray[i]; } } delete[] this->m_EmpArray; this->m_EmpArray = NULL; } }
15、全部代码
boss.h
#pragma once #include
using namespace std; #include "worker.h" //老板类 class Boss :public Worker { public: //构造函数 Boss(int id, string name, int dId); //显示个人信息 virtual void showInfo(); //获取岗位名称 virtual string getDeptName(); }; boss.cpp
#include "boss.h" //构造函数 Boss::Boss(int id, string name, int dId) { this->m_Id = id; this->m_Name = name; this->m_DeptId = dId; } //显示个人信息 void Boss::showInfo() { cout << "职业编号:" << this->m_Id << "\t职业岗位:" << this->m_Name << "\t岗位:" << this->getDeptName() << "\t岗位职责:管理公司所有事务" << endl; } //获取岗位名称 string Boss::getDeptName() { return string("总裁"); }
employee.h
#pragma once //普通员工文件 #include
using namespace std; #include "worker.h" class Employee :public Worker { public: //构造函数 Employee(int id,string name,int dId); //显示个人信息 virtual void showInfo(); //获取岗位名称 virtual string getDeptName(); }; employee.cpp
#include"employee.h" //构造函数 Employee::Employee(int id, string name, int dId) { this->m_Id = id; this->m_Name = name; this->m_DeptId = dId; } //显示个人信息 void Employee::showInfo() { cout << "职业编号:" << this->m_Id << "\t职业岗位:" << this->m_Name << "\t岗位:" << this->getDeptName() << "\t岗位职责: 完成经理交给的任务" << endl; } //获取岗位名称 string Employee::getDeptName() { return string("员工"); }
manager.h
#pragma once #include
using namespace std; #include "worker.h" //经理类 class Manager :public Worker { public: //构造函数 Manager(int id, string name, int dId); //显示个人信息 virtual void showInfo(); //获取岗位名称 virtual string getDeptName(); }; manager.cpp
#include "manager.h" //构造函数 Manager::Manager(int id, string name, int dId) { this->m_Id = id; this->m_Name = name; this->m_DeptId = dId; } //显示个人信息 void Manager::showInfo() { cout << "职业编号:" << this->m_Id << "\t职业岗位:" << this->m_Name << "\t岗位:" << this->getDeptName() << "\t岗位职责: 完成老板交给的任务,并下发任务给员工" << endl; } //获取岗位名称 string Manager::getDeptName() { return string("经理"); }
worker.h
#pragma once #include
using namespace std; #include //职工抽象类 class Worker { public: //显示个人信息 virtual void showInfo() = 0; //获取岗位名称 virtual string getDeptName() = 0; //职工编号 int m_Id; //职工姓名 string m_Name; //部门编号 int m_DeptId; }; workerManager.h
#pragma once #include
using namespace std; #include "worker.h" #include"employee.h" #include"manager.h" #include"boss.h" #include #define FILENAME "empFile.txt" class WorkerManager { public: //构造函数 WorkerManager(); //展示菜单 void Show_Menu(); //退出功能 void ExitSystem(); //记录职工人数 int m_EmpNum; //职工数组指针 Worker** m_EmpArray; //添加职工 void Add_Emp(); //保存文件 void save(); //判断文件是否为空 标志 bool m_FileIsEmpty; //统计文件中人数 int get_EmpNum(); //初始化员工 void init_Emp(); //显示职工 void Show_Emp(); //删除职工 void Del_Emp(); //判断职工是否存在 如果存在返回职工所在数组中的位置,不存在返回-1 int IsExist(int id); //修改职工 void Mod_Emp(); //查找职工 void Find_Emp(); //按照编号排序 void Sort_Emp(); //清空文件 void Clean_File(); //析构函数 ~WorkerManager(); }; workerManager.cpp
#include "workerManager.h" 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、文件存在 数据为空 char ch; ifs >> ch; if (ifs.eof()) { //文件为空 //cout << "文件为空" << endl; //初始化记录人数 this->m_EmpNum = 0; //初始化数组指针 this->m_EmpArray = NULL; //初始化文件是否为空 this->m_FileIsEmpty = true; ifs.close(); return; } //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; }*/ } //添加职工 void WorkerManager::Add_Emp() { cout << "请输入添加职工数量:" << endl; int addNum = 0;//保护用户的输入数量 cin >> addNum; if (addNum > 0) { //添加 //计算添加新空间大小 int newSize = this->m_EmpNum + addNum;//新空间人数=原来记录人数+新增人数 //开辟新空间 Worker ** newSpace=new Worker* [newSize]; //将原来空间下数据 拷贝到新空间下 if (this->m_EmpArray != NULL) { for (int i = 0; i < this->m_EmpNum; i++) { newSpace[i] = this->m_EmpArray[i]; } } //批量添加新的数据 for (int i = 0; i < addNum; i++) { int id;//职工编号 string name;//职工部门 int dSelect;//部门选择 cout << "请输入第" << i + 1 << "个新职工编号:" << endl; cin >> id; cout << "请输入第" << i + 1 << "个新职工姓名:" << endl; cin >> name; cout << "请选择该职工岗位:" << endl; cout << "1、普通职工" << endl; cout << "2、经理" << endl; cout << "3、老板" << endl; cin >> dSelect; Worker* worker = NULL; switch (dSelect) { case 1: worker = new Employee(id, name, 1); break; case 2: worker = new Manager(id, name, 2); break; case 3: worker = new Boss(id, name, 3); break; default: break; } //将创建的职工指针,保存到数组中 newSpace[this->m_EmpNum + i] = worker; } //释放原有空间 delete[] this->m_EmpArray; //更改新空间的指向 this->m_EmpArray = newSpace; //更新新的职工人数 this->m_EmpNum = newSize; //更新职工不为空标志 this->m_FileIsEmpty = false; //提示添加成功 cout << "添加成功" << addNum << "名新职工" << endl; //保存数据到文件中 this->save(); } else { cout << "输入数据有误" << endl; } //按任意键后 清屏回到上级目录 system("pasue"); system("cls"); } //展示菜单 void WorkerManager::Show_Menu() { cout << "**********************************************" << endl; cout << "***********欢迎使用职工管理系统***************" << endl; cout << "************ 0.退出管理程序 ******************" << endl; cout << "************ 1.增加职工信息 ******************" << endl; cout << "************ 2.显示职工信息 ******************" << endl; cout << "************ 3.删除离职职工 ******************" << endl; cout << "************ 4.修改职工信息 ******************" << endl; cout << "************ 5.查找职工信息 ******************" << endl; cout << "************ 6.按照编号排序 ******************" << endl; cout << "************ 7.清空所有文件 ******************" << endl; cout << endl; } //退出功能 void WorkerManager::ExitSystem() { cout << "欢迎下次使用" << endl; system("pause"); exit(0);//退出程序 } //保存文件 void WorkerManager::save() { ofstream ofs; ofs.open(FILENAME, ios::out);//用输出方式打开文件--写文件 //将每个人数据写入到文件中 for (int i = 0; i < this->m_EmpNum; i++) { ofs << this->m_EmpArray[i]->m_Id << " " << this->m_EmpArray[i]->m_Name << " " << this->m_EmpArray[i]->m_DeptId << endl; } //关闭文件 ofs.close(); } //统计文件中人数 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++; } return num; } //初始化员工 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; 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(); } //显示职工 void WorkerManager::Show_Emp() { //判断文件是否为空 if (this->m_FileIsEmpty) { cout << "文件不存在或记录为空" << endl; } else { for (int i = 0; i < m_EmpNum; i++) { //利用多态调用程序接口 this->m_EmpArray[i]->showInfo(); } } //按任意键清屏 system("pause"); system("cls"); } //删除职工 void WorkerManager::Del_Emp() { if (this->m_FileIsEmpty) { cout << "文件不存在或记录为空" << endl; } else { //按照职工编号删除 cout << "请输入想要删除职工编号:" << endl; int id = 0; cin >> id; int index = this->IsExist(id); if (index != -1) {//说明职工存在,并且要删除掉index位置上的职工 //数据迁移 for (int i = index; i < this->m_EmpNum; i++) { this->m_EmpArray[i] = this->m_EmpArray[i + i]; } this->m_EmpNum--;//更新数组中记录人员个数 //数据同步更新到文件中 this->save(); cout << "删除成功" << endl; } else { cout << "删除失败,未找到该职工" << endl; } } //按任意键 清屏 system("pause"); system("cls"); } //判断职工是否存在 如果存在返回职工所在数组中的位置,不存在返回-1 int WorkerManager::IsExist(int id) { int index = -1; for (int i = 0; i < this->m_EmpNum; i++) { if (this->m_EmpArray[i]->m_Id == id) { //找到职工 index = 1; break; } } return index; } //修改职工 void WorkerManager::Mod_Emp() { if (this->m_FileIsEmpty) { cout << "文件不存在或记录为空" << endl; } else { cout << "请输入修改职工的编号:" << endl; int id; cin >> id; int ret = this->IsExist(id); if (ret != -1) { //查找到编号的职工 delete this->m_EmpArray[ret]; int newId = 0; string newName = ""; int dSelect = 0; cout << "查到:" << id << "号职工,请输入新职工号:" << endl; cin >> newId; cout << "请输入新姓名:" << endl; cin >> newName; cout << "请输入岗位:" << endl; cout << "1、普通职工" << endl; cout << "2、经理" << endl; cout << "3、老板" << endl; cin >> dSelect; Worker* worker = NULL; switch (dSelect) { case 1: worker = new Employee(newId, newName, dSelect); break; case 2: worker = new Manager(newId, newName, dSelect); break; case 3: worker = new Boss(newId, newName, dSelect); break; default: break; } //更新数据 到数组中 this->m_EmpArray[ret] = worker; cout << "修改成功" << endl; //保存到文件中 this->save(); } else { cout << "修改失败,查无此人" << endl; } } system("pause"); system("cls"); } //查找职工 void WorkerManager::Find_Emp() { if (this->m_FileIsEmpty) { cout << "文件不存在或记录为空" << endl; } else { cout << "请输入查找的方式 " << endl; cout << "1、按职工编号查找" << endl; cout << "2、按职工姓名查找" << endl; int select = 0; cin >> select; if (select == 1) { //按照编号查 int id; cout << "请输入查找的职工编号:" << endl; cin >> id; int ret = IsExist(id); if (ret != -1) { //找到职工 cout << "查找成功,该职工信息如下:" << endl; this->m_EmpArray[ret]->showInfo(); } else { cout << "查找失败,查无此人" << endl; } } else if (select == 2) { //按照姓名查 string name; cout << "请输入查找的姓名:" << endl; cin >> name; //加入判断是否查到的标志 bool flag = false;//默认未找到职工 for (int i = 0; i < m_EmpNum; i++) { if (this->m_EmpArray[i]->m_Name == name) { cout << "查找成功,职工编号为:" << this->m_EmpArray[i]->m_Id << "号职工信息如下:" << endl; flag = true; //调用显示信息接口 this->m_EmpArray[i]->showInfo(); } } if (flag == false) { cout << "查找失败,查无此人" << endl; } } else { cout << "输入选项有误" << endl; } } system("pause"); system("cls"); } //按照编号排序 void WorkerManager::Sort_Emp() { if (this->m_FileIsEmpty) { cout << "文件不存在或者记录为空" << endl; system("pause"); system("cls"); } else { cout << "请选择排序方式" << endl; cout << "1、按照职工号进行升序" << endl; cout << "2、按照职工号进行降序" << endl; int select = 0; cin >> select; for (int i = 0; i < m_EmpNum; i++) { int minOrMax = 1;//声明最小值或 最大值下标 for (int j = i + 1; j < this->m_EmpNum; j++) { if (select == 1) {//升序 if (this->m_EmpArray[minOrMax]->m_Id>this->m_EmpArray[j]->m_Id) { minOrMax = j; } } else {//降序 if (this->m_EmpArray[minOrMax]->m_Id
m_EmpArray[j]->m_Id) { minOrMax = j; } } } //判断一开始认定 最小值或最大值 是不是 计算的最小值或最大值,如果不是 交换数据 if (i != minOrMax) { Worker* temp = this->m_EmpArray[i]; this->m_EmpArray[i] = this->m_EmpArray[minOrMax]; this->m_EmpArray[minOrMax] = temp; } } cout << "排序成功,排序后的结果为:" << endl; this->save();//排序后结果保存到文件中 this->Show_Emp();//展示所有职工 } } //清空文件 void WorkerManager::Clean_File() { cout << "确定清空?" << endl; cout << "1、确定" << endl; cout << "2、返回" << endl; int select = 0; cin >> select; if (select == 1) { //清空文件 ofstream ofs(FILENAME, ios::trunc);//删除文件后重新创建 ofs.close(); if (this->m_EmpArray != NULL) { //删除堆区的每个职工对象 for (int i = 0; i < this->m_EmpNum; i++) { delete this->m_EmpArray[i]; this->m_EmpArray[i] = NULL; } //删除堆区的数组指针 delete[] this->m_EmpArray; this->m_EmpArray = NULL; this->m_EmpNum = 0; this->m_FileIsEmpty = true; } cout << "清空成功" << endl; } system("pause"); system("cls"); } WorkerManager::~WorkerManager() { if (this->m_EmpArray != NULL) { for (int i = 0; i < this->m_EmpNum; i++) { if (this->m_EmpArray[i] != NULL) { delete this->m_EmpArray[i]; } } delete[] this->m_EmpArray; this->m_EmpArray = NULL; } } 职工管理系统.cpp
#include
using namespace std; #include "workerManager.h" //#include"worker.h" //#include"employee.h" //#include"manager.h" //#include"boss.h" int main() { 测试代码: //Worker* worker = NULL; //worker = new Employee(1,"张三",1); //worker->showInfo(); //delete worker; //worker = new Manager(2, "李四", 2); //worker->showInfo(); //delete worker; //worker = new Boss(3, "王五", 3); //worker->showInfo(); //delete worker; //实例化管理者对象 WorkerManager wm; int choice = 0;//用来存储用户的选项 while (true) { //调用展示菜单成员函数 wm.Show_Menu(); cout << "请输入您的选择:" << endl; cin >> choice;//接受用户的选项 switch (choice) { case 0: //退出系统 wm.ExitSystem(); break; case 1: //增加职工 wm.Add_Emp(); break; case 2: //显示职工 wm.Show_Emp(); break; case 3: //删除职工 wm.Del_Emp(); break; case 4: //修改职工 wm.Mod_Emp(); break; case 5: //查找职工 wm.Find_Emp(); break; case 6: //排序职工 wm.Sort_Emp(); break; case 7: //清空文档 wm.Del_Emp(); break; default: system("cls");//清屏操作 break; } } system("pause"); return 0; }