黑马职工管理系统(DEV C++创建项目)

目录

系统需求

DEV C++创建项目

(一)创建需要的文件夹

1.创建包含整个项目的文件夹

 2.创建四个子文件夹

(二)创建项目

1.依次单击“文件”——“新建”——“项目”

 2.依次单击“Basic”——“Console Application”——“C++项目”,修改项目名称,单击确定

 3.保存到刚刚新建的“C++职工管理系统”文件夹下

 4.创建成功

(三)设置项目属性

 1.鼠标右键单击项目名称,选择“项目属性”

 2.依次单击“文件/目录”——“包含文件目录”,点击右下角的黄色图标

 3.包含之前创建的头文件

 4.选择生成选项

(四)添加源文件和头文件

代码实现

test.h

workermanager.h

workermanager.cpp

worker.h

employee.h

employee.cpp

manager.h

manager.cpp

boss.h

boss.cpp

操作中的小bug 


系统需求

职工管理系统可以用来管理公司内所有员工的信息

公司中职工分为三类:普通员工、经理、老板,显示信息时,需要显示职工编号、职工姓名、职工岗位、以及职责

  • 普通员工职责:完成经理交给的任务
  • 经理职责:完成老板交给的任务,并下发任务给员工
  • 老板职责:管理公司所有事务

管理系统中需要实现的功能如下:

  • 退出管理程序:退出当前管理系统
  • 增加职工信息:实现批量添加职工功能,将信息录入到文件中,职工信息为:职工编号、姓名、部门编号
  • 显示职工信息:显示公司内部所有职工的信息
  • 删除离职职工:按照编号删除指定的职工
  • 修改职工信息:按照编号修改职工个人信息
  • 查找职工信息:按照职工的编号或者职工的姓名进行查找相关的人员信息
  • 按照编号排序:按照职工编号,进行排序,排序规则由用户指定
  • 清空所有文档:清空文件中记录的所有职工信息 (清空前需要再次确认,防止误删)


DEV C++创建项目

(一)创建需要的文件夹

DEV C++中创建项目需要事先创建多个文件夹

1.创建包含整个项目的文件夹

4378eb12af60404581ba8d55b03fadfe.png

 2.创建四个子文件夹

e6c5f917a845409f9551ec1107066b18.png

(二)创建项目

1.创建新项目

依次单击“文件”——“新建”——“项目”

7f00f934aa7846ddbb4438133536e6d8.png

2.初始化项目

依次单击“Basic”——“Console Application”——“C++项目”,修改项目名称,单击确定

09052318d8004d308d320b8603cf58f5.png

 3.保存项目

保存到刚刚新建的“C++职工管理系统”文件夹下

0d2b703380cf434b8af4a448b29c7277.png

 4.创建成功

f91af717b4c445db9a4e1fd244e9e7c8.png

(三)设置项目属性

1.打开项目属性

鼠标右键单击项目名称,选择“项目属性”

8301fc0ef9c34a85931d852ee2271c41.png

 2.选择包含文件目录

依次单击“文件/目录”——“包含文件目录”,点击右下角的黄色图标

03c27ca04b4b4419bc810465679257e4.png

 3.包含之前创建的头文件

c7785141ac7f4f46a3d490069d6c8ec8.png

 点击添加4db3c297c04e4ed0bfee8a909bcac80a.png

 这样即添加成功93719baa83f24e3cbeaaadabc42c83c0.png

如果此步骤错误或者遗漏,即未包含头文件,则会报“No such file or directory”——没有这样的文件或目录

4.选择生成选项

6fd1c2930c6a494f9679a192dfb9749d.png

 分别选择之前创建的可执行文件个目标文件b9b4b18e3ee249caa8e552aca85883f7.png

(四)添加源文件和头文件

f4b4a1d1c01944bd93a3d6f914903ee4.png

注:

将所有的.h文件保存到头文件中

将除了包含主函数的.cpp文件(本例中叫test.cpp文件)保存到源文件中

目标文件中存放.o文件

可执行文件中包含.exe和.txt文件

cb2a2d39cd914c39a0c235147d83986f.png

b6e3fd605e40429fad3d6e18146d2c8d.png

7acf16a7808a44bea21972e2ea274ba9.png 5e39ba458dc84d58804d5ea16744ba78.png

 至此一个C++项目就创建好了。


代码实现

test.h

注意测试代码中的注释:switch中的变量不能跨越case使用,所以每一个新定义的变量都要用{}确定具体且唯一的case范围 ,如果case中定义了的新变量,需要用{}括出代码块 

