C++小项目——职工管理系统

目录

1 管理系统需求

2 创建项目

3 创建管理类

3.1 创建文件

3.2 头文件实现

3.3 源文件实现

4 菜单功能

4.1 添加成员函数

4.2 菜单功能实现

4.3 测试菜单功能

5 退出功能

5.1 提供功能接口

5.2 实现退出功能

5.3 测试功能

6 创建职工类

6.1 创建职工抽象类

6.2 创建普通员工类

6.3 创建经理类

6.4 创建老板类

6.5 测试多态

7 添加职员

7.1 功能分析

7.2 功能实现

8 文件交互—写文件  

8.1 设定文件路径

8.2 成员函数声明

8.3 保存文件功能实现

8.4 保存文件功能测试

9 文件交互——读文件

9.1 文件未创建

9.2 文件存储且数据为空

9.3 文件存在且保存职工数据

9.3.1 获取记录的职工人数

9.3.2 初始化数组

10 显示职工

10.1 显示职工函数声明

11 删除职工

11.1 删除职工函数声明

11.2 职工是否存在函数声明

11.3 职工是否存在函数实现

11.4 删除职工函数实现

11.5 测试删除职工

12 修改职工

12.1 修改职工函数声明

12.2 修改职工函数实现

13 查找职工

13.1 查找职工函数声明

13.2 查找职工函数实现

14 排序

14.1 排序函数声明

14.2 排序函数实现

15 清空文件

15.1 清空函数声明

15.2 清空函数实现

1 管理系统需求

2 创建项目

创建项目步骤:(1)创建新项目 (2)添加文件

3 创建管理类

管理类负责的内容如下:

(1)与用户的沟通菜单界面;

(2)对职工增删改查的操作;

(3)与文件的读写交互。

3.1 创建文件

在头文件和源文件的文件夹下分别创建workerManager.h和workManager.cpp文件。

3.2 头文件实现

在workerManager.h设计管理类。

代码如下:

#pragma once//防止头文件重复包含
#include<iostream>//包含输入输出流头文件
using namespace std;//使用标准命名空间

class WorkerManager
{
public:
	//构造函数
	WorkerManager();

	//析构函数
	~WorkerManager();
};

3.3 源文件实现

在workManager.cpp中将构造函数和析构函数实现补全。

#include"workerManager.h"

WorkerManager::WorkerManager()
{

}


WorkerManager::~WorkerManager()
{

}

4 菜单功能

功能描述:与用户的沟通界面。

4.1 添加成员函数

在管理类workerManager.h中添加成员函数void Show_Menu();

#pragma once//防止头文件重复包含
#include<iostream>//包含输入输出流头文件
using namespace std;//使用标准命名空间

class WorkerManager
{
public:
	//构造函数
	WorkerManager();

	//展示菜单
	void Show_Menu();

	//析构函数
	~WorkerManager();
};

4.2 菜单功能实现

在管理类workerManager.cpp中实现show_Menu()函数;

//展示菜单
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;
}

4.3 测试菜单功能

在职工管理系统.cpp中测试菜单功能。

代码如下:

#include<iostream>
using namespace std;
#include"WorkerManager.h"

int main()
{
	//实例化管理者对象
	WorkerManager wm;

	//调用展示菜单成员函数
	wm.Show_Menu();

	system("pause");

	return 0;
}

运行结果展示:

5 退出功能

5.1 提供功能接口

在main函数中提供分支选择,提供每个功能接口。

代码如下:

#include<iostream>
using namespace std;
#include"WorkerManager.h"

int main()
{
	//实例化管理者对象
	WorkerManager wm;

	int choice = 0;
	while (true)
	{
		//展示菜单
		wm.Show_Menu();
		cout << "请输入您得选择:" << endl;
		cin >> choice;

		switch (choice)
		{
		case 0://退出系统
			break;
		case 1://添加职员
			break;
		case 2://显示职员
			break;
		case 3://修改职员
			break;
		case 4://修改职员
			break;
		case 5://查找职员
			break;
		case 6://排序职员
			break;
		case 7://清空文件
			break;
		default:
			system("cls");
			break;


		}
	}

	//调用展示菜单成员函数
	wm.Show_Menu();

	system("pause");

	return 0;
}

5.2 实现退出功能

在workerManager.h中提供退出系统得成员函数void exitSystem();

在workerManager.cpp中提供具体得功能实现。

//退出系统
void WorkerManager::exitSystem()
{
	cout << "欢迎下次使用" << endl;
	system("pause");//按任意键退出
	exit(0);//退出程序
}

5.3 测试功能

在main函数分支0选项中,调用退出程序的接口。

