先看主函数部分,可以看到架构非常简单,因为主要功能的实现都嵌套在 一个系统类中
#include <iostream>
#include "stuf.h"
#include "management.h"
using namespace std;
int main()
{
mangermentsys sys;
while (1)
{
int fucnum;
cout << "1.添加部门" << endl;
cout << "2.添加员工" << endl;
cout << "3.删除部门" << endl;
cout << "4.删除员工" << endl;
cout << "5.更改员工部门" << endl;
cout << "6.查看所有已添加部门名称" << endl;
cout << "7.查看所有员工信息" << endl;
cout << "8.查看某部门详细信息" << endl;
cout << "9.人事经理登陆" << endl;
cout << "请输入功能号选择功能" << endl;
cin >> fucnum;
if (sys.curlevel == stuf && fucnum < 6)
{
cout << "权限不允许,请先登录" << endl;
system("pause");
system("cls");
continue;
}
switch (fucnum)
{
case 1:
sys.Addsec();
break;
case 2:
sys.Addstuf();
break;
case 3:
sys.Delesec();
break;
case 4:
sys.Delestuf();
break;
case 5:
sys.Changestufsec();
break;
case 6:
sys.GetAllsec();
break;
case 7:
sys.GetAllstuf();
break;
case 8:
sys.Getsecinfo();
break;
case 9:
sys.MangeReg();
break;
default:
break;
}
system("pause");
system("cls");
}
system("pause");
return 0;
}
这是系统类,主要实现所有的功能
#ifndef MANGE_H
#define MANGE_H
#define _CRT_SECURE_NO_WARNINGS
#include <vector>
#include "section.h"
#include "stuf.h"
enum limt //权限
{
manger,stuf
};
class mangermentsys
{
public:
vector<stuff> vecStuf;
vector <section> vecSec;
string permison = "123456";
limt curlevel = stuf;
public:
void Addstuf(); //添加员工
void Delestuf(); //删除员工
void Addsec(); //添加部门
void Delesec(); //删除部门
void Changestufsec(); //更改员工de部门
void GetAllsec(); //查看所有已添加部门名称
void GetAllstuf(); //查看所有员工信息
void Getsecinfo(); //查看某个部门详细信息
void MangeReg(); //人事经理登陆
private:
bool Isection(sec _sec); //当前部门是否被添加
bool Istuf(int num); //当前员工编号是否被添加
sec GetSect(string _sect);//将部门名称转换为枚举变量
bool Addstuforsec(stuff _s); //给已存在的部门添加员工
bool Delestuforsec(stuff _s); //给已存在的部门删除员工
int Getstufindex(int num); //获取该编号员工在集合中的位置
int Getsecindex(sec _sec);//获取该部门在集合中的位置
};
void mangermentsys::Addstuf()
{
int num;
string name;
string gender;
string sect;
cout << "请输入员工编号" << endl;
cin >> num;
cout << "请输入员工姓名" << endl;
cin >> name;
cout << "请输入员工性别" << endl;
cin >> gender;
cout << "请输入员工所属部门" << endl;
cin >> sect;
if (Isection(GetSect(sect))&&!Istuf(num))// 部门存在 且 员工未被添加
{
stuff s(num, name, gender, GetSect(sect));
vecStuf.push_back(s);
if (!Addstuforsec(s))cout << "该员工编号在该部门已存在" << endl;
return;
}
cout << "输入部门不存在 或 员工编号已存在" << endl;
}
void mangermentsys::Delestuf()
{
int num=0;
cout << "请输入要删除员工的编号" << endl;
cin >> num;
if (!Istuf(num))
{
cout << "此员工编号不存在" << endl;
return;
}
int i = 0;
for (i = 0; i < (int)vecStuf.size(); i++)
{
if (vecStuf[i].num == num)
{
Delestuforsec(vecStuf[i]);
vecStuf.erase(vecStuf.begin() + i);
break;
}
}
}
void mangermentsys::Addsec()
{
cout << "请输入添加的部门名称";
printf("可添加的部门有%s,%s,%s\n", Getname(sec1),Getname(sec2),Getname(sec3));
string name;
cin >> name;
if (GetSect(name) == -1)
{
cout << "输入部门不存在" << endl;
return;
}
if (!Isection(GetSect(name)))
{
section s(GetSect(name));
vecSec.push_back(s);
return;
}
cout << "当前部门已被添加,请勿重新添加" << endl;
}
void mangermentsys::Delesec()
{
string name;
cout << "请输入要删除的部门名称" << endl;
cin >> name;
if (!Isection(GetSect(name)))
{
cout<<"当前部门还未被公司添加"<<endl;
return;
}
int i = 0;
for (i = 0; i < (int)vecSec.size(); i++)
{
if (vecSec[i].secname == GetSect(name))
{
if (vecSec[i].stufcnt != 0)
{
printf("该部门还有%d人存在,无法删除,请开除当前部门员工\n",vecSec[i].stufcnt);
return;
}
vecSec.erase(vecSec.begin() + i);
break;
}
}
}
void mangermentsys::Changestufsec()
{
int num;
string name;
cout << "请输入员工编号" << endl;
cin >> num;
if (!Istuf(num))
{
cout << "员工编号不存在" << endl;
return;
}
cout << "请输入该员工要调去的部门名称" << endl;
cin >> name;
if (!Isection(GetSect(name)))
{
cout << "当前部门不存在" << endl;
return;
}
Delestuforsec(vecStuf[Getstufindex(num)]);
vecStuf[Getstufindex(num)].sect= GetSect(name);
Addstuforsec(vecStuf[Getstufindex(num)]);
}
void mangermentsys::GetAllsec()
{
cout << "所有已添加的部门如下:" << endl;
for (int i = 0; i < (int)vecSec.size(); i++)
{
cout << Getname(vecSec[i].secname);
cout << " ";
}
cout << endl;
}
void mangermentsys::GetAllstuf()
{
for (int i = 0; i < (int)vecStuf.size(); i++)
{
vecStuf[i].prin();
}
}
void mangermentsys::Getsecinfo()
{
string name;
cout << "请输入要查看的部门名称" << endl;
cin >> name;
if (!Isection(GetSect(name)))
{
cout << "该部门不存在" << endl;
return;
}
int index = Getsecindex(GetSect(name));
printf("部门名称:%s,部门员工数量:%d ", name.c_str(), vecSec[index].stufcnt);
cout << "该部门内的员工有" << endl;
for (int i = 0; i < vecSec[index].stufcnt; i++)
{
int stuindex = Getstufindex(vecSec[index].vecStuf[i]);
printf("%s(%d) ", vecStuf[stuindex].name.c_str(), vecStuf[stuindex].num);
}
cout << endl;
}
void mangermentsys::MangeReg()
{
string per;
cout << "请输入人事经理登陆密码" << endl;
cin >> per;
if (per == permison)
{
curlevel = manger; //当前权限为经理
cout << "登陆成功 "<< endl;
}
else cout << "输入密码错误";
}
bool mangermentsys::Isection(sec _sec)
{
for (int i = 0; i < (int)vecSec.size(); i++)
{
if (_sec == vecSec[i].secname)return true;
}
return false;
}
bool mangermentsys::Istuf(int num)
{
for (int i = 0; i < (int)vecStuf.size(); i++)
{
if (num == vecStuf[i].num)return true;
}
return false;
}
sec mangermentsys::GetSect(string _sect)
{
string secbuf[] = { "sec1","sec2","sec3","none" };
int i = 0;
for ( i = 0; i < 4; i++)
{
if (_sect == secbuf[i])break;
}
switch (i)
{
case 0:
return sec1;
break;
case 1:
return sec2;
break;
case 2:
return sec3;
break;
case 3:
return none;
break;
default:
return (sec)-1;
break;
}
}
bool mangermentsys::Addstuforsec(stuff _s)
{
int secindex = Getsecindex(_s.sect);
if (!vecSec[secindex].Addstuf(_s.num))return false;
return true;
}
bool mangermentsys::Delestuforsec(stuff _s)
{
int secindex = Getsecindex(_s.sect);
if (!vecSec[secindex].Delestuf(_s.num))return false;
return true;
}
int mangermentsys::Getstufindex(int num)
{
for (int i = 0; i < (int)vecStuf.size(); i++)
{
if (num == vecStuf[i].num)return i;
}
return -1;
}
int mangermentsys::Getsecindex(sec _sec)
{
for (int i = 0; i < (int)vecSec.size(); i++)
{
if (_sec == vecSec[i].secname)return i;
}
return -1;
}
#endif // ! MANGE_H
接下来是部门类
#ifndef SECTION_H
#define SECTION_H
#include "stuf.h"
#include <vector>
class section
{
public:
sec secname;
int stufcnt;
vector<int> vecStuf; //存储员工的编号
public:
section(sec _name)
{
secname = _name;
stufcnt = 0;
}
bool Addstuf(int stufnum); //添加员工编号
bool Delestuf(int stufnum); //删除员工编号
};
bool section::Addstuf(int stufnum)
{
for (int i = 0; i <(int)vecStuf.size(); i++) //员工编号已存在 添加失败
{
if (vecStuf[i] == stufnum)return false;
}
vecStuf.push_back(stufnum);
stufcnt++;
return true;
}
bool section::Delestuf(int stufnum)
{
int i = 0;
for (int i = 0; i < (int)vecStuf.size(); i++)
{
if (vecStuf[i] == stufnum)break;
}
if (i == vecStuf.size())return false;//员工不存在无法删除
stufcnt--;
vecStuf.erase(vecStuf.begin() + i);
return true;
}
#endif // !SECTION_H
然后是员工类
#ifndef STUF_H
#define STUF_H
#include <string>
#include <iostream>
using namespace std;
enum sec //公司部门分类
{
sec1, sec2, sec3,none
};
char const * Getname(sec _sect); //获取枚举量所对应的名称
class stuff
{
public:
int num;
string name;
string gender;
sec sect;
public:
stuff()
{
num = 0;
name = " ";
gender = "man";
sect = none;
}
stuff(int _num, string _name, string _gender, sec _sect)
{
num = _num;
name = _name;
gender = _gender;
sect = _sect;
}
void prin();//打印员工信息
};
void stuff::prin()
{
printf("编号:%d 名字:%s 性别:%s 所属部门:%s\n", num, name.c_str(), gender.c_str(), Getname(sect));
}
char const * Getname(sec _sect)
{
switch (_sect)
{
case sec1:
return "sec1";
break;
case sec2:
return "sec2";
break;
case sec3:
return "sec3";
break;
case none:
return "none";
break;
default:
return NULL;
break;
}
}
#endif // !STUF_H
如果有哪些问题 可以加我qq 1023499413