
/**//*头文件StuTeach.h*/
//Y:
#ifndefSTUTEACH_H
#defineSTUTEACH_H
#include<string>
#include<vector>

classPeople...{
public:
People(std::stringname="",boolsex=0)
:m_name(name),m_sex(sex)
...{}
virtual~People();
virtualvoidinput();
virtualvoidprint();
virtualvoidedit();
virtualintgetNo()const;
protected:
std::stringm_name;
boolm_sex;
};

classTeacher:publicPeople...{
public:
Teacher(std::stringname="",boolsex=0,intno=0,intdepart=0,std::stringtitle="")
:People(name,sex),m_no(no),m_depart(depart),m_title(title)
...{}
virtual~Teacher();
virtualvoidinput();
virtualvoidprint();
virtualvoidedit();
virtualintgetNo()const;
private:
intm_no;
intm_depart;
std::stringm_title;
};

classStudent:publicPeople...{
public:
Student(std::stringname="",boolsex=0,intno=0,intdepart=0,intgrade=0)
:People(name,sex),m_no(no),m_depart(depart),m_grade(grade)
...{}
virtual~Student();
virtualvoidinput();
virtualvoidprint();
virtualvoidedit();
virtualintgetNo()const;
private:
intm_no;
intm_depart;
intm_grade;
};

classFindFunObj...{//函数对象,
public:
FindFunObj(People*pt=NULL):p(pt)...{}
booloperator()(constPeople*pp)
...{
return(pp->getNo()==p->getNo());
}
private:
constPeople*p;
};

enumOP...{ADD=1,EDIT,DEL,FIND,PRINT,BACK};
enumOBJ...{TEACH=1,STU,QUIT};
//全局函数声明
voidprintMess(constchar*m);
boolcheckNo(conststd::vector<People*>&vv,People*p);
boolascByNo(People*p1,People*p2);
voidaddIn(std::vector<People*>&v,intobj);
intwho(intobj);
std::vector<People*>::iteratorgeti(std::vector<People*>&v,intobj);
voidedit(std::vector<People*>&v,intobj);
voiddel(std::vector<People*>&v,intobj);
voidmyfind(std::vector<People*>&v,intobj);
voidmyprint(std::vector<People*>&v);
voidmanage(std::vector<People*>&vp,intobj);
#endif

/**/////////////////////////////////////////////////////

/**//*函数实现文件StuTeach.cpp*/
//Y:
#include"StuTeach.h"
#include<string>
#include<iostream>
#include<algorithm>
usingnamespacestd;

/**/////MemberFunctionsofPeople
People::~People()
...{}
voidPeople::input()
...{
cout<<"输入姓名:";
cin>>m_name;
cout<<"输入性别(0-男,1-女):";
cin>>m_sex;
}
voidPeople::print()
...{
cout<<"姓名:"<<m_name<<endl;
cout<<"性别:"<<(m_sex==0?"男":"女")<<endl;
}
voidPeople::edit()
...{
cout<<"修改姓名为:";
cin>>m_name;
cout<<"修改性别(0-男,1-女)为:";
cin>>m_sex;
}
intPeople::getNo()const
...{
return0;
}
/**/////MemberFunctionsofTeacher
Teacher::~Teacher()
...{}
voidTeacher::input()
...{
cout<<"输入职工号:";
cin>>m_no;
People::input();
cout<<"输入系号:";
cin>>m_depart;
cout<<"输入职称:";
cin>>m_title;
}
voidTeacher::print()
...{
cout<<"职工号:"<<m_no<<endl;
People::print();
cout<<"系号:"<<m_depart<<endl;
cout<<"职称:"<<m_title<<endl;
}
voidTeacher::edit()
...{
cout<<"修改职工号为:";
cin>>m_no;
People::edit();
cout<<"修改系号为:";
cin>>m_depart;
cout<<"修改职称为:";
cin>>m_title;
}
intTeacher::getNo()const
...{
returnm_no;
}
/**/////MemberFunctionsofStudent
Student::~Student()
...{}
voidStudent::input()
...{
cout<<"输入学号:";
cin>>m_no;
People::input();
cout<<"输入系号:";
cin>>m_depart;
cout<<"输入年级:";
cin>>m_grade;
}
voidStudent::print()
...{
cout<<"学号:"<<m_no<<endl;
People::print();
cout<<"系号:"<<m_depart<<endl;
cout<<"年级:"<<m_grade<<endl;
}
voidStudent::edit()
...{
cout<<"修改学号为:";
cin>>m_no;
People::edit();
cout<<"修改系号为:";
cin>>m_depart;
cout<<"修改年级为:";
cin>>m_grade;
}
intStudent::getNo()const
...{
returnm_no;
}

