黒馬プログラマーC++教程0から1入門--c++プログラミング例従業員管理システム


黒馬プログラマーC++教程0から1入門--c++プログラミング例従業員管理システム
  • c++従業員管理システム
  • 従業員管理システムcpp:
  • workmanager.hヘッダファイル
  • workクラス
  • workmanagerクラス
  • employeeクラス、managerクラス、bossクラス
  • workmanager.cppファイル

  • c++従業員管理システム
    従業員管理システムは3つの書類従業員管理システムに分けられる.cpp:メイン関数を配置し、各種メンバー関数を呼び出し、workmanagerに参加する必要がある.hヘッダファイル.workmanager.h:workクラス、workmanagerクラス、employeeクラス、managerクラス、bossクラスを作成します.workmanager.cpp:workmanager.h宣言された関数を実装する
    従業員管理システムcpp:
    メイン関数を配置し、各種メンバー関数を呼び出し、workmanagerに参加する必要がある.hヘッダファイル
    #include <iostream>
    #include"workmanager.h"
    using namespace std;
    
    int main()
    {
         
    
    	//    
    	//worker *work = NULL;
    	//work = new Employee(1, "  ", 1);
    	//work->showInfo();
    	//delete work;
    
    	worker *work = NULL;
    	//work = new Manager(2, "  ", 2);
    	//work->showInfo();
    	//delete work;
    
    	worker *work = NULL;
    	//work = new Boss(3, "  ", 3);
    	//work->showInfo();
    	//delete work;
    	int choice =0;
    	//        
    	WorkManager wm;
    	//           
    	while (true)
    	{
         
    	 wm.Show_Menu();
    	 cout << "       :" << endl;
    	 cin >> choice;
    	 switch (choice)
    	 {
         
    	 case 0://    
    		 wm.ExitSystem();
    		 break;
    	 case 1://    
    		 wm.Add_Emp();
    		 break;
    	 case 2://    
    		 wm.Show_Emp();
    		 break;
    	 case 3://    
    		 //  
    		 wm.Del_Emp();
    		 break;
    	 case 4://    
    		 wm.Mod_Emp();
    		 break;
    	 case 5://    
    		 wm.Find_Emp();
    		 break;
    	 case 6://    
    		 wm.Sort_Emp();
    		 break;
    	 case 7://    
    		 wm.Clean_File();
    		 break;
    
    	 default:
    		 break;
    	 }
    	 //system("cls");
    	
    	}
    	cout << "       " << endl;
    	return 0;
    }
    

    workmanager.hヘッダファイル
    workmanager.h:workクラス、workmanagerクラス、employeeクラス、managerクラス、bossクラスの宣言を作成します.
    ワーククラス
    ワーククラスのクラス機能には、(1)個人情報の表示(2)職場取得、属性:(1)従業員番号(2)従業員氏名(3)部門番号
    workmanagerクラス
    各種機能を実現する関数について宣言する:(1)構築関数WorkManager();(2)表示メニューvoid Show_Menu(); (3)機能void ExitSystem()を終了する.(4)従業員数int m_を記録するEmNum; (5)従業員配列指針worker**m_EmpArray;(6)従業員void Add_Emp(); (7)ファイルvoid save()を保存する.(8)ファイルが空フラグbool m_であるか否かを判定するFileIsEmpty;(9)統計ファイルにおける人数int get_EmpNum(); (10)従業員void initの初期化Emp();(11)従業員void Showを表示するEmp(); (12)従業員void Delの削除Emp();(13)従業員が存在するか否かを判断し、従業員が存在する配列に戻る位置が存在する場合、戻り-1 int IsExist(int id)は存在しない.(14)従業員void Modの修正Emp();(15)従業員の検索void Find_Emp(); (16)番号順void Sort_Emp(); (17)ファイルvoid Clean_をクリアするFile(); (18)解析関数~WorkManager()
    Employeeクラス、managerクラス、bossクラス
    Employeeクラスは従業員クラス、workerクラスのサブクラスであり、マルチステート機能の具体的な機能を用いてemployeeクラスで実現(1)コンストラクション関数(2)個人情報の表示(3)職場managerクラスの取得、bossクラスとemployeeクラスの機能は同じである
    #pragma once//       
    #include<string>
    #include<fstream>
    #include <iostream>
    using namespace std;
    
    #define FILENAME "empFlie.txt"
    //worker 
    class worker
    {
         
    public:
    	//      
    	virtual void showInfo() = 0;
    	//    
    	virtual string getDeptName() = 0;
    
    	//    
    	int m_id;
    	//    
    	string m_name;
    	//    
    	int m_number;
    };
    
    
    class WorkManager
    {
         
    public:
    	//    
    	WorkManager();
    
    	//    
    	void Show_Menu();
    
    	//    
    	void ExitSystem();
    
    	//      
    	int m_EmNum;
    
    	//      
    	worker **m_EmpArray;
    
    	//    
    	void Add_Emp();
    
    	//    
    	void save();
    
    	//           
    	bool m_FileIsEmpty;
    
    	//       
    	int get_EmpNum();
    
    	//     
    	void init_Emp();
    
    	//    
    	void Show_Emp();
    
    	//    
    	void Del_Emp();
    
    	//                         ,     -1
    	int IsExist(int id);
    
    
    	//    
    	void Mod_Emp();
    
    	//    
    	void Find_Emp();
    
    	//      
    	void Sort_Emp();
    
    	//    
    	void Clean_File();
    
    	//    
    	~WorkManager();
    };
    
    
    
    
    
    //     
    class Employee :public worker
    {
         
    public:
    	//    
    	Employee(int id,string name,int number);
    
    	//      
    	virtual void showInfo();
    	
    	//    
    	virtual string getDeptName();
    	
    
    };
    
    //   
    class Manager :public worker
    {
         
    public:
    	//    
    	Manager(int id, string name, int number);
    
    	//      
    	virtual void showInfo();
    
    	//    
    	virtual string getDeptName();
    
    
    };
    
    
    //   
    class Boss :public worker
    {
         
    public:
    	//    
    	Boss(int id, string name, int number);
    
    	//      
    	virtual void showInfo();
    
    	//    
    	virtual string getDeptName();
    
    
    };
    

    workmanager.cppファイル
    ヘッダファイルの各種関数を実現する:
    #include"workmanager.h"
    
    //    
    void WorkManager::Show_Menu() 
    {
         
    	cout << "          " << endl;
    	cout << "8、      " << endl;
    	cout << "1、      " << endl;
    	cout << "2、      " << endl;
    	cout << "3、        " << endl;
    	cout << "4、      " << endl;
    	cout << "5、      " << endl;
    	cout << "6、      " << endl;
    	cout << "7、      " << endl;
    	cout  << endl;
    	
    }
    
    //    
    void WorkManager::ExitSystem()
    {
         
    	cout << "      " << endl;
    	system("pause");
    	exit(0);//    
    }
    
    
    WorkManager::WorkManager()
    {
         
    
    	//       
    	//     
    	ifstream ifs;
    	ifs.open(FILENAME, ios::in);//   
    	
    	if (!ifs.is_open())
    	{
         
    		cout << "     " << endl;
    		//     
    		//       
    		this->m_EmNum = 0;
    		//       
    		this->m_EmpArray = NULL;
    		//         
    		this->m_FileIsEmpty = true;
    		ifs.close();
    		return;
    	}
    
    	//    ,     
    	int num = this->get_EmpNum();
    	cout << "     :" << num << endl;
    	this->m_EmNum = num;
    
    	this->m_EmpArray = new worker*[this->m_EmNum];
    	//       ,    
    	this->init_Emp();
    
    	for (int i = 0;i < this->m_EmNum;i++)
    	{
         
    		cout << "    :" << this->m_EmpArray[i]->m_id 
    			<< "  :" << this->m_EmpArray[i]->m_name
    			<< "    :" << this->m_EmpArray[i]->m_number
    			<< endl;
    	}
    
    	char ch;
    	ifs >> ch;
    	if (ifs.eof())
    	{
         
    		//      
    		cout << "    " << endl;
    		//       
    		this->m_EmNum = 0;
    		//       
    		this->m_EmpArray = NULL;
    		//         
    		this->m_FileIsEmpty = true;
    		ifs.close();
    		return;
    	}
    
    
    	//      
    	//     
    	//this->m_EmNum = 0;
    	//this->m_EmpArray = NULL;
    }
    
    //    
    void WorkManager::Add_Emp()
    {
         
    	cout << "         :" << endl;
    
    	int addNum = 0;//        
    	cin >> addNum;
    	if (addNum)
    	{
         
    		//  
    		//        
    		int newSize = this->m_EmNum + addNum;//     =      +    
    	//     
    		worker**newSpace=new worker*[newSize];
    	//        ,       
    		if (this->m_EmpArray != NULL)
    		{
         
    			for (int i = 0;i < this->m_EmNum;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 << "    " << i + 1 << "      :" << endl;
    			cin >> dSelect;
    
    			worker*work = NULL;
    			switch (dSelect)
    			{
         
    			case 1:
    				work = new Employee(id,name,1);
    				break;
    			case 2:
    				work = new Manager(id, name, 2);
    				break;
    			case 3:
    				work = new Boss(id, name, 3);
    				break;
    			default:
    				break;
    			}
    			//       ,      
    			newSpace[this->m_EmNum + i] = work;
    		}
    
    		//      
    		delete[] this->m_EmpArray;
    
    		//       
    		this->m_EmpArray = newSpace;
    
    		//       
    		this->m_EmNum = newSize;
    		//       
    		this->m_FileIsEmpty = false;
    		//      
    		cout << "    " << addNum << "    " << endl;
    	
    		this->save();
    	
    	}
    	else
    	{
         
    		cout << "    " << endl;
    
    	}
    	//    ,        
    	system("pause");
    	system("cls");
    }
    
    //    
    void WorkManager::save()
    {
         
    	ofstream ofs;
    	ofs.open(FILENAME, ios::out);//         --   
    
    	//             //             
    	for (int i = 0;i < this->m_EmNum; i++)
    	{
         
    		ofs << this->m_EmpArray[i]->m_id << " "
    			<< this->m_EmpArray[i]->m_name << " "
    			<< this->m_EmpArray[i]->m_number << " " << endl;
    	}
    	//    
    	ofs.close();
    }
    
    //       
    int WorkManager::get_EmpNum()
    {
         
    	ifstream ifs;
    	ifs.open(FILENAME, ios::in);
    
    	int id;
    	string name;
    	int dId;
    
    	int num = 0;
    	while (ifs >> id && ifs >> name && ifs >> dId)
    	{
         
    		//    
    		num++;
    	}
    	return num;
    }
    
    
    //     
    void WorkManager::init_Emp()
    {
         
    	ifstream ifs;
    	ifs.open(FILENAME, ios::in);
    
    	int id;
    	string name;
    	int dId;
    	int indiex = 0;
    
    	while (ifs >> id && ifs >> name && ifs >> dId)
    	{
         
    		worker*work = NULL;
    
    		if (dId == 1)//  
    		{
         
    			work = new Employee(id, name, dId);
    		}
    		else if (dId == 2)//  
    		{
         
    			work = new Manager(id, name, dId);
    		}
    		else 
    		{
         
    			work = new Boss(id, name, dId);
    		}
    		this->m_EmpArray[indiex] = work;
    		indiex++;
    	}
    //    
    ifs.close();
    }
    
    //    
    void WorkManager::Show_Emp()
    {
         
    	//        
    	if (this->m_FileIsEmpty)
    	{
         
    		cout << "          " << endl;
    	}
    	else
    	{
         
    		for (int i = 0;i < m_EmNum;i++)
    		{
         
    			//          
    			this->m_EmpArray[i]->showInfo();
    		}
    	}
    
    	//    ,        
    	system("pause");
    	system("cls");
    }
    
    
    //    
    void WorkManager::WorkManager::Del_Emp() 
    {
         
    	if (this->m_FileIsEmpty)
    	{
         
    		cout << "          " << endl;
    	}
    	else
    	{
         
    		//        
    		cout << "           :" << endl;
    		int D_id=0;
    		cin >> D_id;
    
    		int index=this->IsExist(D_id);
    		if (index != -1)
    		{
         
    			cout << "    " << endl;//        
    			//    
    			for (int i = index;i < this->m_EmNum - 1;i++)
    			{
         
    				this->m_EmpArray[i] = this->m_EmpArray[i + 1];//          
    			}
    			this->m_EmNum--;//           
    			//          
    			this->save();
    			cout << "    " << endl;
    		}
    		else
    		{
         
    			cout << "     " << endl;
    		}
    	}
    	//      
    	system("pause");
    	system("cls");
    }
    
    //                         ,     -1
    int WorkManager::IsExist(int id)
    {
         
    	int index = -1;
    
    	
    	
    		for (int i = 0;i < this->m_EmNum;i++)
    		{
         
    			if (this->m_EmpArray[i]->m_id == id)
    			{
         
    //    
    				index = i;
    				break;
    			}
    		}
    	
    	return index;
    }
    
    
    	//    
    void WorkManager::Mod_Emp()
    {
         
    	if (this->m_FileIsEmpty)
    	{
         
    		cout << "           " << endl;
    	}
    	else
    	{
         
    		cout << "          " << endl;
    		int id;
    		cin >> id;
    
    		int ret = this->IsExist(id);
    		if (ret != -1)
    		{
         
    			cout << "    " << endl;
    			delete this->m_EmpArray[ret];
    
    			int newid = 0;
    			string newname="";
    			int dselect = 0;
    
    
    			cout << "  :" << id << "   ,       :" << endl;
    			cin >> newid;
    
    			cout << "       :" << endl;
    			cin >> newname;
    
    			cout << "       :" << endl;
    			cin >> dselect;
    
    			worker*work = NULL;
    			switch (dselect)
    			{
         
    			case 1:
    				work = new Employee(newid, newname, dselect);
    				break;
    			case 2:
    				work = new Manager(newid, newname, dselect);
    				break;
    			case 3:
    				work = new Boss(newid, newname, dselect);
    				break;
    			default:
    				break;
    			}
    
    			//    
    			this->m_EmpArray[ret] = work;
    
    			cout << "    " << endl;
    
    			//      
    			this->save();
    		}
    		else
    		{
         
    			cout << "    ,     " << endl;
    		}
    
    	}
    
    	system("psuse");
    	system("cls");
    
    }
    
    //    
    void WorkManager::Find_Emp()
    {
         
    	if (this->m_FileIsEmpty)
    	{
         
    		cout << "           " << endl;
    	}
    	else
    	{
         
    		cout << "        " << endl;
    		cout << "id      " << endl;
    
    		int select=0;
    		cin >> select;
    		if (select == 1)
    		{
         
    			//  ID   
    			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 < this->m_EmNum;i++)
    			{
         
    				if (name == this->m_EmpArray[i]->m_name)
    				{
         
    					cout << "    ,       " << endl;
    					this->m_EmpArray[i]->showInfo();
    
    					flag = true;
    				}
    			}
    			if (flag == false)
    			{
         
    				cout << "    ,     " << endl;
    			}
    		}
    		else
    		{
         
    			cout << "      " << endl;
    		}
    	}
    	//      
    	system("pause");
    	system("cls");
    }
    
    
    //      
    void WorkManager::Sort_Emp()
    {
         
    	if (this->m_FileIsEmpty)
    	{
         
    		cout << "     " << endl;
    		system("pause");
    		system("cls");
    	}
    	else
    	{
         
    		cout << "       " << endl;
    		cout << "            " << endl;
    
    		int select = 0;
    		cin >> select;
    		
    		for (int i = 0;i < m_EmNum;i++)
    		{
         
    			int minOrMax = i;//            
    			for (int j = i + 1;j <this->m_EmNum;j++ )
    			{
          
    			   if (select == 1)//  
    			   {
         
    				if (this->m_EmpArray[minOrMax]->m_id > this->m_EmpArray[j]->m_id)
    				{
         
    					minOrMax = j;
    				}
    			   }
    			  else//  
    			  {
         
    				 if (this->m_EmpArray[minOrMax]->m_id < this->m_EmpArray[j]->m_id)
    				 {
         
    					 minOrMax = j;
    				 }
    
    			  }
              //                             ,         
    			   if (i != minOrMax)
    			   {
         
    				   worker *temp = this->m_EmpArray[i];
    				   this->m_EmpArray[i] = this->m_EmpArray[minOrMax];
    				   this->m_EmpArray[minOrMax] = temp;
    			   }
    			}
            }
    		//    
    		cout << "    ,      :" << endl;
    		this->save();//           
    		this->Show_Emp();
    	}
    
    }
    
    //    
    void WorkManager::Clean_File()
    {
         
    	cout << "    " << endl;
    	cout << "1,、  2、      " << endl;
    
    	int select=0;
    	cin >> select;
    
    	if (select == 1)//    
    	{
         
    		ofstream ofs(FILENAME, ios::trunc);//         
    		ofs.close();
    
    		if (this->m_FileIsEmpty != NULL)
    		{
         
    			//           
    			for (int i = 0;i < this->m_EmNum;i++)
    			{
         
    				delete this->m_EmpArray[i];
    				this->m_EmpArray[i] = NULL;
    			}
    			//        
    			delete[] this->m_EmpArray;
    			this->m_EmpArray = 0;
    			this->m_FileIsEmpty = true;
    		}
    		cout << "    " << endl;
    	}
    	system("pause");
    	system("cls");
    	
    }
    
    WorkManager::~WorkManager()
    {
         
    	if (this->m_EmpArray != NULL)
    	{
         
    		delete[] this->m_EmpArray;
    		this->m_EmpArray = NULL;
    	}
    }
    
    
    //   
    	//    
    Employee::Employee(int id, string name, int number)
    {
         
    	this->m_id =id;
    	//    
    	this->m_name=name;
    	//    
    	this->m_number =number;
    }
    
    //      
     void Employee::showInfo()
    {
         
    	 cout << "    :" << this->m_id 
    	<< "\t    :" << this->m_name
    	<< "\t  :" << this->getDeptName() 
    		 <<"\t    :         "<< endl;
    }
    
    //    
     string Employee::getDeptName()
     {
         
    	 return string("  ");
     }
    
    
     //   
    	//    
     Manager::Manager(int id, string name, int number)
     {
         
    	 this->m_id = id;
    	 //    
    	 this->m_name = name;
    	 //    
    	 this->m_number = number;
     }
    
     //      
     void Manager::showInfo()
     {
         
    	 cout << "    :" << this->m_id
    		 << "\t    :" << this->m_name
    		 << "\t  :" << this->getDeptName()
    		 << "\t    :         " << endl;
     }
    
     //    
     string Manager::getDeptName()
     {
         
    	 return string("  ");
     }
    
    
     //   
       //    
     Boss::Boss(int id, string name, int number)
     {
         
    	 this->m_id = id;
    	 //    
    	 this->m_name = name;
    	 //    
    	 this->m_number = number;
     }
    
     //      
     void Boss::showInfo()
     {
         
    	 cout << "    :" << this->m_id
    		 << "\t    :" << this->m_name
    		 << "\t  :" << this->getDeptName()
    		 << "\t    :    " << endl;
     }
    
     //    
     string Boss::getDeptName()
     {
         
    	 return string("  ");
     }