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

  • 相关阅读:
    Notification 通知
    首次在MI5手机上看到APP界面 ~
    Installation falied with message Failed to establish session.
    adb.exe 已停止工作
    内容提供器(Content Provider)
    Android 数据存储
    RecyclerView
    UI设计 四种基本布局
    关于Android教学的思考1
    Android 主要控件
  • 原文地址:https://www.cnblogs.com/TaoR320/p/12680178.html
Copyright © 2011-2022 走看看