一、基于work.h 为基类的员工类设计
1、work.h
#pragma once
#include<iostream>
#include<string>
using namespace std;
class Worker{
public:
virtual void showInfo()=0;
virtual string getDeptName() = 0;
int m_Id;
string m_Name;
int m_Deptid;
};
2、boss.h
#include"worker.h"
class Boss :public Worker{
public:
Boss(int id, string name, int dId);
void showInfo();
string getDeptName();
};
3、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("老板");
}
4、employee.h
#pragma
#include"worker.h"
class Employee:public Worker {
public:
Employee(int id,string name,int dId);
void showInfo() ;
string getDeptName() ;
};
5、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("员工");
}
6、manager.h
#include"worker.h"
class Manager :public Worker{
public:
Manager(int id, string name, int dId);
void showInfo();
string getDeptName();
};
7、manager.cpp
#include"worker.h"
class Manager :public Worker{
public:
Manager(int id, string name, int dId);
void showInfo();
string getDeptName();
};
二、员工控制类的设计与实现
1.workerManager.h
#pragma once
#include<iostream>
#include<string>
using namespace std;
#include"employee.h"
#include"manager.h"
#include"boss.h"
#include<fstream>
#define FILENAME "empFile.txt"
class WorkerManager{
public:
WorkerManager();
void Show_Menu();
void existSystem();
int m_EmpNum;
Worker** m_EmpArray;
void Add_Emp();
void save();
bool m_FileIsEmpty;
int get_EmpNum();
void init_Emp();
void Show_Emp();
int IsExist(int id);
void Del_Emp();
void Mod_Emp();
void Find_Emp();
void Sort_Emp();
void Clean_File();
~WorkerManager();
};
2.workerManager.cpp
#include "workerManager.h"
WorkerManager::WorkerManager()
{
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;
}
char ch;
ifs >> ch;
if (ifs.eof())
{
cout <<"文件为空!" << endl;
this->m_EmpNum = 0;
this->m_EmpArray = NULL;
this->m_FileIsEmpty = true;
ifs.close();
return;
}
int num = this->get_EmpNum();
this->m_EmpNum = num;
this->m_EmpArray = new Worker*[this->m_EmpNum];
init_Emp();
}
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;
cout << endl;
}
void WorkerManager::existSystem(){
cout <<"欢迎下次使用" <<endl ;
system("pause");
exit(0);
}
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;
while (true)
{
bool flag=false;
cout <<"请输入第" <<i+1<<"个新职工编号"<< endl;
cin >> id;
int ret = IsExist(id);
if (ret==-1)
{
break;
}
else
{
cout <<"输入编号重复请重新输入" << endl;
}
}
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,dSelect);
break;
case 2:
worker = new Manager(id, name, dSelect);
break;
case 3:
worker = new Boss(id, name, dSelect);
break;
}
newSpace[this->m_EmpNum + i] = worker;
}
delete[] this->m_EmpArray;
this->m_EmpArray = newSpace;
this->m_EmpNum = newSize;
cout <<"添加完毕" <<addNum<<"名员工"<< endl;
this->save();
this->m_FileIsEmpty = false;
}
else
{
cout <<"输入有误" << endl;
}
system("pause");
system("cls");
}
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++;
}
ifs.close();
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++;
}
}
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");
}
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 = i;
break;
}
}
return index;
}
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)
{
for (int i = index;i<this->m_EmpNum;i++)
{
this->m_EmpArray[i] = this->m_EmpArray[i + 1];
}
this->m_EmpNum--;
this->save();
cout << "删除成功!"<< endl;
}
else
{
cout <<"删除失败,未找到该员工" << endl;
}
}
system("pause");
system("cls");
}
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];
string newname;
int selectId;
cout << "请修改职工的名字" << endl;
cin >> newname;
cout << "请修改职工的部门编号"<< endl;
cin >> selectId;
Worker *worker = NULL;
switch (selectId)
{
case 1:
worker = new Employee(id,newname,selectId);
break;
case 2:
worker = new Manager(id, newname, selectId);
break;
case 3:
worker = new Boss(id, newname, selectId);
break;
}
this->m_EmpArray[ret] = worker;
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<this->m_EmpNum;i++)
{
if (m_EmpArray[i]->m_Name==name)
{
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<this->m_EmpNum;i++)
{
int minormax = i;
for (int j = i + 1; j<m_EmpNum; j++)
{
if (select == 1)
{
if (m_EmpArray[minormax]->m_Id > m_EmpArray[j]->m_Id)
{
minormax = j;
}
}
else
{
if (m_EmpArray[minormax]->m_Id < m_EmpArray[j]->m_Id)
{
minormax = j;
}
}
}
if (i != minormax)
{
Worker *temp = m_EmpArray[i];
m_EmpArray[i] = m_EmpArray[minormax];
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++)
{
if (this->m_EmpArray[i] != NULL)
{
delete m_EmpArray[i];
}
this->m_EmpNum = 0;
delete[] m_EmpArray;
this->m_EmpArray = NULL;
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++)
{
delete m_EmpArray[i];
m_EmpArray[i] = NULL;
}
}
}
三、职工管理类的设计与实现
1、职工管理系统.cpp
#include"workerManager.h"
int main()
{
WorkerManager wm;
int choice = 0;
while (true)
{
wm.Show_Menu();
cout << "请输入您的选择" << endl;
cin >> choice;
switch (choice)
{
case 0://退出系统
wm.existSystem();
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.Clean_File();
break;
default:
system("cls");
break;
}
}
system("pause");
return 0;
}