小型学校人事管理系统

来源:互联网 发布:pdf拆分软件 编辑:程序博客网 时间:2024/04/28 05:27
/*头文件 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;
}