员工信息系统

 
#include "stdafx.h"
#include 
#include 
#include 
#include 
#include 
#include 
#include 
using namespace std;
class manager;
class employeeInfo;
manager *gMgr;
string strDept[]={"IT","Sales","H.R.","F.D.","Porduct","P.R.D.","Admin"};
string strTitle[]={"Chairman","Director","Manager","Secretary","staff","supervisor"};
class employeeInfo
{
    public:
    typedef struct
    {
    int id;
    int department;
    int salary;
    int jobTitle;
    int entryDate;
    char name[40];
    } data;
    vector infoCollection;
    public:
    bool loadFile(string fname)
    {
        return true;
    }
    bool saveToFile()
    {
        return true;
    }
    friend class manager;
};
class manager
{
    class functor
    {
    
        public:
            int id;
            functor(int a):id(a){
            }
            bool operator()(employeeInfo::data a)
            {
                if(id==a.id)return true;
                return false;
            }
    };
    class create
    {
        public:
        int m_id;
        bool check()
        {
            
        }
        bool matchId(employeeInfo::data a)
        {
            if(m_id==a.id)return true;
            return false;
        }
        bool addAnEmployee(employeeInfo::data& a,manager *p=gMgr)
        {
            m_id=a.id;
            if(p->ee.infoCollection.size()==0){p->ee.infoCollection.push_back(a);return true;}
            vector::iterator it=find_if(p->ee.infoCollection.begin(),p->ee.infoCollection.end(),functor(m_id));
            if(it!=p->ee.infoCollection.end()){return false;}
            p->ee.infoCollection.push_back(a);
            return true;
        }    
    };
    class update
    {
        public:
        int m_id;
        bool matchId(employeeInfo::data a)
        {
            if(m_id==a.id)return true;
            return false;
        }
        bool modify(vector& a,manager *p=gMgr)
        {
            vector::iterator it=a.begin();
            while(it!=a.end())
            {
                m_id=it->id;
                vector::iterator t=find_if(p->ee.infoCollection.begin(),p->ee.infoCollection.end(),[](employeeInfo::data a)->bool {if(a.id)return true;return false;});
                if(t==p->ee.infoCollection.end()){++it;continue;}
                (*t)=(*it);
                ++it;
            }
            return true;
        }
    };
    class read
    {
        public:
            int m_id;
            int m_dept;
            vector m_container;
            bool matchId(employeeInfo::data a)
            {
                if(a.id==m_id)return true;
                return false;
            }
            bool matchDept(employeeInfo::data a)
            {
                if(a.department==m_dept){m_container.push_back(a);return true;}
                return false;
            }
            bool readById(int id,employeeInfo::data& a,manager *p=gMgr)
            {
                m_id=id;
                vector::iterator it=find_if(p->ee.infoCollection.begin(), 
                p->ee.infoCollection.end(),bind1st(mem_fun(&manager::read::matchId),this));
                if(it==p->ee.infoCollection.end())return false;
                a=*it;
                return true;
            }
            vector readByDept(int dept,manager *p=gMgr)
            {
                m_dept=dept;
                m_container.clear();
                for_each(p->ee.infoCollection.begin(),p->ee.infoCollection.end(),bind1st(mem_fun(&manager::read::matchDept),this));
                return m_container;
            }
    };
    class del
    {
        public:
            int m_id;
            bool matchId(employeeInfo::data a)
            {
                if(m_id==a.id)return true;
                return false;
            }
            bool delById(vector& a,manager *p=gMgr)
            {
                vector::iterator it=a.begin();
                while(it!=a.end())
                {
                    m_id=*it;
                    vector::iterator t=remove_if(p->ee.infoCollection.begin(),p->ee.infoCollection.end(), 
                    bind1st(mem_fun(&manager::del::matchId),this));
                    p->ee.infoCollection.resize(t-p->ee.infoCollection.begin());
                    ++it;
                }
                return true;
            }
    };
    public:
    employeeInfo& ee;
    manager(employeeInfo a):ee(a){}
    public:
    create creater;
    update updater;
    read reader;
    del deler;
};

