您好,欢迎访问三七文档
当前位置:首页 > 商业/管理/HR > 人事档案/员工关系 > 员工考勤信息管理的设计和实现
员工考勤信息管理的设计和实现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姓名部门….…..…..例:201031ID姓名部门11张三安保部12李四安保部2.2.2.存储员工考勤信息的文件:文件名:由日期经过变换后得到。变换方式:(1)给整个系统设置一个基准日期基准日期:一段时期内的起始日期,通常规定为一个月的1号,考勤所记录的是基准日期之后的考勤信息.(2)考勤记录的日期与基准日期相差的天数加1。由以上变换可得:基准日期的考勤的文件名为“1.txt”。2.2.3.存储考勤一段时期的统计信息的文件:文件名:管理员自己输入。文件内容:起始日期终止日期ID姓名迟到次数早退次数…….……例如:2010412010630ID姓名迟到次数早退次数11张三1212李四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程序代码#includestdafx.h#includestdio.h#includestdlib.h#includestring.h#includeprocess.h#includeconio.h#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;iCOUNT;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(choice1||choice5){printf(\t输入错误,请重输:\t);gotostart;}switch(choice){case(1):{printf(\t\t\tID\t姓名\t部门\n);for(i=0;iCOUNT;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;iCOUNT;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;iCOUNT;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;iCOUNT;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].idnew_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;iCOUNT;i++)if(person[i].id==id)break;for(j=i;jCOUNT;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.输入员工
本文标题:员工考勤信息管理的设计和实现
链接地址:https://www.777doc.com/doc-1027461 .html