人事档案管理系统课程设计.docx
《人事档案管理系统课程设计.docx》由会员分享,可在线阅读,更多相关《人事档案管理系统课程设计.docx(54页珍藏版)》请在冰豆网上搜索。
![人事档案管理系统课程设计.docx](https://file1.bdocx.com/fileroot1/2023-1/23/ba8eda1a-39cc-455d-afbd-b080f150ee34/ba8eda1a-39cc-455d-afbd-b080f150ee341.gif)
人事档案管理系统课程设计
编号:
数据结构与算法课程设计
说明书
题目:
人事档案管理系统
学 院:
计算机科学与工程学院
专业:
计算机科学与技术
学生姓名:
学号:
指导教师:
唐麟
2013年9月26号
摘要
电脑已经深入到我们日常工作和生活的方方面面,比如文字处理、信息管理、辅助设计、图形图像处理、教育培训以及游戏娱乐等。
Windows系统的推出使电脑从高雅的学术殿堂走入了寻常百姓家,各行各业的人们无须经过特别的训练就能够使用电脑完成许许多多复杂的工作。
然而,虽然现在世界上已经充满了多如牛毛的各种软件,但它们依然不能满足用户的各种特殊需要,人们还不得不开发适合自己特殊需求的软件。
随着企事业单位的发展,人员会越来越多,少则几十人、多则上万人。
例如一个企业分很多部门,每个部门又分为许多科或室等,而其下又分为各级领导和员工。
用笔和纸传统的手工管理档案,这中管理方式存在着不易更新、不易存放、不安全、容易丢失、难以备份等重大缺陷,管理起来效率低下而且很可能造成管理上的混乱。
而自己建立简单的电子文档对信息管理进行管理虽然克服了以上的缺点,但查询效率较低,特别是当数据量十分庞大时,劣势尤其明显。
因此开发一个既可以存储信息,又可以进行更新、查询、管理等功能,同时价格又能为广大消费者接受的多功能电子人事信息管理系统就显得十分必要。
关键词:
VisualC++6.0;算法;人事管理;类面向对象;链表
3详细设计…………………………………………4
3.1类的设计及分析………………………………………………4
3.2各功能的设计………………………………………………6
4所遇到的问题和分析解决…………………………………………10
5系统特色及关键技术………………………………………………11
5.1成员函数添加的分析………………………………………………11
5.2直接选择排序……………………………………………………14
6用户使用……………………………………………………15
7结论…………………………………………………………18
参考文献………………………………………………………………19
引言
随着全球对知识和人才的重视,企业对人力资源管理重要性的认识逐渐深化,人才的全球化竞争使企业的人力资源管理面临前所未有的挑战。
在新形势下,人事档案管理系统是一个企业单位不可缺少的部分,是适应现代企业制度,推动企业人力资源管理走向科学化、规范化、自动化的必要条件;是应对挑战、适应环境变化、提高企业管理效率、提升核心竞争力的关键措施。
它所包含内容对于企业的决策者和管理者来说至关重要。
目前市场上的人事管理系统很多,但要找到一款真正称心、符合企业实际情况的并不容易。
由于存在这样那样的不足,使企业浪费了大量的人力、物力等大量资源,难以真正提升企业人力资源的管理水平,提高工作效率及降低管理成本的效果也不明显。
因此,为了加快公司信息化的步伐,提高公司的管理水平,并在激烈的社会竞争中立于不败之地,建立及完善人力资源管理系统已变得十分必要和迫切。
在社会中,人力资源是企事业单位的核心,而对它的管理及管理软件的选用则是评价管理者管理水平的一个重要标志。
因此人力资源管理工作是企事业单位工作的一项重要任务,是提高管理质量和保障企事业单位生产目标实现的一个重要保证。
因此,人力资源管理的内容对企事业单位的决策者和管理者来说都具有重要意义。
当规模扩大以后,企事业单位人员部门增加,给人力资源管理带来困难。
根据需求,本人事档案管理系统主要分系统管理、信息登记、信息删除、信息查询、信息修改、信息按顺序输出、报表信息输出、系统简介等八大部分。
具体要求实现:
对业务模块相关信息的添加,修改,删除以及对人员调动的管理;对考勤信息设置、管理和查询;对工资信息设置;部门,员工工资统计查询等等。
1系统概述
本人事档案管理系统主要分系统管理、信息登记、信息删除、信息查询、信息修改、信息按顺序输出、报表信息输出、系统简介等八大部分。
具体要求实现:
对业务模块相关信息的添加,修改,删除以及对人员调动的管理;对考勤信息设置、管理和查询;对工资信息设置;部门,员工工资统计查询等等。
2需求分析
2.1系统需求
在信息技术高速发展的今天,传统的数据统计方式在处理庞大繁杂的信息量时显得力不从心,于是,人们对于运用计算机来辅助和管理工作的需求正在逐步提高。
随着各个企业业务的逐步扩展,企业的员工人数也在迅速增加,由于管理人员水平有限,导致某些员工纪录管理并不完善,特别是繁杂的员工工资管理纪录,不易查询、修改,极易导致错误,而落后的员工管理方法随着社会的日益竞争,必将被淘汰。
由计算机来管理庞大而繁杂的企业员工纪录是非常合适的,不仅查询和修改方便,并且效率高,速度快,完全能够满足现代化企业管理的需要,同时也更利于实现全面办公自动化。
因此开发一套企业员工工资管理系统软件势在必行。
企业员工工资管理系统是企业管理系统中的一个重要组成部分,它为企业合理的员工调配与编制,以及有关问题的决策能够提供各种必要的基础数据,是公司管理现代化的一个重要方面。
利用微机对庞杂而繁锁的员工工资系统实现自动化管理,是计算机公司信息管理系统的重要内容。
我在陈勇老师指导下开发了《企业员工工资管理系统》。
《企业员工工资管理系统》旨在为商业人士及在社会团体、机构中负责管理关系的人士提供一个功能全面、使用方便的工资管理系统,以替代传统的手工管理工资纪录,同时利用先进信息技术为用户提供一些更为方便实用的功能。
本系统实现五种基本功能:
输入员工工资信息、删除员工工资信息、修改员工工资信息、查找员工工资信息、列出所有员工工资信息。
所以该工资管理系统可以分为5个模块,分别为输入模块、删除模块、修改模块、查找模块、列表模块,每个模块都有其对应的功能以及其设计。
(1)输入模块
输入模块的功能是创建存储职工工资信息的存储系统以及添加某职工的工资信息。
为实现输入的功能,有两个方面的任务:
定义结构体以及建立链表。
(2)删除模块
删除模块的功能是删除某职工的工资信息。
(3)修改模块
修改模块的功能是修改某职工的部分工资信息。
(4)查找模块
查找模块的功能就是:
输出指定编号职工的工资信息;输出姓名和部门联合查询的职工工资信息。
(5)统计模块
统计模块的功能是:
统计全企业总人数及各部门的人数;统计企业的平均工资及部门的平均工资。
(6)排序模块
排序的模块的功能是:
对全企业的信息表按受教育年限及工资进行递增排序。
(7)列表模块
列表模块的功能是输出全体职工的工资信息。
程序具体功能介绍:
2.1.1功能介绍
现在,需要存储这些人员的人事档案信息:
员工编号,员工姓名,年龄,性别,部门,职务,受教育年限,工资,缺勤(天),罚金,个税,实发数。
其中,人员编号唯一,不能重复。
添加删除功能:
能根据学企业人事的变动情况,添加删除记录;
查询功能:
能根据编号及姓名和部门的复合查询进行查询;
编辑功能(高级):
根据查询对相应的记录进行修改,并存储;
统计功能:
能根据多种参数进行人员的统计及平均工资,统计要求同时显示被统计者的信息;
排序功能:
按照受教育年限、工资进行排序;
保存功能:
能对输入的数据进行相应的存储;
2.2系统框图
系统框架图在本设计中,将主要实现以下功能:
增加记录功能,修改记录功能,删除记录功能,以及筛选记录功能等。
图1系统框架图
2.2开发环境
本系统是在VisualC++6.0平台上运行的,主要运行C及C++等语言。
3详细设计
具体系统设计
3.1结构体及类的设计与分析
3.1.1:
员工结构体的建立
structWorker_pay
{
intnum;//员工编号
stringname;//员工姓名
intage;//年龄
stringsex;//性别
stringdepartment;//部门
stringtitle;//职务
inteduage;//学历(年)
floatwage;//工资
intday;//缺勤天数
floatallowance;//扣发工资
floattax;//个人所得税
floatreal_wage;//实发数
Worker_pay*next;//链表结点的指针域
};
3.1.2:
员工类的建立
classWorker
{
protected:
Worker_pay*head;//链表的头结点指针
public:
Worker(){head=NULL;}//构造函数
voidDisplay(Worker_pay*);//输出函数
Worker_pay*Find(int);//查找函数
intListCount();//统计员工人数函数
voidAddItem(int,string,int,string,string,string,float,float);//创建链表并链表的插入
voidRemoveItem(int);//删除函数
voidReplaceItem(int);//修改函数
voidListL();//遍历函数
voidSearch(int);//查找并输出某个员工信息函数
voidReal_wage(float,float);//计算函数
voidRecordinfo(int,string,int,string,string,string,float,float,float,float);//存储函数
};
3.1.3:
相关的成员函数
表1Worker类说明表
名称
属性
说明
head
数据成员
链表头结点指针
Worker()
成员函数
缺省的构造函数,缺省值为head=NULL
voidDisplay(Worker_pay*)
成员函数
输出函数
Worker_pay*Find(int)
成员函数
查找函数
intListCount()
成员函数
统计员工人数函数
voidAddItem(int,···float,float)
成员函数
创建链表并链表的插入
voidRemoveItem(int)
成员函数
删除函数
voidReplaceItem(int)
成员函数
修改函数
voidListL()
成员函数
遍历函数
voidListavg(string)
成员函数
部门查询及统计的函数
voidload()
成员函数
读取文件
voidsort_data();
对员工信息进行整理的函数
voidsearch(sting,string)
成员函数
复合查找并输出员工信息的函数
voidSearch(int)
成员函数
查找并输出某个员工信息函数
voidReal_wage()
成员函数
计算函数
voidRecoreinfo(int,···,float,float)
成员函数
存储函数
3.1.4非成员函数的设计与分析
表2非成员函数说明表
名称
说明
intMenu()
用于显示主菜单
charExit()
用于退出程序
voidInput(int*num,···,float*allowance)
用于输入员工工资信息
voidAddNew()
用于调用成员函数AddItem(int,···float,float)Real_wage()和Recoreinfo(int,···,float,float)
voidDoFind()
用于调用成员函数Search(int)
voidDoDelete()
用于调用成员函数RemoveItem(int)
voidDoMotify()
用于调用成员函数ReplaceItem(int)
voidList()
用于调用成员函数ListL()
intmain()
主函数
voidfindtavg()
用于调用成员函数voidListavg(string)
3.2:
各功能模块设计:
(1)、新建数据文件模块:
<1>、数据结构;
看各个数据信息,员工编号(int),员工姓名(sting),年龄(int),性别(string),部门(string),职务(string),受教育年限(int),工资(string),缺勤(天)(int),罚金(int),个税(int),实发数(int),在文件中以文本形式存放,每条记录对应一个人员的信息,可以方便信息的管理;而数据读进内存中时,可以以结构体的形式,每一个结构体包含了一个人员的全部信息,多的人员的信息组成了一个结构体数组。
定义见结构体及类的设计与分析
(2)、追加模块:
〈1〉[需求分析]
该模块的功能是拥护需要增加新的员工记录,从键盘输入并逐条写入到原来的文件中去,其中输入号码是要防止号码重复,重复时报告错误,重新输入。
为方便用户管理和查看,该模块采用的方式是用先把原来文件中的数据读入内存,保存在内存中,然后在内存中的数据后面增加新的数据,操作完成后用写的方式打开文件,用覆盖的方式写入。
〈2〉流程图:
略;
〈3〉对应程序:
voidAddNew()
(3)修改模块:
<1>[需求分析:
]
该模块的功能是显示所有信息,考虑到记录较多,采用分屏显示,显示完所有的记录后,由用户输入需要修改的人员的号码,查找成功后,显示查找结果,并询问拥护修改人员的哪部分记录,根据用户选择修改相应的信息,然后保存修改后的结果;
<2>流程图:
YYN
YN
<3>对应的函数:
voidDoMotify();
(4)删除模块:
〈1〉[需求分析]:
该模块的运行方式与修改模块类似,首先分屏显示所有人员的记录,显示完所有的记录后,由用户输入要删除的人员的号码,根据号码查找相应的记录并将结果显示出来,经用户确认后删除,删除的方法是将文件中的数据读入内存,赋给相应的结构体,并将结构体数组中将删除的后面的数据赋给前一个结构体,然后将相应数据写入文件并保存;
〈2〉流程图:
类似添加的流程
<3>对应函数:
voidDoDelete();
(5)、按编号搜索:
〈1〉[需求分析]:
该模块的功能是按照输入的人员的编号查找对应的记录,并将其显示,查找成功以后,增加删除和修改等功能,其中删除和修改功能可以通过调用相应的函数来实现。
〈2〉流程图;
(6)按姓名和部门搜索。
<1>需求分析:
该模块的功能是按照输入的人员的姓名和部门查找对应的记录,并将其显示,查找成功以后,增加删除和修改等功能,其中删除和修改功能可以通过调用相应的函数来实现。
<2>该模块的结构与按号码查询的结构基本相同;
<3>对应函数:
voidDoFindbumen();
(7)输出模块;
需求分析:
该模块的功能是显示所有保存在文件中的记录。
〈2〉、流程图;略
<3>对应函数:
voidList();
(8)、排序模块;
〈1〉、[需求分析];
该模块的功能是要求将记录按照年龄或者来院时间进行排序,总体结构是先用n=load()函数将文件中的数据调入内存,然后按照选择法排序,并将结果显示出来,然后将排序后的结果保存。
<2>流程图;
略。
<3>对应函数:
voidsort_data()
(9)、统计模块
〈1〉、[需求分析];
该模块的功能是按照用户的要求统计出满足符合条件的所有记录的个数,并将满足条件的记录显示出来。
该模块是在其他模块进行的同时进行的,没有单独列出,没有涉及到文件的保存。
〈2〉流程图;无;
〈3〉对应函数:
包含在其他函数内
4所遇到的问题和分析解决
(1)设计初期,先完成初步构思,写出主函数。
然后对主函数所涉及的各个模块进行编程,将各个模块利用指针和链表联系起来。
在环境中进行调试,应一边编译,一边调试,并且要一个模块一个模块的调试。
直至此模块完全没有错误时,在进入下一模块的调试。
不能直接输入全部的代码一次性调,这样错误会很多,并且不易找出和修改。
在完成程序的编译链接后,要用多组数据进行审查,确保做到系统无误。
设计过程中,不应忽视环境提示的警告,有时程序运行不正确与警告也有很大的关系。
这次设计中遇到很多问题都是提示类型不匹配,这时就要认真检查前面的代码,及时改正并且认真仔细,杜绝此类错再次发生。
编写代码时应该少用全局变量,全局变量在编写试看似定义次数少,很方便。
但全局变量出错几率较大,且不易修改,每次修改时都要全面考虑,所以应避免用到。
程序调试中碰到的错误可以使自己学到知识。
养成良好的编程习惯,可以节省很多时间,避免很多不必要的错误。
(2)在编辑完整个程序后,进行调试阶段总是会数显head无定义。
解决办法:
再类的定义是忘记声明指针Worker_pay*head;。
(3)在写读入函数时,总是不能读入数据,经同学检查发现没有申请新的空间存放数据。
解决办法:
在读入txt文件时,q=newWorker_pay;q->next=NULL。
5系统特色及关键技术
5.1:
Worker类中的成员函数voidAddItem(int,···float,float)
(1)功能:
创建存储职工工资信息的存储系统以及添加某职工的工资信息。
算法思路:
先定义一个结构体Worker_pay,通过从表尾插入的方法来建立链表。
首先要先设立一个头指针(head)来存放链表的首地址,然后,不断用new运算符生成一个新的结点,将这个结点链入已有的链表尾部;如果链表中还没有结点,则这个新结点将是首结点,否则,将新结点的地址赋给原有链表的尾结点的next指针。
流程图:
(3)代码:
voidWorker:
:
AddItem(intnum1,stringname1,……)
{
if(!
head)
{
head=newWorker_pay;
head->num=num1;
……
head->next=NULL;
return;
}
Worker_pay*t=head;
while(t&&t->num!
=num1)
t=t->next;
if(t)
{
cout<<"操作失败;员工编号为"<!
!
"<return;
}
Worker_pay*p=head;
while(p->next)
p=p->next;
Worker_pay*p1=newWorker_pay;
……
return;
}
5.2:
Worker类中的成员函数voidsort_data()
(1)功能:
创建存储职工工资信息的存储系统以及添加某职工的工资信息。
算法思路:
运用算法课本上的直接选择排序的算法,与课本的不同之处在于,本程序是用指针进行排序的,课本使用的数组。
直接选择排序的比较次数与文件初始状态无关,在第i趟排序中选出最小的记录,需做n-i次比较,因此总的次数为:
O(N*N),文件初始状态为正序时,移动0;最坏情况每趟排序都要交换操作,总的移动次数是3(n-1)。
直接选择排序的平均时间复杂度为O(n平方)。
算法中增加了一个辅助空间temp,因此辅助空间为S(n)=O
(1)。
直接选择排序是不稳定的。
主要代码:
Worker_pay*p,*q,*small,*temp;
temp=newWorker_pay;
for(p=head;p->next!
=NULL;p=p->next)
{
small=p;
for(q=p->next;q!
=NULL;q=q->next)
if(q->eduageeduage)
small=q;
if(small!
=p)
{
temp->eduage=p->eduage;
p->eduage=small->eduage;
small->eduage=temp->eduage;
……………………
}
}
cout<<"员工编号员工姓名年龄性别部门职务学历工资缺勤(天)罚金个税实发数"<while(head!
=NULL)
{Display(head);
head=head->next;
}
6用户手册及测试结果
6.1用户手册
运行程序时,界面刚开始出现一个主菜单及提示信息,用户通过在键盘上输入来选择某个功能。
当用户选择了某个功能,系统将跳转到所选择的功能界面,用户将可以根据提示信息来使用该功能,当用户通过键盘输入编号为-1时,系统将返回主界面。
6.2测试结果
1,主菜单
2,输入,添加,删除,修改,查询:
统计
排序
7.总结:
成功之处:
此系统程序虽然简单,却集结了基本的管理功能。
删除,存储,统计等功能还是较为成功的。
特别是人事档案的统计管理功能,使烦琐的工作变得简单轻松。
不足之处:
由于我们水平和时间有限,难免有不足和差强人意的地方。
尤其是对于系统应该配以保密性的设置,可是由于我知识积累不够,做不出来。
还请迟老师海涵。
两周的数据结构与算法课程设计结束了,在这几天的时间里,我自己独立完成了一个程序从构思结构,到编写代码,然后上机调试运行的过程,感觉自己收获很大。
通过解决一个又一个的问题,熟悉了C++语言的应用。
在设计过程中,在编程时条理清晰是至关重要的。
主函数,函数,成员函数之间的层次关系,调用关系一定要有一个全面的把握,尤其要体会类的封装性。
另外很重要的一点就是一定要对链表的五种操作熟练的掌握。
我理解了对于一个较大的程序,不可能一次编写出一个较大的系统,通常要采取自顶向下的设计思想,先设计主函数,再通过完善一个个的功能模块来完成程序的设计过程,在设计过程中要充分理解整个程序的设计思路,采用逐步细化的方式来完成整个程序。
在编译,链接,调试的过程中一定要有耐心。
因为一个程序中会有很多小的错误,甚至有的问题要几个小时才能解决。
遇到问题,一定要全面分析,有时候还要向同学请教。
总得来说,编程时极需要耐心的。
参考文献
C语言大学实用教程电子工业出版社
2、C++程序设计教程(第二版)高等教育出版社
3、C语言程序设计教程北京大学出版社
4、C语言程序设计实例精粹电子工业出版社
5、
6、陈天华编.面向对象程序设计与VisualC++6.0教程[M].北京:
清华大学出版社,2006
程序清单:
#include
#include
#include
#include
usingnamespacestd;
/***************************************