还剩13页未读,继续阅读
本资源只提供10页预览,全部文档请下载后查看!喜欢就下载吧,查找使用更方便
文本内容:
学生实验报告学院软件与通信工程学院课程名称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:Errorcharmes[]=一般性异常!{strcpymessagemes;}voidShowconst{coutmessageendl;}};charGetCharistreamin=cin{charch;whilech=in.peek!=EOFch=in.get==||ch==/t;returnch;}boolUserSaysYes{charch;boolinitialResponse=true;do{ifinitialResponsecoutyn;elsecout用y或n回答;whilech=GetChar==/n;initialResponse=false;}whilech!=ych!=Ych!=nch!=N;whileGetChar!=/n{ifch==y||ch==Yreturntrue;elsereturnfalse;}}classStaff{protected:charnum
[8];charname
[12];intage;public:Staff{}virtual~Staff{}constchar*GetNumconst{returnnum;}virtualvoidInput=0;virtualvoidShowconst=0;virtualvoidReadfstreamfconst=0;virtualvoidWritefstreamfconst=0;};classEngineer:virtualpublicStaff{protected:charmajor
[12];charprof
[12];public:Engineer{}virtual~Engineer{}voidInput{cout编号:;cinnum;cout姓名:;cinname;cout年龄:;cinage;cout专业:;cinmajor;cout职称:;cinprof;}voidShowconst{coutsetw8numsetw12namesetw5agesetw12majorsetw12profendl;}voidReadfstreamfconst{f.readchar*thissizeofEngineer;}voidWritefstreamfconst{f.writechar*thissizeofEngineer;}};classLeader:virtualpublicStaff{protected:charjob
[12];chardep
[12];public:Leader{}virtual~Leader{}voidInput{cout编号:;cinnum;cout姓名:;cinname;cout年龄:;cinage;cout职务:;cinjob;cout部门:;cindep;}voidShowconst{coutsetw8numsetw12namesetw5agesetw12jobsetw12dependl;}voidReadfstreamfconst{f.readchar*thissizeofLeader;}voidWritefstreamfconst{f.writechar*thissizeofLeader;}};classChairman:publicEngineerpublicLeader{public:Chairman{}virtual~Chairman{}voidInput{cout编号:;cinnum;cout姓名:;cinname;cout年龄:;cinage;cout专业:;cinmajor;cout职称:;cinprof;cout职务:;cinjob;cout部门:;cindep;}voidShowconst{coutsetw8numsetw12namesetw5agesetw12majorsetw12profsetw12jobsetw12dependl;}voidReadfstreamfconst{f.readchar*thissizeofChairman;}voidWritefstreamfconst{f.writechar*thissizeofChairman;}};structIndexType{booldelTag;charnum
[8];intposition;charstaffType;};#defineNUM_OF_INCREMENT1000classStaffManage{private:fstreamfile;IndexType*indexTable;intmaxSize;intcount;voidAddIndexItemconstIndexTypee;voidAddData;voidUpdataData;voidSearchData;voidDeleteData;voidPack;public:StaffManage;virtual~StaffManage;voidRun;};StaffManage::StaffManage{ifstreamindexFilestaff.idxios::binary;if!indexFile.fail{indexFile.seekg0ios::end;count=indexFile.tellg/sizeofIndexType;maxSize=count+NUM_OF_INCREMENT;indexTable=newIndexType[maxSize];indexFile.seekg0ios::beg;inti=0;indexFile.readchar*indexTable[i++]sizeofIndexType;while!indexFile.eof{indexFile.readchar*indexTable[i++]sizeofIndexType;}indexFile.close;}else{count=0;maxSize=count+NUM_OF_INCREMENT;indexTable=newIndexType[maxSize];}ifstreamiFilestaff.dat;ifiFile.fail{ofstreamoFilestaff.dat;ifoFile.failthrow打开文件失败!;oFile.close;}else{iFile.close;}file.openstaff.datios::in|ios::out|ios::binary;iffile.failthrow打开文件失败!;}StaffManage::~StaffManage{ofstreamindexFilestaff.idxios::binary;forinti=0;icount;i++{indexFile.writechar*indexTable[i]sizeofIndexType;}indexFile.close;file.close;}voidStaffManage::AddIndexItemconstIndexTypee{ifcount=maxSize{maxSize+=NUM_OF_INCREMENT;IndexType*tmpIndexTable=newIndexType[maxSize];forinti=0;icount;i++tmpIndexTable[i]=indexTable[i];delete[]indexTable;indexTable=tmpIndexTable;}indexTable[count++]=e;}voidStaffManage::AddData{Staff*pStaff;IndexTypeitem;item.delTag=false;file.seekg0ios::end;do{do{cout人员类型e:工程师l:领导c:主任工程师;;cinitem.staffType;item.staffType=toloweritem.staffType;}whileitem.staffType!=eitem.staffType!=litem.staffType!=c;ifitem.staffType==epStaff=newEngineer;elseifitem.staffType==lpStaff=newLeader;elsepStaff=newChairman;pStaff-Input;strcpyitem.numpStaff-GetNum;item.position=file.tellg;AddIndexItemitem;pStaff-Writefile;deletepStaff;cout继续添加吗;}whileUserSaysYes;}voidStaffManage::UpdataData{Staff*pStaff;IndexTypeitem;item.delTag=false;charnum
[12];cout人员编号:;cinnum;intpos;forpos=0;poscount;pos++{ifstrcmpnumindexTable[pos].num==0!indexTable[pos].delTagbreak;}ifposcount{file.seekgindexTable[pos].positionios::beg;ifindexTable[pos].staffType==epStaff=newEngineer;elseifindexTable[pos].staffType==lpStaff=newLeader;elsepStaff=newChairman;pStaff-Readfile;pStaff-Show;do{cout人员类型e:工程师l:领导c:主任工程师;;cinitem.staffType;item.staffType=toloweritem.staffType;}whileitem.staffType!=eitem.staffType!=litem.staffType!=c;ifitem.staffType==epStaff=newEngineer;elseifitem.staffType==lpStaff=newLeader;elsepStaff=newChairman;pStaff-Input;ifitem.staffType=indexTable[pos].staffType{strcpyindexTable[pos].numpStaff-GetNum;file.seekgindexTable[pos].positionios::beg;}else{indexTable[pos].delTag=true;strcpyitem.numpStaff-GetNum;file.seekg0ios::end;item.position=file.tellg;AddIndexItemitem;}pStaff-Writefile;deletepStaff;}else{cout查无此人!endl;file.clear;}}voidStaffManage::SearchData{Staff*pStaff;charnum
[12];cout人员编号:;cinnum;intpos;forpos=0;poscount;pos++{ifstrcmpnumindexTable[pos].num==0!indexTable[pos].delTagbreak;}ifposcount{file.seekgindexTable[pos].positionios::beg;ifindexTable[pos].staffType==epStaff=newEngineer;elseifindexTable[pos].staffType==lpStaff=newLeader;elsepStaff=newChairman;pStaff-Readfile;pStaff-Show;deletepStaff;}else{cout查无此人!endl;file.clear;}}voidStaffManage::DeleteData{Staff*pStaff;IndexTypeitem;item.delTag=false;charnum
[12];cout人员编号:;cinnum;intpos;forpos=0;poscount;pos++{ifstrcmpnumindexTable[pos].num==0!indexTable[pos].delTagbreak;}ifposcount{file.seekgindexTable[pos].positionios::beg;ifindexTable[pos].staffType==epStaff=newEngineer;elseifindexTable[pos].staffType==lpStaff=newLeader;elsepStaff=newChairman;pStaff-Readfile;cout被删除记录为:endl;pStaff-Show;indexTable[pos].delTag=true;deletepStaff;cout删除成功!endl;}else{cout删除失败!endl;file.clear;}}voidStaffManage::Pack{ofstreamoFiletem.dat;oFile.close;fstreamoutFiletem.datios::app|ios::binary;Staff*pStaff;intcur_count=0;forintpos=0;poscount;pos++{if!indexTable[pos].delTag{file.seekgindexTable[pos].positionios::beg;indexTable[pos].position=file.tellg;ifindexTable[pos].staffType==epStaff=newEngineer;elseifindexTable[pos].staffType==lpStaff=newLeader;elsepStaff=newChairman;pStaff-Readfile;pStaff-WriteoutFile;deletepStaff;indexTable[cur_count++]=indexTable[pos];}}count=cur_count;file.close;outFile.close;removestaff.dat;renametem.datstaff.dat;file.openstaff.datios::in|ios::out|ios::binary;}voidStaffManage::Run{intselect;do{cout请选择:endl;cout
1.增加数据endl;cout
2.更新数据endl;cout
3.查询数据endl;cout
4.删除数据endl;cout
5.重组文件endl;cout
6.退出endl;cinselect;whilecin.get!=\n;switchselect{case1:AddData;break;case2:UpdataData;break;case3:SearchData;break;case4:DeleteData;break;case5:Pack;break;}}whileselect!=6;}intmain{try{StaffManageobjStaffManage;objStaffManage.Run;}catchErrorerr{err.Show;}systemPAUSE;return0;}
三、结论
1、实验结果
2、分析讨论这个题目要有耐心!
四、指导教师评语及成绩成绩指导教师签名批阅日期√√PAGE。