/**/ /*头文件 StuTeach.h */ // Y: #ifndef STUTEACH_H #define STUTEACH_H #include < string > #include < vector > class People ... {public:People(std::string name="" , bool sex=0):m_name(name),m_sex(sex)...{}virtual ~People();virtual void input();virtual void print();virtual void edit();virtual int getNo() const;protected:std::string m_name;bool m_sex;} ; class Teacher: public People ... {public:Teacher(std::string name="", bool sex=0, int no=0, int depart=0, std::string title=""):People(name,sex),m_no(no),m_depart(depart),m_title(title)...{}virtual ~Teacher();virtual void input();virtual void print();virtual void edit();virtual int getNo() const;private:int m_no;int m_depart;std::string m_title;} ; class Student: public People ... {public:Student(std::string name="", bool sex=0, int no=0, int depart=0, int grade=0):People(name,sex),m_no(no),m_depart(depart),m_grade(grade)...{}virtual ~Student();virtual void input();virtual void print();virtual void edit();virtual int getNo() const;private:int m_no;int m_depart;int m_grade;} ; class FindFunObj ... {//函数对象,public:FindFunObj(People* pt=NULL):p(pt)...{}bool operator()(const People* pp)...{return (pp->getNo() == p->getNo());}private:const People* p;} ; enum OP ... {ADD=1, EDIT, DEL, FIND, PRINT, BACK} ; enum OBJ ... {TEACH=1, STU, QUIT} ; // 全局函数声明 void printMess( const char * m); bool checkNo( const std::vector < People *>& vv, People * p); bool ascByNo(People * p1, People * p2); void addIn(std::vector < People *>& v, int obj); int who( int obj);std::vector < People *> ::iterator geti(std::vector < People * >& v, int obj); void edit(std::vector < People * >& v, int obj); void del(std::vector < People * >& v, int obj); void myfind(std::vector < People * >& v, int obj); void myprint(std::vector < People * >& v); void manage(std::vector < People *>& vp, int obj); #endif /**/ //// /**/ /*函数实现文件 StuTeach.cpp */ // Y: #include " StuTeach.h " #include < string > #include < iostream > #include < algorithm > using namespace std; /**/ //// Member Functions of People People:: ~ People() ... {} void People::input() ... {cout << "输入姓名:";cin >> m_name;cout << "输入性别(0-男,1-女):";cin >> m_sex;} void People::print() ... {cout << "姓名:" << m_name <<endl;cout << "性别:" << (m_sex == 0 ? "男" : "女") <<endl;} void People::edit() ... {cout << "修改姓名为:";cin >> m_name;cout << "修改性别(0-男,1-女)为:";cin >> m_sex;} int People::getNo() const ... {return 0;} /**/ //// Member Functions of Teacher Teacher:: ~ Teacher() ... {} void Teacher::input() ... {cout << "输入职工号:";cin >> m_no;People::input();cout << "输入系号:" ;cin >> m_depart;cout << "输入职称:";cin >> m_title;} void Teacher::print() ... {cout << "职工号:" << m_no <<endl;People::print();cout << "系号:" << m_depart <<endl;cout << "职称:" << m_title << endl;} void Teacher::edit() ... {cout << "修改职工号为:";cin >> m_no;People::edit();cout << "修改系号为:" ;cin >> m_depart;cout << "修改职称为:";cin >> m_title;} int Teacher::getNo() const ... {return m_no;} /**/ //// Member Functions of Student Student:: ~ Student() ... {} void Student::input() ... {cout << "输入学号:";cin >> m_no;People::input();cout << "输入系号:" ;cin >> m_depart;cout << "输入年级:";cin >> m_grade;} void Student::print() ... {cout << "学号:" << m_no <<endl;People::print();cout << "系号:" << m_depart <<endl;cout << "年级:" << m_grade << endl;} void Student::edit() ... {cout << "修改学号为:";cin >> m_no;People::edit();cout << "修改系号为:" ;cin >> m_depart;cout << "修改年级为:";cin >> m_grade;} int Student::getNo() const ... {return m_no;} /**/ ////全局函数定义 void printMess( const char * m) ... {cout << m;} bool checkNo( const vector < People *>& vv, People * p) ... {vector<People*>::const_iterator i = find_if(vv.begin(), vv.end(), FindFunObj(p));return i != vv.end();} bool ascByNo(People * p1, People * p2) // 按号码递增排序的函数对象 ... {return (p1->getNo() < p2->getNo());} void addIn(vector < People *>& v, int obj) ... {People* pnew=NULL;if(obj == TEACH)pnew = new Teacher();else if(obj == STU)pnew = new Student();else...{printMess("对象错误 ");return;}pnew->input();if(!checkNo(v, pnew))...{v.push_back(pnew);sort(v.begin(), v.end(), ascByNo);}else...{printMess("号码冲突,添加失败 ");delete pnew;}} int who( int obj) ... {if(obj == TEACH)printMess("输入职工号:");else if(obj == STU)printMess("输入学号:");else...{printMess("对象错误 ");return -1;}int w;cin >> w;return w;} vector < People *> ::iterator geti(vector < People * >& v, int obj) ... {int w = who(obj);vector<People*>::iterator i;for(i= v.begin(); i != v.end(); ++i)...{if((*i)->getNo() == w)break;}return i;} void edit(vector < People * >& v, int obj) ... {vector<People*>::iterator i = geti(v, obj);if(i != v.end())(*i)->edit();elseprintMess("查无此人 ");} void del(vector < People * >& v, int obj) ... {vector<People*>::iterator i = geti(v, obj);if(i != v.end())...{v.erase(i);}elseprintMess("查无此人 ");} void myfind(vector < People * >& v, int obj) ... {vector<People*>::iterator i = geti(v, obj);if(i != v.end())(*i)->print();elseprintMess("查无此人 ");} void myprint(vector < People * >& v) ... {for(vector<People*>::const_iterator ci = v.begin(); ci != v.end(); ++ci)...{(*ci)->print();printMess("---------- ");}} void manage(vector < People *>& vp, int obj) ... {printMess("1.添加 ");printMess("2.修改 ");printMess("3.删除 ");printMess("4.查询 ");printMess("5.打印 ");printMess("6.返回 ");printMess("请选择:");int op;while(cin >> op)...{if(op == BACK)break;switch(op)...{case ADD:addIn(vp, obj);break;case EDIT:edit(vp, obj);break;case DEL:del(vp, obj);break;case FIND:myfind(vp, obj);break;case PRINT:myprint(vp);break;default:printMess("无此操作 ");break;}printMess("请选择:");}} /**/ /// /**/ /*测试文件 main.cpp*/ // Y: #include " StuTeach.h " #include < iostream > #include < vector > using namespace std; int main() ... {vector<People*> vpTeach, vpStu;printMess("1.处理教师信息 ");printMess("2.处理学生信息 ");printMess("3.退出程序 ");printMess("请选择:");int obj;while(cin >> obj)...{if(obj == QUIT)break;switch(obj)...{case TEACH:manage(vpTeach, obj);break;case STU:manage(vpStu, obj);break;default:printMess("无此操作对象 ");break;}printMess("请选择:");}return 0;}