//#include <>一般用于包含系统头文件
//编译器直接从系统类库目录中查找头文件 
#include <bits/stdc++.h> //c++万能头文件
//#include ""一般用于包含自定义头文件
//编译器默认从项目当前目录查找头文件
//因此自己写的头文件才要在项目属性中包含头文件目录 
#include "workermanager.h"
#include "worker.h" 
#include "employee.h"
#include "manager.h"
#include "boss.h"
using namespace std;
int main(int argc, char** argv) 
{
	//测试代码:测试worker基类的多态实现 
//	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.ShowMenu();
		cout << "请输入您的选择:" << endl;
		cin >> choice; //接受用户的选项  
		switch(choice)
		{
			case 0:  //退出系统 
				wm.ExitSystem();
				break;	
			case 1:  //增加职工
				wm.AddEmp();
				break;
			case 2:  //显示职工 
				wm.ShowEmp();
				break;
			case 3:  //删除职工 
				wm.DelEmp();
				break; 
//			//测试代码 
//			{
//				//switch中的变量不能跨越case使用,所以每一个新定义的变量都要用{}确定具体且唯一的case范围 
//				//如果case中定义了的新变量,需要用{}括出代码块 
//				int ret = wm.IsExist(5);
//				if(ret != -1)
//				{
//					cout << "职工存在" << endl;
//				}
//				else
//				{
//					cout << "职工不存在" << endl;
//				}
//				break;
//			}
			case 4:  //修改职工 
				wm.ModEmp();
				break;
			case 5:  //查找职工 
				wm.FindEmp();
				break;
			case 6:  //排序职工 
				wm.SortEmp();
				break;
			case 7:  //清空文档 
				wm.CleanFile();
				break;
			default:
				system("cls"); //清屏
				break; 
		} 
	}
	system("pause");
	return 0;
}

workermanager.h

该文件中宏定义的文件,默认情况下会保存到可执行文件文件夹中。

#pragma once //防止头文件重复包含 
#include <iostream>
#include <fstream> 
#define FILENAME "emp.txt" //宏定义文件名 
#include "worker.h"
#include "employee.h"
#include "manager.h"
#include "boss.h"
using namespace std; //使用标准命名空间 
class WorkerManager
{
public:
	//成员函数 
	
    //构造函数
    WorkerManager();
    
    //展示菜单
	void ShowMenu();
	
	//退出系统
	void ExitSystem();
	
	//添加职工
	void AddEmp(); 
	
	//保存文件
	void save();
	
	//统计文件中人数个数 
	int GetEmpNum();
	
	//初始化员工
	void InitEmp(); 
	
	//显示员工
	void  ShowEmp();
	
	//删除员工
	void DelEmp();
	
	//判断员工是否存在,存在返回员工在数组中的位置;不存在返回-1
	int IsExist(int id);
	
	//修改员工信息
	void ModEmp();
	
	//查找职工
	void FindEmp(); 
	
	//按编号排序
	void SortEmp(); 
	
	//清空文件
	void CleanFile();
	 
    //析构函数
    ~WorkerManager();
    
public:
	//成员属性
	
	//指向(存放职工信息的指针数组)的指针 
	Worker **m_EmpArray; 
	
	//记录职工人数
	int m_EmpNum;
	
	//判断文件是否为空
	bool m_FileIsEmpty; 
};

workermanager.cpp

#include "workerManager.h"

//构造函数 
WorkerManager::WorkerManager() 
{
	ifstream ifs;
	ifs.open(FILENAME, ios::in); //读文件
	
	//1.文件不存在
	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->GetEmpNum();
	//cout << "职工人数为:" << num << endl;
	this->m_EmpNum = num;
	
	//开辟空间 
	this->m_EmpArray = new Worker*[this->m_EmpNum];
	//将文件中的数据,存到数组中 
	this->InitEmp();
	
//	//测试代码 
//	for(int i=0;i < this->m_EmpNum;i++)
//	{
//		cout << "职工编号:" << this->m_EmpArray[i]->m_Id 
//			 << "\t姓名:" << this->m_EmpArray[i]->m_Name
//			 << "\t部门编号:" << this->m_EmpArray[i]->m_DeptId 
//			 << endl;
//	}
}