/**/////全局函数定义
voidprintMess(constchar*m)
...{cout<<m;}
boolcheckNo(constvector<People*>&vv,People*p)
...{
vector<People*>::const_iteratori
=find_if(vv.begin(),vv.end(),FindFunObj(p));
returni!=vv.end();
}
boolascByNo(People*p1,People*p2)//按号码递增排序的函数对象
...{
return(p1->getNo()<p2->getNo());
}
voidaddIn(vector<People*>&v,intobj)
...{
People*pnew=NULL;
if(obj==TEACH)
pnew=newTeacher();
elseif(obj==STU)
pnew=newStudent();
else
...{
printMess("对象错误 ");
return;
}
pnew->input();
if(!checkNo(v,pnew))
...{
v.push_back(pnew);
sort(v.begin(),v.end(),ascByNo);
}
else
...{
printMess("号码冲突,添加失败 ");
deletepnew;
}
}
intwho(intobj)
...{
if(obj==TEACH)
printMess("输入职工号:");
elseif(obj==STU)
printMess("输入学号:");
else
...{
printMess("对象错误 ");
return-1;
}
intw;
cin>>w;
returnw;
}
vector<People*>::iteratorgeti(vector<People*>&v,intobj)
...{
intw=who(obj);
vector<People*>::iteratori;
for(i=v.begin();i!=v.end();++i)
...{
if((*i)->getNo()==w)
break;
}
returni;
}
voidedit(vector<People*>&v,intobj)
...{
vector<People*>::iteratori=geti(v,obj);
if(i!=v.end())
(*i)->edit();
else
printMess("查无此人 ");
}
voiddel(vector<People*>&v,intobj)
...{
vector<People*>::iteratori=geti(v,obj);
if(i!=v.end())
...{
v.erase(i);
}
else
printMess("查无此人 ");
}
voidmyfind(vector<People*>&v,intobj)
...{
vector<People*>::iteratori=geti(v,obj);
if(i!=v.end())
(*i)->print();
else
printMess("查无此人 ");
}
voidmyprint(vector<People*>&v)
...{
for(vector<People*>::const_iteratorci=v.begin();ci!=v.end();++ci)
...{
(*ci)->print();
printMess("---------- ");
}
}
voidmanage(vector<People*>&vp,intobj)
...{
printMess("1.添加 ");
printMess("2.修改 ");
printMess("3.删除 ");
printMess("4.查询 ");
printMess("5.打印 ");
printMess("6.返回 ");
printMess("请选择:");
intop;
while(cin>>op)
...{
if(op==BACK)
break;
switch(op)
...{
caseADD:
addIn(vp,obj);
break;
caseEDIT:
edit(vp,obj);
break;
caseDEL:
del(vp,obj);
break;
caseFIND:
myfind(vp,obj);
break;
casePRINT:
myprint(vp);
break;
default:
printMess("无此操作 ");
break;
}
printMess("请选择:");
}
}

/**////////////////////////////////////////////////////////////////////

/**//*测试文件main.cpp*/
//Y:
#include"StuTeach.h"
#include<iostream>
#include<vector>
usingnamespacestd;
intmain()
...{
vector<People*>vpTeach,vpStu;
printMess("1.处理教师信息 ");
printMess("2.处理学生信息 ");
printMess("3.退出程序 ");
printMess("请选择:");
intobj;
while(cin>>obj)
...{
if(obj==QUIT)
break;
switch(obj)
...{
caseTEACH:
manage(vpTeach,obj);
break;
caseSTU:
manage(vpStu,obj);
break;
default:
printMess("无此操作对象 ");
break;
}
printMess("请选择:");
}
return0;
}
711

被折叠的 条评论
为什么被折叠?