case 0://退出系统
			wm.exitSystem();
			break;

6 创建职工类

6.1 创建职工抽象类

 头文件夹下创建worker.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;//职工所在部门名称编号
};

6.2 创建普通员工类

普通员工类继承职工抽象类,并重写父类中纯虚函数。

在头文件和源文件的文件夹下分别创建employee.h和employee.cpp文件。

employee.h中代码如下:

//普通员工文件
#pragma once
#include<iostream>
using namespace std;
#include "worker.h"

//员工类
class Employee:public Worker
{
 public:
	//构造函数
	Employee(int id,string nama,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 string("员工");
}

6.3 创建经理类

经理类继承职工抽象类,并重写父类中纯虚函数,和普通员工类似。

在头文件和源文件的文件夹下分别创建manager.h和manager.cpp文件。

manager.h中代码如下:

#pragma once
#include<iostream>
using namespace std;
#include "worker.h"

//经理类
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("经理");
}

6.4 创建老板类

老板类继承职工抽象类,并重写父类中纯虚函数,和普通员工类似。

在头文件和源文件的文件夹下分别创建boss.h和boss.cpp文件。

boss.h中代码如下:

#pragma once
#include<iostream>
using namespace std;
#include "worker.h"

//老板类
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("总裁");
}

6.5 测试多态

在职工管理系统.cpp中添加测试函数,并且运行能够产生多态。

测试代码如下:

#include<iostream>
using namespace std;
#include"WorkerManager.h"

#include "worker.h"
#include "employee.h"
#include "manager.h"
#include "boss.h"


int main()
{
	//测试代码:
	Worker* worker = NULL;
	worker = new Employee(1,"张三",1);
	worker->showInfo();//多态
	delete worker;

	
	worker = new Manager(1, "李四", 2);
	worker->showInfo();
	delete worker;

	
	worker = new Boss(1, "王五", 3);
	worker->showInfo();
	delete worker;


	system("pause");

	return 0;
}

 运行效果如下:

7 添加职员

功能描述:批量添加职员,并且保存到文件中。

7.1 功能分析

分析:

用户在批量创建时,可能会创建不同种类的职员;

如果想将所有不同种类的员工都放入到一个数组中,可以将所有员工的指针维护到一个数组里;

如果想在程序中维护这个不同长度的数组,可以将数组创建到堆区,并利用Worker**的指针维护。

 用父类的指针维护子类的对象。

7.2 功能实现

在workerManager.h头文件中添加成员属性代码:

    //记录文件中的人数个数
	int m_EmpNum;

	//有数组的指针
	Worker ** m_EmpArray;

在workerManager.cpp构造函数中初始化属性:

WorkerManager::WorkerManager()
{
	//初始化人数
	this->m_EmpNum = 0;

	//初始化数组指针
	this->m_EmpArray = NULL;

}

 在workerManager.h头文件中添加成员:

//增加职工
	void Add_Emp();

在workerManager.cpp中实现该函数:

//增加职工
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;//部门选择


			cout << "请输入第" << i + 1 << "个新职工编号:" << endl;
			cin >> id;

			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, 1);
				break;
			case 2:
				worker = new Manager(id, name, 2);
				break;
			case 3:
				worker = new Boss(id, name, 3);
				break;
			default:
				break;
			}

			//将创建职工职责,保存到数组中
			newSpace[this->m_EmpNum + i] = worker;
		}

		//释放原有空间
		delete[] this->m_EmpArray;

		//更改新空间的指向
		this->m_EmpArray = newSpace;

		//更新新的个数
		this->m_EmpNum = newSize;

		//提示信息
		cout << "成功添加" << addNum << "名新职工" << endl;
	}

	else
	{
		cout << "输入数据有误" << endl;
	}

	//按任意键后 返回到上级目录
	system("pause");
	system("cls");
}

释放堆区的数据:

WorkerManager::~WorkerManager()
{
	if (this->m_EmpArray != NULL)
	{
		delete[] this->m_EmpArray;
		this->m_EmpArray = NULL;
	}
}

8 文件交互—写文件  

功能描述:对文件进行读写

在上一个添加功能中, 我们只是将所有的数据添加到内存中,一旦程序结束就无法保存了。

因此文件管理类中需要一个与文件及逆行交互的功能,对文件进行读写操作。

8.1 设定文件路径

首先我i们将文件路径,在workerManager.h中添加宏常量,并且包含头文件fstream

8.2 成员函数声明

在workerManager.h类里添加成员函数void save()

 

8.3 保存文件功能实现

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();
}

8.4 保存文件功能测试

 

 

9 文件交互——读文件

