# include & ltiostream & gt
# include & lttime.h & gt
# include & ltvector & gt
使用命名空間std
雇員類//定義雇員類。
{
公共:
員工();//構造函數
虛擬VEmployee();
虛擬void Display()= 0;
int GetAge();//獲取年齡
string GetName();//獲取名稱
受保護:
int Id//員工身份證號
字符串名稱;//員工姓名
char Sex[5];//性別
int工資;//工資
弦生日;//出生日期
字符串工作時間;//工作時間
int Age//年齡
};
工人類:公共雇員//定義工人類。
{
公共:
worker();
虛擬VWorker();
void顯示();
};
班主任:公職人員//定義教師類。
{
公共:
老師();
虛擬VTeacher();
void顯示();
string GetAcademy();
私人:
弦樂學院;
};
員工::員工()
{
}
雇員::雇員()
{
}
int Employee::GetAge()
{
回歸年齡;
}
字符串Employee::GetName()
{
返回名稱;
}
Teacher::Teacher() //添加教師信息
{
cout & lt& lt"請輸入教師的信息:"
cout & lt& lt"員工編號:" < & ltendl
CIN & gt;& gtid;
cout & lt& lt"名稱:"
CIN & gt;& gt姓名;
cout & lt& lt"性別:"
CIN & gt;& gt性;
cout & lt& lt"薪水:"
CIN & gt;& gt工資;
cout & lt& lt"出生日期:(格式xxxx/xx/xx)"
CIN & gt;& gt生日;
cout & lt& lt“工作時間:(格式xxxx/xx/xx)”& lt;& ltendl
CIN & gt;& gt工作時間;
cout & lt& lt"教員:" < & ltendl
CIN & gt;& gt學院;
//從生日中提取出生年份。
int Pos =生日. find _ first _ of('/');
字符串出生年份;
BirthYear.assign(生日,0,Pos);
char chBirthYear[6];
strcpy(chBirthYear,birthday . c _ str());
//獲取當前系統的年份。
char now year[5];
time _ t tnow = time(0);
strftime(NowYear,5," %Y ",local time(& amp;tnow));
age = atoi(now year)-atoi(chBirthYear);//計算年齡
}
教師:VTeacher()
{
}
void teacher::display(){//display()同名函數,輸出教師信息。
cout & lt& lt"員工編號:" < & ltId & lt& ltendl
cout & lt& lt"名稱:"
cout & lt& lt"性別:"
cout & lt& lt"薪水:"
cout & lt& lt"出生日期:"
cout & lt& lt"工作時間:"
cout & lt& lt"年齡:"
}
string Teacher::GetAcademy(){
回歸學院;
}
Worker::Worker() //添加工作者信息
{
cout & lt& lt"請輸入該工人的信息:"
cout & lt& lt"員工編號:" < & ltendl
CIN & gt;& gtid;
cout & lt& lt"名稱:"
CIN & gt;& gt姓名;
cout & lt& lt"性別:"
CIN & gt;& gt性;
cout & lt& lt"薪水:"
CIN & gt;& gt工資;
cout & lt& lt"出生日期:(格式xxxx/xx/xx)"
CIN & gt;& gt生日;
cout & lt& lt“工作時間:(格式xxxx/xx/xx)”& lt;& ltendl
CIN & gt;& gt工作時間;
//從生日中提取出生年份。
int Pos =生日. find _ first _ of('/');
字符串出生年份;
BirthYear.assign(生日,0,Pos);
char chBirthYear[6];
strcpy(chBirthYear,birthday . c _ str());
//獲取當前系統的年份。
char now year[5];
time _ t tnow = time(0);
strftime(NowYear,5," %Y ",local time(& amp;tnow));
age = atoi(now year)-atoi(chBirthYear);//計算年齡
}
Worker::VWorker()
{
}
void worker::display(){//display()同名函數,輸出工作者信息。
cout & lt& lt"員工編號:" < & ltId & lt& ltendl
cout & lt& lt"名稱:"
cout & lt& lt"性別:"
cout & lt& lt"薪水:"
cout & lt& lt"出生日期:"
cout & lt& lt"工作時間:"
cout & lt& lt"年齡:"
}
void add teacher(vector & lt;老師& gt*TeaInfo) //添加教師對象
{
系統("顏色05A ");//設置當前窗口的背景色和前景色。
TeaTemp老師;
(*TeaInfo)。push _ back(tea temp);
}
void AddWoker(vector & lt;工人& gt*WorkerInfo) //添加新的工作對象。
{
系統("顏色05A ");
Worker Wokertmp
(*WorkerInfo)。push _ back(Wokertmp);
}
void DisplayAll(矢量& lt老師& gt*TeaInfo,vector & lt工人& gt*WokerInfo){ //顯示所有員工記錄。
系統("顏色05A ");
cout & lt& lt"所有教師的信息:"
向量& lt老師& gt*叠代器pTeaInfo
for (pTeaInfo=(*TeaInfo)。begin();(*TeaInfo)。empty()!=1。& amppTeaInfo!=(*TeaInfo)。end();PTA info++)//如果到達了向量的末尾,則退出。
{
(*pTeaInfo)。顯示();
cout & lt& ltendl
}
cout & lt& lt"所有工人的信息:"
向量& lt工人& gt*叠代器pWorkerInfo
for (pWorkerInfo=(*WokerInfo)。begin();(*WokerInfo)。empty()!=1。& amppWorkerInfo!=(*WokerInfo)。end();PWorkerInfo++) //如果到達向量的末尾,則退出。
{
(*pWorkerInfo)。顯示();
cout & lt& ltendl
}
cout & lt& lt"按回車鍵返回"
getchar();getchar();
}
void disavgthierage(vector & lt;老師& gt*TeaInfo){ //查詢教師平均年齡。
系統("顏色05A ");
int SumAge = 0;
向量& lt老師& gt*叠代器pTeaInfo
for (pTeaInfo=(*TeaInfo)。begin();(*TeaInfo)。empty()!=1。& amppTeaInfo!=(*TeaInfo)。end();PTA info++)//遍歷教師容器
{//如果到達了向量的末尾,則退出。
SumAge+= (*pTeaInfo)。GetAge();
cout & lt& ltendl
}
if((*TeaInfo)。size()!=0)
cout & lt& lt"教師的平均年齡是"
else cout & lt& lt“沒有記錄”
cout & lt& lt"按回車鍵返回"
getchar();getchar();
}
void disavgworeage(vector & lt;工人& gt*WokerInfo){
系統("顏色05A ");
int SumAge = 0;
向量& lt工人& gt*叠代器pWorkerInfo
for (pWorkerInfo=(*WokerInfo)。begin();(*WokerInfo)。empty()!=1。& amppWorkerInfo!=(*WokerInfo)。end();PWorkerInfo++) //如果到達向量的末尾,則退出。
{
SumAge+= (*pWorkerInfo)。GetAge();
cout & lt& ltendl
}
if((*WokerInfo)。size()!=0)
cout & lt& lt“員工的平均年齡是”
else cout & lt& lt“沒有記錄”
cout & lt& lt"按回車鍵返回"
getchar();getchar();
}
void DelTeacher(向量& lt老師& gt*TeaInfo){ //用於刪除教師信息。
系統("顏色05A ");
bool Hflag = false
字符串SearchName
向量& lt老師& gt*叠代器pTeaInfo
cout & lt& lt"請輸入您要刪除的教師姓名:"
cout & lt& lt”名稱:“;
CIN & gt;& gtSearchName
for(pTeaInfo=(*TeaInfo)。begin();(*TeaInfo)。empty()!= 1。& amppTeaInfo!=(*TeaInfo)。end();PTA info++)//如果到達了向量的末尾,則退出。
{
if(0 = = search name . compare(* ptea info)。getname())//如果找到要刪除的老師的名字,就執行。
{
Hflag = true//找到老師
(*TeaInfo)。erase(pTeaInfo);//刪除vector中指定的老師。
繼續;
}
}
If (false==Hflag) //如果沒有老師,執行。
{
cout & lt& lt“沒有這樣的老師!”& lt& ltendl
}
cout & lt& lt"按回車鍵返回"
getchar();getchar();
}
void del worker(vector & lt;工人& gt*WokerInfo) //用於刪除工人信息。
{
系統("顏色05A ");
bool Hflag = false
字符串SearchName
向量& lt工人& gt*叠代器pWorkerInfo
cout & lt& lt"請輸入您想刪除的工作者的姓名:"
cout & lt& lt”名稱:“;
CIN & gt;& gtSearchName
for(pWorkerInfo=(*WokerInfo)。begin();(*WokerInfo)。empty()!= 1。& amppWorkerInfo!=(*WokerInfo)。end();PWorkerInfo++) //如果到達向量的末尾,則退出。
{
if(0 = = search name . compare(* pworkerinfo)。getname())//如果找到要刪除的worker的名字,就執行它。
{
Hflag = true//查找工人
(*WokerInfo)。erase(pWorkerInfo);//刪除vector中指定的worker。
繼續;
}
}
If (false==Hflag) //如果沒有工作線程,則執行。
{
cout & lt& lt“沒有這樣的老師!”& lt& ltendl
}
cout & lt& lt"按回車鍵返回"
getchar();getchar();
}
void search by name(vector & lt;老師& gt*TeaInfo,vector & lt工人& gt*WokerInfo){ //按姓名查找員工信息。
系統("顏色05A ");
bool Hflag = false
字符串SearchName
向量& lt老師& gt*叠代器pTeaInfo
cout & lt& lt"請輸入您要找的員工的姓名:"
cout & lt& lt”名稱:“;
CIN & gt;& gtSearchName
for(pTeaInfo=(*TeaInfo)。begin();pTeaInfo!=(*TeaInfo)。end();pTeaInfo++)
{
if(0 = = search name . compare(* ptea info)。getname())//如果找到輸入的員工,就會執行。
{
Hflag = true//查找員工
cout & lt& lt“這個人是老師,他的信息是”
(*pTeaInfo)。顯示();//顯示員工信息
繼續;
}
}
向量& lt工人& gt*叠代器pWorkerInfo
for(pWorkerInfo=(*WokerInfo)。begin();pWorkerInfo!=(*WokerInfo)。end();pWorkerInfo++)
{
if(0 = = search name . compare(* pworkerinfo)。getname())//如果找到輸入的員工,就會執行。
{
Hflag = true//查找員工
cout & lt& lt此人是教師,他的個人信息是
(*pWorkerInfo)。顯示();//顯示員工信息
繼續;
}
}
if (false==Hflag)
{
cout & lt& lt“沒有這個員工!”& lt& ltendl//找不到任何信息
}
cout & lt& lt"按回車鍵返回"
getchar();getchar();
}
void DisTeacherByAcademy(vector & lt;老師& gtTeaInfo){ //按部門輸出教師信息。
系統("顏色05A ");
bool Hflag = false
字符串SearchName
向量& lt老師& gt*叠代器pTeaInfo
而((TeaInfo)。empty()!=1) {//輸出指定部門的所有教師。
pTeaInfo=(TeaInfo)。begin();
弦樂學院= (*pTeaInfo)。GetAcademy();
cout & lt& lt"部門:"
for(pTeaInfo=(TeaInfo)。begin();(TeaInfo)。empty()!=1。& amppTeaInfo!=(TeaInfo)。end();){
if(0 = = academy . compare(* pTeaInfo)。GetAcademy()))
{
(*pTeaInfo)。顯示();
cout & lt& ltendl
(TeaInfo)。erase(pTeaInfo);
pTeaInfo=(TeaInfo)。begin();
}
else ptea info++;
}
cout & lt& ltendl
}
cout & lt& lt"按回車鍵返回"
getchar();getchar();
}
void WriteFile(vector & lt;老師& gt*TeaInfo,vector & lt工人& gt*WokerInfo) //生成壹個新文件
{
FILE * fp
if(NULL = =(FP = fopen(" employee . txt "," w+"))
{
cout & lt& lt"打開文件時出錯"
退出(-1);
}
向量& lt工人& gt*叠代器pWorkerInfo
向量& lt老師& gt*叠代器pTeaInfo
for(pTeaInfo=(*TeaInfo)。begin();pTeaInfo!=(*TeaInfo)。end();PTA info++)//將所有教師的信息寫入向量。
{
Fputs("教師信息:\n ",FP);
Fprintf(fp," name:% s \ n ",(* pteainfo)。getname()。c _ str());
Fprintf(fp,"年齡:%d\n ",(*pTeaInfo)。GetAge());
fputs("\n ",FP);
}
Fputs("教師信息結束\n ",FP);
for(pWorkerInfo=(*WokerInfo)。begin();pWorkerInfo!=(*WokerInfo)。end();PWorkerInfo++) //用vector寫出所有老師的信息。
{
Fputs("員工信息:\n ",FP);
Fprintf(fp," name:% s \ n ",(* pworkerinfo)。getname()。c _ str());
Fprintf(fp,"年齡:%d\n ",(*pWorkerInfo)。GetAge());
fputs("\n ",FP);
}
Fputs("員工信息結束\n ",FP);
fclose(FP);
}
Void Mainmenu(){//菜單界面
系統("顏色05A ");//設置當前窗口的背景色和前景色。
cout & lt& lt“╭╭╮╮╮╮╮╮╮╮╮╮╮╮╮╮╮╮╮╮╮╮╮╮╮╮╮╮╮9 & lt;endl
cout & lt& lt“∣請選擇壹個功能∣"<;& ltendl
cout & lt& lt“├――――――――――――――――――――――――――――┤"<;& ltendl
cout & lt& lt"∣ 1.創建和輸入員工數據∣"<;& ltendl
cout & lt& lt"∣ 2.根據條件輸出員工數據∣" < & lt;endl
cout & lt& lt"∣ 3.刪除員工數據∣"endl
cout & lt& lt"0.退出" < & ltendl
cout & lt& lt“╰――――――――――――――――――――――――――――╯"<;& ltendl
cout & lt& lt“―――――――――――――――――――――――――――――――”& lt;& ltendl
cout & lt& lt"請選擇您要提供的類別:";
}
空插入(vector & lt老師& gt*TeaInfo,vector & lt工人& gt*WorkerInfo) //添加員工數據的菜單界面。
{
系統("顏色05A ");//設置當前窗口的背景色和前景色。
int select =-1;
而(選擇!=0)
{
cout & lt& lt“╭╭╮╮╮╮╮╮╮╮╮╮╮╮╮╮╮╮╮╮╮╮╮╮╮╮╮╮╮9 & lt;endl
cout & lt& lt“∣請選擇壹項行動:∣”
cout & lt& lt“├――――――――――――――――――――――――――――┤"<;& ltendl
cout & lt& lt“∣ 1添加壹個教師記錄∣"<;& ltendl
cout & lt& lt《∣ 2添加壹個工人記錄∣》< & lt;endl
cout & lt& lt“∣ 0返回主菜單∣”< & lt;endl
cout & lt& lt“╰――――――――――――――――――――――――――――╯"<;& ltendl
CIN & gt;& gt選擇;
開關(選擇){
案例1:add teacher(TeaInfo);打破;
案例二:AddWoker(worker info);打破;
案例三:main menu();打破;
默認值:
cout & lt& lt“回到主菜單!”& lt& ltendl
}
}
}
無效搜索(vector & lt老師& gt*TeaInfo,vector & lt工人& gt*WorkerInfo) //員工數據查詢菜單界面
{
系統("顏色05A ");//設置當前窗口的背景色和前景色。
int select =-1;
而(選擇!=0)
{
cout & lt& lt“╭╭╮╮╮╮╮╮╮╮╮╮╮╮╮╮╮╮╮╮╮╮╮╮╮╮╮╮╮9 & lt;endl
cout & lt& lt“∣請選擇壹項行動:∣”
cout & lt& lt“├――――――――――――――――――――――――――――┤"<;& ltendl
cout & lt& lt“∣ 1顯示∣"<的所有員工記錄;& ltendl
cout & lt& lt“∣二中按∣系輸出教師信息”< & ltendl
cout & lt& lt“∣ 3號通過∣的名字檢索所有信息”endl
cout & lt& lt《∣ 4中算出∣教師的平均年齡》< & ltendl
cout & lt& lt《∣ 5日計算∣工人平均年齡》< & ltendl
cout & lt& lt“∣ 0返回主菜單∣”< & lt;endl
cout & lt& lt“╰――――――――――――――――――――――――――――╯"<;& ltendl
CIN & gt;& gt選擇;
開關(選擇){
案例1:DisplayAll(TeaInfo,worker info);打破;
案例二:DisTeacherByAcademy(* TeaInfo);打破;
案例三:SearchByName(TeaInfo,worker info);打破;
案例四:disavgthierage(TeaInfo);打破;
案例五:DisAvgWorkerAge(worker info);打破;
案例6:main menu();打破;
默認值:
cout & lt& lt“回到主菜單!”& lt& ltendl
}
}
}
void刪除(vector & lt老師& gt*TeaInfo,vector & lt工人& gt*WorkerInfo) //刪除員工數據
{
系統("顏色05A ");//設置當前窗口的背景色和前景色。
int select =-1;
而(選擇!=0)
{
cout & lt& lt“╭╭╮╮╮╮╮╮╮╮╮╮╮╮╮╮╮╮╮╮╮╮╮╮╮╮╮╮╮9 & lt;endl
cout & lt& lt“∣請選擇壹項行動:∣”
cout & lt& lt“├――――――――――――――――――――――――――――┤"<;& ltendl
cout & lt& lt“∣ 1刪除壹條∣"<教師記錄;& ltendl
cout & lt& lt《∣ 2刪除∣壹名工人的記錄》< & ltendl
cout & lt& lt“∣ 0返回主菜單∣”< & lt;endl
cout & lt& lt“╰――――――――――――――――――――――――――――╯"<;& ltendl
CIN & gt;& gt選擇;
開關(選擇){
案例1:del teacher(TeaInfo);打破;
案例二:del worker(worker info);打破;
案例三:main menu();打破;
默認值:
cout & lt& lt“回到主菜單!”& lt& ltendl
}
}
}
void MainCho(vector & lt;老師& gt*TeaInfo,vector & lt工人& gt*工人信息)
{//主菜單操作
int choice =-1;
而(選擇!=0){
main menu();
CIN & gt;& gt選擇;
開關(選擇){
案例1:Insert(TeaInfo,worker info);打破;
案例二:搜索(TeaInfo,worker info);打破;
情況三:刪除(TeaInfo,worker info);打破;
案例0:破;
默認值:
cout & lt& lt“操作錯誤!”& lt& ltendl
}
}
}
Void main() //主函數
{
向量& lt老師& gtTeaInfo//
向量& lt工人& gtWorkerInfo//
向量& lt老師& gt*叠代器pTeacher//
向量& lt工人& gt*叠代器pWoker//
pte acher = tea info . begin();//
pwo ker = worker info . begin();//
美因喬(& ampTeaInfo。worker info);//調用主處理程序
WriteFile(& amp;TeaInfo。worker info);//保存文件操作
}