IT数码 购物 网址 头条 软件 日历 阅读 图书馆
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
图片批量下载器
↓批量下载图片,美女图库↓
图片自动播放器
↓图片自动播放器↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁
 
   -> C++知识库 -> C++(九)——职工信息管理系统 -> 正文阅读

[C++知识库]C++(九)——职工信息管理系统

简单的项目构成

?头文件

职工抽象类

#pragma once
#include<iostream>
#include<string>
using namespace std;
class Worker {
public:
	//显示个人信息
	virtual void showInfo() = 0;
	//显示岗位名称
	virtual string getDName() = 0;
	int m_id;
	string m_name;
	int m_dId;
};

Boss类(继承自职工抽象类)

#pragma once
#include<iostream>
#include<string>
#include"Worker.h"
using namespace std;
class Boss :public Worker {
public:
	Boss(int id, string name, int dId);
	void showInfo();
	string getDName();
};

经理类(继承自职工抽象类)

#pragma once
#include<iostream>
#include<string>
#include"Worker.h"
using namespace std;
class Manger :public Worker {
public:
	Manger(int id, string name, int dId);
	void showInfo();
	string getDName();
};

普通员工类(继承自职工抽象类)

#pragma once
#include<iostream>
#include<string>
#include"Worker.h"
using namespace std;
class Employee :public Worker {
public:
	Employee(int id, string name, int dId);
	void showInfo();
	string getDName();
};

管理系统类(实现信息的增删查改,排序等等)

#pragma once //防止头文件重复包含
#include<iostream>
#include"Worker.h"
using namespace std;
//只做声明, 不做实现
class WorkerManger {
public:
	WorkerManger();

	//展示菜单的函数
	void showMenu();
	
	//退出系统函数
	void exitSystem();

	//添加新员工
	void addEmp();

	//保存到txt文本中
	void save();
	//统计人数
	int getEmNum();

	//初始化员工
	void initEmp();

	//显示员工信息
	void showWorker();

	//删除职工
	void delEmp();

	//判断编号员工是否存在
	int isExist(int num);

	//修改员工信息
	void modEmp();

	//查找员工
	void findEmp();

	//排序
	void sortEmp();

	//清空文件
	void cleanFile();


	~WorkerManger();
	
	
	//判断文件是否为空的标志,后面删除时需要用到
	bool m_isEmpty;

	int m_emNum;
	Worker** m_emArray;
	
};

源文件

职工抽象类

#include"Worker.h"

void Worker::showInfo() {

}

string Worker::getDName() {
	return string("None");
}

Boss类(继承自职工抽象类)

#include"Boss.h"

Boss::Boss(int id, string name, int dId) {
	m_id = id;
	m_name = name;
	m_dId = dId;
}
void Boss::showInfo() {
	cout << "职工编号:" << m_id;
	cout << "\n职工姓名:" << m_name;
	cout << "\n岗位:" << getDName();
	cout << "\n岗位职责:啥也不用干,诶!就是玩儿" << endl;
	cout << endl;

}
string Boss::getDName() {
	return string("公司老板");
}

经理类(继承自职工抽象类)

#include"Manger.h"
Manger::Manger(int id, string name, int dId) {
	m_id = id;
	m_name = name;
	m_dId = dId;
}
void Manger::showInfo() {
	cout << "职工编号:" << m_id;
	cout << "\n职工姓名:" << m_name;
	cout << "\n岗位:" << getDName();
	cout << "\n岗位职责:压榨底层打工人,帮老板端茶倒水" << endl;
	cout << endl;
}
string Manger::getDName() {
	return string("部门经理");
}

普通员工类(继承自职工抽象类)

#include"Employee.h"


Employee::Employee(int id, string name, int dId ) {
	m_id = id;
	m_name = name;
	m_dId = dId;
}
void Employee::showInfo() {
	cout << "职工编号:" << m_id;
	cout << "\n职工姓名:" << m_name;
	cout << "\n岗位:" << getDName();
	cout << "\n岗位职责:帮经理端茶倒水" << endl;
	cout << endl;

}
string Employee::getDName() {
	return string("底层打工人");
}

