职工管理系统

抽象类:
头文件tou.h

#pragma once
#include
#include"chouxiang.h"
using namespace std;
#includeclass workmanager//创建管理类
{
public:workmanager(){empnum = 0;emarray = NULL;//初始化人数和数组指针}~workmanager(){cout << "destruct "<< endl;}void show_menu();//展示菜单void addemp();int empnum;worker** emarray;//如果想将不同种类的员工放到同一个数组中//可以将所有员工的指针维护到一个数组里 //如果想在程序中维护这个不定长度的数组可以将数组放在堆区,并用worker**的指针维护void save();//用来保存文件int getnum();//统计人数void chushihua();//初始化员工void showfunction();//显示员工功能int isexist(int id);//按照职工编号判断员工是否存在如果存在则返回员工在数组中的位置//不存在返回-1void del();//删除功能
};
//三种职工抽象到一个类中利用多态管理不同职工类

管理类头文件chouxiang.h

#pragma once
#include
using namespace std;
#include"chouxiang.h"
class manager :public worker
{
public:void showin();manager(string na, int iid, int nn);string getdepname();
};

员工类,经理类,老板类头文件 采用继承方式(全是一样的,改名字即可)
employee.h

#pragma once
#include
using namespace std;
#include"chouxiang.h"
class employee :public worker
{
public:void showin() ;employee(string na,int iid,int nn );string getdepname();
};

tou.h中的功能实现:包括增删员工,保存到文件中(代码最多)。

#include"tou.h"
#include"chouxiang.h"
#include"employee.h"
#include"boss.h"
#include"manager.h"
workmanager::workmanager()
{//文件一共三种情况//文件不存在的情况下的初始化ifstream ifs;ifs.open("eme.txt", ios::in);//读文件if (!ifs.is_open()){cout << "文件不存在!" << endl;empnum = 0;emarray = NULL;//初始化人数和数组指针isempty = true;//初始化文件为空标志ifs.close();return;}//文件存在且数据为空 判断一个文件存在且没有内容char ch;//文件为空时相当于这个文件只有一个文件尾标志ifs >> ch;//相当于用ch读走文件结尾标if (ifs.eof())//当文件为空eof()函数返回为真{cout << "文件为空!\n";empnum = 0;emarray = NULL;//初始化人数和数组指针isempty = true;//初始化文件为空标志 当文件为空则trueifs.close();return;}//当文件存在且已经有数据int num = getnum();cout << "人数为:" << num << endl;empnum = num;//更改职工人数emarray = new worker*[num];//开辟空间chushihua();//将文件中的数据存到数组中for (int i = 0; i < num; i++){cout << "员工编号" << emarray[i]->id << endl;cout << "name" << emarray[i]->nname << endl;}
}
void workmanager::show_menu()
{cout << "退出" << endl;cout << "显示" << endl;cout << "删除" << endl;cout << "修改" << endl;cout << "查找" << endl;}
void workmanager::choice(int n)
{switch (n){case 1:break;case 2:addemp(); break;case 3:{del();break;}default:break;}
}
void workmanager::addemp()
{cout << "input 新增职工数量" << endl;int addm;cin >> addm;if (addm > 0){int newsize = empnum + addm;//计算新空间大小worker** newspace = new worker * [newsize];//开辟新空间if(emarray != NULL)//如果原来数据不为空for (int i = 0; i < empnum; i++){newspace[i] = emarray[i];}//将原空间下内容存放到新空间下//输入新数据for (int i = 0; i < addm; i++){int id1;string name1;int bumen;cout << "1普通职工\n2经理\n3老板\n";cout << "请输入第"<<i+1<<"个员工编号:" << endl;cin >> id1;cout << "请输入第"<<i+1<<"个姓名:" << endl;cin >> name1;cout << "部门:" << endl;cin >> bumen;worker* wworker = NULL;switch (bumen){case 1:wworker = new employee(name1, id1, 1); break;case 2:wworker = new manager(name1, id1, 2); break;case 3:wworker = new boss(name1, id1, 1); break;default:cout << "无效!\n";break;}newspace[empnum + i] = wworker;}delete[]emarray;//释放原有空间emarray = newspace;//更改新空间的指向empnum = newsize;//更新新的员工个数isempty = false;//更新职工情况为不为空cout << "成功添加!" << endl;}elsecout << "输入错误!\n";system("pause");system("cls");
}
void workmanager::save()
{ofstream ofs;ofs.open("eme.txt", ios::out);for (int i = 0; i < empnum; i++){ofs << emarray[i]->id<<" ";ofs << emarray[i]->nname<<" ";ofs << emarray[i]->bumenbianhao<<" "<<endl;}ofs.close();
}
int workmanager::getnum()
{ifstream ifs;ifs.open("eme.txt", ios::in);//以读的方式打开文件int id;string name;int did;//部门编号int number = 0;while (ifs >> id && ifs >>name && ifs >> did)//将一行的数据全都读,读完一行数量加一number++;return number;}
void workmanager::chushihua()
{ifstream ifs;ifs.open("eme.txt", ios::in);int index = 0;int id;string name;int did;worker* wworker = NULL;while (ifs >> id && ifs >> name && ifs >> did){if (did == 1)//普通员工wworker = new employee(name, id, did);if (did == 2)wworker = new manager(name, id, did);if(did == 3)//did为3时说明是老板类wworker = new boss(name, id, did);emarray[index] = wworker;index++;}ifs.close();
}
void workmanager::showfunction()//利用多态调用程序接口 显示职工功能
{ifstream ifs;if (isempty)cout << "文件不存在或记录为空" << endl;else{for (int i = 0; i < empnum; i++)emarray[i]->showin();}
}
int workmanager::isexist(int id)
{int index = -1;for (int i = 0; i < empnum; i++){if (emarray[i]->id == id){index = i;break;}}return index;
}
void workmanager::del()//删除功能的实现
{if (isempty)cout << "无数据或无文件!\n";else {cout << "你要删除的职工编号:\n";int nn;cin >> nn;int ret = isexist(nn);if (ret == -1)cout << "no exist\n";else{cout << "the number:" << ret << endl;for (int i = ret; i < empnum - 1; i++)//说明ret位置上的元素需要删除,元素依次移动{emarray[i] = emarray[i + 1];}empnum--;save();//删除后数据同步到文件中cout << "删除成功!\n";}}
}

employee.cpp 功能实现函数

#include"employee.h"
employee::employee(string nn1,int iid, int nn)
{nname = nn1;id = iid;bumenbianhao = nn;
}
void employee::showin()
{getdepname();cout <<"id number:"<< id <<"姓名:"<<nname<< "部门:" << bumenbianhao<<" " <<endl;
}string employee::getdepname()
{return "员工";
}


本文来自互联网用户投稿,文章观点仅代表作者本人,不代表本站立场,不承担相关法律责任。如若转载,请注明出处。 如若内容造成侵权/违法违规/事实不符,请点击【内容举报】进行投诉反馈!

相关文章

立即
投稿

微信公众账号

微信扫一扫加关注

返回
顶部