信息管理与信息系统专业毕业论文19471
核准通过,归档资料。
未经允许,请勿外传~
课程设计(论文)
说明
关于失联党员情况说明岗位说明总经理岗位说明书会计岗位说明书行政主管岗位说明书
书
题
快递公司问题件快递公司问题件货款处理关于圆的周长面积重点题型关于解方程组的题及答案关于南海问题
目: 人事档案管理系统
学 院: 计算机科学与工程学院
专 业: 信息管理与信息系统
姓 名:
学 号:
指导教师:
2013年 7 月 8 日
摘 要
人事档案管理就是将人事档案的收集、整理、保管、鉴定、统计和提供利用的活动。人事档案是人事管理活动中形成的,记述和反映个人经历和德才表现,以个人为单位组合起来,以备考察的文件
材料
关于××同志的政审材料调查表环保先进个人材料国家普通话测试材料农民专业合作社注销四查四问剖析材料
。主要是由人事、组织、劳资等部门在培养、选拔和使用人员的工作活动中形成的,是个人经历、学历、社会关系、思想品德、业务能力、工作状况以及奖励处罚等方面的原始记录。是个人参与社会方方面面活动的记载和个人自然情况的真实反映。人事管理是每个企业必不可少的,人事档案管理系统一般包括对人事档案的统计、查询、更新、报表输出等功能。如果人工直接统计的话,工作量将十分庞大,特别是,如果企业员工有几万或几十万人时,人工统计将变得不可能想象。用计算机可使人们从繁重而又单调的统计运算中解脱出来,仅用一些简单的操作便可及时准确地获得需要的信息。并且,随着计算机技术的飞速发展,计算机在企业管理中的普及,利用计算机实现企业人事档案管理势在必行。
开发这个系统目的就是为了帮助企业人力资源部门工作人员提高工作效率,实现企业人事档案管理的系统化,
规范
编程规范下载gsp规范下载钢格栅规范下载警徽规范下载建设厅规范下载
化和自动化。
关键词:人事档案管理 人员情况 工资表 考勤表 输入 查询 删除 更改 排序
人事档案管理系统通过分为员工基本情况表、工资表和考勤表这3张表对员工基本信息进行管理。用户通过向员工基本情况表、工资表和考勤表输入员工各种信息,然后由系统自行生成相应的统计数据以供用户查询, 进行更新和删除等功能。用户可以根据系统的提示进行操作,调用系统的各个功能。系统的主要功能有:相应的系统控制平台,输入员工基本信息,显示员工基本信息,查找员工信息,修改员工信息,删除员工信息,统计员工信息,还有相应的排序功能。
目 录
引言 ??????????????????????????????????????????????????????4 1系统介绍 ??????????????????????????????????????????????????4 2需求分析 ?????????????????????????????????????????????????4
2.1系统需求 ?????????????????????????????????????????????????4
2.2开发环境?????????????????????????????????????????????????6 3 详细设计??????????????????????????????????????????????????6
3.1建立存储结构 ?????????????????????????????????????????????????????6
3.2添加数据 ?????????????????????????????????????????????????????????9
3.3显示信息 ????????????????????????????????????????????????????????9 3.4修改信息 ????????????????????????????????????????????????????????10
3.5删除信息 ????????????????????????????????????????????????????????10
3.6查找数据 ????????????????????????????????????????????????????????11
3.7各类统计 ????????????????????????????????????????????????????????12
3.8退出系统 ????????????????????????????????????????????????????????14
3.9菜单模块 ????????????????????????????????????????????????????????14 4 所遇到的问题和分析解决..?????????????????????????????????15 5系统特色??????????????????????????????????????????????????15 6结论 ?????????????????????????????????????????????????????15 参考文献 ?????????????????????????????????16 附录 ????????????????????????????????????16
引言
如今计算机已经深入到我们日常工作和生活的方方面面,可以这么说我们的生活已经离不开计算机。科技的飞快发展各方面技术的全面成熟,使得计算机的使用变得越来越简单,计算机也变得越来越小越来越轻便。各行各业的人们无须经过特别的训练就能够使用计算机完成许许多多复杂的工作。然而,虽然现在世界上已经充满了多如牛毛的各种软件,但它们依然不能满足用户的各种特殊需要,人们还不得不开发适合自己特殊需求的软件。 人事档案管理系统则是针对于企事业单位的管理需求而设计的,使得各单位便于管理和统计员工信息,使操作更加方便简单。
1 系统介绍
人事档案管理系统是针对单位职工的基本信息的管理,主要包括3张表,人员基本情况管理表、工资管理表和考勤管理表,通过这3张表对员工基本信息进行管理。所使用的数据类型是单链表,建立三个链表,分别表示3张表。
用户通过向单位职工信息表输入员工编号、员工姓名、性别、年龄、工资、部门、受教育年限等基本信息,向工资管理表中输入员工编号、基本工资、缺勤扣发工资、扣税、实发工资等信息,向考勤管理表中输入员工编号、月缺勤天数等,然后由系统自行
能对这些基本信息进行更新和删除。用户可以根据生成相应的统计数据以供用户查询,
系统的提示进行操作,调用系统的各个功能。系统的主要功能有:相应的系统控制平台,输入员工基本信息,显示员工基本信息,查找员工信息,修改员工信息,删除员工信息,统计员工信息,还有相应的排序。
用户第一次使用该系统时,首先需要向表中输入数据,输入的数据分别保存在当前目录下的人员情况、考勤表、工资表三个文本文件中,以二进制的形式保存的,用该系统打开方可读取。下次再使用该系统时,系统会自动将人员情况、考勤表、工资表中的数据读入单链表中,用户可以根据相应的提示做出相应的操作。
2 需求分析
2.1 系统需求
随着企事业单位的发展,人员会越来越多,而每一个企业分很多部门,每个部门又分为许多科或室等,而其下又分为不同的职务。用笔和纸记录人员档案信息的
方法
快递客服问题件处理详细方法山木方法pdf计算方法pdf华与华方法下载八字理论方法下载
存在许多缺陷,例如不易更新、不易存放、不安全、容易丢失、难以备份等。管理起来效率低下而且很可能造成管理上的混乱。自己建立简单的电子文档对信息管理进行管理虽然
克服了以上的缺点,但查询效率较低,特别是当数据量十分庞大时,劣势尤其明显。因此开发一个既可以存储信息,又可以进行修改更新、查询、管理等功能人事档案管理系统显得十分必要。
人事档案管理系统就是针对人员的信息进行管理,有三张表,主要是通过相同的员工编号将这三张表来联系起来的。主要功能是对人员档案信息进行操作,主要有添加、显示、插入、删除、查找、修改等功能。具体如下介绍,该系统的主要功能如以下几点:
(1) 系统主控制平台也就是主菜单,用户可以在主菜单中选择相应的操作,包括添加员工基本信息,显示员工基本信息,查找员工信息,修改员工信息,删除员工信息,统计员工信息,还有相应的排序。用户只要相应的编号就可以选择相应的操作。
(2)添加员工基本信息,在主菜单中选择相应的操作后,用户可根据提示输入员工的的信息,输入完一条信息之后,可以根据系统的提示继续输入下一条员工信息或者进行别的操作。允许输入多条员工信息,输入员工信息之后暂时保存在单链表中,当完成添加操作后,系统会将数据保存到相应的文本文件中,下次使用时再从该文本中读取。
(3)显示员工基本信息,在主菜单中选择相应的操作后,将在屏幕上显示员工的基本信息数据。如果没有该员工的基本信息,则给出相应的提示。查找员工基本信息,在该菜单下用户可以根据员工编号、员工姓名、部门、职务、部门与职务组合、按年龄层、还可查看员工工资及缺勤情况等关键字进行查找。在主菜单中选择相应的操作后,用户可以根据信息提示,可以分别选择根据员工编号、员工姓名、部门、职务、部门与职务组合等等进行查找员工信息并显示相应的员工信息。如果查找不到则给出相应的提示,并给出选择,是继续查找还是返回主菜单。
(4)修改员工基本信息,可以修改员工基本信息表、考勤表、工资表。在主菜单中选择相应的操作后,首先提示用户输入要修改的员工的编号,只允许输入员工编号进行查找并修改,这样可以避免同名时带来的不便,因为每个员工只有一个员工编号而一个企业可以有相同姓名的员工。如果单链表中有该信息存在,则提示用户输入要修改的信息,并将结果重新保存在链表中,完成修改操作后,自动将数据保存到相应的文本文件中,下次使用时自动打开。如果没有则给出相应的提示,是继续还是返回主菜单。
(5)删除员工基本信息,在主菜单中选择相应的操作后,首先提示用户输入要删除的员工的编号,只允许输入员工编号进行查找并删除,这样可以避免同名时带来的不便,因为每个员工只有一个员工编号而一个企业可以有相同姓名的员工。如果单链表中存在该信息,则直接删除全部信息,如果没有找到,则给出相应的提示,是继续还是返回主菜单。完成删除操作后,自动将数据保存到相应的文本文件中,下次使用时自动打开。
(6)统计员工信息,该菜单下分为:统计性别人数、统计年龄段人数;某部门内部,不同职位员工工资比较;不同受教育水平人的平均工资比较。在主菜单中选择相应的操
作后,用户可以根据相应的提示选择想要的功能。
统计性别和年龄段人数时,得出的结果是人数的总和,并且打印出处于其中的员工的姓名和所在部门及其编号。在进行某部门内部,不同职位员工工资比较时,得出的结果是不同职务的员工的工资,打印出结果。在进行不同受教育水平人的工资比较时,得出的结果是各个受教育年限的工资花名册。每选择一种统计之后,完成统计的操作并且给出结果之后,返回统计员工信息的菜单,用户可以根据相应的提示做出相应的选择,是否继续查看统计信息还是返回主菜单。
相关提示有:
(1)相应的排序,在主菜单中选择相应的操作后,在排序菜单下分为:按年龄排序、
员工工资进行排序、缺勤天数进行排序。各个排序给出的结果都是排序之后的结果,
并且打印出来。完成一个排序之后,返回排序的菜单,用户可以根据相应的提示做
出相应的选择,是否继续查看排序结果还是返回主菜单。
(2)保存文件,该功能是将单链表中的数据保存于文本文件中。
(3)故障处理,该模块是为了防止用户用于不会使用该系统而造成的系统出错而设
计的。如果用户输入错误则给出相应的错误提示,并且自动返回上一级菜单。
2.2 开发环境
开发工具使用Visual c++6.0,使用c语言作为开发语言。由于个人比较熟悉Visual c++6.0的编程环境,而且对于c语言比较熟悉,故选择这两者。
3 详细设计
下面是整个系统的功能结构图,这个图可以帮助我们更好的了解这个系统:
人事档案管理系统
添显修删查各退
加示改除找类出
数数信信信统系 据 据 息 息 息 计 统
图3-1
3.1建立存储结构
利用单链表来存储数据,创建3个结构体,分别存放人员基本信息、员工工资信息、员工考勤信息。利用malloc 函数来申请空间并创建3个链表,分别表示员工部门基本
信息,员工工资信息,员工考勤信息。利用read1()、read2()、read3()函数分别从人员情况、工资表、考勤表这三个文本文档中读取数据,利用fopen()函数将文本文档中的数据以读和写的方式打开二进制文件,如果该文件不存在则先建立它。将数据分别读入相应的单链表中,以便进行下一步操作。利用write1()、write2()、write3()函数分别将三个单链表中的数据以二进制的形式写入文本文档中,以“wb+”的形式,也就是也读或写的方式打开一个二进制文件,如果文件名存在原来的内容将会被销毁,这样就避免了读取数据和保存数据时的数据重复的现象。
关于read1()函数,该函数的主要功能是将文本文件中的数据读取到链表中。首先利用FILE *file创建一个指向文件的指针。利用if((file=fopen("e://人员情况.txt","ab+"))==NULL)来判断读取文件是否成功,不成功则返回主菜单。若读取成功,利用while(!feof(file))来判断读取是否完成,完成则关闭文件并返回主菜单。读取时首先申请一个临时的节点,将文本中的数据读入该节点中,将该节点连接到尾指针处,然后尾指针向后移一位,依次循环,直到读取工作完成。如果读取失败则将尾指针的next赋值为空,即r1->next = NULL;,并返回主函数。read2()、read3()函数的功能与read1()函数的功能相似,算法一样。read1()是读取人员情况中的数据,read2()读取工资表中的数据,read3()是读取考勤表中的数据。
下面附属代码:
int read1()
{
FILE *file;
if((file=fopen("人员情况.txt","ab+"))==NULL)//判断是否打开失败
{
printf("read file open error!\nPress any key to continue!");
getchar();
return 0;
}
while(!feof(file))
{
Pnode1 temp=(Pnode1)malloc(sizeof(struct Node1));//定义临时节点并分配空间
ZeroMemory(temp,sizeof(struct Node1));
if(fread(temp,sizeof(struct Node1),1,file)!=1)//判断读取是否成功
{
r1->next = NULL;
return 0;
}
r1->next = temp;//链接到尾指针
r1 = r1->next;//尾指针移动
r1->next = NULL;
}
fclose(file);
return 0;
}
关于write1()函数,该函数的功能时将链表中的数据写到文本文档中,并且会覆盖原来文本文当中的数据。首先利用FILE *file创建一个指向文件的指针。然后创建两个临时的节点指针temp和q并分别赋值,将所要写入文件的头结点的next赋给临时指针。利用if((file=fopen("e://人员情况.txt","ab+"))==NULL)来判断读取文件是否成功,不成功则返回主函数。若读取成功,则将链表写入文本文件中,利用fwrite(temp,sizeof(struct Node1),1,file);将结点中的数据依次写入文本文件中直到写入完成。最后关闭文件,并返回主函数。Write2()、write3()函数的功能与write1()函数类似,算法一样。write1()是将人员情况数据写入到人员情况的文本文档中,Write2()是将人员工资情况写入工资表中,write3()是将考勤情况写入考勤表中。
下面为附属代码:
Pnode1 write1(){
FILE *file;
Pnode1 temp,q;
temp = head1->next;
q=head1->next;//建立临时节点,并赋值
if((file=fopen("人员情况.txt","wb+"))==NULL)//判断如果以追加2进制的方式打开失败
{
printf("read file open error!\nPress any key to continue!");
getchar();
return NULL;
}
while(q != NULL)//循环q,依次写入文本中
{
fwrite(temp,sizeof(struct Node1),1,file);//在新定的位置处取一段数据到temp
temp = q->next;
q = q->next;
}
fclose(file);//关闭文件
return NULL;
}
3.2添加数据
该功能使用的函数是:
void insert_list1(Node1 *head) //添加人员基本信息
void insert_list2(Node2 *head)//添加工资基本信息
void insert_list3(Node3 *head)//添加考勤信息
这三个函数分别向三张表中添加数据,每个函数传的参数分别是存放人员情况、考勤表、工资表的链表的尾指针。在该函数中,首先定义一个控制循环的变量ch,首先将其赋值为1,在循环结构里面定义新的节点并申请空间,然后赋值,然后将该结点接到尾指针上,尾指针移动。最后由用户自由改变ch的值来选择是否继续输入或者退出返回。
while(ch==1)//条件控制
{
printf("请输入员工编号和缺勤天数:\n");
scanf("%d %d",&id,&data);
curr=(struct Node3*)malloc(sizeof(Node3));//申请空间
ZeroMemory(curr,sizeof(struct Node3));
curr->id=id;//赋值
curr->data=data;
curr->next=NULL;
r3->next=curr;//接到尾指针
r3=r3->next;
printf("1、继续输入\n0、返回\n");
scanf("%d",&ch);
}
3.3显示信息
该模块有三个函数,为:
void show(Pnode1 h1);//显示人员基本情况
void show_list2(Pnode2 head2);//显示工资情况
void show_list3(Pnode3 node);,//显示考勤情况
功能时将链表中的数据显示在屏幕上。传进去的参数分别为三个链表的头指针,然后遍历链表将其中的数据输出。该模块式比较简单的模块,这里不作过多介绍。下面是实验结果截图:
人事档案管理系统
*************************************** 1、添加信息 2、显示信息
3、查找信息 4、修改信息
5、查看各类统计信息 6、删除信息
7、退出系统
*************************************** 请输入相应的编号:
2
显示信息
********************************** 1、显示员工信息表
2、显示员工工资表
3、显示员工考勤表
4、返回主菜单
*********************************** 请输入相应的编号:
1
员工信息如下:
编号 姓名 年龄 性别 所在部门 职务 受教育年限 1001 战三 30 男 财务部 职员 15 1002 李四 26 男 销售部 职员 15 1003 李丽 36 女 财务部 经理 16 1004 李玉 26 女 公关部 职员 15 1005 王宇 31 男 副经理 副经理 20 1006 露露 36 女 销售部 职员 15 1009 了解 40 男 财务部 经理 20 显示信息
********************************** 1、显示员工信息表
2、显示员工工资表
3、显示员工考勤表
4、返回主菜单
*********************************** 请输入相应的编号:
3.4修改信息
该模块有三个函数,其功能是将链表中的数据进行修改,并且会保存会原来的文本文件中。我们平时在输入信息的时候难免会出现错误,所以这个修改信息的函数是十分必要的。
该模块有三个函数:
void updata_manage1(Node1 *head)是修改人员基本信息,
void updata_manage2(Node2 *head)是修改员工工资表,
void updata_manage3(Node3 *head)是修改考勤表。
通过用户选择要修改的表的信息,然后调用该函数。用户需要输入要修改的员工的编号,只能以编号查,这样就可以避免同名时带来的不便。将链表的头节点作为参数传进去,遍历整个链表,查找相应的员工的编号。若寻找到该编号的员工,则输入新的数据并覆盖原来的数据,提示用户修改成功。若没有查到相应的编号,则给出相应的提示。
3.5删除信息
该模块有三个函数,其功能是将链表中的数据进行删除,并且会保存会原来的文本文件中。由于信息需要更新,所以删除信息的函数也好似必不可少的~有三个函数:
int del_manage1(Node1 *node1)是用来删除人员信息表中的数据,传入的参数为人员信息链表的头节点。
int del_manage2(Node2 *node2) 是用来删除工资表中的数据,传入的参数为工资链表的头节点。
int del_manage3(Node3 *node3) 是用来删除考勤表中的数据,传入的参数为考勤链表的头节点。
使用时要输入要删除的员工的编号,在执行运算时,首先从链表的第一个元素开始,依次将每个节点的编号与输入的编号temp进行比较,如果找到值为temp的节点将其前驱节点的储存位置记录在指针变量pre1中,然后指针修改语句pre1->next=pre1->next->next删除值为temp的节点,下图反映了删除时节点置身的变化:
h
h1 h2 h2 h4
N
图3-3
int del_manage1(Node1 *node1) {
Node1 *pre1=NULL,*curr1=NULL;
pre1=node1;//定义临时节点并赋值
printf("请输入要删除的员工编号:\n");
int temp1=0;
scanf("%d",&temp1);//输入要删除的编号
if(pre1->next==NULL)return 0;//为空表则返回主函数
while(pre1->next!=NULL&&pre1->next->Id!=temp1)
pre1=pre1->next;//找到值为temp1的节点的前驱节点
if(pre1->next==NULL)//没有找到值为temp1的节点
{
printf("Not exist!\n");
return 0;
}
else {
curr1=pre1->next;//将id为temp1的节点赋给curr1
pre1->next=curr1->next;//讲id为temp1的节点的后续节点接到curr
free(curr1);//释放curr1
printf("删除成功~\n");
return (1);
}//删除人员基本表的信息
}
3.6查找数据
由于人员信息系统的信息量十分庞大,想要从名单中找出某个人的信息十分困难,
所以查找信息也是十分必要的~该模块只要是通过提示用户输入关键字,并保存在temp1
这个临时变量中,然后遍历整个链表,找出与关键字相符的员工的信息并打印员工信息
道屏幕上,查找分为几种关键字查找,具体分为:员工编号、员工姓名、部门、职位、
年龄层。还有查看某员工工资或者考勤记录的功能。
显示结果如下:
人事档案管理系统
*************************************** 1、添加信息 2、显示信息
3、查找信息 4、修改信息
5、查看各类统计信息 6、删除信息
7、退出系统
***************************************
请输入相应的编号:3
查找菜单
***************************************
1、按员工编号查找
2、按员工姓名查找
3、按部门查找
4、按职位查找
5、按年龄层查找
6、查看员工工资
7、查看员工缺勤情况
8、返回主菜单
***************************************
请输入相应的编号:
查找数据的函数有:
void find_by_id(Pnode1 head1 );//通过员工id查找
void find_by_name(Pnode1 head1 );//通过姓名查找
void find_by_job(Pnode1 head1);//通过植物职务查找
void find_by_dep(Pnode1 head1);//通过部门查找
void find_by_age(Node1 *head1);//通过年龄查找
void find_by_money(Node2 *head);//察看员工工资
void find_by_off(Node3 *head);//查找员工缺勤天数
3.7各类统计
在一个比较完善的系统当中,除了必要的一些操作之外,还应该具有一些适当的具有特色的操作。该模块有6种统计,分别是:统计员工总人数,统计性别及比例,统计员工中的年龄分布,统计受教育水平,不同受教育水平的有员工工资比价,相同部门内的员工工资。还有三种排序v,分别是以员工年龄进行排序,实发工资进行排序,还有缺勤天数进行排序。
统计员工人数、员工的年龄分布和统计性别所给出的结果是一个整型的数据;这三个统计都是利用遍历整个链表然后比较关键字符条件符合的则记录下来。
统计不同受教育水平,有int count_m_edu(Pnode1 head,Pnode2 head0)函数完成,给出的结果是相同受教育水平的员工的基本信息包括工资信息。传进函数里面的参数是工资表和人员情况表的头指针。然后由用户输入要查看的年龄层,根据用户输入的信息,
首先遍历人员情况表找出符合年龄的人员,记下期员工编号保存于临时变量temp中,然后再遍历工资表找出与temp相符的员工编号,然后打印出其工资信息,循环直至完成操作。
统计相同部门内,不同员工的工资比较,由int count_dep_1(Pnode1 head,Pnode2
head0)完成。给出的结果是相同部门内员工的基本信息,包括工资信息。传进函数里面参数为工资表和人员情况表的头指针。然后由用户输入要查看的部门名称,保存在temp中。首先遍历人员情况表,通过比较函数(strcmp(pre1->Dep,temp)==0)从人员信息表中找出相应部门的员工,找到符合的员工立即遍历工资表,将工资表的员工编号与人员情况表中符合信息的员工编号比较,若符合则打印出员工的信息,包括工资信息。
下面是int count_dep_1(Pnode1 head,Pnode2 head0)部分代码:
while(pre1)
{
if(strcmp(pre1->Dep,temp)==0)//比较函数来判断是否为要统计的部门
{
while (pre2)
{
if (pre1->Id==pre2->id)//比较两个链表的id
{
printf("%d %s %f\n",pre2->id,pre1->Dep,pre2->f);
break;
}
pre2=pre2->next;//pre2向前移
}}pre1=pre1->next;//pre1向前移
}
排序中所使用的排序算法为冒泡排序和直接插入排序。冒泡排序是先将序列中的第一个元素与第二个元素进行比较,如果前者大于后者,则交换位置否则不变;然后将第二个元素与第三个元素比较,做同样的比较,依此类推直至处理完第n-1和第n个记录,这样的n-1次比较和交换成为一次起泡;每一次起泡将记录中的最大的元素至于第n个位置。在对n-1个记录进行相同的处理,直至排序完成。直接插入排序,是在n个记录中插入R时,记录被划分为两个区域[R,R]和[R,R],其中前一个区间已经排好序,i0i-1in-1
后一个区间是当前未排序的部分,将第i各排序码与前i-1个依次比较,找出应该插入的位置,将记录R插入进去。 i
对于年龄和工资的排序采用的是冒泡排球,缺勤天数的排序采用的是直接插入排序。下面附属部门代码:
年龄的排序:
for(pre1;pre1;pre1=pre1->next)//遍历pre1
{
for(pre2=head->next ;pre2->next;pre2=pre2->next)//遍历pre2
{
if(pre2->age
next->age)
{
id=pre2->Id;
age=pre2->age;
edu=pre2->edu;
strcpy(name,pre2->Name);
strcpy(sex,pre2->Sex);
strcpy(dep,pre2->Dep);
strcpy(job,pre2->Job);
pre2->age=pre2->next->age;
pre2->edu=pre2->next->edu;
pre2->Id=pre2->next->Id;
strcpy(pre2->Dep,pre2->next->Dep);
strcpy(pre2->Job,pre2->next->Job);
strcpy(pre2->Name,pre2->next->Name);
strcpy(pre2->Sex,pre2->next->Sex);
pre2->next->age=age;
pre2->next->edu=edu;
pre2->next->Id=id;
strcpy(pre2->next->Dep,dep);
strcpy(pre2->next->Job,job);
strcpy(pre2->next->Name,name);
strcpy(pre2->next->Sex,sex);//交换链表中的数据
}
}
}
p=head->next;
缺勤天数的排序:
first = head->next; //原链表剩下用于直接插入排序的节点链表
head->next = NULL; //只含有一个节点的链表的有序链表
while (first != NULL) //有数据存在
{
for (t=first, q=head; ((q!=NULL) && (q->data < t->data)); p=q,
q=q->next); //查找插入位置
first = first->next;
if (q == head) //插到第一个节点之前
{
head = t;
}
else //p是q的前驱
{
p->next = t;
}
t->next = q; //插入完成
}
3.8退出系统
该功能是为了系统安全的退出,由exit(0)函数来完成。
3.9菜单模块
该模块有各个级别的菜单函数组成,主要功能是方便用户操作系统,方便选择各类功能。主要包括的有:
void main_menu()主菜单函数;
void del_menu()删除菜单函数;
void find_menu()查找菜单函数;
void paixv_menu()排序菜单函数;
void show_menu()显示菜单函数;
void update_menu()修改信息菜单函数;
void insert_menu()添加信息菜单函数;
void some_menu()各类统计菜单函数;
通过这些菜单函数来调用相应的功能,使该系统的功能更能被方便的使用。 4 所遇到的问题和分析解决
在编写该系统时,一开始就遇到了一个最严重的问题,那就是读写文件的问题。作为一个完善的系统,必须具有保存数据和读取数据的功能。由于我对于读写文件这块不是很熟悉,所以编写这块的代码时总是有错误出现。为了能完善该系统使该系统具有保存和读取文件的功能,于是我查阅了各类书籍,并且向编程能力比较好的同学请教,最终实现了读写的功能。俗话说的话,书中自有黄金屋,书中自有颜如玉;遇到问题还是要好好看看书~
在输入输出的时候,由于所使用的开发语言是c语言,使用的输入输出函数分别是scanf()和printf()函数,这两个函数的格式有点繁琐,有时候容易出错。在使用scanf()函数时候,在对于整型数据的输入要加取地址符&,而字符和数组不用;有时会因为粗心而忘记加上因而导致了访问冲突。关于这个问题,我是通过对函数的单步调试一一找出来的。在天调试程序时,设断点和单步调试对于找bug是十分有用的~
在使用指针时,有时候由于赋值的问题,会引起指针乱指的现象,造成访问的冲突。所以在定义指针的时候,就要将其赋值为NULL。
5 系统特色及关键技术
在这个系统中,主要运用的技术是单链表。对于单链表的插入、删除、查找、显示的操作相信大家已经渐多不怪了。这个系统中有三个文件,也就建立了三个链表,储存人员基本信息的人员情况表,储存工资信息的工资表,储存考勤信息的考勤表。对于一个链表的操作可能会比较简单,但是对于两张表的操作则是有点困难。
在统计某部门员工的工资的时候,就是需要将两张表联系到一起,以相同的员工编号两张表联系在一起操作,打印出某部门工资单,该功能在函数nt count_dep_1(Pnode1
head,Pnode2 head0)中实现。还有函数int count_m_edu(Pnode1 head,Pnode2 head0)
也是将两张表联系起来操作的。
6 结论
课程设计是我们学习中所不可缺少的一个环节,这次做课程设计时我第一次做课程设计,通过这一次课程设计给了我对于编程有了新的想法。这次我所做的人事档案管理系统,虽然说我实现了其基本的功能还有些特色的功能,但是我觉得并不满意,因为我没有能给他一个好看的界面,这是我这次所觉得失败的。要学的东西还很多,要想做出功能更加完善的东西还需要多加努力~这个人事档案管理系统所使用的数据结构是单链表,通过这么一次全面的使用单链表,我更加了解单链表的各种操作,我想我以后应该不会再惧怕单链表的操作了~通过这么一次实践,我不仅看到了自己的缺点,同时也有很多收获的,
在动手写代码之前,我先理清思路画好了结构框架图,将要实现的功能列出来并且将实现该功能的函数的函数名写出来,然后再去一个个函数的写并且完成测试,最后将所有函数汇总,这样的工作需要我有清晰的思路。可以说这次课设充分锻炼了我,做事情要有清晰的思路要一件一件的作,一下子做太多反而更加麻烦~
参考文献
[1]张乃孝.算法与数据结构——c语言描述(第二版)[M].北京:高等教育出版社,2006.1:31—45,245—263
[2]郭小刚,金星.c\c++程序设计教程[M] 北京:人民邮电出版社,2004.1
[3]罗建军等.c程序设计教程(第二版)[M]北京:高等教育出版社,2007.8