#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; }