#includeiostream#includeconio.h#includestring#includestdlib.h#includewindows.h#includeiomanip#includefstreamusingnamespacestd;//日期类classdate{private:intyear,month,day;//年、月、日三个成员public:voidset_date(inty,intm,intd){year=y;month=m;day=d;}intget_year(){returnyear;}//取年份intget_month(){returnmonth;}//取月份intget_day(){returnday;}//取日期};//人员类classperson{protected:charname[10];charid[6];charsex[2];datebirth;charidCard[18];public:char*get_name(){returnname;}char*get_id(){returnid;}char*get_sex(){returnsex;}char*get_idCard(){returnidCard;}intget_year(){returnbirth.get_year();}intget_month(){returnbirth.get_month();}intget_day(){returnbirth.get_day();}};//学生类(继承人员类)classstudent:publicperson{protected:charclassNum[15];public:char*get_classNum(){returnclassNum;}voidprintS();voidget_stu();voidshowS();voidenterStu(int&);//输入学生记录voidshowStu();//显示学生记录boolsearchStu();//按姓名查找学生记录voidchangeStu();//更改学生记录voidinsertStu();//插入学生记录voiddelStu(int&);//删除学生记录};voidstudent::printS()//输出学生信息{coutsetw(3)get_id();coutsetw(8)get_name();coutsetw(4)get_sex();coutsetw(10)get_year()年get_month()月get_day()日;coutsetw(20)get_idCard();coutsetw(15)get_classNum()endl;}voidstudent::showS(){coutsetw(4)编号;coutsetw(6)姓名;coutsetw(6)性别;coutsetw(15)出生日期;coutsetw(18)身份证号;coutsetw(15)学号endl;}ints=0;//定义全局变量,用于记录人事管理系统中的学生数voidstudent::get_stu(){ifstreamfile(stu.dat,ios::binary|ios::in);//打开用于读的binary文件if(!file){ofstreamoutfile(stu.dat,ios::app|ios::binary);//打开文件,并将指针指向文件尾if(!outfile){cerrstu.dat文件打开错误!endl;return;}return;}file.read((char*)(this),sizeof(*this));//读取一个类对象数据放入*this中while(!file.eof()){s++;//每调用一次该函数,职员总数增加1file.read((char*)(this),sizeof(*this));//再读取一个类对象数据放入*this中}file.close();}voidstudent::enterStu(int&s)//输入学生信息{intyear,month,day;cout输入学生信息:endl;ofstreamoutfile(stu.dat,ios::app|ios::binary);//打开文件,并将指针指向文件尾cout编号:;cinid;cout姓名:;cinname;cout性别:;cinsex;cout身份证号:;cinidCard;cout学号:;cinclassNum;cout出生日期(年月日用空格键区分):;cinyearmonthday;birth.set_date(year,month,day);coutendl;outfile.write((char*)(this),sizeof(*this));//将输入的信息写入文件outfile.close();cout信息建立成功!endl;s++;//每调用一次该函数,学生总数增加1}voidstudent::showStu()//显示所有学生信息{if(s==0)cout学生数据为空,请先添加学生信息!endl;else{ifstreaminfile(stu.dat,ios::binary);//打开用于读的binary文件infile.read((char*)(this),sizeof(*this));//读取一个类对象数据放入*this中cout所有学生的信息如下:endl;showS();while(!infile.eof())//沿未到达文件尾,继续处理{printS();infile.read((char*)(this),sizeof(*this));}infile.close();}}boolstudent::searchStu()//按姓名查找学生信息{charna[10];cout请输入你要查找学生的姓名:endl;cinna;ifstreaminfile(stu.dat,ios::binary);infile.read((char*)(this),sizeof(*this));//打开文件,读取数据while(!infile.eof()){if(strcmp(name,na)==0){cout该学生的个人信息如下:endl;showS();printS();infile.close();returntrue;}infile.read((char*)(this),sizeof(*this));//文件指针未到文件尾,循环读取数据}infile.close();cout对不起,你要查找的学生不存在!endl;returnfalse;}voidstudent::changeStu()//修改数据{intyear,month,day;intchangemark=0;//用于标记该编号信息是否已找到charstuname[20];cout请输入你要修改信息的学生的:endl;cinstuname;ofstreamoutfile(stuchange.dat,ios::app|ios::binary);//打开用于写的二进制文件ifstreaminfile(stu.dat,ios::binary);//打开用于读的二进制文件infile.read((char*)(this),sizeof(*this));//从stu.txt中读取一个类对象数据放入*this中showS();while(!infile.eof()){if(strcmp(name,stuname)==0){changemark=1;cout输入学生修改信息:endl;ofstreamoutfile(stuchange.dat,ios::binary);//打开文件cout编号:;cinid;cout姓名:;cinname;cout性别:;cinsex;cout身份证号:;cinidCard;cout学号:;cinclassNum;cout请输入出生日期(年月日用空格键区分):;cinyearmonthday;birth.set_date(year,month,day);outfile.write((char*)(this),sizeof(*this));//将输入的信息写入文件outfile.close();cout信息修改成功!endl;}elseoutfile.write((char*)(this),sizeof(*this));//将读得的数据写入文件infile.read((char*)(this),sizeof(*this));//再次读取一个类对象数据,放于*this中}outfile.close();infile.close();if(changemark==1)//将修改后的信息写入原文件{ofstreamoutfile(stu.dat,ios::binary);//打开用于写的二进制文件stu.txtifstreaminfile(stuchange.dat,ios::binary);//打开用于读的二进制文件infile.read((char*)(this),sizeof(*this));//读取一个类对象数据放入*this中while(!infile.eof()){outfile.write((char*)(this),sizeof(*this));infile.read((char*)(this),sizeof(*this));}infile.close();outfile.close();}if(changemark==0)cout欲修改的学生不存在!endl;}voidstudent::insertStu()//插入数据{intyear,month,day;cout添加学生信息:endl;ofstreamoutfile(stu.dat,ios::app|ios::binary);//打开文件,并将指针指向文件尾cout编号:;cinid;cout姓名:;cinname;cout性别:;cinsex;cout身份证号:;cinidCard;cout学号:;cinclassNum;cout出生日期:(年月日中间用空格区分);cinyearmonthday;birth.set_date(year,month,day);coutendl;outfile.write((char*)(this),sizeof(*this));//将输入的信息写入文件outfile.close();cout信息添加成功!endl;s++;//每调用一次该函数,学生总数增加1}voidstudent::delStu(int&s)//删除学生信息{charb;intdelmark=0;//用于标记该编号信息是否已找到charstuname[20];cout请输入要删除学生的姓名:endl;cinstuname;ofstreamoutfile(studel.dat,ios::binary);//打开用于写的二进制文件ifstreaminfile(stu.dat,ios::binary);//打开用于读的二进制文件infile.read((char*)(this),sizeof(*this));//从managestu.txt中读取一个类对象数据放入*this中cout该学生的个人信息如下:endl;coutsetw(4)编号;coutsetw(6)姓名;coutsetw(6)性