管理系统类(实现信息的增删查改,排序等等)

#include<fstream>
#include"WorkManger.h"
#include"Worker.h"
#include"Employee.h"
#include"Manger.h"
#include"Boss.h"

#define FILENAME "empFile.txt"
WorkerManger::WorkerManger() {
	ifstream ifs;
	ifs.open(FILENAME, ios::in);
	//如果文件不存在则初始化各个参数(第一次使用系统)
	if (!ifs.is_open()) {
		cout << "文件不存在" << endl;
		this->m_emNum = 0;
		this->m_emArray = NULL;
		this->m_isEmpty = true;
		ifs.close();
		return;
	}
	//如果文件存在,但是数据被清理过
	char ch;
	ifs >> ch;
	if (ifs.eof()) {
		cout << "数据被清理了" << endl;
		this->m_emNum = 0;
		this->m_emArray = NULL;
		this->m_isEmpty = true;
		ifs.close();
		return;
	}
	//获取文件中的员工数量
	getEmNum();
	this->m_emArray = new Worker * [this->m_emNum];
	initEmp();
	this->m_isEmpty = false;
	
}
WorkerManger::~WorkerManger() {
	if (m_emArray != NULL) {
		delete[] m_emArray;
		m_emArray = NULL;
	}

}

void WorkerManger::save() {
	ofstream ofs;
	ofs.open(FILENAME, ios::out);
	for (int i = 0; i < m_emNum; ++i) {
		ofs << m_emArray[i]->m_id << " "
			<< m_emArray[i]->m_name << " "
			<< m_emArray[i]->m_dId << " ";
	}
}

int WorkerManger::getEmNum() {
	ifstream ifs;
	ifs.open(FILENAME, ios::in);
	int id;
	string name;
	int dId;
	//统计分数
	int num = 0;
	//逐行读取
	while (ifs >> id && ifs >> name && ifs >> dId) {
		num++;
	}
	ifs.close();
	this->m_emNum = num;
	return num;
}

//如果文件存在且有数据的初始化函数
void WorkerManger::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 Manger(id, name, dId);
		else
			worker = new Boss(id, name, dId);
		this->m_emArray[index] = worker;
		index++;
	}

}
//显示员工信息
void WorkerManger::showWorker() {
	//如果不为空
	system("cls");
	if (!m_isEmpty) {
		string dName;
		cout << "员工信息如下:" << endl;
		for (int i = 0; i < this->m_emNum; ++i) {
			this->m_emArray[i]->showInfo();
		}
	}
	else {
		cout << "还未录入员工信息!!!" << endl;
	}
	system("pause");
	

}


int WorkerManger::isExist(int num) {
	for (int i = 0; i < this->m_emNum; ++i) {
		//找到了员工
		if (this->m_emArray[i]->m_id == num)
			return i;
	}
	//否则返回-1
	return -1;
}

//删除员工
void WorkerManger::delEmp() {
	int index = -1;
	int id;
	if (getEmNum() == 0) {
		cout << "还未录入员工信息!!!" << endl;
		system("pause");
		return;
	}
	cout << "请输入要删除员工的编号:";
	cin >> id;
	system("cls");
	index = isExist(id);
	if (index == -1) {
		cout << "未找到该员工!!!" << endl;
	}
	else {
		for (int i = index; i < this->m_emNum - 1; ++i) {
			this->m_emArray[i] = this->m_emArray[i + 1];
		}
		this->m_emNum--;
		this->save();
		cout << "删除成功!!!" << endl;
	}
	system("pause");
}
void WorkerManger::modEmp() {
	if (getEmNum() == 0)
	{
		cout << "还未录入员工信息!!" << endl;
		system("pause");
		return;
	}
	else {
		int index = -1;
		int id;
		cout << "请输入要修改信息的员工的编号:" << endl;
		cin >> id;
		index = isExist(id);
		if (index == -1) {
			cout << "未找到该员工,请输入有效编号" << endl;
		}
		else {
			int newId;
			string newName;
			int newDid;
			Worker* newEm = NULL;
			cout << "请输入员工的新编号:" << endl;
			cin >> newId;
			cout << "请输入员工的新姓名:" << endl;
			cin >> newName;
			cout << "1、底层打工人   2、部门经理   3、老板" << endl;
			cout << "请输入员工的新职位(输入编号):" << endl;
			cin >> newDid;

			delete this->m_emArray[index];
			if (newDid == 1) {
				newEm = new Employee(newId, newName, newDid);
			}
			else if (newDid == 2) {
				newEm = new Manger(newId, newName, newDid);
			}
			else {
				newEm = new Boss(newId, newName, newDid);
			}
			this->m_emArray[index] = newEm;
			this->save();
			cout << "员工信息修改完成!!!" << endl;
		}
		system("pause");;
	}
}

