高校人事管理系统.doc
如有侵权,请联系网站删除,仅供学习与交流高校人事管理系统【精品文档】第 16 页课 程 设 计 报 告课程名称 面向对象程序设计 课题名称 高校人事管理系统 专 业 通信工程 班 级 通信1101 学 号 2011030201 姓 名 指导教师 2012年 12 月 22 日湖南工程学院课 程 设 计 任 务 书课程名称 面向对象程序设计 课 题 高校人事管理系统 专业班级 通信工程 学生姓名 学 号 指导老师 审 批 任务书下达日期 2012 年 12 月 22 日任务完成日期 2013 年 1 月 6 日一、设计内容与设计要求1.课程设计目的:面向对象程序设计课程设计是集中实践性环节之一,是学习完面向对象程序设计课程后进行的一次全面的综合练习。要求学生达到熟练掌握C+语言的基本知识和技能;基本掌握面向对象程序设计的思想和方法;能够利用所学的基本知识和技能,解决简单的面向对象程序设计问题,从而提高动手编程解决实际问题的能力。2.课题题目公司库存管理系统高校学籍管理系统高校工资管理系统高校人事管理系统文件加密管理系统3设计要求:设计课题题目:第5个课题是扩展课题,有能力完成的同学可以选择。其余每位同学根据自己学号除以4所得的余数加一选择相应题号的课题。换题者不记成绩。根据自己对应的课题完成以下主要工作:完成系统需求分析:包括系统设计目的与意义;系统功能需求(系统流程图);输入输出的要求。完成系统总体设计:包括系统功能分析;系统功能模块划分与设计(系统功能模块图)。完成系统详细设计:包括数据库需求分析;类层次图;界面设计与各功能模块实现。系统调试:调试出现的主要问题,编译语法错误及修改,重点是运行逻辑问题修改和调整。使用说明书及编程体会:说明如何使用你编写的程序,详细列出每一步的操作步骤。关键源程序(带注释)按规定格式完成课程设计报告,将其打印稿(A4纸)上交给老师存档。不得抄袭他人程序、课程设计报告,每个人应体现自己的个性设计二、进度安排第 17 周 星期四 14时:00分18时:00分 星期五 19时:分21时:00分 第 18 周 星期三 19时:00分21时:00分 星期四 19时:00分21时:00分三 实验内容课题4:高校人事管理系统 (一)、课程设计题目:高校人事管理系统(二)、目的与要求: 1、目的: (1)要求学生达到熟练掌握C+语言的基本知识和技能; (2)基本掌握面向对象程序设计的基本思路和方法; (3)能够利用所学的基本知识和技能,解决简单的面向对象程序设计问题。 2、基本要求: (1)要求利用面向对象的方法以及C+的编程思想来完成系统的设计; (2)要求在设计的过程中,建立清晰的类层次; (3)在系统中至少要定义四个类,每个类中要有各自的属性和方法; (4)在系统的设计中,至少要用到面向对象的一种机制。 3、创新要求: 在基本要求达到后,可进行创新设计,如根据查找结果进行修改的功能。 4、写出设计说明书 (三)、设计方法和基本原理: 1、问题描述(功能要求): 某高校,主要人员有:在职人员(行政人员、教师、一般员工)、退休人员。现在,需要存储这些人员的人事档案信息:编号、姓名、性别、年龄、职务、级别、职称、政治面貌、最高学历、任职时间、来院时间、工资。其中行政人员只有职务和级别,教师只有职务和职称,一般员工只有职务,退休人员则没有职务、级别、职称,但有退休时间。要求: (1)添加删除功能:能根据学院人事的变动情况,添加删除记录;(2)查询功能:能根据编号和姓名进行查询;(3)编辑功能(高级):根据查询对相应的记录进行修改,并存储;(4)统计功能:能根据多种参数进行人员的统计(在职人数、党员人数、女工人数、高学历高职称人数);(5)保存功能:能对输入的数据进行相应的存储,(扩展要求:要求重载插入和提取符以完成数据的保存和打开)。(6)人员编号在生成人员信息时同时生成,每输入一个人员信息编号顺序加1。2、问题的解决方案: 根据系统功能要求,可以将问题解决分为以下步骤: (1)应用系统分析,建立该系统的功能模块框图以及界面的组织和设计;(2)分析系统中的各个实体及它们之间的关系包括属性和行为; (3)根据问题描述,设计系统的类层次; (4)完成类层次中各个类的描述(包括属性和方法); (5)完成类中各个成员函数的定义; (6)完成系统的应用模块; (7)功能调试; (8)完成系统总结报告以及系统使用说明书。目 录1.系统需求分析12.总体设计23.详细设计33.1 功能提示43.2 添加人员功能53.3 查询功能73.4 统计功能93.5 编辑功能104.系统调试115.结果分析126.总结137.附录141. 系统需求分析课题4:高校人事管理系统 (一)、课程设计题目:高校人事管理系统(二)、目的与要求: 1、目的: (1)要求学生达到熟练掌握C+语言的基本知识和技能; (2)基本掌握面向对象程序设计的基本思路和方法; (3)能够利用所学的基本知识和技能,解决简单的面向对象程序设计问题。 2、基本要求: (1)要求利用面向对象的方法以及C+的编程思想来完成系统的设计; (2)要求在设计的过程中,建立清晰的类层次; (3)在系统中至少要定义四个类,每个类中要有各自的属性和方法; (4)在系统的设计中,至少要用到面向对象的一种机制。 3、创新要求: 在基本要求达到后,可进行创新设计,如根据查找结果进行修改的功能。 4、写出设计说明书 (三)、设计方法和基本原理: 1、问题描述(功能要求): 某高校,主要人员有:在职人员(行政人员、教师、一般员工)、退休人员、返聘人员和临时工。现在,需要存储这些人员的人事档案信息:编号、姓名、性别、年龄、职务、职称、政治面貌、最高学历、任职时间、来院时间。要求: (1)添加删除功能:能根据学院人事的变动情况,添加删除记录;(2)查询功能:能根据编号和姓名进行查询;(3)编辑功能(高级):根据查询对相应的记录进行修改,并存储;(4)统计功能:能根据多种参数进行人员的统计(在职人数、党员人数、女工人数、高学历高职称人数);(5)保存功能:能对输入的数据进行相应的存储,要求重载插入和提取符以完成数据的保存和打开。(6)人员编号在生成人员信息时同时生成,每输入一个人员信息编号顺序加1。2、问题的解决方案: 根据系统功能要求,可以将问题解决分为以下步骤: (1)应用系统分析,建立该系统的功能模块框图以及界面的组织和设计;(2)分析系统中的各个实体及它们之间的关系包括属性和行为; (3)根据问题描述,设计系统的类层次; (4)完成类层次中各个类的描述(包括属性和方法); (5)完成类中各个成员函数的定义; (6)完成系统的应用模块; (7)功能调试; (8)完成系统总结报告以及系统使用说明书。2. 总体设计1.系统功能分析(1)资料维护:系统维护包括对各种表记录的修改、删除、添加等操作。(2)资料维护:对数据表中的信息进行浏览。 (3)系统查询:可以按职工编号、姓名等相关信息进行详细或模糊查询。(4)报表统计:包括统计职工编号、职工姓名、职工性别、所在部门、职工年龄、工作日期、 基本工资、职称、职务和简历等字段。(5)其它操作:系统封面、人性化提示信息。2.系统功能模块划分与设计 系统功能模块划分:数据查找与浏览、数据修改、报表显示和系统封面构成。系统的各个功能大体框架如下:开始 管理系统主页面分别输入要输入的人员信息添加完最后一项之后选择要修改的人员信息修改完之后选择要删除的人员信息删除之后图2.1 系统运行结构框图3. 详细设计功能选择界面退出显示所有信息添加人员信息删除人员信息查询人员信息编辑人员信息统计人员数量图3.1 系统功能结构框图3.1 当我们运行程序时,会出现如下的功能选择提示界面,代码已经附上。图3.2 主页面图部分代码如下:person pjk;int c;cout<<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<<"-"<<endl;cout<<" 请选择(1-7): "<<endl;cin>>c;switch(c)case 1: pjk.tjry();menu();break;case 2:pjk.shancu();menu(); break;case 6:pjk.output();menu();break;case 7:exit(1);break;void main()menu();3.2按提示输入序号,当输入1时,会出现要操纵者输入相关信息。图3.3 添加人员图该图的执行代码如下,新增人员模块,实现新人员的信息添加功能:void person:tjry() /int v,l=1;char type220;char name220;char sex210;char age210;char zhiwu220;char zhichen220;char zzmm220;char zgxl220;char rzsj220;char lysj230;cout<<"请输入要添加的人数"<<endl;cin>>k;p1.getbianhao()=ppk1.getbianhao();v=bianhao;for(int i=v+1;i<=v+k;i+)cout<<"请输入第"<<l<<"个人的信息"<<endl;cout<<"人员类型" cin>>type2;cout<<"姓名:" cin>>name2;cout<<"性别:" cin>>sex2;cout<<"年龄:" cin>>age2;cout<<"职务:" cin>>zhiwu2;cout<<"职称:" cin>>zhichen2;cout<<"政治面貌:" cin>>zzmm2;cout<<"最高学历:" cin>>zgxl2;cout<<"任职时间:" cin>>rzsj2;cout<<"来院时间:" cin>>lysj2;pi.setperson(type2,name2,sex2,age2,zhiwu2,zhichen2,zzmm2,zgxl2,rzsj2,lysj2);l+;3.3 图3.4 查询功能图执行代码如下:人员查询模块,本模块提供的查询方式包括按编号和姓名2种,方便用户的查询。void person:find() /cout<<"1:按编号查询-2:按姓名查询-请选择(1-2)"<<endl;int m;cin>>m;while(m<1|m>2)cout<<"请重新输入(1-2)"<<endl;cin>>m;switch(m)case 1:while(!filem.eof()filem>>ppk.getnum();filem>>ppk.gettype();filem>>ppk.getname();filem>>ppk.getsex();filem>>ppk.getage();if(strcmp(ppk.getnum(),n)=0)<<setw(10)<<"来院时间"<<endl;while(!filem.eof()filem>>ppk.getnum();if(strcmp(ppk.getname(),nname)=0)cout<<ppk.getnum()<<setw(9)<<ppk.gettype()<<setw(5)<<ppk.getname()<<setw(5)<<ppk.getsex()<<setw(5)<<ppk.getage()<<setw(5)<<ppk.getzhiwu()<<setw(5)<<ppk.getzhichen()<<setw(9)<<ppk.getzzmm()<<setw(10)<<ppk.getzgxl()<<setw(10)<<ppk.getrzsj()<<setw(10)<<ppk.getlysj()<<endl;break;k+;if(filem.eof()cout<<endl;cout<<" 警告:没有要查找的人!"filem.close();break; 3.4图3.5 统计功能图代码如下:人数统计模块,实现总人数的统计功能。void person:tongji() /int a=0;int b=0;int c=0;int d=0;int k=1;ifstream filem("添加人员.txt",ios_base:in);while(!filem.eof()filem>>ppk.getnum();filem>>ppk.gettype();filem>>ppk.getzzmm();filem>>ppk.getzgxl();c+;if(strcmp(ppk.getzgxl(),"boshi")=0)d+;k+;filem.close();cout<<"在职人数"<<setw(12)<<"党员人数"<<setw(12)<<"女工人数"<<setw(12)<<"高学历人数"<<endl;cout<<a<<setw(12)<<b<<setw(12)<<c<<setw(12)<<d<<endl;3.5修改运行结果。图3.6 修改功能图该运行结果的代码在此略掉,已在附录中补上。4. 系统调试1. 程序代码编写过程中,缺省分号,中括号不成对等基本格式错误,系统提示错误,此时做相关修改添加即可。如:图4.1 缺少分号报错图2. 缺少返回类型,如图4.2 缺返回类型报错图3.在函数调用时,出先函数未知的错误,原因是函数的调用在声明前,所有要在函数调用前进行声明。程序运行界面:图4.3 程序提示界面图图4.4 添加人员功能图 4.error C2065: 'setw' : undeclared identifier 在找预编译头文件路径时出错,c+中的setw(n)设置域宽不能调用,要加上头文件 #include<iomanip> 5.error C2018: unknown character '0xa3' 不认识的字符'0xa3'。(一般是汉字或中文标点符号)。 6.error C2057: expected constant expression 希望是常量表达式。(一般出现在switch语句的case分支中)。7.error C2143: syntax error: missing ':' before '' 句法错误:“”前缺少“;”。5. 结果分析本程序的能实现人员信息以.txt格式保存,使用到的指针为实时开辟空间提供了方便。基本的实现了题目要求的各个功能模块,运行界面的提示做的一目了然,为使用者提供了方便。本程序的不足之处就是功能显示界面不够完美,显示有点拥挤的感觉。一个程序员精心设计的程序很难为其他程序所用。界面比较的单一,功能相对较少,只能逐一增加信息,不能批量的增加。本代码很好的实现了人员的添加保存,删除,查询等功能。6. 总结本次课程设计让我初步体会到C+面向对象设计的特性,该语言能编写建立对象,QQ应该就使用到了C+。通过这次课程设计自己动手编写了人事管理系统在编写过程中遇到了许多的问题在解决问题的同时对类、单链表、文件等进一步加深了了解强化了在上课学的知识对自己提高很大。人事管理系统是典型的信息管理系统涉及的东西很多包括添加人员查询人员资料删除成员资料等。这次设计选用Win-TC通过努力较好的完成了自己的设计同时了解到自己的不足所以我们还要通过不断的学习不断的提高自己。总之,通过这次课程设计,我收获颇丰,相信会为自己以后的学习和工作带来很大的好处。最重要的还是激发了我编程的兴趣和热情,让我从一个只懂理论变成了能做一些小型程序,让我对编程更加热爱了。整体地评价这次课程设计,我认为收获很大,正如上面所说的那样,通过课程设计,既复习了以前的旧知识,又学到了一些新的知识;设计增强了我们用所学知识去解决具体问题的能力,进一步培养了我们独立思考问题和解决问题的能力。特别是学会了在Visual C+ 集成开发环境中如何调试程序的方法。当然,老师的悉心指导和同学的帮助也是不可忽视的,在此感谢本次课程设计中所有辅导老师对我的关心和帮助,诚心诚意感谢他们对我的鼓励与教导,是她们在我迷茫的时候给了我些许提示,激发了我编程的灵感;还有,我在此也十分感谢本次课程设计中同学们对我的帮助。7. 附录程序的源代码如下:#include<iostream>#include<fstream>#include<cstring>#include<iomanip>using namespace std;int k;class personprivate: char num10; char type20; char name20; char sex10; char age10; char zhiwu20; char zhichen20; char zzmm20; char zgxl20; char rzsj20; char lysj30; static int bianhao;public:void setperson(char *type1,char *name1,char *sex1,char *age1,char *zhiwu1,char *zhichen1,char *zzmm1,char *zgxl1,char *rzsj1,char *lysj1);static int& getbianhao() return bianhao;char * gettype() return type;char * getname() return name;char * getsex() return sex;char * getage() return age;char * getzhiwu() return zhiwu;char * getzhichen() return zhichen; char * getzzmm() return zzmm; char * getzgxl() return zgxl; char * getrzsj() return rzsj; char * getlysj() return lysj; char * getnum() return num;void tjry(); void find(); void output(); void shancu(); void xiugai(); void tongji();person p100;person pp100;int k1;int person:bianhao=0;void person:setperson(char *type1, char *name1, char *sex1, char *age1, char *zhiwu1, char *zhichen1, char *zzmm1, char *zgxl1, char *rzsj1, char *lysj1int static j=1;strcpy(type,type1);strcpy(name,name1);strcpy(sex,sex1);strcpy(age,age1);strcpy(zhiwu,zhiwu1);strcpy(zhichen,zhichen1);strcpy(zzmm,zzmm1);strcpy(zgxl,zgxl1);strcpy(rzsj,rzsj1);strcpy(lysj,lysj1);bianhao+;ofstream file("添加人员.txt",ios_base:app);file<<pj.getbianhao()<<endl;file<<pj.gettype()<<endl;file<<pj.getname()<<endl;file<<pj.getsex()<<endl; file<<pj.getage()<<endl;file<<pj.getzhiwu()<<endl;file<<pj.getzhichen()<<endl;file<<pj.getzzmm()<<endl;file<<pj.getzgxl()<<endl;file<<pj.getrzsj()<<endl;file<<pj.getlysj()<<endl;j+;file.close(); void person:tongji() /int a=0;int b=0;int c=0;int d=0;int k=1;ifstream filem("添加人员.txt",ios_base:in);while(!filem.eof()filem>>ppk.getnum();filem>>ppk.gettype();filem>>ppk.getname();filem>>ppk.getsex();filem>>ppk.getage();filem>>ppk.getzhiwu(); filem>>ppk.getzhichen();filem>>ppk.getzzmm();filem>>ppk.getzgxl();filem>>ppk.getrzsj();filem>>ppk.getlysj();if(strcmp(ppk.gettype(),"行政人员")=0|strcmp(ppk.gettype(),"教师")=0|strcmp(ppk.gettype(),"一般员工")=0)a+;if(strcmp(ppk.getzzmm(),"党员")=0)b+;if(strcmp(ppk.getsex(),"nv")=0)c+;if(strcmp(ppk.getzgxl(),"boshi")=0)d+;k+;filem.close();cout<<"在职人数"<<setw(12)<<"党员人数"<<setw(12)<<"女工人数"<<setw(12)<<"高学历人数"<<endl;cout<<a<<setw(12)<<b<<setw(12)<<c<<setw(12)<<d<<endl;void person:xiugai() /int k=1;ifstream filem("添加人员.txt",ios_base:in); while(!filem.eof() filem>>ppk.getnum(); filem>>ppk.gettype(); filem>>ppk.getname(); filem>>ppk.getsex(); filem>>ppk.getage(); filem>>ppk.getzhiwu(); filem>>ppk.getzhichen(); filem>>ppk.getzzmm(); filem>>ppk.getzgxl(); filem>>ppk.getrzsj(); filem>>ppk.getlysj(); k+;filem.close();cout<<"请输入要修改的人的编号:"<<endl;int x,y;cin>>x;cout<<"请输入编号为"<<x<<"的人需要修改的项目的代号:"<<endl;cout<<"1:编号-2:人员类型-3:姓名-4:性别-5:年龄-6:职务-7:职称-8:政治面貌-9:最高学历-10:任职时间-11:来院时间"<<endl;cin>>y;switch(y)case 1: cout<<"请输入新的编号" cin>>ppx.getnum() ; break;case 2: cout<<"请输入新的人员类型" cin>>ppx.gettype(); break;case 3: cout<<"请输入新的姓名"cin>>ppx.getname(); break;case 4: cout<<"请输入新的性别"cin>>ppx.getsex(); break;case 5:cout<<"请输入新的年龄"cin>>ppx.getage(); break;case 6: cout<<"请输入新的职务"cin>>ppx.getzhiwu(); break;case 7: cout<<"请输入新的职称"cin>>ppx.getzhichen(); break;case 8: cout<<"请输入新的政治面貌"cin>>ppx.getzzmm(); break;case 9: cout<<"请输入新的最高学历"cin>>ppx.getzgxl(); break;case 10: cout<<"请输入新的任职时间"cin>>ppx.getrzsj();break;case 11:cout<<"请输入新的来院时间"cin>>ppx.getlysj(); break;ofstream file1("添加人员.txt",ios_base:trunc);for(k=1;k<=bianhao;k+) file1<<ppk.getnum()<<endl; file1<<ppk.gettype()<<endl; file1<<ppk.getname()<<endl; file1<<ppk.getsex()<<endl; file1<<ppk.getage()<<endl; file1<<ppk.getzhiwu()<<endl; file1<<ppk.getzhichen()<<endl; file1<<ppk.getzzmm()<<endl; file1<<ppk.getzgxl()<<endl;file1<<ppk.getrzsj()<<endl; file1<<ppk.getlysj()<<endl; file1.close();cout<<"修改并保存完毕"<<endl; void person:shancu() /int z;ifstream filem("添加人员.txt",ios_base:in);int k=1;while(!filem.eof()filem>>ppk.getnum();filem>>ppk.gettype();filem>>ppk.getname();filem>>ppk.getsex();filem>>ppk.getage();filem>>ppk.getzhiwu();filem>>ppk.getzhichen();filem>>ppk.getzzmm();filem>>ppk.getzgxl();filem>>ppk.getrzsj();filem>>ppk.getlysj();k+;filem.close();cout<<"请输入要被删除信息的人的编号:"<<endl;cin>>z;while(z<1|z>bianhao)cout<<"没有找到你要删除的人,请重新输入:"<<endl;cin>>z;for(k=1;k<=bianhao;k+)if(z=k)continue;ofstream file2("添加人员.txt",ios_base:trunc);file2<<ppk.getnum()<<endl;file2<<ppk.gettype()<<endl;file2<<ppk.getname()<<endl; file2<<ppk.getsex()<<endl;file2<<ppk.getage()<<endl;file2<<ppk.getzhiwu()<<endl;file2<<ppk.getzhichen()<<endl;file2<<ppk.getzzmm()<<endl;file2<<ppk.getzgxl()<<endl;file2<<ppk.getrzsj()<<endl;file2<<ppk.getlysj()<<endl;file2.close();cout<<"删除记录完毕"<<endl; void person:find() /cout<<"1:按编号查询-2:按姓名查询-请选择(1-2)"<<endl;int m;cin>>m;while(m<1|m>2)cout<<"请重新输入(1-2)"<<endl;cin>>m;switch(m)case 1:char n10;cout<<"请输入要查找的编号:"cin>>n;ifstream filem("添加人员.txt",ios_base:in);int k=1;cout<<"编号"<<setw(9)<<"人员