功能描述:将文件中的内容读取到程序中。

      虽然我们实现了添加职工后保存到文件的操作,但是每次开始运行程序,并没有将文件中的数据读取到程序中,而我们的程序功能中还有清空文件的需求,因此构造函数初始化数据的情况分为三种。

(1)第一次使用,文件未创建;

(2)文件存在,但是数据被用户清空;

(3)文件存在,并且保存职工的所有数据。

9.1 文件未创建

在workerManager.h中添加新的成员属性m_FilelsEmpty标志文件是否为空。

 修改workerManager.cpp中的构造函数代码:

WorkerManager::WorkerManager()
{

	//分三种情况初始化
	//1、文件不存在

	ifstream ifs;
	ifs.open(FILENAME, ios::in);//读文件

	//文件不存在情况
	if (!ifs.is_open())
	{
		cout << "文件不存在" << endl;//测试输出
		//初始化属性
		this->m_EmpNum = 0;//初始化记录人数
		this->m_FileIsEmpty = true;//初始化文件为空标志
		this->m_EmpArray = NULL;//初始化数组指针
		ifs.close();//关闭文件
		return;
	}
}

删除文件后,测试文件不存在时初始化数据功能。

9.2 文件存储且数据为空

在workerManager.h中的构造函数追加代码:

 追加代码位置如图:

 将文件创建后清空文件内容,并测试该函数该情况下初始化功能

我们发现文件不存在或者为空清空m_FilesEmpty判断文件是否为空的标志都为真,那何时为假?

成功添加职工后,应该更改文件不为空的标志:

在void workerManager::Add_Emp()成员函数中添加:

9.3 文件存在且保存职工数据

9.3.1 获取记录的职工人数

在workerManager.h中添加成员函数int_get_EmpNum();

 在workerManager.cpp中实现成员函数int_get_EmpNum();

//统计文件中人数
int WorkerManager::get_EmpNum()
{
	ifstream ifs;//创建ifs对象
	ifs.open(FILENAME, ios::in);//打开文件 读

	int id;//存储度到的职工编号
	string name;//存储读到的职工姓名
	int dId;//存储读到的职工职务

	int num = 0;
	while (ifs >> id && ifs >> name && ifs >> dId)//读完一行之后num++
	{
		//统计人数变量
		num++;
	}

	return num;
}

 在workerManager.cpp构造函数中继续追加代码:

 手动添加一些职工数据,测试获取职工数据函数:

 

9.3.2 初始化数组

根据职工的数据以及职工数据,初始化workerManager中的Worker**m_EmpArray指针。

在workerManager.h中添加成员函数 void int_Emp();

 在workerManager.cpp中实现:

 

在workerManager.cpp构造函数中追加代码:

10 显示职工

功能描述:显示当前所有职工信息

10.1 显示职工函数声明

在workerManager.h中添加成员函数 void Show_Emp();

10.2 显示职工函数实现

在workerManager.cpp中实现成员函数 void Show_Emp();


//显示职工
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");
}

11 删除职工

功能描述:按照职工的编号进行删除职工操作。

11.1 删除职工函数声明

 在workerManager.h中添加成员函数 void Del_Emp();

11.2 职工是否存在函数声明

很多功能都需要用到根据职工是否存在来进行操作如:删除职工、修改职工、查找职工,因此添加该函数,以便后续调用。

在workerManager.h中共添加成员函数 int IsExist(int id)

11.3 职工是否存在函数实现

11.4 删除职工函数实现

数组中删除数据:本质为数据前移,数据个数减一。

 在workerManager.cpp中实现成员函数 void Del_Emp();代码如下:


//删除职工
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)//说明职工存在,并且要删除掉index位置上的职工
		{
			//数据前移
			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");

}

11.5 测试删除职工

在main函数分支3选项中,调用删除职工接口。

测试1:删除不存在职工情况

 

测试2:删除存在的职工情况

12 修改职工

功能描述:能够按照职工的编号随职工信息进行修改并保存。

12.1 修改职工函数声明

 在workerManager.h中添加成员函数 voidMOd_Emp();

12.2 修改职工函数实现

在workerManager.cpp中实现成员函数void Mod_Emp();