void WorkerManger::findEmp() {
	if (getEmNum() == 0)
	{
		cout << "还未录入员工信息!!!" << endl;
		system("pause");
		return;
	}
	int id;
	int doId;
	int index = -1;
	string name;
	cout << "请输入查找方式(1、编号  2、姓名):" << endl;
	cin >> doId;
	if (doId == 1) {
		
		cout << "请输入员工编号:" << endl;
		cin >> id;
		index = this->isExist(id);
		if (index == -1) {
			cout << "输入编号有误" << endl;
		}
		else
		{
			this->m_emArray[index]->showInfo();
		}
		
	}
	else if (doId == 2) {
		cout << "请输入员工姓名:" << endl;
		cin >> name;
		int flag = 1;
		for (int i = 0; i < m_emNum; ++i) {
			if (name == m_emArray[i]->m_name) {
				flag = 0;
				this->m_emArray[i]->showInfo();
				cout << endl;
			}
		}
		if (flag)
			cout << "未找到该员工!!!!" << endl;
	}
	else {
		cout << "输入有误!!!!" << endl;
		return;
	}
	system("pause");
}


//按编号排序
void WorkerManger::sortEmp() {
	if (getEmNum() == 0) {
		cout << "还未录入员工信息" << endl;
		system("pause");
		return;
	}
	int opt = 1;
	cout << "请输入排序方式(1、升序  2、降序):";
	cin >> opt;
	if (opt == 1) {
		for (int i = 0; i < this->m_emNum - 1; ++i) {
			for (int j = i + 1; j < this->m_emNum - 1; ++j) {
				if (m_emArray[i]->m_id > m_emArray[j]->m_id) {
					Worker* t = m_emArray[i];
					m_emArray[i] = m_emArray[j];
					m_emArray[j] = t;
				}

			}
		}
	}
	else {
		for (int i = 0; i < this->m_emNum - 1; ++i) {
			for (int j = i + 1; j < this->m_emNum; ++j) {
				if (m_emArray[i]->m_id < m_emArray[j]->m_id) {
					Worker* t = m_emArray[i];
					m_emArray[i] = m_emArray[j];
					m_emArray[j] = t;
				}

			}
		}
	}
	this->save();
	cout << "排序完毕" << endl;
	system("pause");
}


void WorkerManger::cleanFile() {
	int opt = 2;
	cout << "确认清空文件!!!!" << endl;
	cout << "1、确认" << endl;
	cout << "2、返回" << endl;
	cin >> opt;
	if (opt == 2)
		return;
	//ios::trunc如果文件存在,则删除重新创建
	ofstream ofs(FILENAME, ios::trunc);
	ofs.close();
	if (this->m_emArray != NULL) {
		for (int i = 0; i < this->m_emNum; ++i) {
			if (this->m_emArray[i] != NULL)
				delete this->m_emArray[i];
		}
		this->m_emNum = 0;
		delete[] this->m_emArray;
		this->m_emArray = NULL;
	}
	cout << "清除成功!!!" << endl;
	system("pause");
}

