面向对象课程设计高校人事管理系统.doc
*实践教学* 兰州理工大学计算机与通信学院2008年秋季学期面向对象课程设计题 目:高校人事管理系统 专业班级:06级计算机一班姓 名: 肖雷雷 学 号: 06250131 指导教师: 刘 嘉 成 绩:_目录摘要3第一章 问题描述4第二章 需求分析52.1 需求陈述52.2建立对象模型52.3 建立功能模型52.4系统类层次及结构图6第三章概要设计73.1系统设计73.1.2系统设计思想73.2系统类层次及结构图8第四章 详细设计94.1类与对象的设计94.1.1类属性的详细设计94.1.2类行为的详细设计114.2类的详细继承关系12第五章 编码12设计总结28参考文献29致 谢30编号摘要高校人事管理系统是一个信息管理系统,在开发和设计过程中要以高校人事的管理业务为背景。开发出一套“高校人事管理系统”软件。此程序包括:建立链表并显示,添加删除功能 (能根据学院的变动情况,添加删除记录) , 查询功能 (能根据编号和姓名进行查询) ,编辑功能(根据查询对相应的记录进行 修改,并存储) ,统计功能 (能根据多种参数进行人员的统计) ,保存功能(能对输入的数据进行 相应的存储,要求重载插入和提取符以完成数据的保存和打开)。通过链表存储结构实现数据的输入,实现各子程序过程的演示,对异常输入信息报错。关键字:链表 ;高校人事管理系统;查找;数据装入 第一章 问题描述高校人事管理系统包含查找、插入、删除、修改、输出功能。高校人事管理系统基本情况包括的数据项有:姓名、性别、年龄、职务、职称、政治面貌、最高学历、来院时间使用链表实现数据的录入、查找、修改、插入、追加、删除、统计、输出等功能;建立一个测试的数据表,至少要有20个测试数据,算法对于这些合法的输入数据都能产生满足规格说明要求的结果;算法对于精心选择的典型、苛刻而带有刁难性的几组输入数据能够得出满足规格说明要求的结果;对算法实现过程中的异常情况能给出有效信息;第二章 需求分析2.1 需求陈述 对题目的需求分析得出:高校人事管理系统对人事档案进行管理。人事档案信息包括:编号、姓名、性别、年龄、职务、职称、政治面貌、最高学历、任职时间、来院时间。要求:1) 添加删除功能:能根据学院人事的变动情况,添加删除记录;2) 查询 功能:能根据编号和姓名进行查询;3) 编辑功能:根据查询对相应的记录进行 修改,并存储;4) 统计功能:能根据多种参数进行人员的统计(在职人数、党 员人数、女工人数、高学历高职称人数);5) 保存功能:能对输入的数据进行 相应的存储,要求重载插入和提取符以完成数据的保存和打开。6) 人员编号在 生成人员信息时同时生成,每输入一个人员信息编号顺序加1。 C+系统作为信息管理系统的一个分支,已逐渐成为高校信息化建设的重要组成部分,为学校管理全校的院系的教职工提供了一个功能强大、安装部署方便、使用成本低、操作简捷的信息查询管理系统。 2.2建立对象模型School s;/定义对象person *next=myfirst;/定义对象指针并赋初值2.3 建立功能模型void printf(int r)/获取信息void printf1(person *ahead)/输出信息void pri()void add()/添加新信息bool removedatnum( )/删除信息bool find1()/按编号查找bool find2( )/按姓名查找bool upperson()/修改信息void save()/保存文件到文件中2.4系统类层次及结构图定义两个类,一个person类,包含在职人员(行政人员、教师、一般员工)、退休人员、返聘人员和临时工。员工信息包括编号、姓名、性别、年龄、职务、职称、政治面貌、最高学历、来院时间。定义一个school类,在里面实现数据的添加、删除、修改、查找、显示和退出。类personvoid getag(int as)int getage()char *getname()person *getnext()int getnum()char *getparty()char *getpos()char *getsex()char *getstudy()char *gettechpos()char *gettime()char *gettype()void setnext(person *next)类School void add()/添加新信息bool find1()/按编号查找bool find2( )/按姓名查找void load()void pri()void printf(int r)/获取信息void printf1(person *ahead)/输出信息bool removedatnum( )/删除信息void save()/保存文件到文件中School()/无参构造函数School()/析构函数,删除各指针!bool upperson()/修改信息第三章概要设计3.1系统设计程序设计的基本目标是用算法对问题的原始数据进行处理,从而获得所期望的效果。但这仅仅是程序设计的基本要求。要全面提高程序的质量,提高编程效率,使程序具有良好的可读性、可靠性、可维护性以及良好的结构,编制出好的程序来,应当是每位程序设计工作者追求的目标。而要做到这一点,就必须掌握正确的程序设计方法和技术。而C+语言是一种结构化语言。它层次清晰,便于按模块化方式组织程序,易于调试和维护。所以采用结构化程序设计方法,对管理系统进行自顶向下,逐步细化,模块化设计. 3.1.1系统分析高校人事管理系统所需要完成的功能主要有:人事信息的输入,包括:编号、姓名、性别、年龄、职务、职称、政治面貌、最高学历、任职时间、来院时间等。 人事信息的查询,包括:编号、姓名、性别、年龄、职务、职称、政治面貌、最高学历、任职时间、来院时间等。 人事信息的修改。添加删除功能:能根据学院的变动情况,添加删除记录;保存功能:能对输入的数据进行相应的存储,要求重载插入和提取符以完成数据的保存和打开。3.1.2系统设计思想系统开发的总体任务是实现学生信息关系的系统化,规范化和自动化。 3.2系统类层次及结构图定义两个类,一个person类,包含在职人员(行政人员、教师、一般员工)、退休人员、返聘人员和临时工。员工信息包括编号、姓名、性别、年龄、职务、职称、政治面貌、最高学历、来院时间。定义一个school类,在里面实现数据的添加、删除、修改、查找、显示和退出。类personvoid getag(int as)int getage()char *getname()person *getnext()int getnum()char *getparty()char *getpos()char *getsex()char *getstudy()char *gettechpos()char *gettime()char *gettype()void setnext(person *next)类School void add()/添加新信息bool find1()/按编号查找bool find2( )/按姓名查找void load()void pri()void printf(int r)/获取信息void printf1(person *ahead)/输出信息bool removedatnum( )/删除信息void save()/保存文件到文件中School()/无参构造函数School()/析构函数,删除各指针!bool upperson()/修改信息系统功能模块图高校人事管理系统添加人员信息修改人员信息退出数据装入查找人员信息删除人员信息显示人员信息第四章 详细设计4.1类与对象的设计类class personSchool s;/定义对象类class School4.1.1类属性的详细设计类class personclass personprivate: int no; /编号 char type20; /职工类型 char name20; /姓名 char sex10; /性别 int age; /年龄 char time20; /来院时间 char pos20; /职务 char techpos20; /职称 char party20; /党派 char study30; /最高学历 person *mynext; /指针语public: person(int nnum,char ntype,char nname,char nsex,int nage,char ntime,char npos,char ntechpos,char nparty,char nstudy) no=nnum; strcpy(type,ntype);/将ntype的值复制给type strcpy(name,nname); strcpy(sex,nsex); age=nage; strcpy(time,ntime); strcpy(pos,npos); strcpy(techpos,ntechpos); strcpy(party,nparty); strcpy(study,nstudy); mynext=NULL; School s;/定义对象类class Schoolprivate: person *myfirst; int firstnum;public: School()/无参构造函数 myfirst=NULL;/将指针置空 4.1.2类行为的详细设计类class personvoid getag(int as)int getage()char *getname()person *getnext()int getnum()char *getparty()char *getpos()char *getsex()char *getstudy()char *gettechpos()char *gettime()char *gettype()void setnext(person *next)类School void add()/添加新信息bool find1()/按编号查找bool find2( )/按姓名查找void load()void pri()void printf(int r)/获取信息void printf1(person *ahead)/输出信息bool removedatnum( )/删除信息void save()/保存文件到文件中School()/无参构造函数School()/析构函数,删除各指针!bool upperson()/修改信息4.2类的详细继承关系personSchool第五章 编码#include<iostream.h>#include<string.h>#include<fstream.h>#include<iomanip.h>class personprivate: int no; /编号 char type20; /职工类型 char name20; /姓名 char sex10; /性别 int age; /年龄 char time20; /来院时间 char pos20; /职务 char techpos20; /职称 char party20; /党派 char study30; /最高学历 person *mynext; /指针语public: person(int nnum,char ntype,char nname,char nsex,int nage,char ntime,char npos,char ntechpos,char nparty,char nstudy) no=nnum; strcpy(type,ntype);/将ntype的值复制给type strcpy(name,nname); strcpy(sex,nsex); age=nage; strcpy(time,ntime); 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,char ntime, char npos,char ntechpos,char nparty,char nstudy,person *next) /*某高校,主要人员有:在职人员(行政人员、教师、一般员工)、退休人员、返聘人员和临时工。 现在,需要存储这些人员的人事档案信息:编号、姓名、性别、年龄、职务、职称、政治面貌、最高学历、来院时间。*/ no=nnum; strcpy(type,ntype); strcpy(name,nname); strcpy(sex,nsex); age=nage; strcpy(time,ntime); strcpy(pos,npos); strcpy(techpos,ntechpos); strcpy(party,nparty); strcpy(study,nstudy); mynext=next; void setnext(person *next) mynext=next; person *getnext() return mynext; int getnum() return no; char *getname() return name; char *getsex() return sex; char *getpos() return pos; char *gettechpos() return techpos; char *gettime() return time; char *getparty() return party; char *getstudy() return study; int getage() return age; void getag(int as) age=as; char *gettype() return type; ;class Schoolprivate: person *myfirst; int firstnum;public: School()/无参构造函数 myfirst=NULL;/将指针置空 School(int nnu,char ntyp,char nnam,char nse,int nag,char ntim,char npo,char ntechpo,char npart,char nstud)/有参构造函数 myfirst=new person(nnu,ntyp,nnam,nse,nag,ntim,npo,ntechpo,npart,nstud); /在信息最后添加新的信息 void insertatlast(int nnum,char ntype,char nname,char nsex,int nage,char ntime,char npos,char ntechpos,char nparty,char nstudy) person *next=myfirst;/定义对象指针并付初值 if(next=NULL) myfirst=new person(nnum,ntype,nname,nsex,nage,ntime,npos,ntechpos,nparty,nstudy); else while(next->getnext()!=NULL) next=next->getnext(); next->setnext(new person(nnum,ntype,nname,nsex,nage,ntime,npos,ntechpos,nparty,nstudy,next->getnext(); void printf(int r)/获取信息 int nage; char ntype20,nname20,nsex20,ntime20,npos20,ntechpos20,nparty20,nstudy20; cout<<"请输入编号为"<<r<<"的成员的信息"<<endl; cout<<"输入职工分类码行政人员,教师,一般员工,退休人员,返聘人员,临时工:"<<endl; cin>>ntype; cout<<"输入姓名:"<<endl; cin>>nname; cout<<"输入性别:"<<endl; cin>>nsex; cout<<"输入年龄:"<<endl; cin>>nage; cout<<"输入来院时间:"<<endl; cin>>ntime; cout<<"输入职务无,科级,处级,地级:"<<endl; cin>>npos; cout<<"输入职称无,初级,中级,高级:"<<endl; cin>>ntechpos; cout<<"输入加入党派群众,中共党员,民主党派:"<<endl; cin>>nparty; cout<<"输入学历小学,初中,高中,大专,大学,硕士,博士:"<<endl; cin>>nstudy; insertatlast(r,ntype,nname,nsex,nage,ntime,npos,ntechpos,nparty,nstudy); void printf1(person *ahead)/输出信息 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->gettime()<<endl; void printf() person *ahead=myfirst; cout<<"编号 姓名 性别 年龄 职工类型 职务 职称 学历 政治面貌 来院时间 n" while(ahead!=NULL) cout<<setiosflags(ios:left)<<setw(4)<<ahead->getnum()<<setiosflags(ios:left)<<setw(6)<<ahead->getname() cout<<setiosflags(ios:left)<<setw(5)<<ahead->getsex()<<setiosflags(ios:left)<<setw(4)<<ahead->getage() cout<<setiosflags(ios:left)<<setw(10)<<ahead->gettype()<<setiosflags(ios:left)<<setw(6)<<ahead->getpos() cout<<setiosflags(ios:left)<<setw(6)<<ahead->gettechpos()<<setiosflags(ios:left)<<setw(6)<<ahead->getstudy()cout<<setiosflags(ios:left)<<setw(9)<<ahead->getparty()<<setiosflags(ios:left)<<setw(12)<<ahead->gettime()<<endl; ahead=ahead->getnext(); void add()/添加新信息 int i,a,b; person *p1=myfirst; if(p1=NULL) cout<<"请输入编号:" cin>>i; printf(i); Else if(p1->getnext()=NULL)/如果p1的后继指针为空,则执行“printf(a)” a=p1->getnum()+1; printf(a); Else while(p1->getnext()!=NULL)/p1的后继指针不为空,则执行“printf(b)” p1=p1->getnext(); b=p1->getnum()+1; printf(b); bool removedatnum( )/删除信息 int bh; person *ahead=myfirst; person *follow=ahead; cout<<"请输入要删除人员的编号:" cin>>bh; if(ahead=NULL) return false; else if(ahead->getnum()=bh) myfirst=myfirst->getnext(); cout<<"编号为"<<bh<<"的成员以被删除"<<endl; delete ahead; return true; Else ahead=ahead->getnext(); while(ahead!=NULL) if(ahead->getnum()=bh) follow->setnext(ahead->getnext(); cout<<"编号为"<<bh<<"的成员以被删除n" delete ahead; return true; follow=ahead; ahead=ahead->getnext(); cout<<"要删除的成员不存在!"<<endl; return false;bool find1()/按编号查找 int id; person *ahead=myfirst; person *follow=ahead; cout<<"请输入编号:"<<endl; cin>>id; cout<<"*"<<endl; if(ahead=NULL) cout<<"无人员信息!"<<endl; return false; else while(ahead!=NULL) if(ahead->getnum()=id) printf1(ahead); return true; else follow=ahead; ahead=ahead->getnext(); cout<<"无此人信息:"<<endl; return false; bool find2( )/按姓名查找 char nm20; person *ahead=myfirst; person *follow=ahead; cout<<"输入姓名" cin>>nm; cout<<"*"<<endl; if(ahead=NULL) cout<<"无人员信息"<<endl; return false; else while(ahead!=NULL) if(strcmp(ahead->getname(),nm)=0) printf1(ahead); return true; else follow=ahead; ahead=ahead->getnext(); cout<<"查无此人:"<<endl; return false; bool upperson()/修改信息 int iid; person *ahead=myfirst; person *follow=ahead; cout<<"请输入要修改人员的编号:" cin>>iid; if(ahead=NULL) cout<<"无人员信息"<<endl; return false; else while(ahead!=NULL) if(ahead->getnum()=iid) printf1(ahead); int nu=-1; for(int i=1;nu!=0;i+) int ml; int mll; char ty30; cout<<"请选择要修改的内容:"<<endl; cout<<" 1:姓名 2:性别 3:年龄 4:职工类型 5:职务"<<endl; cout<<" 6:职称 7:学历 8:政治面貌 9:来院时间 "<<endl; cout<<" 选择(1-10):" cin>>ml; switch(ml) case 1: cout<<"请输入姓名:" cin>>ty; strcpy(follow->getname(),ty); ; break; case 2: cout<<"请输入性别:" cin>>ty; strcpy(ahead->getsex(),ty); break; case 3: cout<<"请输入年龄:" cin>>mll; ahead->getag(mll); ; break; case 4: cout<<"请输入职工类型:" cin>>ty; strcpy(ahead->gettype(),ty); ; break; case 5: cout<<"请输入职务:" cin>>ty; strcpy(ahead->getpos(),ty);break;case 6:cout<<"请输入职称:"cin>>ty;strcpy(ahead->gettechpos(),ty);break;case 7:cout<<"请输入学历:"cin>>ty;strcpy(ahead->getstudy(),ty);break;case 8:cout<<"请输入政治面貌:"cin>>ty;strcpy(ahead->getparty(),ty);break;case 9:cout<<"请输入来院时间:"cin>>ty;strcpy(ahead->gettime(),ty);break; return true;Elseahead=ahead->getnext();follow=ahead;cout<<"没有此人"<<endl;return false;void load()int nnum,nage;char ntype20,nname20,nsex20,ntime20,npos20,ntechpos20,nparty20,nstudy20;ifstream fperson;fperson.open("person.txt",ios:in);while(fperson.good()fperson>>nnum>>ntype>>nname>>nsex>>nage>>ntime>>npos>>ntechpos>>nparty>>nstudy; insertatlast(nnum,ntype,nname,nsex,nage,ntime,npos,ntechpos,nparty,nstudy);fperson.close();cout<<"n人员和相关数据已经装入.n"void save()/保存文件到文件中ofstream fperson;fperson.open("person.txt",ios:out);person *p=myfirst;while(p)fperson<<p->getnum()<<"t"<<p->gettype()<<"t"<<p->getname()<<"t"<<p->getsex()<<"t"<<p->getage()<<"t"<<p->gettime()<<"t"<<p->getpos()<<"t"<<p->gettechpos()<<"t"<<p->getparty()<<"t"<<p->getstudy();fperson<<endl;p=p->getnext();fperson.close();cout<<"保存数据已经完成"<<endl;School()/析构函数,删除各指针!person *next=myfirst,*temp; while(next!=NULL) temp=next; next=next->getnext(); delete temp; myfirst=NULL;void main()School s;/定义对象int c;docout<<""<<endl;cout<<" 高校人事管理系统"<<endl;cout<<""<<endl;cout<<" 1-增加人员资料"<<endl;cout<<" 2-删除人员信息"<<endl;cout<<" 3-修改人员信息"<<endl;cout<<" 4-查询人员信息"<<endl;cout<<" 5-数据存盘"<<endl;cout<<" 6-数据装入"<<endl;cout<<" 7-显示所有信息"<<endl;cout<<" 8-退出 请选择(1-8):"<<endl;cout<<""<<endl;cin>>c;switch(c)case 1:s.add(); break;case 2:s.removedatnum(); break;case 3:s.upperson();