教职工信息管理系统

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<<"\t "<<name<<"\t "<<sex<<"\t "<<salary<<"\t "<<birthtime<<" "
<<post<<" "<<worktime<<" "<<position<<" "<<department<<"\t";
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<<"\t "<<name<<"\t "<<sex<<"\t "<<salary<<"\t "<<birthtime<<" "
<<post<<" "<<worktime<<" "<<Technical<<" "<<department<<"\t";
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 << "请依次输入:\t\t\t\t\t\t\"按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 << "\t取消输入或编号输入错误,\n\t\t退出添加..." << endl;
return false;
}
if(FindTeacher_num(te->Number()))
{
cout << "\n警告:输入编号与已有人员重复,添加失败!!!\n";
return false;
}
if(!(te->CheckBirthData()))
{
cout << "\n警告:输入出生日期有误,添加失败\n";
return false;
}
if(!(te->CheckWorkData()))
{
cout << "\n警告:输入工作日期有误,添加失败\n";
return false;
}
if(FindTeacher_name(te->Name()))
{
cout << "\n提醒:输入姓名与已有人员重复\n";
} Teachdata.push_back(te);
cout << "\t☆添加成功!!!☆" <<endl;
return true;
}
bool Manage::AddWorker() //增加职工
{
cout << "请依次输入:\t\t\t\t\t\t\"按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 << "\t取消输入或编号输入错误,\n\t\t退出添加..." << endl;
return false;
}
if(FindWorker_num(tw->Number()))
{
cout << "\n警告:输入编号与已有人员重复,添加失败!!!\n";
return false;
}
if(!(tw->CheckBirthData()))
{
cout << "\n警告:输入出生日期有误,添加失败\n";
return false;
}
if(!(tw->CheckWorkData()))
{
cout << "\n警告:输入工作日期有误,添加失败\n";
return false;
}
if(FindWorker_name(tw->Name())) /* 提醒重名,添加成功 */
{
cout << "\n提醒:输入姓名与已有人员重复\n";
}
Workdata.push_back(tw);
cout << "\t☆添加成功!!!☆" <<endl;
return true;
} void Manage::DelItemTeacher() //删除数据
{
cout << "请输入想要删除的姓名\n\t—>>";
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 << "请输入想要删除的姓名\n\t—>>";
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 << "请输入想要查询的姓名\n\t—>>";
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 ? "姓名输入错误,查无此人\n" : "" );
return false;
}
} Format_t();
cout << "年龄" <<endl;
(*it_t)->display(); return true;
}
bool Manage::FindWorker_name(string _name = "") //查找职工
{
bool flg = false; //标记是只查找,还是被其他函数调用
if(_name == "")
{
cout << "请输入想要查询的姓名\n\t—>>" ;
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 ? "姓名输入错误,查无此人\n" : "" );
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 << "请输入想要查询的编号\n\t>>";
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 ? "姓名输入错误,查无此人\n" : "" );
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 << "请输入想要查询的编号\n\t>>";
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 ? "姓名输入错误,查无此人\n" : "" );
return false;
}
} if(flg) //只查找
{
Format_w();
cout << "年龄" <<endl;
(*it_w)->display();
} return true;
} void Manage::UpdateTeacher() //修改教师-按编号
{
cout << "\t\t\t\t\t\t\"按'0'取消\"\n请输入想要修改的编号:\n\t—>>";
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 <<"找到一个结果>>\n"<< *(*it_t) <<"\n(修改)请输入——>"<<endl;
Format_t();
cout << endl;
cin >> *(*it_t);
cout << "修改成功" <<endl;
}
void Manage::UpdateWorker() //修改职工
{
cout << "\t\t\t\t\t\t\"按'0'取消\"\n请输入想要修改的编号:\n\t—>>";
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 <<"找到一个结果>>\n"<< *(*it_w) <<"\n(修改)请输入——>"<<endl;
Format_t();
cout << endl;
cin >> *(*it_w);
cout << "修改成功" <<endl;
} void Manage::ShowDataTeacher()const //输出数据
{
cout << "\n教师>>>\t\t\t\t\t\t\t\t [按创建时间排序]" << 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 << "\n职工>>>\t\t\t\t\t\t\t\t [按创建时间排序]" << 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 << "\n教师>>>" << endl;
cout << "\n教师平均年龄:" << g_age_t/g_num_t << endl;
/* 增加功能:
通过循环遍历或者定义全局变量的方式,可以实现对不同
性别,不同职位的教师求平均年龄 */
}
void Manage::Aver_ageWorker()
{
cout << "\n职工>>>" << endl;
cout << "\n职工平均年龄:" << 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<<"\t\t感谢您的使用(^0^)\n\t\t退出系统中... 数据保存中......\n"<<endl; return ;
break;
case 1: MangeTeacher();
break;
case 2: MangeWorker();
break;
case 3:
ShowDataTeacher();
ShowDataWorker();
cout << endl;
break;
case 4:
{
cout << "请输入要查找的姓名—>>\n\t>>>";
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 << "\n现任教师有>>" << g_num_t << "人\n"
<<"\n现任职工有>>" << g_num_w << "人\n" <<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<<"\n已进入:教师管理系统"<<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<<"\n已进入:职工管理系统"<<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 << "教师编号 姓名 性别 工资 出生日期 岗位 参加工作时间 职称 所在系 \t";
}
void Format_w()
{
cout.width(6);;
cout << "职工编号 姓名 性别 工资 出生日期 岗位 参加工作时间 技术级 部门 \t";
}

主函数 main.cpp

#include "HEAD.h"

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

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

C++大作业——教职工管理系统的更多相关文章

  1. #006 C语言大作业学生管理系统第三天

    还差最后两部分 读取文件 恢复删除的学生信息 先学会处理文件的 知识点,再继续跟着视频做这个作业. 应该明天周六能把视频里手把手教的学生管理系统敲完 第二周尽量自己能完成C语言课本最后面那道学生管理系 ...

  2. #004 C语言大作业学生管理系统试着做

    链表不会用 文件不会使 在这种情况下就边写边做 希望这个月能做完这个作业 #include<stdio.h> #include<stdlib.h> #include<st ...

  3. 在Web大作业——红十字会管理系统里出现的一个Error

    工程描述:根据用户在前端网页的操作对后台数据库进行查询或更新. 错误描述:当对网页进行多次操作后,网页会报错:“数据库超过最大连接数”. 错误分析:每次打开某一网页,都会运行一段JAVA代码连接数据库 ...

  4. 大一上C语言期末大作业-成绩管理系统

    都过了半年的作业了,觉得做过去得留下点什么,所以整理了代码发一下博客. 声明:程序在DevC++下用c文件模式可以正常编译使用.(控制台程序) 程序结构:

  5. c++大作业--学籍管理系统--

    1.题目描写叙述 学籍管理系统: 依据信息管理系统的业务流程.要求以及所要实现的目标,完毕下面功能: (1)建立学生档案的管理和维护.实现计算机自己主动化管理体制. (2)建立学生成绩管理机制,在计算 ...

  6. #007 C语言大作业学生管理系统第四天

    第四天还差恢复已删除学生功能 对于我来说,已经开始很复杂了. 小细节太重要了,边写边出错 1 #include<stdio.h> #include<stdlib.h> #inc ...

  7. python大作业-图书管理系统

    #缺少循环执行和错误处理 #add()函数 添加了循环执行 #错误处理:regist()函数 登录和退出选择的时候添加了错误处理 import sys import importlib importl ...

  8. 期末Java Web大作业----简易的学生管理系统

    学生信息管理系统(大作业) 2018-12-21:此文章已在我的网站更新,添加视图介绍等信息,源码请移步下载https://www.jeson.xin/javaweb-sims.html PS:首先不 ...

  9. 软件工程大作业(学生会管理系统)Web端个人总结报告

    软件工程大作业(学生会管理系统)Web端个人总结报告 一.小组信息 1.所在小组:第二组 2.小组选题:学生会管理系统 3.项目源代码链接: Web端源代码:code 小程序端源代码:code APP ...

随机推荐

  1. Scala学习笔记(详细)

    第2章 变量 val,var,声明变量必须初始化:变量类型确定后不可更改 数据类型:与java有相同的数据类型,在scala中数据类型都是对象 特殊类型:Unit:表示无值,只有一个实例值写出(),相 ...

  2. 1.分类维护-通过Java8 Stream API 获取商品三级分类数据

    实体类 @Data @TableName("pms_category") public class CategoryEntity implements Serializable { ...

  3. ansible复习笔记_基础-从零到无

    --创建时间:2021年1月25日 --修改时间:2021年3月9日 --作者:飞翔的小胖猪 前言 该文档仅作为作者复习ansible使用,对格式和流程没有做过多的编排和概述.不喜勿喷. 基础 ans ...

  4. video视频控件

    <!-- 视频播放内容 --> <!-- autoplay准备就绪会自动播放 --> <!-- controls,要自定义得去掉这个 -->   <video ...

  5. Arava: 写一个控制台风格的Mp3播放器

    Mp3播放器 来写一个控制台版的mp3播放器.以前很喜欢 cmd.fm 这种控制台风格的播放器. 播放mp3使用 mp3spi 库:下载mp3spi库文件,解压,拿出根目录下的 mp3spi1.9.5 ...

  6. cpolar——安全的内网穿透工具

    什么是cpolar? cpolar是一种安全的内网穿透云服务,它将内网下的本地服务器通过安全隧道暴露至公网,使得公网用户可以正常访问内网服务. 它能用在哪些场景? 微信公众号开发,实时断点调试微信消息 ...

  7. 超好用的Markdown编辑器Typora中的常见语法

    目录 下载网址 安装 一.标题 一级标题 二级标题 三级标题 四级标题 五级标题 六级标题 二.语法环境 三.单选 四.字体 五.分割符 六.列表 七.图片引入 八.表格 九.超链接 下载网址 正版中 ...

  8. Tableau绘图一热图、日历图、人口金字塔、标靶图、凹凸图、帕累托图

    Tableau绘图一热图.日历图.人口金字塔.标靶图.凹凸图.帕累托图 本文首发于博客冰山一树Sankey,去博客浏览效果更好.直接右上角搜索该标题即可 一.热图 例子:示例超市 可以通过更改颜色来改 ...

  9. Caffe2源码解析之core

    写在前面 在对Tensorflow的后端源码进行了拆解(参见tensorflow源码解析系列文章索引)之后,很想跟其它深度学习框架的实现进行对比,根据框架的流行程度,先选择了Pytorch.Pytor ...

  10. hadoop学习笔记 一

    Hadoop 2.x * common * HDFS 存储数据 NameNode 主从结构 * 存储文件系统的元数据,命名空间namespace DataNode * 存储数据 SecondaryNa ...