zoukankan      html  css  js  c++  java
  • C++大作业——教职工管理系统

    教职工信息管理系统

    1、问题描述:

    设计一个学校职工管理系统,要求实现如下功能:建立职工信息数据,

    包括职工编号、姓名、 性别、工资、出生时间、岗位、参加工作时间和年

    龄(必须计算得到),初始模拟数据通过文本文件创建(记录不少于 20 个),

    通过程序载入。求职工(工人和教师分开)的平均年龄;查找、添加或删

    除一个雇员;浏览全部信息等。

    2、设计要求:

    (1)使用继承的方法构造 3 个类,(即雇员类——虚基类,教师类(有

    职称和所在系,按职称工资发工资)和工人类(有技术级和部门,按技术

    级发工资) ——派生类),另外再设计一个管理类,实现对职工的管理;

    (2)用文本编辑器编辑一个文本文件(总数 20 人以上)包含各类人

    员的信息,程序运行时进行初始化数据, 使用 vector 数组存放对象指针。

    并能保存数据为磁盘文件。

    (3)编写同名 display()成员函数既虚函数,用来输出所有雇员的信

    息。要求对“<<” 和“>>” 运算符进行重载,实现信息的输入,输

    出。

    (4)菜单功能: 添加人员,修改人员信息,浏览人员信息,按姓名

    查找,平均年龄,删除人员。

    3、问题的解决方案:

    根据系统功能要求,可以将问题解决分为以下步骤:

    (1)应用系统分析,建立该系统的功能模块框图以及界面的组织和设

    计;

    (2)分析系统中的各个实体及它们之间的关系;

    (3)根据问题描述,设计系统的类层次;

    (4)完成类层次中各个类的描述;

    (5)完成类中各个成员函数的定义;

    (6)完成系统的应用模块;

    (7)功能调试;

    (8)完成系统总结报告。

    代码如下,仅供参考:

    头文件 HEAD,h

    #define _CRT_SECURE_NO_WARNINGS
    #include<iostream> 
    #include <string>
    #include <ctime>
    #include <conio.h>
    #include <vector>
    #include <fstream> 
    #include <iomanip>
    using namespace std;
    #define SIZE 5
    /*-------------------------------------全局变量-------------------------------------*/
      /*定义在头文件中的全局变量,每被#include一次,就会被声明定义一次,申请一块新内存*/
    static int g_num_t;	//教师总人数
    static int g_num_w;	//职工总人数
    static int g_age_t = 0;	//教师总年龄
    static int g_age_w = 0;	//职工总年龄
    
    /*-------------------------------------日 期 类-------------------------------------*/
    class Date
    {
    private:
    	int year;
    	int month;
    	int day;
    public:
    	Date(int y = 1919,int m = 1, int d = 1):year(y),month(m),day(d) {}
    	~Date() {}
    	istream & operator>>(istream &in);
    	ostream & operator<<(ostream &out) const;
    	int GetAge() const;		//返回至今过了多少年,用于求年龄
    	bool Chack();			//检查输入日期是否合法
    };
    
    /*避免用友元的方式实现运算符的输出方式*/
    istream & operator>>(istream &in,Date &date);
    ostream & operator<<(ostream &out,const Date &date);
    
    /*-------------------------------------共 有 类-------------------------------------*/ 
    class Person//公有类 
    { 
    protected: 
    int		number;		//编号 
    int		salary;		//工资
    int		age;		//年龄 
    string	name;		//姓名 
    string	sex;		//性别
    string  post;		//岗位
    Date	birthtime;	//出生时间
    Date	worktime;	//参加工作
    public:
    //virtual bool display();		//输出成员信息
    }; 
    
    /*------------------------教 师 类--------------------------------------*/ 
    class Teacher: public Person		//教师类 
    { 
    protected:  
    	string position;	//职称
    	string department;	//所在系
    public: 
    
    	Teacher(){}
    	~Teacher() {}
    	string Name()	const;		//获取姓名		用于按姓名查找
    	int    Number()	const;		//获取编号		用于按编号查找 检查编号是否输入正确
    	void   display()const;		//显示个人信息
    	int    Getage()	const;		//获得年龄      用于求平均年龄
    	int    Getnum() const;		//获得编号		检查编号是否输入正确
    	bool CheckBirthData();		//检查输入的出生日期是否合法
    	bool CheckWorkData ();		//检查输入的参加工作日期是否合法
    	istream & operator>>(istream &in);
    	ostream & operator<<(ostream &out) const;
    
    };
    
    istream & operator>>(istream &in,Teacher &teacher);
    ostream & operator<<(ostream &out,const Teacher &teacher);
    
    /*------------------------职 工 类--------------------------------------*/ 
    class Worker: public Person		//职工类 
    { 
    protected:  
    	string Technical;	//技术级
    	string department;	//部门
    public: 
    	Worker() {}
    	~Worker() {}
    	string Name()	const;		//获取姓名		用于按姓名查找
    	int	   Number()	const;		//获取编号		用于按编号查找
    	void   display()const;		//显示个人信息
    	int    Getage()	const;		//获得年龄      用于求平均年龄
    	bool CheckBirthData();		//检查输入的出生日期是否合法
    	bool CheckWorkData ();		//检查输入的参加工作日期是否合法
    	istream & operator>>(istream &in);
    	ostream & operator<<(ostream &out) const;
    
    };
    
    istream & operator>>(istream &in,Worker &worker);
    ostream & operator<<(ostream &out,const Worker &worker);
    /*------------------------管 理 类--------------------------------------*/ 
    class Manage
    {
    private:
    	vector<Teacher*> Teachdata;
    	vector<Worker* > Workdata;
    public:
    	Manage() {LoadData();}
    	~Manage() 
    	{ 
    		SaveData();			//保存数据	程序正常退出才会保存数据
    		FreeTeacher();		//释放new出的堆空间
    		FreeWorker();
    	}
    
    	void SaveData() const;	//保存数据
    	void LoadData();		//加载数据
    	void MainMenu();		//主菜单
    
    	bool AddTeacher();		//增加教师
    	bool AddWorker();		//增加职工
    	void DelItemTeacher();	//删除教师
    	void DelItemWorker();	//删除职工
    	bool FindTeacher_name(string _name);	//查找教师-按姓名
    	bool FindWorker_name(string _name);		//查找职工-按姓名
    	bool FindTeacher_num(int _num);			//查找教师-按编号
    	bool FindWorker_num(int _num);			//查找职工-按编号
    	void UpdateTeacher();	//修改教师
    	void UpdateWorker();	//修改职工
    	void ShowDataTeacher()const;	//输出教师
    	void ShowDataWorker()const;		//输出职工
    	void Aver_ageTeacher();		//输出教师平均年龄
    	void Aver_ageWorker();		//输出职工平均年龄
    	void MangeTeacher();		//二级菜单——管理教师	实现对教师的增删查改功能
    	void MangeWorker();			//二级菜单——管理职工	实现对职工的增删查改功能
    	void FreeTeacher();			//释放new出的空间
    	void FreeWorker();			//释放new出的空间 
    	/* 说明:vector存储的对象指针,在增加对象时用到new构建对象,析构时需要手动释放new出的空间 */
    };
    
    
    /*   输入框提示  便于调整表格以适应数据输出  可并入各输出函数中 */
    void Format_t();
    void Format_w();
    /*  可并入MangeTeacher()和MangeWorker()中 */
    void TeacherMenu();		//教师菜单
    void WorkerMenu();		//职工菜单

    头文件的实现 HEAD.cpp

    #include"HEAD.h"
    /*-------------------------------------日 期 类-------------------------------------*/
    istream & Date::operator>>(istream &in)
    {
    	//char ch;
    	//in>>year>>ch>>month>>ch>>day;		/*输入格式:'/'分隔*/
    	in>>year>>month>>day;				/*输入格式:空格分隔*/
    	return in;
    }
    ostream & Date::operator<<(ostream &out) const
    {
    	//out<<year<<"/"<<month<<"/"<<day<<" ";			/*输出格式:'/'分隔*/
    	out<<year<<" "<<month<<" "<<day<<" ";			/*输出格式:空格分隔*/
    	return out;
    }
    
    int Date::GetAge() const
    {
    	time_t te;
    	time(&te);
    	tm * p = localtime(&te);
    
    	return  p->tm_year + 1900 - year;
    }
    
    bool Date::Chack()
    {
    	time_t te = time(NULL);				/*这句返回的只是一个时间戳*/
    	tm* t= localtime(&te);
    	int year =  t->tm_year + 1900;		/*最小年龄,当年出生,0岁*/
    	if(this->GetAge() < 0)	return false;	/* 未出生 */
    	if(this->year < (year-100) || this->year > year)	return false;/*未出生或是已经出生但大于等于100岁(退休)*/
    	switch(month)
    	{
    	case 1: case 3: case 5: case 7: case 8: case 10: case 12:
    		if(day<1 || day>31)			
    		{
    			return false;
    		}
    		break;
    	case 4: case 6: case 9:case 11:
    		if(day<1 || day>30)
    		{
    			return false;
    		}
    		break;
    	case 2:
    		if(year % 4 ==0 && year % 100 !=0 || year % 400 ==0)	/*是闰年*/
    		{
    			if(day<1 || day>29)	
    			{
    				return false;		/*闰年二月最多29天*/
    			}
    			else if(day<1 || day>28)
    			{
    				return false;		/*平年二月最多28天*/
    			}
    		}
    		break;
    	default:
    		return false;
    		break;
    	}
    
    	return true;
    }
    
    istream & operator>>(istream &in,Date &date)
    {
    	date>>in;
    	return in;
    }
    
    ostream & operator<<(ostream &out,const Date &date)
    {
    	date<<out;
    	return out;
    }
    
    /*------------------------教 师 类--------------------------------------*/ 
    string Teacher::Name()const
    {
    	return this->name;
    }
    
    int Teacher::Number()const
    {
    	return this->number;
    }
    
    void Teacher::display()const
    {
    	cout << *this << this->birthtime.GetAge() << endl;
    }
    
    bool Teacher::CheckBirthData()
    {
    	return (this->birthtime).Chack();
    }
    bool Teacher::CheckWorkData()
    {
    	return (this->worktime).Chack();
    }
    
    int Teacher::Getage()const
    {
    	return this->birthtime.GetAge();
    }
    
    istream & Teacher::operator>>(istream &in)
    {
    	in>>number>>name>>sex>>salary>>birthtime>>post>>worktime>>position>>department;
    	return in;
    }
    ostream & Teacher::operator<<(ostream &out) const
    {
    	cout.width(5);
    	cout.fill(0);
    		out<<setw(5)<<setfill('0')<<number<<"	 "<<name<<"	 "<<sex<<"	 "<<salary<<"	 "<<birthtime<<" "
    		<<post<<"   "<<worktime<<"   "<<position<<"  "<<department<<"	";
    	return out;
    }
    
    istream & operator>>(istream &in,Teacher &teacher)
    {
    	teacher>>in;
    	return in;
    }
    
    ostream & operator<<(ostream &out,const Teacher &teacher)
    {
    	teacher<<out;
    	return out;
    }
    
    /*------------------------职 工 类--------------------------------------*/ 
    
    
    string Worker::Name()const
    {
    	return this->name;
    }
    
    int Worker::Number()const
    {
    	return this->number;
    }
    
    void Worker::display()const
    {
    	cout << *this << birthtime.GetAge() << endl;
    }
    
    int Worker::Getage()const
    {
    	return this->birthtime.GetAge();
    }
    
    bool Worker::CheckBirthData()
    {
    	return (this->birthtime).Chack();
    }
    bool Worker::CheckWorkData()
    {
    	return (this->worktime).Chack();
    }
    
    istream & Worker::operator>>(istream &in)
    {
    	in>>number>>name>>sex>>salary>>birthtime>>post>>worktime>>Technical>>department;
    	return in;
    }
    ostream & Worker::operator<<(ostream &out) const
    {
    	cout.width(5);
    	cout.fill(0);
    	out<<setw(5)<<setfill('0')<<number<<"	 "<<name<<"	 "<<sex<<"	 "<<salary<<"	 "<<birthtime<<" "
    		<<post<<"   "<<worktime<<"   "<<Technical<<"  "<<department<<"	";
    	return out;
    }
    
    istream & operator>>(istream &in,Worker &worker)
    {
    	worker>>in;
    	return in;
    }
    
    ostream & operator<<(ostream &out,const Worker &worker)
    {
    	worker<<out;
    	return out;
    }
    
    
    /*------------------------管 理 类--------------------------------------*/ 
    
    void Manage::SaveData() const
    {
    	g_num_t = Teachdata.size();
    	g_num_w = Workdata.size();
    
    	/**文件顺序**/
    	ofstream wout("Worker.dat",ios::out);/* 读取职工文件 */
    	if(!wout)
    	{
    		cout<<"open file "Worker.txt" error "<<endl;
    		return ;
    	}
    	wout<<g_num_w<<endl;
    	vector<Worker*>::const_iterator it_w = Workdata.begin();
    	for(; it_w != Workdata.end(); ++it_w)
    	{
    		wout<< *(*it_w) <<endl;
    	}
    	wout.close();
    
    	ofstream tout("Teacher.dat",ios::out);/* 读取教师文件 */
    	if(!tout)
    	{
    		cout<<"open file "Teacher.txt" error "<<endl;
    		return ;
    	}
    	tout<<g_num_t<<endl;
    	vector<Teacher*>::const_iterator it_t = Teachdata.begin();
    	for(; it_t != Teachdata.end(); ++it_t)
    	{
    		tout<< *(*it_t) <<endl;
    	}
    	tout.close();
    
    }
    void Manage::LoadData()
    {
    	
    	
    
    	/**文件顺序**/
    	ifstream win("Worker.dat",ios::in);
    	if(!win)
    	{
    		cout<<"打开失败,没有找到Worker文件"<<endl;
    		return ;
    	}
    	win>>g_num_w;
    	for(int i = 0;i<g_num_w;++i)
    	{
    		Worker  *worker = new Worker;
    		win >> *worker;
    		Workdata.push_back(worker);
    		g_age_w += worker->Getage();
    	}
    	win.close();
    
    	ifstream tin("Teacher.dat",ios::in);
    	if(!tin)
    	{
    		cout<<"打开失败,没有找到Teacher文件"<<endl;
    		return ;
    	}
    	tin>>g_num_t;
    	for(int i = 0;i<g_num_t;++i)
    	{
    		Teacher *teacher = new Teacher;
    		tin >> *teacher;
    		Teachdata.push_back(teacher);
    		g_age_t += teacher->Getage();
    	}
    	tin.close();
    	
    	
    }
    
    bool Manage::AddTeacher()
    {
    	cout << "请依次输入:						"按Q/q取消"" << endl;
    	Format_t();
    	cout << endl;
    	Teacher *te = new Teacher;
    	cin >> *te;			//bug尚无法判断输入是否完整
    	cout << endl;
    	//清空缓冲区		防止输入错误进入死循环
    	cin.clear();
    	cin.sync();
    	/*   检验输入信息是否合法,不合法添加失败   */
    	if((te->Number()) >= pow(10.0,SIZE) || (te->Number()) <= 0)	
    	{    /* 大于编号上限   或   编号输入错误,呈现负数 */
    		cout << "	取消输入或编号输入错误,
    		退出添加..." << endl;
    		return false;	
    	}
    	if(FindTeacher_num(te->Number()))
    	{
    		cout << "
    警告:输入编号与已有人员重复,添加失败!!!
    ";
    		return false;
    	}
    	if(!(te->CheckBirthData()))
    	{
    		cout << "
    警告:输入出生日期有误,添加失败
    ";
    		return false;
    	}
    	if(!(te->CheckWorkData()))
    	{
    		cout << "
    警告:输入工作日期有误,添加失败
    ";
    		return false;
    	}
    	if(FindTeacher_name(te->Name()))
    	{
    		cout << "
    提醒:输入姓名与已有人员重复
    ";
    	}
    
    	Teachdata.push_back(te);
    	cout << "	☆添加成功!!!☆" <<endl;
    	return true;
    }
    bool Manage::AddWorker()		//增加职工
    {
    	cout << "请依次输入:						"按Q/q取消"" << endl;
    	Format_w();
    	cout << endl;
    	Worker *tw = new Worker;
    	cin >> *tw;					//bug尚无法判断输入是否完整
    	cout << endl;
    	//清空缓冲区				防止输入错误进入死循环
    	cin.clear();
    	cin.sync();
    	/*   检验输入信息是否合法,不合法添加失败   */
    	if((tw->Number()) >= pow(10.0,SIZE) || (tw->Number()) <= 0)	
    	{    /* 大于编号上限   或   编号输入错误,呈现负数 */
    		cout << "	取消输入或编号输入错误,
    		退出添加..." << endl;
    		return false;	
    	}
    	if(FindWorker_num(tw->Number()))
    	{
    		cout << "
    警告:输入编号与已有人员重复,添加失败!!!
    ";
    		return false;
    	}
    	if(!(tw->CheckBirthData()))
    	{
    		cout << "
    警告:输入出生日期有误,添加失败
    ";
    		return false;
    	}
    	if(!(tw->CheckWorkData()))
    	{
    		cout << "
    警告:输入工作日期有误,添加失败
    ";
    		return false;
    	}
    	if(FindWorker_name(tw->Name()))	/* 提醒重名,添加成功 */
    	{
    		cout << "
    提醒:输入姓名与已有人员重复
    ";
    	}
    	Workdata.push_back(tw);
    	cout << "	☆添加成功!!!☆" <<endl;
    	return true;
    }
    
    void Manage::DelItemTeacher()			//删除数据
    {
    	cout << "请输入想要删除的姓名
    	—>>";
    	string _name;
    	cin >> _name;
    	vector<Teacher*>::const_iterator it_t = Teachdata.begin();
    	while((*it_t)->Name() != _name)
    	{
    		++it_t;
    		if(it_t == Teachdata.end())
    		{
    			cout << "姓名输入错误,查无此人" <<endl;
    			return ;
    		}
    	}
    
    	Teachdata.erase(it_t);
    	cout << "删除成功" ;
    }
    void Manage::DelItemWorker()
    {
    	cout << "请输入想要删除的姓名
    	—>>";
    	string _name;
    	cin >> _name;
    	vector<Worker*>::const_iterator it_w = Workdata.begin();
    	while((*it_w)->Name() != _name)
    	{
    		++it_w;
    		if(it_w == Workdata.end())
    		{
    			cout << "姓名输入错误,查无此人" <<endl;
    			return ;
    		}
    	}
    
    	Workdata.erase(it_w);
    	cout << "删除成功" ;
    }
    
    bool Manage::FindTeacher_name(string _name = "")		//查找教师
    {
    	bool flg = false;		//标记是只查找,还是被其他函数调用
    	if(_name == "")
    	{
    		cout << "请输入想要查询的姓名
    	—>>";
    		cin >> _name;
    		flg = true;			//只查找
    	}
    	vector<Teacher*>::const_iterator it_t = Teachdata.begin();
    	while((*it_t)->Name() != _name)
    	{
    		++it_t;
    		if(it_t == Teachdata.end())
    		{
    			cout << (flg == true ? "姓名输入错误,查无此人
    " : "" );
    			return false;
    		}
    	}
    	
    	Format_t();
    	cout << "年龄" <<endl;
    	(*it_t)->display();
    
    	return true;
    }
    bool Manage::FindWorker_name(string _name = "")		//查找职工
    {
    	bool flg = false;		//标记是只查找,还是被其他函数调用
    	if(_name == "")
    	{
    		cout << "请输入想要查询的姓名
    	—>>" ;
    		cin >> _name;
    		flg = true;			//只查找
    	}
    	vector<Worker*>::const_iterator it_w = Workdata.begin();
    	while((*it_w)->Name() != _name)
    	{
    		++it_w;
    		if(it_w == Workdata.end())
    		{
    			cout << (flg == true ? "姓名输入错误,查无此人
    " : "" );
    			return false;
    		}
    	}
    	
    	Format_w();
    	cout << "年龄" <<endl;
    	(*it_w)->display();
    
    	return true;
    }
    
    bool Manage::FindTeacher_num(int _num = 0)
    {
    	bool flg = false;	//标记调用函数时,调用的查找功能还是利用该函数判断数据
    	if(_num == 0)		/*flg=true调用查找功能,需要输出查找结果*/
    	{					/*flg=false 中判断真假,无需输出查找结果*/
    		cout << "请输入想要查询的编号
    	>>";
    		cin >> _num;
    		flg = true;
    	}
    	//清空缓冲区		防止输入错误进入死循环
    	cin.clear();
    	cin.sync();
    	vector<Teacher*>::const_iterator it_t = Teachdata.begin();
    	while((*it_t)->Number() != _num)
    	{
    		++it_t;
    		if(it_t == Teachdata.end())
    		{
    			cout << (flg == true ? "姓名输入错误,查无此人
    " : "" );
    			return false;
    		}
    	}
    
    	if(flg)		//只查找
    	{
    		Format_t();
    		cout << "年龄" <<endl;
    		(*it_t)->display();
    	}
    
    	return true;
    }
    bool Manage::FindWorker_num(int _num = 0)
    {
    	bool flg = false;		//标记调用函数时,调用的查找功能还是利用该函数判断数据
    	if(_num == 0)			/*flg=true调用查找功能,需要输出查找结果*/
    	{						/*flg=false 中判断真假,无需输出查找结果*/
    		cout << "请输入想要查询的编号
    	>>";
    		cin >> _num;
    		flg = true;
    	}
    	//清空缓冲区		防止输入错误进入死循环
    	cin.clear();
    	cin.sync();
    	vector<Worker*>::const_iterator it_w = Workdata.begin();
    	while((*it_w)->Number() != _num)
    	{
    		++it_w;
    		if(it_w == Workdata.end())
    		{
    			cout << (flg == true ? "姓名输入错误,查无此人
    " : "" );
    			return false;
    		}
    	}
    
    	if(flg)		//只查找
    	{
    		Format_w();
    		cout << "年龄" <<endl;
    		(*it_w)->display();
    	}
    
    	return true;
    }
    
    void Manage::UpdateTeacher()	//修改教师-按编号
    {
    	cout << "						"按'0'取消"
    请输入想要修改的编号:
    	—>>";
    	char _number;
    	cin >> _number;
    		//清空缓冲区		防止输入错误(非数字)进入死循环
    	cin.clear();
    	cin.sync();
    		/*  注:若输入了英文字符,会把该字符的ascall码写进_number中 */
    	vector<Teacher*>::const_iterator it_t = Teachdata.begin();
    	while((*it_t)->Number() != _number)
    	{
    		++it_t;
    		if(it_t == Teachdata.end())
    		{
    			cout << "编号输入错误,查无此人" <<endl;
    			return ;
    		}
    	}
    
    	cout <<"找到一个结果>>
    "<< *(*it_t) <<"
    (修改)请输入——>"<<endl;
    	Format_t();
    	cout << endl;
    	cin >> *(*it_t);
    	cout << "修改成功" <<endl;
    }
    void Manage::UpdateWorker()	//修改职工
    {
    	cout << "						"按'0'取消"
    请输入想要修改的编号:
    	—>>";
    	int _number = 0;
    	cin >> _number;
    	//清空缓冲区		防止输入错误(非数字)进入死循环
    	cin.clear();
    	cin.sync();
    	/*  注:若输入了英文字符,会把该字符的ascall码写进_number中 */
    	vector<Worker*>::const_iterator it_w = Workdata.begin();
    	while((*it_w)->Number() != _number)
    	{
    		++it_w;
    		if(it_w == Workdata.end())
    		{
    			cout << "编号输入错误,查无此人" <<endl;
    			return ;
    		}
    	}
    
    	cout <<"找到一个结果>>
    "<< *(*it_w) <<"
    (修改)请输入——>"<<endl;
    	Format_t();
    	cout << endl;
    	cin >> *(*it_w);
    	cout << "修改成功" <<endl;
    }
    
    void Manage::ShowDataTeacher()const	//输出数据
    {
    	cout << "
    教师>>>								   [按创建时间排序]" << endl;
    	Format_t();
    	cout << "年龄" <<endl;
    	vector<Teacher*>::const_iterator it_t = Teachdata.begin();
    	while(it_t != Teachdata.end())
    	{
    		(*it_t)->display();
    		++it_t;
    	}
    }
    void Manage::ShowDataWorker()const	//输出数据
    {
    	cout << "
    职工>>>								   [按创建时间排序]" << endl;
    	Format_w();
    	cout << "年龄" <<endl;
    	vector<Worker*>::const_iterator it_w = Workdata.begin();
    	while(it_w != Workdata.end())
    	{
    		(*it_w)->display();
    		++it_w;
    	}
    }
    
    void Manage::Aver_ageTeacher()
    {
    	cout << "
    教师>>>" << endl;
    	cout << "
    教师平均年龄:" << g_age_t/g_num_t << endl;
    	/*	增加功能:
    		通过循环遍历或者定义全局变量的方式,可以实现对不同
    		性别,不同职位的教师求平均年龄 */
    }
    void Manage::Aver_ageWorker()
    {
    	cout << "
    职工>>>" << endl;
    	cout << "
    职工平均年龄:" << g_age_w/g_num_w << endl;
    		/*	增加功能:
    		通过循环遍历或者定义全局变量的方式,可以实现对不同
    		性别,不同职位的教师求平均年龄 */
    }
    
    void Manage::FreeTeacher()
    {
    	vector<Teacher*>::const_iterator it_w = Teachdata.begin();
    	while(it_w != Teachdata.end())
    	{
    		delete *it_w;
    		++it_w;
    	}
    	Teachdata.clear();
    }
    void Manage::FreeWorker()
    {
    	vector<Worker*>::const_iterator it_w = Workdata.begin();
    	while(it_w != Workdata.end())
    	{
    		delete *it_w;
    		++it_w;
    	}
    	Workdata.clear();
    }
    
    
    void Manage::MainMenu()
    {
    	int tag = 0;
    	do
    	{
    		cout<<"----------欢迎进入教职工信息管理系统--------------------"<<endl; 
    		cout<<"        1---教师信息      2---职工信息"		<<endl; 
    		cout<<"        3---浏览信息      4---姓名查找"		<<endl; 
    		cout<<"        5---平均年龄      6---统计人数"		<<endl; 
    		cout<<"        0---退出"							<<endl; 
    		cout<<"---------------------------------------------------------"<<endl; 
    		cout<<"请输入您的选择--->";
    		cin>>tag;
    		//清空缓冲区		防止输入错误进入死循环
    		cin.clear();
    		cin.sync();
    		system("cls");
    		switch(tag)
    		{
    		case 0: 
    			cout<<"		感谢您的使用(^0^)
    		退出系统中... 数据保存中......
    "<<endl;	return ;
    			break;
    		case 1:	MangeTeacher();
    			break;
    		case 2:	MangeWorker();
    			break;
    		case 3:	
    			ShowDataTeacher();
    			ShowDataWorker();	
    			cout << endl;
    			break;
    		case 4:	
    			{
    				cout << "请输入要查找的姓名—>>
    	>>>";
    				string _name;
    				cin >> _name;
    				if(!FindTeacher_name(_name))
    				{
    					if(!FindWorker_name(_name))
    					{
    						cout << "查无此人,查找失败" << endl;
    					}
    				}
    				cout << endl;
    			}
    			break;
    		case 5:
    			Aver_ageTeacher();
    			Aver_ageWorker();	
    			cout << endl;	
    			break;
    		case 6:	
    			cout << "
    现任教师有>>" << g_num_t << "人
    "
    					<<"
    现任职工有>>" << g_num_w << "人
    " <<endl;		
    				/* 增加功能:统计不同年龄,性别,职位等 */
    			break;
    		default:					
    			break;
    		}
    	}while(tag != 0);
    }	
    
    void Manage::MangeTeacher()
    {
    	int chose;
    	while(1)
    	{
    		TeacherMenu();
    		cin >> chose;
    		//清空缓冲区		防止输入错误进入死循环
    		cin.clear();
    		cin.sync();
    		system("cls");
    		
    		switch (chose) 
    		{
    		case 1: AddTeacher();			break;	//添加功能 
    		case 2: UpdateTeacher();		break;	//修改功能 
    		case 3: ShowDataTeacher();   	break;	//显示功能 
    		case 4: FindTeacher_name();		break;	//姓名查找功能 
    		case 5: FindTeacher_num();		break;	//编号查找功能 
    		case 6:	Aver_ageTeacher();		break;	//平均年龄
    		case 7: DelItemTeacher();		break;	//删除功能
    		default :								//退出功能
    			system("cls");
    			return; 
    			break;
    		} 
    	}
    	cout <<"---------------------------------------------------------"<<endl; 
    }
    
    void Manage::MangeWorker()
    {
    	int chose;
    	while(1)
    	{
    		WorkerMenu();
    		cin >> chose;
    		//清空缓冲区		防止输入错误进入死循环
    		cin.clear();
    		cin.sync();
    		system("cls");
    		
    		switch (chose) 
    		{
    		case 1: AddWorker();			break;	//添加功能 
    		case 2: UpdateWorker();			break;	//修改功能 
    		case 3: ShowDataWorker();   	break;	//显示功能 
    		case 4: FindWorker_name();		break;	//姓名查找功能 
    		case 5:	FindWorker_num();		break;	//编号查找功能
    		case 6:	Aver_ageWorker();		break;	//平均年龄
    		case 7: DelItemWorker();		break;	//删除功能
    		default :								//退出功能
    			system("cls");
    			return; 
    			break;
    		} 
    	}
    	cout <<"---------------------------------------------------------"<<endl; 
    }
    
    
    void TeacherMenu()		//教师菜单
    {
    	cout<<"
    已进入:教师管理系统"<<endl; 
    	cout<<"----------★ ☆ ★ 教师信息管理 ★ ☆ ★ --------------"<<endl; 
    	cout<<"         1---添加成员      2---修改信息"			<<endl; 
    	cout<<"         3---浏览信息      4---姓名查找"			<<endl; 
    	cout<<"         5---编号查找      6---平均年龄"			<<endl; 
    	cout<<"         7---删除信息      8---退出"				<<endl;
    	cout<<"---------------------------------------------------------"<<endl; 
    	cout<<"请输入您的选择--->:";
    }
    
    void WorkerMenu()		//职工菜单
    {
    	cout<<"
    已进入:职工管理系统"<<endl; 
    	cout<<"----------★ ☆ ★ 职工信息管理 ★ ☆ ★ --------------"<<endl; 
    	cout<<"         1---添加成员      2---修改信息"			<<endl; 
    	cout<<"         3---浏览信息      4---姓名查找"			<<endl; 
    	cout<<"         5---编号查找      6---平均年龄"			<<endl; 
    	cout<<"         7---删除信息      8---退出"				<<endl; 
    	cout<<"---------------------------------------------------------"<<endl; 
    	cout<<"请输入您的选择--->:";
    }
    
    
    void Format_t()		
    {
    	cout.width(6);;
    	cout << "教师编号  姓名  性别     工资    出生日期   岗位  参加工作时间  职称  所在系  	";
    }
    void Format_w()
    {
    	cout.width(6);;
    	cout << "职工编号  姓名  性别     工资    出生日期   岗位  参加工作时间  技术级  部门  	";
    }
    
    
    
    
    
    

     主函数 main.cpp

    #include "HEAD.h"
    
    int main()
    {
    	system("title 教职工管理系统");	
    	Manage man;
    	man.MainMenu();
    
    	return 0;
    }
    

    数据文件保存在Teacher.datWorker.dat

  • 相关阅读:
    475. Heaters
    69. Sqrt(x)
    83. Remove Duplicates from Sorted List Java solutions
    206. Reverse Linked List java solutions
    100. Same Tree Java Solutions
    1. Two Sum Java Solutions
    9. Palindrome Number Java Solutions
    112. Path Sum Java Solutin
    190. Reverse Bits Java Solutin
    202. Happy Number Java Solutin
  • 原文地址:https://www.cnblogs.com/TaoR320/p/12680178.html
Copyright © 2011-2022 走看看