教职工信息管理系统

一、问题描述
设计一个学校职工管理系统,要求实现如下功能:建立职工信息数据,包括职工编号、
姓名、 性别、工资、出生时间、岗位、参加工作时间和年龄(必须计算得到),初始模拟数据 通过文本文件创建(记录不少于 20 个),通过程序载入。求职工(工人和教师分开)的平均
年龄;查找、添加或删除一个雇员;浏览全部信息等。
二、基本要求
(1)使用面向对象编程思想编写开发过程中需要用到的类,比如:使用继承的方法构造 3 个类 :雇员类(虚基类),教师类(有职称和所在系,按职称工资发工资)和工人类(派生类,有技术级和部门,按技术级发工资))。管理类,实现对职工的管理。
总体来说需要四个类,定义了employee类(雇员类),Teacher类(教师类),Worker类(工人类)以及Admin类(管理类)。但是这里涉及到了工作时间和年龄,考虑采用Data类,获取当前时间结点然后对A年龄进行计算。
(2)用文本编辑器编辑一个文本文件(总数 20 人以上)包含各类人员的信息,程序运
行时进行初始化数据, 使用 vector 数组存放对象指针。并能保存数据为磁盘文件。
(3)编写同名 display()成员函数既虚函数,用来输出所有雇员的信息。要求对<<和>>运 算符进行重载,实现信息的输入,输出。
(4)菜单功能: 添加人员,修改人员信息,浏览人员信息,按Name查找,平均年龄, 删除人员。

基本流程图
在这里插入图片描述

1)类定义  
//teacher.h
#include <string>//用string定义数据类型 
#include <iostream>//基本的输入输出函数 
#include <vector>//vector数组 
#include <fstream>//文件操作,打开文件,关闭文件函数 
#include <conio.h>//用getch()函数 ,暂停屏幕,便于观看数据
class employee//雇员类
{
	public:
		int number;
		string name;
		string sex;
		int birthtime;
		string post;
		int worktime;
		int age; 
};
//教师类,继承雇员类 teacher.h

