人力资源员工考勤信息管理的设计和实现资料.docx
- 文档编号:6089181
- 上传时间:2023-01-03
- 格式:DOCX
- 页数:38
- 大小:421.64KB
人力资源员工考勤信息管理的设计和实现资料.docx
《人力资源员工考勤信息管理的设计和实现资料.docx》由会员分享,可在线阅读,更多相关《人力资源员工考勤信息管理的设计和实现资料.docx(38页珍藏版)》请在冰豆网上搜索。
人力资源员工考勤信息管理的设计和实现资料
员工考勤信息管理的设计和实现
1.系统描述
1.1问题说明
本试验要求是设计员工考勤管理系统,,本系统作用是用于企业员工管理,解决人工考勤面对庞大数据量的弊病.该系统侧重于员工考勤信息管理和员工考勤信息的登记与查询。
本系统使用的开发工具是vc++开发程序,通过已编制好的程序,完成对员工信息的输入、输出、插入、删除操作,以及员工迟到、早退考勤信息的登记和查询,完善企业管理现代化,方便管理人员统计,考核员工出勤情况,方便员工管理部门查询,考核员工的出勤率,准确地掌握员工出勤情况和相关资料,有效管理、掌握员工各项情况.
1.2功能需求
本试验要求实实现员工考勤管理系统,本系统包括的基本功能有:
1.2.1员工信息的管理
1.2.2员工信息的统计
1.2.3员工考勤信息的管理和查询
1.3数据需求
本系统为完成所要求功能需要的数据包括:
1.3.1员工ID,姓名,部门
1.3.2员工迟到,早退情况
1.3.3在一定期间里员工迟到,早退次数
2.系统设计
2.1内存数据结构设计
系统各实体可用以下关系表示:
员工(ID,姓名,部门)
考勤(ID,姓名,迟到,早退,日期)
统计(ID,姓名,迟到次数,早退次数,期间
2.2数据文件设计
2.2.1.存储员工信息的文件:
文件名:
information1.txt
文件内容:
日期
ID姓名部门
….…..…..
例:
201031
ID姓名部门
11张三安保部
12李四安保部
2.2.2.存储员工考勤信息的文件:
文件名:
由日期经过变换后得到。
变换方式:
(1)给整个系统设置一个基准日期
基准日期:
一段时期内的起始日期,通常规定为一个月的1号,考勤所记录的是基准日期之后的考勤信息.
(2)考勤记录的日期与基准日期相差的天数加1。
由以上变换可得:
基准日期的考勤的文件名为“1.txt”。
2.2.3.存储考勤一段时期的统计信息的文件:
文件名:
管理员自己输入。
文件内容:
起始日期终止日期
ID姓名迟到次数早退次数
…….……
例如:
2010412010630
ID姓名迟到次数早退次数
11张三12
12李四20
各文件之间的关系:
考勤文件是按照当天的员工信息文件的顺序依次记录。
在此把请假等排除在外不考虑。
2.3代码设计
设计代码主要包括:
voidinput_employee()//第一次输入员工信息
voidread_file()//专门用于读取存储员工信息的文件的函数
voidwrite_file()//专门用于向存储员工信息的文件中写函数
voidoutput_employee()//输出员工信息
voidinsert_employee(structemployeenew_person)//添加员工信息
voiddelete_employee(intid)//删除员工信息
voidmanagement_employee()//管理员工信息总函数
intcomputer(structdatasomeday)//计算日期对应的文件名
voidrecorder()//记录每天每个员工的考勤情况
voidstatistic()//统计所有员工某段时间的考勤情况,把统计结果输入文件中
voidsingle_quire()//查询某一天的考勤情况
voidmulti_quire()//查询一段连续时间的考勤情况
voidquire_attendance()//查询的总函数
voidmanagement_attendance()//考勤管理的总函数
2.4程序代码
#include"stdafx.h"
#include
#include
#include
#include"process.h"
#include
#defineMAX_COUNT30//最大员工数
structemployee//员工信息结构体
{
intid;
charname[20];
chardepartment[20];
};
structdate//日期结构体
{
intyear;
intmonth;
intday;
};
structattendance//考勤结构体
{
intid;
intlate;
intearly;
charname[20];
structdatedat;
};
structstatistic//统计表结构体
{
intid;
intlate_count;
intearly_count;
charname[20];
};
intCOUNT=0;//记录员工的人数
intFLAG_pause=1;//涉及插入,输出函数的联合操作时某些位置是否调用system(“pause”)
structemployeeperson[MAX_COUNT];
structdateBASE_DATA={2012,1,1};//基准日期
voidinput_employee()//第一次输入员工信息,相当于初始化
{
system("cls");
FILE*fp1,*fp2;
structemployeetemp;
fp1=fopen("information1.txt","w");
fp2=fopen("information2.txt","w");
printf("\t\t\t\t员工信息\n");
printf("\n\t\t\t\tID\t姓名\t部门\n\t\t\t\t");
fprintf(fp1,"\t\t\t\t输入员工信息\n");
fprintf(fp1,"\n\t\t\t\tID\t姓名\t部门\n");
scanf("%d%s%s",&temp.id,temp.name,temp.department);
while(temp.id!
=0)
{
person[COUNT]=temp;
printf("%d",temp.id);
COUNT++;
fprintf(fp1,"\t\t\t\t%d\t%s\t%s\n",temp.id,temp.name,temp.department);
fprintf(fp2,"%d\t%s\t%s\n",temp.id,temp.name,temp.department);
printf("\t\t\t\t");
scanf("%d%s%s",&temp.id,temp.name,temp.department);
}
fclose(fp1);
fclose(fp2);
}
voidread_file()//专门用于读存储员工信息的文件的函数
{
FILE*fp;
COUNT=0;
if((fp=fopen("information2.txt","r"))==NULL)
{
printf("cantnotopenfile\n");
exit
(1);
}
while(!
feof(fp))
{
fscanf(fp,"%d%s%s",&person[COUNT].id,person[COUNT].name,
person[COUNT].department);
COUNT++;
}
COUNT--;
fclose(fp);
}
//专门用于向存储员工信息的文件中写函数
voidwrite_file()
{
inti;
FILE*fp1,*fp2;
fp1=fopen("information1.txt","w+");
fp2=fopen("information2.txt","w+");
if(fp1==NULL||fp2==NULL)
{
printf("cantnotopenfile\n");
exit
(1);
}
fprintf(fp1,"\t\t\t\t输入员工信息\n");
printf("\n\t\t\t\tID\t姓名\t部门\n");
for(i=0;i { fprintf(fp1,"\t\t\t\t%d\t%s\t%s\n",person[i].id,person[i].name,person[i].department); fprintf(fp2,"%d\t%s\t%s\n",person[i].id,person[i].name,person[i].department); } fclose(fp1); fclose(fp2); } //输出员工信息 voidoutput_employee() { inti; intid; intchoice; chartemp[20]; system("cls"); read_file();//读员工信息文件 printf("\n\t\t\t\t\t输出员工信息\n"); printf("\n\t1.输出全体员工信息\t"); printf("2.按姓名输出员工信息\t"); printf("3.按ID输出员工信息\t"); printf("4.按部门员工信息\t"); printf("5.返回主菜单\n"); printf("\n\t请选择(1~5): \t"); start: scanf("%d",&choice); if(choice<1||choice>5) { printf("\t输入错误,请重输: \t"); gotostart; } switch(choice) { case (1): { printf("\t\t\tID\t姓名\t部门\n"); for(i=0;i printf("\t\t\t%d\t%s\t%s\n",person[i].id,person[i].name,person[i].department); break; } case (2): { printf("\t\t\t输入姓名: "); scanf("%s",temp); printf("\t\t\tID\t姓名\t部门\n"); for(i=0;i if(strcmp(person[i].name,temp)==0) printf("\t\t\t%d\t%s\t%s\n",person[i].id,person[i]. name,person[i].department); break; } case(3): { printf("\t\t\t输入ID: "); scanf("%d",&id); printf("\t\t\tID\t姓名\t部门\n"); for(i=0;i { if(person[i].id==id) { printf("\t\t\t%d\t%s\t%s\n",person[i].id,person[i].name, person[i].department); break; } } break; } case(4): { printf("\t\t\t输入部门: "); scanf("%s",temp); printf("\t\t\tID\t姓名\t部门\n"); for(i=0;i if(strcmp(person[i].department,temp)==0) printf("\t\t\t%d\t%s\t%s\n",person[i].id,person[i].name, person[i].department); break; } case(5): break; } system("pause"); } //添加员工信息 voidinsert_employee(structemployeenew_person)//有新员工加入时,插入 { inti; system("cls"); read_file();//读文件 i=COUNT; while(person[i].id>new_person.id) { person[i]=person[i-1]; i--; } person[i]=new_person; COUNT++; write_file(); if(FLAG_pause==0) system("pause"); } //删除员工信息 voiddelete_employee(intid)//员工辞职,退休等时,删除员工信息,数组方式存储的线性表的删除操作 { inti; intj; read_file();//读文件 system("cls"); for(i=0;i if(person[i].id==id) break; for(j=i;j person[j]=person[j+1]; COUNT--; write_file(); if(FLAG_pause==0) system("pause"); } voidmanagement_employee()//管理员工信息总函数 { intchoice; intid; structemployeesomeone; printf("\n\t\t\t\t\t员工信息管理\n"); printf("\n\t1.输入员工信息\t"); printf("2.输出员工信息\t"); printf("3.插入员工信息\t"); printf("4.删除员工\t"); printf("5.返回主菜单\n"); printf("\n\t请选择(1~5): \t"); start: scanf("%d",&choice); if(choice<1||choice>6) { printf("\t输入错误,请重输: \t"); gotostart; } switch(choice) { case (1): { input_employee(); break; } case (2): { output_employee(); break; } case(3): { printf("\t\t\t插入新员工信息\n"); printf("\t\t\t请输入员工的: \n\t\t\tID\t姓名\t部门\n"); printf("\t\t\t"); scanf("%d%s%s",&someone.id,someone.name,someone.department); insert_employee(someone); break; } case(4): { printf("\t\t\t删除员工信息\n"); printf("\t请输入要删除的员工ID: \t"); scanf("%d",&id); delete_employee(id); break; } case(5): break; } } //计算日期对应的文件名,相当于哈希函数,以一年内为界,一年以天计算 intcomputer(structdatesomeday) { inti; intdays=0; if(someday.month==BASE_DATA.month) days=someday.day-BASE_DATA.day+1; else { for(i=BASE_DATA.month+1;i switch(i) { case2: days=days+28; case3: days=days+31; case4: days=days+30; case5: days=days+31; case6: days=days+30; case7: days=days+31; case8: days=days+31; case9: days=days+30; case10: days=days+31; case11: days=days+30; } days=days+someday.day; } returndays; } //记录每天每个员工的考勤情况 voidrecorder() { inti; intlate; intearly; intid; intdays; charname[20]; charfilename[40];//零时存放某一天的考勤文件的文件名 FILE*fp;//指向某一天的考勤文件的指针 structdatecurrent_date; system("cls"); read_file(); printf("\n\t\t\t\t考勤记录\n"); printf("\n\t\t日期: "); scanf("%d%d%d",¤t_date.year,¤t_date.month,¤t_date.day); days=computer(current_date); itoa(days,filename,10);//int转换成string strcat(filename,".txt"); fp=fopen(filename,"w"); fprintf(fp,"%d\t%d\t%d\n",current_date.year,current_date.month,current_date.day); printf("\n\t\tID\t姓名\t迟到\t早退\n"); fprintf(fp,"ID\t姓名\t迟到\t早退\n"); for(i=0;i { id=person[i].id; strcpy(name,person[i].name); printf("\n\t\t%d\t%s\t",id,name); scanf("%d%d",&late,&early); fprintf(fp,"%d\t%s\t%d\t%d\n",id,name,late,early); } fprintf(fp,"\n"); fclose(fp); system("pause"); } //统计所有员工某段时间的考勤情况,把统计结果输入文件中 voidstatistic() { inti; intj; intk=0; intstatus=0;//标识,用于判断一个从文件中读入的新记录是否在存中存在,如果不存在则新分配内存,否则追加在已有的记录上 intbegin_page; intend_page; charsave;//判断是否保存 charfilename[40];//零时存放某一天的考勤文件的文件 intyear; intmonth; intday; charID[20]; charname[20]; charlate[20]; charearly[20]; FILE*fp;//指向某一天的考勤文件的指针 structdatebegin;//统计的起始日期,最终日期,只能统计连续一段时间的考勤 structdateend; structstatistictemp;//存储零时的 structstatisticstat[30];//存储每个员工的迟到,早退次数的信息 for(i=0;i<30;i++) { stat[i].early_count=0; stat[i].late_count=0; } system("cls"); printf("\t\t\t统计员工考勤\n"); printf("\n\t请输入起止日期\n"); printf("\n\t\t起始日期: "); scanf("%d%d%d",&begin.year,&begin.month,&begin.day); printf("\n\t\t终止日期: "); scanf("%d%d%d",&end.year,&end.month,&end.day); begin_page=computer(begin); end_page=computer(end); for(i=begin_page;i<=end_page;i++) { itoa(i,filename,10);//int转换成string strcat(filename,".txt"); fp=fopen(filename,"r"); fscanf(fp,"%d%d%d%s%s%s%s",&year,&month,&day,ID,name,late,early); if(i==begin_page) { while(! feof(fp)) { fscanf(fp,"%d%s%d%d",&stat[k].id,stat[k].name,&stat[k].late_count,&stat[k].early_count); k++; } k--; } else { while(! feof(fp)) { fscanf(fp,"%d%s%d%d",&temp.id,temp.name, &temp.late_count,&temp.early_count); for(j=0;j { if(temp.id==stat[j].id) { status=1; if(temp.late_count==1) stat[j].late_count++; if(temp.early_count==1) stat[j].early_count++; break; } } if(status==0) { stat[k].id=temp.id; strcpy(stat[k].name,temp.name); stat[k].late_count=temp.late_count; stat[k].early_count=te
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 人力资源 员工 考勤 信息管理 设计 实现 资料