课程设计报告课程:面向对象程序设计学号:姓名:班级:教师:Xx大学课程设计名称:高校人事管理系统1.设计内容某高校主要人员有:在职人员(行政人员、教师、一般员工)、退休人员、返聘人员和临时工。
现在,需要存储这些人员的人事档案信息:编号、姓名、性别、年龄、职务、职称、政治面貌、最高学历、任职时间、来院时间。
要求:1) 添加删除功能:能根据学院人事的变动情况,添加删除记录;2) 查询功能:能根据编号和姓名进行查询;3) 编辑功能(高级):根据查询对相应的记录进行修改,并存储;4) 统计功能:能根据多种参数进行人员的统计(在职人数、党员人数、女工人数、高学历高职称人数);5) 保存功能:能对输入的数据进行相应的存储,要求重载插入和提取符以完成数据的保存和打开。
6) 人员编号在生成人员信息时同时生成,每输入一个人员信息编号顺序加1。
3.3基本功能要求1.功能选择用菜单实现例如:***************************************************高校人事管理系统——————————————————————————1--增加人员资料2--删除人员信息3--修改人员信息4--查询人员信息5—统计人员信息6—数据保存7—显示所有信息8—退出****************************************************请选择<1--9>:用户通过输入不同的数字进入不同的菜单。
次级菜单主要显示本程序的功能,主要的功能有增加人员资料,删除人员信息,修改人员信息,修改人员信息,查询人员信息,统计人员信息,数据保存,显示所有信息和退出功能。
2.运行时给出明确的提示信息比如,选择1,系统会提醒用户输入编号,输入完系统会进一步提醒用户输入其他信息和选择,进入相应的选择后会提醒用户选择其他子选择和输入;比如,输入增加人员,又选择“在职人员(行政人员、教师、一般员工)、退休人员、返聘人员和临时工”再输入信息。
比如在删除人员信息中又显示“所要删除的编号是”和“无此人员”或“已被删除”等比如在查找人员信息中又显示“所要查找的编号是”或“所要查找的姓名是”和“无此人员”和显示相关信息等。
在统计人员信息中又显示————————————————————————————请选择统计对象:1 在职人数2 党员人数3 女工人数4 高学历高职称人数请选择:————————————————————————————界面来供选择。
比如修改功能则会出现下面的界面————————————————————————————请选择要修改的内容:1:姓名 2:性别 3:年龄 4:职工类型 5:职务6:职称 7:学历 8:政治面貌 9:来院时间 10:参加工作时间"选择(1-10):————————————————————————————在实现完菜单中的子程序功能,系统会提醒用户按任意键继续(就是重新返回到主菜单进行其他操作),最后根据提示信息输入8退出系统,结束本次操作。
4.系统结构设计本程序的功能结构如图1所示:图1程序功能结构图5.源程序代码/*****************************************************************************/ #include<iostream.h> #include<string.h>#include<fstream.h>//文件流,数据流输入/输出#include <stdlib.h>//是常用的函数system()、exit()的头文件 #include<iomanip.h>//参数化输入/输出是setw()函数的头文件//person 类和school 类的主体以及主函数由本人和合作者何婷婷共同完成 //文中没有标注由谁完成的,代表由本人和合作者何婷婷共同完成 class person {private:int no;//编号char type[20];// 职员分类 char name[20];//姓名 char sex[10];//性别 int age;//年龄char time1[20];//任职时间 char time2[20];//来院时间 char pos[20];//职务 char techpos[20];//职称 char party[20];//政治面貌 char study[30];//最高学历person *mynext;//指向下一个指针 public:学校人力资源管理系统删除人员资料修改人员资料查询人员资料统计人员资料保存人员资料显示人员资料增加人员资料person(int nnum,char ntype[],char nname[],char nsex[],int nage,charntime1[],char ntime2[],charnpos[],char ntechpos[],char nparty[],char nstudy[])//构造函数{no=nnum;strcpy(type,ntype);//字符串的拷贝strcpy(name,nname);strcpy(sex,nsex);strcpy(time1,ntime1);age=nage;strcpy(time2,ntime2);strcpy(pos,npos);strcpy(techpos,ntechpos);strcpy(party,nparty);strcpy(study,nstudy);mynext=NULL;//下一个为空}person(int nnum,char ntype[],char nname[],char nsex[],int nage,charntime1[],char ntime2[],char npos[],char ntechpos[],char nparty[],char nstudy[],person *next) //构造函数2,即重载{no=nnum;strcpy(type,ntype);strcpy(name,nname);strcpy(sex,nsex);strcpy(time1,ntime1);age=nage;strcpy(time2,ntime2);strcpy(pos,npos);strcpy(techpos,ntechpos);strcpy(party,nparty);strcpy(study,nstudy);mynext=next;//下一个为有}void setnext(person *next)//关于next的函数{mynext=next;}person *getnext()//指针函数,把数据从被调函数返回到主调函数{return mynext;}int getnum(){return no;}char *getname()//name是数组用指针{return name;}char *getsex()//sex是数组用指针{return sex;}char *getpos()//pos是数组用指针{return pos;}char *gettechpos()//techpos是数组用指针{return techpos;}char *gettime1()//time1是数组用指针{return time1;}char *gettime2()//time2是数组用指针{return time2;}char *getparty()//party是数组用指针{return party;}char *getstudy()//study是数组用指针{return study;}int getage(){return age;}void getag(int as){age=as;}char *gettype()//type是数组用指针{return type;}};//链表类class School{private:person *myfirst;int firstnum;public:School(){myfirst=NULL;}School(int nnu,char ntyp[],char nnam[],char nse[],int nag,char ntim1[],char ntim2[],char npo[],char ntechpo[],char npart[],char nstud[]){myfirst=newperson(nnu,ntyp,nnam,nse,nag,ntim1,ntim2,npo,ntechpo,npart,nstud);//动态分配内存创立节点}//初始化void insertatlast(int nnum,char ntype[],char nname[],char nsex[],int nage,char ntime1[],char ntime2[],char npos[],char ntechpos[],char nparty[],char nstudy[])//成员函数{person *next=myfirst;if(next==NULL)myfirst=newperson(nnum,ntype,nname,nsex,nage,ntime1,ntime2,npos,ntechpos,nparty,nstudy);else{while(next->getnext()!=NULL)//已经有至少一个编号内容next=next->getnext();next->setnext(newperson(nnum,ntype,nname,nsex,nage,ntime1,ntime2,npos,ntechpos,nparty,nstudy,nex t->getnext()));//调用构造函数2}}void printf(int r)//输入函数 *由合作者何婷婷完成{int nage;charntype[20],nname[20],nsex[20],ntime1[20],ntime2[20],npos[20],ntechpos[20],nparty [20],nstudy[20];cout<<"请输入编号为"<<r<<"的成员的信息"<<endl;cout<<"输入职工分类码[poli(行政人员),teac(老师),work(一般人员),outwork(退休人员),rework(返聘人员),timework(临时工)]:"<<endl;cin>>ntype;cout<<"输入姓名:"<<endl;cin>>nname;cout<<"输入性别:(女性—f,男性—m)"<<endl;cin>>nsex;cout<<"输入年龄:"<<endl;cin>>nage;cout<<"参加工作时间:"<<endl;cin>>ntime1;cout<<"输入来院时间:"<<endl;cin>>ntime2;cout<<"输入职务[no(无),ke(科级),chu(处级),di(地级)]:"<<endl;cin>>npos;cout<<"输入职称[no(无),chu(初级),zhong(中级),gao(高级)]:"<<endl;cin>>ntechpos;cout<<"输入加入党派[qz(群众),gd(中共党员),mzd(民主党派)]:"<<endl;cin>>nparty;cout<<"输入学历[xiao(小学),chu(初中),gao(高中),zhuan(大专),da(大学),suo(硕士),bo(博士)]:"<<endl;cin>>nstudy;insertatlast(r,ntype,nname,nsex,nage,ntime1,ntime2,npos,ntechpos,nparty,nst udy);//调用函数}void printf1(person *ahead)//定义一个指针对象*由本人完成{//setiosflags(ios::left)左对齐,setw是操作子,设定下一次输出输入宽度cout<<"编号:"<<setiosflags(ios::left)<<setw(26)<<ahead->getnum()<<"姓名:"<<ahead->getname()<<endl;cout<<"性别:"<<setiosflags(ios::left)<<setw(26)<<ahead->getsex()<<"年龄:"<<ahead->getage()<<endl;cout<<"职工类型:"<<setiosflags(ios::left)<<setw(22)<<ahead->gettype()<<"职务:"<<ahead->getpos()<<endl;cout<<"职称:"<<setiosflags(ios::left)<<setw(26)<<ahead->gettechpos()<<"学历:"<<ahead->getstudy()<<endl;cout<<"政治面貌:"<<setiosflags(ios::left)<<setw(22)<<ahead->getparty()<<"来院时间:"<<ahead->gettime1()<<endl;cout<<"参加工作时间:"<<ahead->gettime2()<<endl;}void pri()//显示所有信息 *由本人完成{person *ahead=myfirst;cout<<"编号姓名性别年龄职工类型职务职称学历政治面貌来院时间参加工作时间\n";while(ahead!=NULL){cout<<setiosflags(ios::left)<<setw(4)<<ahead->getnum()<<setiosflags(ios::le ft)<<setw(6)<<ahead->getname()<<setiosflags(ios::left)<<setw(5)<<ahead->getsex()<<setiosflags(ios::left)< <setw(4)<<ahead->getage()<<setiosflags(ios::left)<<setw(10)<<ahead->gettype()<<setiosflags(ios::left )<<setw(6)<<ahead->getpos()<<setiosflags(ios::left)<<setw(6)<<ahead->gettechpos()<<setiosflags(ios::le ft)<<setw(6)<<ahead->getstudy()<<setiosflags(ios::left)<<setw(9)<<ahead->getparty()<<setiosflags(ios::left )<<setw(12)<<ahead->gettime1()<<ahead->gettime2()<<endl;ahead=ahead->getnext();//一个一个输出}}void add()//增加函数*由合作者何婷婷完成{int i,a,b;person *p1=myfirst;//初始化对象指针if(p1==NULL){cout<<"请输入编号:";cin>>i;printf(i);//调用前面的printf函数}else{if(p1->getnext()==NULL)//获得节点{a=p1->getnum()+1;//printf(a);}else{while(p1->getnext()!=NULL){p1=p1->getnext();//在原由的基础上加内容}b=p1->getnum()+1;//数字加1>=2printf(b);}}}bool removedatnum( )//删除函数*由合作者何婷婷完成{int bh;person *ahead=myfirst;person *follow=ahead;cout<<"请输入要删除人员的编号:";cin>>bh;if(ahead==NULL)//判断链表是否为空。