//实现展示函数 
void WorkerManager::ShowMenu()
{
	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::ExitSystem()
{
	cout << "欢迎下次使用" << endl;
	system("pause");
	exit(0); //退出程序 
}

//添加职工 
void WorkerManager::AddEmp()
{
	cout << "请输入添加职工的数量:" << endl;
	int add_num = 0; //保存用户输入的数量
	cin >> add_num;
	if(add_num>0)
	{
		//计算添加的新空间的大小
		//新空间的人数 = 原来记录的人数 + 新增加的人数 
		int new_size = this->m_EmpNum + add_num;
		
		//开辟新空间
		Worker **new_space = new Worker*[new_size];
		
		//将原来空间下的数据,拷贝到新空间
		if(this->m_EmpArray != NULL)
		{
			for(int i=0;i<this->m_EmpNum;i++)
			{
				new_space[i] = this->m_EmpArray[i]; //此处是一级指针的赋值 
			}
		} 
		
		//批量添加新数据
		for(int i=0;i<add_num;i++)
		{
			int id; //职工编号
			string name; //职工姓名
			int id_select; //部门选择 
			
			cout << "请输入第 " << i+1 << " 个新职工的编号:" << endl;
			cin >> id;
			
			cout << "请输入第 " << i+1 << " 个新职工的姓名:" << endl;
			cin >> name;
			
			cout << "请输入该职工的岗位 " << endl;
			cout << "1.普通员工" << endl;
			cout << "2.经理" << endl;
			cout << "3.老板" << endl;
			cin >> id_select;
			
			Worker *worker = NULL;
			switch(id_select)
			{
				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;	
			} 
			//将创建职工保存到数组中
			new_space[this->m_EmpNum+i] = worker; 
		} 
		//释放原有的数组空间
		delete [] this->m_EmpArray;
		
		//更改新空间的指向
		this->m_EmpArray = new_space;
		
		//更新职工人数
		this->m_EmpNum = new_size;
		
		//更新职工不为空的标志
		this->m_FileIsEmpty = false; 
		
		//保存数据到文件中 
		this->save();
		
		cout << "成功添加" << add_num << "名新职工!" << endl; 
	} 
	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::GetEmpNum()
{
	ifstream ifs;
	ifs.open(FILENAME, ios::in); //打开并读取文件
	int id; string name; int dId;
	int num = 0;
	//ifs流读到空格时为0 
	while(ifs >> id && ifs >> name && ifs >> dId)
	{
		num++;	
	} 
	ifs.close();
	return num;
}

//初始化员工
void WorkerManager::InitEmp()
{
	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::ShowEmp()
{
	//判断文件是否为空
	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::DelEmp()
{
	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-1;i++)
			{
				//数据前移 
				this->m_EmpArray[i] = this->m_EmpArray[i+1];
			}
			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 = i;
			break;
		}
	}
	return index; 
}
	
//修改员工信息
void WorkerManager::ModEmp()
{
	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 new_id = 0;
			string new_name = " ";
			int new_idselect = 0;
			
			cout << "查找到" << id << "号员工!" << endl; 
			cout << "请输入新的职工号:" << endl;
			cin >> new_id;
			
			cout << "请输入新的姓名:" << endl;
			cin >> new_name;
			
			cout << "请输入新的岗位:" << endl;
			cout << "1.普通员工" << endl;
			cout << "2.经理" << endl;
			cout << "3.老板" << endl;
			cin >> new_idselect;
			
			Worker *worker = NULL;
			switch(new_idselect)
			{
				case 1:
					worker = new Employee(new_id,new_name,new_idselect);
					break;
				case 2:
					worker = new Manager(new_id,new_name,new_idselect);
					break;
				case 3:
					worker = new Boss(new_id,new_name,new_idselect);
					break;
				default:
					break;
			}
			
			//更新数据到数组中
			this->m_EmpArray[ret] = worker;
			cout << "修改成功!" << endl;
			
			//数据更新到文件中
			this->save(); 
		}
		else //未查找到该员工 
		{
			cout << "修改失败,查无此人!" << endl;
		}
	}
	system("pause");
	system("cls");
}

//查找职工
void WorkerManager::FindEmp()
{
	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)
				{
					flag = true;
					cout << "查找成功!职工信息如下:" << endl;
					this->m_EmpArray[i]->ShowInfo();
				}
			}
			if(flag == false)
			{
				cout << "查无此人!" << endl;
			}
		} 
		else
		{
			cout << "输入的选项有误!" << endl;
		}
	}
	system("pause");
	system("cls");
}