void WorkerManger::showMenu() {
	cout << "****************************************************" << endl;
	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;
	cout << endl;
}

void WorkerManger::exitSystem() {
	cout << "欢迎您下次使用!!!" << endl;
	system("pause");
	exit(0);
}

//添加新员工
void WorkerManger::addEmp() {
	int addNum = 0;

	cout << "请输入要添加的员工的数量:" << endl;
	cin >> addNum;

	if(addNum > 0){
		int newSize = addNum + m_emNum;
		Worker** newArray = new Worker * [newSize];

		if (m_emNum != 0) {
			//先将原本的数据存入newArray里
			for (int j = 0; j < m_emNum; ++j) {
				newArray[j] = m_emArray[j];
			}
			//释放之前的空间
	//		delete[] this->m_emArray;
			
		}


		//输入员工信息
		for (int i = 0; i < addNum; ++i) {
		
			int t_id;
			string t_name;
			int t_dId;
			Worker* t_emp = NULL;
			cout << "请输入第" << i + 1 << "位员工的信息!!" << endl;
			cout << "请输入编号:";
			cin >> t_id;
			cout << "请输入姓名:";
			cin >> t_name;
			cout << "1、底层打工人  2、经理  3、老板" << endl;
			cout << "请选择岗位(输入数字):";
			cin >> t_dId;
			if (isExist(t_id) != -1) {
				cout << "该员工编号重复,请重新录入" << endl;
				system("pause");
				--i;
				continue;
			}
			//根据岗位new不同的worker类,
			if (t_dId == 1)
				t_emp = new Employee(t_id, t_name, t_dId);
			else if (t_dId == 2)
				t_emp = new Manger(t_id, t_name, t_dId);
			else if (t_dId == 3)
				t_emp = new Boss(t_id, t_name, t_dId);
			else 
			{
				cout << "非法输入!!!" << endl;
				break;
			}
			//暂时存入newArray里
			newArray[i + this->m_emNum] = t_emp;
		}
		delete[] this->m_emArray;
		//得到新的指向
		m_emArray = newArray;
	
		
		//更新员工数量
		m_emNum = newSize;
		m_isEmpty = false;
		cout << "员工信息录入完成!!!" << endl;
		save();
		system("pause");
		
	}
	else {
		cout << "输入有误!!!" << endl;
		system("pause");
		
	}
}

主程序

#include<iostream>
#include"WorkManger.h"

#include"Worker.h"
#include"Manger.h"
#include"Employee.h"
#include"Boss.h"


using namespace std;




int main() {
	
	//实例化管理者对象
	WorkerManger wm;
	
	int choice = 0;
	while (true) {
		//调用展示菜单的成员函数
		system("cls");
		wm.showMenu();
		cout << "请输入您的选择:" << endl;
		cin >> choice;
		switch (choice)
		{
			case 0: //退出系统
				wm.exitSystem();
				break;
			case 1: //增加职工
				wm.addEmp();
				break;
			case 2: //显示职工
				wm.showWorker();
				break;
			case 3: //删除职工
				wm.delEmp();
				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;
}

  C++知识库 最新文章
【C++】友元、嵌套类、异常、RTTI、类型转换
通讯录的思路与实现(C语言)
C++PrimerPlus 第七章 函数-C++的编程模块(
Problem C: 算法9-9~9-12:平衡二叉树的基本
MSVC C++ UTF-8编程
C++进阶 多态原理
简单string类c++实现
我的年度总结
【C语言】以深厚地基筑伟岸高楼-基础篇(六
c语言常见错误合集
上一篇文章      下一篇文章      查看所有文章
加:2022-04-09 18:05:39  更:2022-04-09 18:06:14 
 
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁

360图书馆 购物 三丰科技 阅读网 日历 万年历 2024年11日历 -2024/11/24 0:18:37-

图片自动播放器
↓图片自动播放器↓
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
图片批量下载器
↓批量下载图片,美女图库↓
  网站联系: qq:121756557 email:121756557@qq.com  IT数码