员工考勤信息管理的设计和实现.docx
《员工考勤信息管理的设计和实现.docx》由会员分享,可在线阅读,更多相关《员工考勤信息管理的设计和实现.docx(38页珍藏版)》请在冰豆网上搜索。
![员工考勤信息管理的设计和实现.docx](https://file1.bdocx.com/fileroot1/2022-10/29/0a9f132c-c240-4123-89ef-aee58af6f9a5/0a9f132c-c240-4123-89ef-aee58af6f9a51.gif)
员工考勤信息管理的设计和实现
员工考勤信息管理的设计和实现
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;iprintf("\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;iif(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