小型学校人事管理系统

/*头文件 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=0int no=0int 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=0int no=0int depart=0int 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();
else
printMess(
"查无此人 ");
}


void  del(vector < People *   >&  v,  int  obj)
{
vector
<People*>::iterator i = geti(v, obj);

if(i != v.end())
{
v.erase(i);
}

else
printMess(
"查无此人 ");
}

void  myfind(vector < People *   >&  v,  int  obj)
{
vector
<People*>::iterator i = geti(v, obj);

if(i != v.end())
(
*i)->print();
else
printMess(
"查无此人 ");
}

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;
}
 
  • 0
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值