class Teacher:public employee{
	public:
		string title;
		string system;
		double salary;
};
//工人类,继承雇员类   teacher.h
class Worker:public employee{
	public:
		string department;
		int level;
		double salary;
};
//管理类,实现增删改查   teacher.h
class Admin{
	public:
		vector<Teacher>tlist;//储存教师信息的vector数组 
		vector<Worker>wlist;//储存工人信息的 vector数组 
		int ReadTeacher(); //读取教师信息文件 
		int ReadWorker();//读取工人信息文件 
		void Writeteacher();//写入教师信息文件 
		void Writeworker();//写入工人信息文件 
		void Display_teacher();//显示所有教师信息 
		void Display_worker();//显示所有工人信息 
		void Add_teacher();//添加教师信息  
		void Add_worker();//添加工人信息   
		void find_teacher();//按Name查找Teacher  
		void find_worker();//按Name查找工人  
		void del_teacher();//删除教师信息  
		void del_worker();//删除工人信息   
		void menu_teacher();// 教师菜单 
		void menu_worker();//  工人菜单 
		double arrage_teacher();// 教师平均Age 
		double arrage_worker();// 工人平均Age 
		void change_teacher();//修改教师信息
		void change_worker();//修改工人信息 
};2)增删改查函数的实现
//教职工信息管理系统.cpp
int Admin::ReadTeacher()//读取文件内的教师数据
{
	fstream readfile("teacher.txt");
	int tow=0;
	if(readfile)
	{
		Teacher t;
		if (!(readfile >> t.number>>t.name>>t.sex>>t.salary>>t.birthtime>>t.post>>t.worktime>>t.age>>t.title>>t.system))//如果第一次读取为空
		{
			cout << "\t空"<<endl;
			return 1;
		}
		tlist.push_back(t);
		tow++;
		while(readfile >> t.number>>t.name>>t.sex>>t.salary>>t.birthtime>>t.post>>t.worktime>>t.age>>t.title>>t.system)//读取后存入vector容器中
		{
			tow++;
			tlist.push_back(t); //vector数组第要调用 push_back函数进行读入 
		}
		cout<<"所有 信息加载成功......."<<endl; 
		readfile.close();//文件操作完成后,需要关闭文件 
		return tow;
	}
	else
	{
		ofstream outfile;//磁盘中不存在文件的话则创建
		outfile.open("teacher.txt");//创建通讯录文件 
		if (!outfile.is_open()) //未能打开新创建的文件 
		{
			cout << "文件没有创建!"<<endl;
			return -1;
		}
		else
		{
			cout << "文件不存在,但是已经创建!\n";
			cout << "\t文件夹为空\n";
		}
		outfile.close();//文件操作完成后,需要关闭文件 
	}
	return 2;	
}
//教职工信息管理系统.cpp
int Admin::ReadWorker()//读取文件内的工人数据
{
	fstream readfile("worker.txt");
	int wow=0;
	if(readfile)
	{
		Worker w;
		if (!(readfile >> w.number>>w.name>>w.sex>>w.salary>>w.birthtime>>w.post>>w.worktime>>w.age>>w.department>>w.level))//如果第一次读取为空
		{
			cout << "\t空"<<endl;
			return 1;
		}
		wlist.push_back(w);
		wow++;
		while(readfile >> w.number>>w.name>>w.sex>>w.salary>>w.birthtime>>w.post>>w.worktime>>w.age>>w.department>>w.level)//读取后存入vector容器中
		{
			wow++;
			wlist.push_back(w); //vector数组第要调用 push_back函数进行读入 
		}
		cout<<"所有  信息加载成功......."<<endl; 
		readfile.close();//文件操作完成后,需要关闭文件 
		return wow;
	}
	else
	{
		ofstream outfile;//磁盘中不存在文件的话则创建
		outfile.open("worker.txt");//创建通讯录文件 
		if (!outfile.is_open()) //未能打开新创建的文件 
		{
			cout << "文件没有创建!"<<endl;
			return -1;
		}
		else
		{
			cout << "文件不存在,但是已经创建!\n";
			cout << "\t文件夹为空\n";
		}
		outfile.close();//文件操作完成后,需要关闭文件 
	}
	return 2;	
}
//教职工信息管理系统.cpp
void Admin::Writeteacher()//向文件内写入教师数据
{
	ofstream outfile("teacher.txt");//打开文件 
	vector<Teacher>::iterator iter;//vector数组保存的磁盘文件 
	for(iter=this->tlist.begin();iter!=this->tlist.end();iter++)
	{
		iter->age=2020-iter->birthtime/10000;
		outfile<<iter->number<<"\t"<<iter->name<<"\t"<<iter->sex<<"\t"<<iter->salary<<"\t"<<iter->birthtime<<"\t"<<iter->post<<"\t"
		<<iter->worktime<<"\t"<<iter->age<<"\t"<<iter->title<<"\t"<<iter->system<<endl;
	}
	outfile.close(); //关闭文件 
}
//教职工信息管理系统.cpp
void Admin::Writeworker()//向文件内写入工人数据
{
	ofstream outfile("worker.txt");//打开文件 
	vector<Worker>::iterator iter;//vector数组保存的磁盘文件 
	for(iter=this->wlist.begin();iter!=this->wlist.end();iter++)
	{
		iter->age=2020-iter->birthtime/10000;
		outfile<<iter->number<<"\t"<<iter->name<<"\t"<<iter->sex<<"\t"<<iter->salary<<"\t"<<iter->birthtime<<"\t"<<iter->post<<"\t"
		<<iter->worktime<<"\t"<<iter->age<<"\t"<<iter->department<<"\t"<<iter->level<<endl;
	}
	outfile.close(); //关闭文件 
}
//教职工信息管理系统.cpp
void Admin::Display_teacher()//显示所有的教师信息
{
	vector<Teacher>::iterator iter;//vector数组保存的磁盘文件 
	for(iter=this->tlist.begin();iter!=this->tlist.end();iter++)
	{
		cout<<"Number: "<<iter->number<<"\t\tName:"<<iter->name<<"\tSex:"<<iter->sex<<"\tSalary:"<<iter->salary<<"\tBirthtime: "<<iter->birthtime<<"\nPost:"<<iter->post<<"\tWorktime:"
		<<iter->worktime<<"\tAge:"<<iter->age<<"\ttitle: "<<iter->title<<"\tsystem:"<<iter->system<<endl<<endl;
	}
}
void Admin::Display_worker() //显示所有的工人信息
{
	vector<Worker>::iterator iter;//vector数组保存的磁盘文件 
	for(iter=this->wlist.begin();iter!=this->wlist.end();iter++)
	{
		cout<<"Number: "<<iter->number<<"\t\t Name:"<<iter->name<<"\tSex:"<<iter->sex<<"\tSalary:"<<iter->salary<<"\tBirthtime: "<<iter->birthtime<<"\nPost:"<<iter->post<<"\tWorktime:"
		<<iter->worktime<<"\tAge:"<<iter->age<<"\tdepartment: "<<iter->department<<"\tlevel:"<<iter->level<<endl<<endl;
	}
}
//教职工信息管理系统.cpp
void Admin::Add_teacher() //添加教师信息
{
	Teacher t;
	cout<<"Input Teacher Number:";cin>>t.number;
	cout<<"Input Teacher Name:";cin>>t.name;
	cout<<"Input Teacher Sex:";cin>>t.sex;
	cout<<"Input Teacher Salary:";cin>>t.salary;
	cout<<"Input Teacher出生日期:";cin>>t.birthtime;
	cout<<"Input Teacher WorkTime:";cin>>t.worktime;
	cout<<"Input Teacher岗位:";cin>>t.post;
	cout<<"Input Teacher title:";cin>>t.title;
	cout<<"Input Teacher所在系:";cin>>t.system;
	t.age=2020-t.birthtime/10000;//计算输入人物的Age 
	tlist.push_back(t);//向Teacher数组中添加数据 
	this->Writeteacher();//保存数据 
}
//教职工信息管理系统.cpp
void Admin::Add_worker()//添加工人信息
{
	Worker w;
	cout<<"Input Worker Number:";cin>>w.number;
	cout<<"Input Worker Name:";cin>>w.name;
	cout<<"Input Worker Sex:";cin>>w.sex;
	cout<<"Input Worker Salary:";cin>>w.salary;
	cout<<"Input Worker出生日期:";cin>>w.birthtime;
	cout<<"Input WorkerWorkTime:";cin>>w.worktime;
	cout<<"Input Worker岗位:";cin>>w.post;
	cout<<"Input Worker Department:";cin>>w.department;
	cout<<"Input Worker技术级:";cin>>w.level;
	w.age=2020-w.birthtime/10000;//计算输入的Worker的Age 
	wlist.push_back(w);//向vector数组中添加数据 
	this->Writeworker();//向文件中写入 
}
//教职工信息管理系统.cpp
void Admin::find_teacher()//查找教师信息
{
	string _name;
	cout<<"Input TeacherName: ";   cin>>_name;
	vector<Teacher>::iterator iter;//vector数组保存的磁盘文件 
	for(iter=this->tlist.begin();iter!=this->tlist.end();iter++)//对vector数组进行遍历,必须使用begin()和end() 函数对vector进行遍历 
	{
		if(iter->name==_name)
		{
		cout<<"Number: "<<iter->number<<"\t\tName:"<<iter->name<<"\tSex:"<<iter->sex<<"\tSalary:"<<iter->salary<<"\n出生日期: "<<iter->birthtime<<"\t岗位:"<<iter->post<<"\tWorkTime:"
		<<iter->worktime<<"\tAge:"<<iter->age<<"\ttitle: "<<iter->title<<"\t所在系:"<<iter->system<<endl;	}
	}	 
}
//教职工信息管理系统.cpp
void Admin::find_worker()//查找工人信息
{
	string _name;
	cout<<"Input WorkerName: ";   cin>>_name;
	vector<Worker>::iterator iter;//vector数组保存的磁盘文件 
	for(iter=this->wlist.begin();iter!=this->wlist.end();iter++)//对vector数组进行遍历,必须使用begin()和end() 函数对vector进行遍历 
	{
		if(iter->name==_name)
		{
		cout<<"Number: "<<iter->number<<"\t\tName:"<<iter->name<<"\tSex:"<<iter->sex<<"\tSalary:"<<iter->salary<<"\n出生日期: "<<iter->birthtime<<"\t岗位:"<<iter->post<<"\tWorkTime:"
		<<iter->worktime<<"\tAge:"<<iter->age<<"\nDepartment: "<<iter->department<<"\t技术级:"<<iter->level<<endl;}
	}
}
//教职工信息管理系统.cpp
void Admin::del_teacher()//删除教师信息
{
	if(tlist.empty()){//调用empty函数判断数组是否为空 
		cout << "没有信息可以删除!"<<endl;
		return;
	}
	string _name;
	cout<<"Input TeacherName: ";   cin>>_name;
	vector<Teacher>::iterator iter;//vector数组保存的磁盘文件 
	for(iter=this->tlist.begin();iter!=this->tlist.end();)//对vector数组进行遍历,必须使用begin()和end() 函数对vector进行遍历 
	{
		if(iter->name==_name)
		{
			tlist.erase(iter);//调用erase函数对数组中元素进行删除 
			this->Writeteacher();//写入文件 
			cout<<"删除成功!"<<endl;
			return;
			}
		else
			++iter;
		}
}
//教职工信息管理系统.cpp
void Admin::del_worker()//删除工人信息
{
	if(wlist.empty()){//调用empty函数判断数组是否为空 
		cout << "没有信息可以删除!"<<endl;
		return;
	}
	string _name;
	cout<<"Input TeacherName: ";   cin>>_name;
	vector<Worker>::iterator iter;//vector数组保存的磁盘文件 
	for(iter=this->wlist.begin();iter!=this->wlist.end();)//对vector数组进行遍历,必须使用begin()和end() 函数对vector进行遍历 
	{
		if(iter->name==_name)
		{
			wlist.erase(iter);//调用erase函数对数组中元素进行删除 
			this->Writeworker();
			cout<<"删除成功!"<<endl;
			return;
			}
		else
			++iter;
	}
}
//教职工信息管理系统.cpp
double Admin::arrage_teacher()//计算教师的总Age 
{
	vector<Teacher>::iterator iter;//定义迭代器 
	double tsum=0;
	for(iter=this->tlist.begin();iter!=this->tlist.end();iter++)//对vector数组进行遍历,必须使用begin()和end() 函数对vector进行遍历 
	{
		tsum=tsum+iter->age;
	}
	return tsum;//返回Teacher的总Age
}
//教职工信息管理系统.cpp
double Admin::arrage_worker()//计算工人的总Age 
{
	double wsum=0;
	int wow=0;
	vector<Worker>::iterator iter;//定义迭代器 
	for(iter=this->wlist.begin();iter!=this->wlist.end();iter++)//对vector数组进行遍历,必须使用begin()和end() 函数对vector进行遍历 
	{
		wsum=wsum+iter->age;
	}	
	return wsum;//返回Worker的总Age
}
//教职工信息管理系统.cpp
void Admin::change_teacher() //修改教师的信息 
{
	string name;
	cout<<"Input想修改的Teacher的Name: "; cin>>name;
	vector<Teacher>::iterator iter;//定义迭代器 
	for(iter=this->tlist.begin();iter!=this->tlist.end();)//对vector数组进行遍历,必须使用begin()和end() 函数对vector进行遍历 
	{
		if(iter->name==name)
		{
			cout<<"Input Teacher的Salary:";cin>>iter->salary;
			cout<<"Input Teacher的岗位:";cin>>iter->post;
			cout<<"Input Teacher的title:";cin>>iter->title;
			cout<<"Input Teacher的所在系:";cin>>iter->system;
			this->Writeteacher();
			return ;
		}
		else
			++iter;
	}
	cout << "未检索到此Teacher!"<<endl;
}
//教职工信息管理系统.cpp
void Admin::change_worker()//修改工人信息 
{
	string name;
	cout<<"Input想修改的Worker的Name: "; cin>>name;
	vector<Worker>::iterator iter;//定义迭代器 
	for(iter=this->wlist.begin();iter!=this->wlist.end();)//对vector数组进行遍历,必须使用begin()和end() 函数对vector进行遍历 
	{
		if(iter->name==name)
		{
			cout<<"Input Worker的Salary:";cin>>iter->salary;
			cout<<"Input Worker的岗位:";cin>>iter->post;
			cout<<"Input Worker所在Department:";cin>>iter->department;
			cout<<"Input Worker的技术级:";cin>>iter->level;
			this->Writeworker();
			return ;
		}
		else
			++iter;
	}
	cout << "未检索到此Worker!"<<endl;
}
//教职工信息管理系统.cpp
void Admin::menu_teacher()//教师管理端的菜单 
{
	int n1=ReadTeacher();//Teacher总人数 
	double sum1=arrage_teacher();//Teacher总Age 
	while(1)
	{
		int n;
		system("cls");
		cout<<"----------------------------"<<endl;
		cout<<"|        教 师 管 理       |"<<endl;
		cout<<"----------------------------"<<endl;
		cout<<"|   1、显示所有教师信息    |"<<endl; 
		cout<<"|   2、按Name查找教师信息  |"<<endl; 
		cout<<"|   3、添加教师信息        |"<<endl; 
		cout<<"|   4、删除教师信息        |"<<endl; 
		cout<<"|   5、修改教师信息        |"<<endl; 
		cout<<"|   6、教师平均Age        |"<<endl;
		cout<<"|   0、返回主菜单          |"<<endl;
		cout<<"----------------------------"<<endl;
		cout<<"请选择: ";cin>>n;
		switch(n)
		{
			case 1:Display_teacher();getch();break;
			case 2:find_teacher(); getch();break;
			case 3:Add_teacher();getch();break;
			case 4:del_teacher();getch();break;
			case 5:change_teacher();getch();break;
			case 6: cout<<"所有Teacher的平均Age是: "<<sum1/n1<<" 岁"<<endl; getch();break;
			case 0:return;
		}
	}
}
//教职工信息管理系统.cpp
void Admin::menu_worker()//工人管理端的菜单 
{
	int n2=ReadWorker();//Worker总人数 
	double sum2=arrage_worker();//Worker总Age 
	while(1)
	{
		int n;
		system("cls");
		cout<<"-----------------------------"<<endl;
		cout<<"|       工 人 管 理         |"<<endl;
		cout<<"-----------------------------"<<endl;
		cout<<"|   1、显示所有工人信息     |"<<endl; 
		cout<<"|   2、按Name查找工人信息   |"<<endl; 
		cout<<"|   3、添加工人信息         |"<<endl; 
		cout<<"|   4、删除工人信息         |"<<endl; 
		cout<<"|   5、修改工人信息         |"<<endl;
		cout<<"|   6、工人平均Age         |"<<endl;
		cout<<"|   0、返回主菜单           |"<<endl;
		cout<<"-----------------------------"<<endl;
		cout<<"请选择: ";cin>>n;
		switch(n)
		{
			case 1:Display_worker();getch();break;
			case 2:find_worker(); getch();break;
			case 3:Add_worker();getch();break;
			case 4:del_worker();getch();break;
			case 5:change_worker(); getch();break;
			case 6:cout<<"所有Worker的平均Age是: "<<sum2/n2<<" 岁"<<endl; getch();break;
			case 0:return;
		}
	}
}3)主函数
//教职工信息管理系统.cpp
int main()
{
	Admin a; 
	while(1)
	{
		system("cls");
		int n;
		cout<<"  教职工管理系统 "<<endl;
		cout<<"  1、教师管理系统"<<endl;
		cout<<"  2、工人管理系统"<<endl;
		cout<<"  0、安全退出系统"<<endl; 
		cout<<"请选择: ";cin>>n;
		switch(n)
		{
			case 1: a.menu_teacher(); getch();break;
			case 2: a.menu_worker();getch();break;
			case 3: {
				int n2=a.ReadWorker()/*n1=a.ReadTeacher()*/;
				double sum2=a.arrage_worker();
				cout<<"所有Teacher的平均Age是: "<<sum2/n2<<" 岁"<<endl;
				a.Writeworker();
			}
			case 4:{
					int n1=a.ReadTeacher();
					double sum1=a.arrage_teacher();
					cout<<"所有Worker的平均Age是: "<<sum1/n1<<" 岁"<<endl;}
					getch();break;
			case 0: return 0;
		}
	}
}
Logo

快速构建 Web 应用程序

更多推荐