class shell
{
    public:
        manager& mgr;
        shell(manager mgr):mgr(mgr){}
        void start()
        {
            int selection;
            cout<<"--------------------MainMenu-----------------------"<<endl;
            cout<<"1.insertAnRecord 2.readByStaffId 3.readByDepartment"<<endl<<"4.delSomeRecords 5.modifyARecord 6.readAll 7.exit"<<endl;
            cout<<"input:[operation code]+[content] or [conditions]"<<endl;
            cout<<"---------------------------------------------------"<<endl;    
            next:cin>>selection;
            switch(selection)
            {
                case 1:
                    insertAnRecord();
                    cin.clear();
                    cin.sync();
                    goto next;
                case 2:
                    readByStaffId();
                    cin.clear();
                    cin.sync();
                    goto next;
                case 3:
                    readByDept();
                    cin.clear();
                    cin.sync();
                    goto next;
                case 4:
                    delSomeRecords();
                    cin.clear();
                    cin.sync();
                    goto next;
                case 5:
                    updateARecord();
                    cin.clear();
                    cin.sync();
                    goto next;
                case 7:
                    exit(1);
                case 6:
                    readAll();
                    cin.clear();
                    cin.sync();
                    goto next;
                default:
                    cout<<"Select a valid instruction No. please."<<endl;
                    cin.clear();
                    cin.sync();
                    goto next;
            }
            
        }
        void insertAnRecord()
        {
            employeeInfo::data data;
            cin>>data.id>>data.department>>data.jobTitle>>data.salary>>data.entryDate>>data.name;
            bool flag=mgr.creater.addAnEmployee(data);
            if(flag)cout<<"added."<<endl;
            else cout<<"already exist."<<endl;
        }
        void readByStaffId()
        {
            int a;
            cin>>a;
            employeeInfo::data b;
            cout<<setiosflags(ios::left);
            cout<<"-----------------------------------------------------------"<<endl;
            cout<<setw(10)<<"ID"<<setw(10)<<"DEPT."<<setw(10)<<"NAME"<<setw(10)<<"TITLE"<<setw(10)<<"WAGE"<<setw(10)<<"DOE"<<setw(10)<<endl;
            cout<<"-----------------------------------------------------------"<<endl;
            if(!mgr.reader.readById(a,b)){cout<<"search done."<<endl;return;}
            cout<<setw(10)<<b.id<<setw(10)<<strDept[b.department].c_str()<<setw(10)<<b.name<<setw(10)<<strTitle[b.jobTitle].c_str()<<setw(10)<<b.salary<<setw(10)<<b.entryDate<<setw(10)<<endl;    
            cout<<"search done."<<endl;
        }
        void readByDept()
        {
            int a;
            cin>>a;
            vector b=mgr.reader.readByDept(a);
            vector::iterator it=b.begin();
            cout<<setiosflags(ios::left);
            cout<<"-----------------------------------------------------------"<<endl;
            cout<<setw(10)<<"ID"<<setw(10)<<"DEPT."<<setw(10)<<"NAME"<<setw(10)<<"Title"<<setw(10)<<"WAGE"<<setw(10)<<"DOE"<<setw(10)<<endl;
            cout<<"-----------------------------------------------------------"<<endl;
            while(it!=b.end())
            {
                cout<<setw(10)<id<<setw(10)<<strDept[it->department].c_str()<<setw(10)<name<<setw(10)<<strTitle[it->jobTitle].c_str()<<setw(10)<salary<<setw(10)<entryDate<<setw(10)<<endl;
                ++it;
            }
            cout<<"search done."<<endl;
        }
        void delSomeRecords()
        {
            vector a;
            int b;
            while(cin>>b)
            {
                a.push_back(b);
            }
            cout<<"deleted"<<endl;
            mgr.deler.delById(a);
        }
        void updateARecord()
        {
            vector a;
            employeeInfo::data b;
            cin>>b.id>>b.department>>b.jobTitle>>b.salary>>b.entryDate>>b.name;
            a.push_back(b);
            mgr.updater.modify(a);
            cout<<"updated."<<endl;
        }
        void readAll()
        {
            vector::iterator it=mgr.ee.infoCollection.begin();
            cout<<setiosflags(ios::left);
            cout<<"-----------------------------------------------------------"<<endl;
            cout<<setw(10)<<"ID"<<setw(10)<<"DEPT."<<setw(10)<<"NAME"<<setw(10)<<"Title"<<setw(10)<<"WAGE"<<setw(10)<<"DOE"<<setw(10)<<endl;
            cout<<"-----------------------------------------------------------"<<endl;
            while(it!=mgr.ee.infoCollection.end())
            {
                cout<<setw(10)<id<<setw(10)<<strDept[it->department].c_str()<<setw(10)<name<<setw(10)<<strTitle[it->jobTitle].c_str()<<setw(10)<salary<<setw(10)<entryDate<<setw(10)<<endl;
                ++it;
            }
            cout<<"search done."<<endl;
        }
};
int main()
{
    employeeInfo ee;
    ee.loadFile("1.txt");
    manager mgr(ee);
    gMgr=&mgr;
    shell sh(mgr);
    sh.start();
    return 0;
}
相信世界是平的
谨记四个字“修身养性”
大江东去浪淘尽英雄,再牛B的人物最后也是一掊土
向善不是目的,而是抚慰心灵,更多的感受幸福,感谢别人给你行善的机会
相信老子的话:万物生于有,有生于无,一切的道理都源于一个无法证明的假设
我是好是坏就自然而然的摆在那里,并不会因为别人的评价而改变什么,我也不需要别人用一张纸来说明我什么,世间最难得的是自由



支持大额赞助:
原文地址:https://www.cnblogs.com/sky-view/p/3900778.html