//修改职工
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];

			int newId = 0;
			string newName = "";
			int dSelect = 0;

			cout << "查到: " << id << "号职工,请输入新职工号: " << endl;
			cin >> newId;

			cout << "请输入新姓名: " << endl;
			cin >> newName;

			cout << "请输入岗位: " << endl;
			cout << "1、普通职工" << endl;
			cout << "2、经理" << endl;
			cout << "3、老板" << endl;
			cin >> dSelect;


			Worker* worker = NULL;
			switch (dSelect)
			{
			case1:
				worker = new Employee(newId, newName, dSelect);
				break;
			case2:
				worker = new Manager(newId, newName, dSelect);
				break;
			case3:
				worker = new Boss(newId, newName, dSelect);
				break;
			default:
				break;
			}

			//更改数据到数组中
			this->m_EmpArray[ret] = worker;

			cout << "修改成功! " << endl;

			//保存到文件中
			this->save();
		}
		else
		{
			cout << "修改失败,查无此人" << endl;
		}
	}

	//按任意键 清屏
	system("pause");
	system("cls");
}

 

 

13 查找职工

功能描述:提供两种查找职工方式,一种按职工编号,一种按照职工姓名。

13.1 查找职工函数声明

在workerManager.h中添加成员函数 void Find_Emp();

13.2 查找职工函数实现

在workerManager.cpp中实现成员函数 void Find_Emp();

//查找职工
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 < m_EmpNum; i++)
				{
					if (m_EmpArray[i]->m_Name == name)
					{
						cout << "查找成功,职工编号为:"
							<< m_EmpArray[i]->m_Id
							<< "号的信息如下: " << endl;

						flag = true;

						this->m_EmpArray[i]->showInfo();
					}
				}
				if (flag == false)
				{
					//查无此人
					cout << "查找失败,查无此人" << endl;
				}
		}
		else
		{
			cout << "输入选项有误" << endl;
		}
	}
	//按任意键 清屏
	system("pause");
	system("cls");
}

 

 

 

14 排序

功能描述:按照职工编号进行排序,排序的顺序由用户指定。

14.1 排序函数声明

在workerManager.h中添加成员函数 void Sort_Emp();

14.2 排序函数实现

在workerManager.cpp中实现成员函数 void sort_Emp();


//排序职工
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 < 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();
	}
}

 

 

 

15 清空文件

功能描述:将文件中记录数据清空。

15.1 清空函数声明

在workerManager.h中添加成员函数 void Clean_File();

15.2 清空函数实现

在workerManager.cpp中实现函数 void Clean_File();

//清空文件
void WorkerManager::Clean_Flie()
{
	cout << "确定清空?" << endl;
	cout << "1、确定" << endl;
	cout << "2、返回" << endl;

	int select = 0;
	cin >> select;

	if (select == 1)
	{
		//打开模式iOS::trunc如果存在删除文件重新创建
		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 this->m_EmpArray[i];
				}
			}
			this->m_EmpNum = 0;
			delete[] this->m_EmpArray;
			this->m_EmpArray = NULL;
			this->m_FileIsEmpty = true;
		}
		cout << "清空成功!" << endl;
	}
	system("pause");
	system("cls");
}

 

  • 0
    点赞
  • 30
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
【员工管理系统】 问题描述:每个员工的信息包括:编号、姓名、性别、出生年月、学历、职务、电话、住址等。系统能够完成员工信息的查询、更新、插入、删除、排序等功能。 基本要求:排序:按不同关键字,对所有员工的信息进行排序;查询:按特定条件查找员工;更新,按编号对某个员工的某项信息进行修改;插入,加入新员工的信息;删除,按编号删除已离职的员工的信息。 选作内容:实现图形用户界面。 通过链表实现 数据结构: #include #include #include #include #include using namespace std; typedef struct workers{ char name[15];//姓名 char department[18];//单位 char gender;//性别 unsigned int age;//年龄 unsigned long long telephone;//电话 unsigned long wage;//工资 unsigned long num;//职工号 struct workers *next; }*Linklist,Lnode; void frist_print() { printf("\t\t⊙▽⊙ ⊙▽⊙ ⊙▽⊙ ⊙▽⊙ ⊙▽⊙ ⊙▽⊙ \n\n"); printf("\t\t\t欢迎进入员工管理系统\n"); } void menu() { printf("\n\t\t^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^\n"); printf("\t\t \t ◎1.创建员工信息\t \n"); printf("\t\t \t ◎2.插入员工信息\t \n"); printf("\t\t \t ◎3.修改员工信息\t \n"); printf("\t\t \t ◎4.删除员工信息\t \n"); printf("\t\t \t ◎5.查询员工信息\t \n"); printf("\t\t \t ◎6.员工信息排序\t \n"); printf("\t\t \t ◎7.显示员工信息\t \n"); printf("\t\t \t ◎8.员工工资情况\t \n"); printf("\n\t\t^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^\n"); printf("注意:输入均以回车作为结束\n"); printf("please choise 1--8:\t "); //putchar(12); } void Inset(Linklist Head){ Linklist s,L; unsigned int agee; unsigned long wagee,numm;
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值