课程设计——部门管理系统C++

先看主函数部分,可以看到架构非常简单,因为主要功能的实现都嵌套在 一个系统类中 

#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

 

  • 0
    点赞
  • 13
    收藏
    觉得还不错? 一键收藏
  • 2
    评论
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值