//按编号排序
void WorkerManager::SortEmp()
{
	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-1;i++)
		{
			int min_or_max = i; //声明最小值或者最大值的下标
			for(int j = i+1;j < this->m_EmpNum;j++)
			{
				if(select == 1) //升序
				{
					if(this->m_EmpArray[min_or_max]->m_Id > this->m_EmpArray[j]->m_Id)
					{
						min_or_max = j; 
					}
				} 
				else //降序
				{
					if(this->m_EmpArray[min_or_max]->m_Id < this->m_EmpArray[j]->m_Id)
					{
						min_or_max = j;
					}
				} 
			}
			//判断一开始认定的min_or_max是不是计算的min_or_max,如果不是,则交换
			if(i != min_or_max)
			{
				//此处交换的是指针 
				Worker *temp = this->m_EmpArray[i];
				this->m_EmpArray[i] = this->m_EmpArray[min_or_max];
				this->m_EmpArray[min_or_max] = temp; 
			} 
		}
		cout << "排序成功!排序后的结果为:"  << endl;
		//将排序后的结果同步到文件中
		this->save();
		
		this->ShowEmp(); //该函数实现中,已经实现了按任意键清屏 
	}
}

//清空文件
void WorkerManager::CleanFile()
{
	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;
			}
			
		}
		delete [] this->m_EmpArray;
	}
}

worker.h

#pragma once
#include <iostream>
#include <string>
using namespace std;
//职工抽象类
class Worker
{
public:
	//纯虚函数的基类不需要函数实现,不需要worker.cpp文件 
	//显示个人信息
	virtual void ShowInfo() = 0; //纯虚函数 
	//获取岗位名称
	virtual string GetDeptName() = 0;
	int m_Id;      //职工编号
	string m_Name; //职工姓名
	int m_DeptId;  //部门编号 
};

employee.h

//普通员工
#pragma once
#include <iostream>
#include "worker.h"
using namespace std;
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 "员工"; 
	//或者写出强制类型转换
	//return string("员工"); 
}

manager.h

//经理
#pragma once
#include <iostream>
#include "worker.h"
using namespace std;
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 <iostream>
#include "worker.h"
using namespace std;
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("老板"); 
}

操作中的小bug 

1.本文代码中有些函数和变量的命名是以本人的习惯命名的,有些函数的实现也是本人的习惯,与黑马原创作者有些许不同。

2.如果手动在文件中输入汉字,然后在程序中输出时就呈现乱码,可以将文件另存为,然后选择ANSI编码方式

0ec1d6ebb9704af494a9478e89e49874.png

  • 15
    点赞
  • 67
    收藏
    觉得还不错? 一键收藏
  • 3
    评论
黑马程序员通讯录管理系统C++是一个用于管理通讯录联系人信息的系统。在该系统中,可以进行添加联系人、显示联系人、删除联系人、查找联系人、修改联系人、清空通讯录等功能。 在系统的实现思路中,清空通讯录的方法是通过将通讯录记录的联系人数量置为0来实现逻辑清空。具体的代码实现如下: ``` void cleanPerson(Addressboks * abs) { cout << "您的通讯录是否清空?(Y/N)" << endl; string select; cin >> select; while (true) { if (select == "Y" || select == "y") { abs->m_Size = 0; // 将当前记录联系人数量置为0,逻辑清空操作 cout << "通讯录已清空" << endl; } else if (select == "N" || select == "n") { break; } else { cout << "输入有误" << endl; break; } } system("pause"); system("cls"); } ``` 而测试清空联系人功能的方法是判断当前通讯录中是否有人员,若人数为0,则提示记录为空;若人数大于0,则显示通讯录中的信息。具体的代码实现如下: ``` void showPerson(Addressboks * abs) { if (abs->m_Size == 0) { cout << "通讯录为空" << endl; } else { for (int i = 0; i < abs->m_Size; i++) { cout << "姓名:" << abs->personArray[i].m_Name << "\t"; cout << "性别:" << (abs->personArray[i].m_Sex == 1 ? "男" : "女") << "\t"; cout << "年龄:" << abs->personArray[i].m_Age << "\t"; cout << "电话:" << abs->personArray[i].m_Phone << "\t"; cout << "地址:" << abs->personArray[i].m_Addr << endl; } } system("pause"); system("cls"); } ``` 以上就是黑马程序员通讯录管理系统C++的相关介绍和功能实现方法。<span class="em">1</span><span class="em">2</span><span class="em">3</span> #### 引用[.reference_title] - *1* [黑马程序员 C++ 通讯录管理系统 学习记录](https://blog.csdn.net/qq_49488584/article/details/124813814)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v93^chatsearchT3_2"}}] [.reference_item style="max-width: 50%"] - *2* *3* [day06-案例C++制作简单通讯录](https://blog.csdn.net/qq_39431829/article/details/102595151)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v93^chatsearchT3_2"}}] [.reference_item style="max-width: 50%"] [ .reference_list ]

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值