您好,欢迎访问三七文档
当前位置:首页 > 商业/管理/HR > 人事档案/员工关系 > 公司员工管理信息系统
学生实验报告学院:软件与通信工程学院课程名称:C++课程设计专业班级:10软件1班姓名:黄道炜学号:0103815学生实验报告(5)学生姓名黄道炜学号0103815同组人:无实验项目公司员工管理信息系统□必修□选修□演示性实验□验证性实验□操作性实验□综合性实验实验地点W102实验仪器台号指导教师赵晓平实验日期及节次2011.11.9(三)567节2011.11.16(三)567节2011.11.23(三)567节一、实验综述1、实验目的及要求利用文件处理方式,并综合运用C++面向对象编程实现一个公司员工管理信息系统。实验题:设计一个虚基类Staff(员工),包含编号、姓名和年龄保护数据成员以及相关的成员函数;由Staff派生出工程师类Engineer,包含专业和职称保护数据成员和相关的成员函数;再由Staff派生出领导类Leader,包括职务和部门保护数据成员和相关的成员函数;然后由Engineer和Leader类派生出主任工程师类Chairman。设计一个利用文件处理方式实现对公司员工(包括工程师、领导和主任工程师)进行管理,具备增加数据、更新数据、查询数据、删除数据以及重组文件的功能。要求将公司人员信息存储在数据文件staff.dat中,为存储方便,可以定义索引文件,在索引文件中,每一项包括删除标志、编号,记录在数据文件staff.dat中的相对位置和人员类型,使用索引对数据文件进行定位操作。实验要求:认真完成实验题,能正确运行,提交实验报告并上传程序,实验报告要求写出操作步骤、结果、问题、解决方法、体会等。2、实验仪器、设备或软件计算机、VC++6.0、office、相关的操作系统等。二、实验过程(实验步骤、记录、数据、分析)#includeiostream#includefstream#includeiomanipusingnamespacestd;#defineMAX_ERROR_MESSAGE_LEN100classError{private:charmessage[MAX_ERROR_MESSAGE_LEN];√√public:Error(charmes[]=一般性异常!){strcpy(message,mes);}voidShow()const{coutmessageendl;}};charGetChar(istream&in=cin){charch;while((ch=in.peek())!=EOF&&((ch=in.get())==''||ch=='/t'));returnch;}boolUserSaysYes(){charch;boolinitialResponse=true;do{if(initialResponse)cout(y,n)?;elsecout用y或n回答:;while((ch=GetChar())=='/n');initialResponse=false;}while(ch!='y'&&ch!='Y'&&ch!='n'&&ch!='N');while(GetChar()!='/n'){if(ch=='y'||ch=='Y')returntrue;elsereturnfalse;}}classStaff{protected:charnum[8];charname[12];intage;public:Staff(){}virtual~Staff(){}constchar*GetNum()const{returnnum;}virtualvoidInput()=0;virtualvoidShow()const=0;virtualvoidRead(fstream&f)const=0;virtualvoidWrite(fstream&f)const=0;};classEngineer:virtualpublicStaff{protected:charmajor[12];charprof[12];public:Engineer(){}virtual~Engineer(){}voidInput(){cout编号:;cinnum;cout姓名:;cinname;cout年龄:;cinage;cout专业:;cinmajor;cout职称:;cinprof;}voidShow()const{coutsetw(8)numsetw(12)namesetw(5)agesetw(12)majorsetw(12)profendl;}voidRead(fstream&f)const{f.read((char*)this,sizeof(Engineer));}voidWrite(fstream&f)const{f.write((char*)this,sizeof(Engineer));}};classLeader:virtualpublicStaff{protected:charjob[12];chardep[12];public:Leader(){}virtual~Leader(){}voidInput(){cout编号:;cinnum;cout姓名:;cinname;cout年龄:;cinage;cout职务:;cinjob;cout部门:;cindep;}voidShow()const{coutsetw(8)numsetw(12)namesetw(5)agesetw(12)jobsetw(12)dependl;}voidRead(fstream&f)const{f.read((char*)this,sizeof(Leader));}voidWrite(fstream&f)const{f.write((char*)this,sizeof(Leader));}};classChairman:publicEngineer,publicLeader{public:Chairman(){}virtual~Chairman(){}voidInput(){cout编号:;cinnum;cout姓名:;cinname;cout年龄:;cinage;cout专业:;cinmajor;cout职称:;cinprof;cout职务:;cinjob;cout部门:;cindep;}voidShow()const{coutsetw(8)numsetw(12)namesetw(5)agesetw(12)majorsetw(12)profsetw(12)jobsetw(12)dependl;}voidRead(fstream&f)const{f.read((char*)this,sizeof(Chairman));}voidWrite(fstream&f)const{f.write((char*)this,sizeof(Chairman));}};structIndexType{booldelTag;charnum[8];intposition;charstaffType;};#defineNUM_OF_INCREMENT1000classStaffManage{private:fstreamfile;IndexType*indexTable;intmaxSize;intcount;voidAddIndexItem(constIndexType&e);voidAddData();voidUpdataData();voidSearchData();voidDeleteData();voidPack();public:StaffManage();virtual~StaffManage();voidRun();};StaffManage::StaffManage(){ifstreamindexFile(staff.idx,ios::binary);if(!indexFile.fail()){indexFile.seekg(0,ios::end);count=indexFile.tellg()/sizeof(IndexType);maxSize=count+NUM_OF_INCREMENT;indexTable=newIndexType[maxSize];indexFile.seekg(0,ios::beg);inti=0;indexFile.read((char*)&indexTable[i++],sizeof(IndexType));while(!indexFile.eof()){indexFile.read((char*)&indexTable[i++],sizeof(IndexType));}indexFile.close();}else{count=0;maxSize=count+NUM_OF_INCREMENT;indexTable=newIndexType[maxSize];}ifstreamiFile(staff.dat);if(iFile.fail()){ofstreamoFile(staff.dat);if(oFile.fail())throw(打开文件失败!);oFile.close();}else{iFile.close();}file.open(staff.dat,ios::in|ios::out|ios::binary);if(file.fail())throw(打开文件失败!);}StaffManage::~StaffManage(){ofstreamindexFile(staff.idx,ios::binary);for(inti=0;icount;i++){indexFile.write((char*)&indexTable[i],sizeof(IndexType));}indexFile.close();file.close();}voidStaffManage::AddIndexItem(constIndexType&e){if(count=maxSize){maxSize+=NUM_OF_INCREMENT;IndexType*tmpIndexTable=newIndexType[maxSize];for(inti=0;icount;i++)tmpIndexTable[i]=indexTable[i];delete[]indexTable;indexTable=tmpIndexTable;}indexTable[count++]=e;}voidStaffManage::AddData(){Staff*pStaff;IndexTypeitem;item.delTag=false;file.seekg(0,ios::end);do{do{cout人员类型(e:工程师,l:领导,c:主任工程师);;cinitem.staffType;item.staffType=tolower(item.staffType);}while(item.staffType!='e'&&item.staffType!='l'&&item.staffType!='c');if(item.staffType=='e')pStaff=newEngineer;elseif(item.staffType=='l')pStaff=newLeader;elsepStaff=newChairman;pStaff-Input();strcpy(item.num,pStaff-GetNum());item.position=file.tellg();AddIndexItem(item);pStaff-Write(file);deletepStaff;cout继续添加吗;}while(UserSaysYes());
本文标题:公司员工管理信息系统
链接地址:https://www.777doc.com/doc-1024102 .html