版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
1、员工考勤信息管理的设计和实现1. 系统描述1.1问题说明本试验要求是设计员工考勤管理系统,本系统作用是用于企业员工管理,解决人工考勤面对庞大数据量的弊病.该系统侧重于员工考勤信息管理和员工考勤信息的登记与查询。本系统使用的开发工具是vc+开发程序,通过已编制好的程序,完成对员工信息的输入、输出、插入、删除操作,以及员工迟到、早退考勤信息的登记和查询,完善企业管理现代化,方便管理人员统计,考核员工出勤情况,方便员工管理部门查询,考核员工的出勤率,准确地掌握员工出勤情况和相关资料,有效管理、掌握员工各项情况.1.2功能需求本试验要求实实现员工考勤管理系统,本系统包括的基本功能有:1.2.1员工信息
2、的管理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姓名部门. .例:2010 3 1 ID姓名部门 11张三安保部 12李四安保部2.2.2.存储员工考勤信息的文件
3、:文件名:由日期经过变换后得到。变换方式:(1)给整个系统设置一个基准日期 基准日期:一段时期内的起始日期,通常规定为一个月的1号,考勤所记录的是基准日期之后的考勤信息.(2)考勤记录的日期与基准日期相差的天数加1。由以上变换可得:基准日期的考勤的文件名为“1.txt”。2.2.3.存储考勤一段时期的统计信息的文件:文件名:管理员自己输入。文件内容:起始日期 终止日期ID姓名迟到次数早退次数 . 例如:2010412010630ID姓名迟到次数早退次数11张三1212李四20各文件之间的关系:考勤文件是按照当天的员工信息文件的顺序依次记录。在此把请假等排除在外不考虑。2.3代码设计设计代码主要
4、包括:void input_employee() /第一次输入员工信息void read_file() /专门用于读取存储员工信息的文件的函数void write_file() /专门用于向存储员工信息的文件中写函数 void output_employee() /输出员工信息 void insert_employee(struct employee new_person) /添加员工信息 void delete_employee(int id) /删除员工信息void management_employee() /管理员工信息总函数int computer(struct data somed
5、ay) /计算日期对应的文件名void recorder() /记录每天每个员工的考勤情况 void statistic() /统计所有员工某段时间的考勤情况,把统计结果输入文件中 void single_quire() /查询某一天的考勤情况 void multi_quire() /查询一段连续时间的考勤情况 void quire_attendance() /查询的总函数 void management_attendance() /考勤管理的总函数2.4 程序代码#include stdafx.h#include#include#include#include process.h#inclu
6、de #define MAX_COUNT 30 /最大员工数struct employee /员工信息结构体 int id; char name20; char department20;struct date /日期结构体 int year; int month; int day;struct attendance /考勤结构体 int id; int late; int early; char name20; struct date dat;struct statistic /统计表结构体 int id; int late_count; int early_count; char name
7、20;int COUNT=0; /记录员工的人数int FLAG_pause=1; /涉及插入,输出函数的联合操作时某些位置是否调用system(“pause”)struct employee personMAX_COUNT;struct date BASE_DATA=2012,1,1; /基准日期void input_employee() /第一次输入员工信息,相当于初始化 system(cls); FILE *fp1,*fp2; struct employee temp; fp1=fopen(information1.txt,w); fp2=fopen(information2.txt,w
8、); printf(tttt 员工信息n); printf(nttttIDt姓名t部门ntttt); fprintf(fp1,tttt 输入员工信息n); fprintf(fp1,nttttIDt姓名t部门n); scanf(%d%s%s,&temp.id,,temp.department); while(temp.id!=0) personCOUNT=temp; printf(%d,temp.id); COUNT+; fprintf(fp1,tttt%dt%st%sn,temp.id,,temp.department); fprintf(fp2,%dt%s
9、t%sn,temp.id,,temp.department); printf(tttt); scanf(%d%s%s,&temp.id,,temp.department); fclose(fp1); fclose(fp2);void read_file() /专门用于读存储员工信息的文件的函数 FILE *fp; COUNT=0; if(fp=fopen(information2.txt,r)=NULL) printf(cant not open filen); exit(1); while(!feof(fp) fscanf(fp,%d%s%s,&perso
10、nCOUNT.id,personCOUNT.name,personCOUNT.department); COUNT+; COUNT-; fclose(fp);/专门用于向存储员工信息的文件中写函数void write_file() int i; FILE *fp1,*fp2; fp1=fopen(information1.txt,w+);fp2=fopen(information2.txt,w+); if(fp1=NULL | fp2=NULL) printf(cant not open filen); exit(1); fprintf(fp1,tttt 输入员工信息n);printf(ntt
11、ttIDt姓名t部门n); for(i=0;iCOUNT;i+) fprintf(fp1,tttt%dt%st%sn,personi.id,,personi.department); fprintf(fp2,%dt%st%sn,personi.id,,personi.department); fclose(fp1); fclose(fp2);/输出员工信息void output_employee() int i; int id; int choice; char temp20; system(cls); read_file(); /读员工信息文件
12、 printf(nttttt输出员工信息n); printf(nt1.输出全体员工信息t); printf(2.按姓名输出员工信息t); printf(3.按ID输出员工信息t); printf(4.按部门员工信息t); printf(5.返回主菜单n); printf(nt请选择(15):t); start: scanf(%d,&choice); if(choice5) printf(t输入错误,请重输:t); goto start; switch(choice) case(1): printf(tttIDt姓名t部门n); for(i=0;iCOUNT;i+) printf(ttt%dt%
13、st%sn,personi.id,,personi.department); break; case(2): printf(ttt输入姓名:); scanf(%s,temp); printf(tttIDt姓名t部门n); for(i=0;iCOUNT;i+) if(strcmp(,temp)=0) printf(ttt%dt%st%sn,personi.id,,personi.department); break; case(3): printf(ttt输入ID:); scanf(%d,&id); printf(tttID
14、t姓名t部门n); for(i=0;iCOUNT;i+) if(personi.id=id) printf(ttt%dt%st%sn,personi.id,,personi.department); break; break; case(4): printf(ttt输入部门:); scanf(%s,temp); printf(tttIDt姓名t部门n); for(i=0;inew_person.id) personi=personi-1; i-; personi=new_person; COUNT+; write_file(); if(FLAG_pause=0) sys
15、tem(pause);/删除员工信息void delete_employee(int id) /员工辞职,退休等时,删除员工信息,数组方式存储的线性表的删除操作 int i; int j; read_file(); /读文件 system(cls); for(i=0;iCOUNT;i+) if(personi.id=id) break; for(j=i;jCOUNT;j+) personj=personj+1; COUNT-; write_file(); if(FLAG_pause=0) system(pause);void management_employee() /管理员工信息总函数 i
16、nt choice; int id; struct employee someone; printf(nttttt员工信息管理n); printf(nt1.输入员工信息t); printf(2.输出员工信息t); printf(3.插入员工信息t); printf(4.删除员工t); printf(5.返回主菜单n); printf(nt请选择(15):t); start: scanf(%d,&choice); if(choice6) printf(t输入错误,请重输:t); goto start; switch(choice) case(1): input_employee(); break
17、; case(2): output_employee(); break; case(3): printf(ttt插入新员工信息n); printf(ttt请输入员工的:ntttIDt姓名t部门n); printf(ttt); scanf(%d%s%s,&someone.id,,someone.department); insert_employee(someone); break; case(4): printf(ttt删除员工信息n); printf(t请输入要删除的员工ID:t); scanf(%d,&id); delete_employee(id); break;
18、 case(5): break; /计算日期对应的文件名,相当于哈希函数,以一年内为界,一年以天计算int computer(struct date someday) int i; int days=0; if(someday.month=BASE_DATA.month) days=someday.day-BASE_DATA.day+1; else for(i=BASE_DATA.month+1;isomeday.month;i+) switch(i) case 2: days=days+28; case 3: days=days+31; case 4: days=days+30; case
19、5: days=days+31; case 6: days=days+30; case 7: days=days+31; case 8: days=days+31; case 9: days=days+30; case 10: days=days+31; case 11: days=days+30; days=days+someday.day; return days;/记录每天每个员工的考勤情况void recorder() int i; int late; int early; int id; int days; char name20; char filename40; /零时存放某一天
20、的考勤文件的文件名 FILE *fp; /指向某一天的考勤文件的指针 struct date current_date; system(cls); read_file(); printf(ntttt考勤记录n); printf(ntt日期:); 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(filen
21、ame,w); fprintf(fp,%dt%dt%dn,current_date.year,current_date.month,current_date.day); printf(nttIDt姓名t迟到t早退n); fprintf(fp,IDt姓名t迟到t早退n); for(i=0;iCOUNT;i+) /对所有的员工打考勤,并写入对应的文件中 id=personi.id; strcpy(name,); printf(ntt%dt%st,id,name); scanf(%d%d,&late,&early); fprintf(fp,%dt%st%dt%dn,id,na
22、me,late,early); fprintf(fp,n); fclose(fp); system(pause);/统计所有员工某段时间的考勤情况,把统计结果输入文件中void statistic() int i; int j; int k=0; int status=0; /标识,用于判断一个从文件中读入的新记录是否在存中存在,如果不存在则新分配内存,否则追加在已有的记录上 int begin_page; int end_page; char save; /判断是否保存 char filename40; /零时存放某一天的考勤文件的文件 int year; int month; int da
23、y; char ID20; char name20; char late20; char early20; FILE *fp; /指向某一天的考勤文件的指针 struct date begin; /统计的起始日期,最终日期,只能统计连续一段时间的考勤 struct date end; struct statistic temp; /存储零时的 struct statistic stat30; /存储每个员工的迟到,早退次数的信息 for(i=0;i30;i+) stati.early_count=0; stati.late_count=0; system(cls); printf(ttt统计员
24、工考勤n); printf(nt请输入起止日期n); printf(ntt起始日期:); scanf(%d%d%d,&begin.year,&begin.month,&begin.day); printf(ntt终止日期:); 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)
25、; 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,&statk.id,,&statk.late_count,&statk.early_count); k+; k-; else while(!feof(fp) fscanf(fp,%d%s%d%d,&temp.id,,&temp.late_count,&temp.early_coun
26、t); for(j=0;jk;j+) if(temp.id=statj.id) status=1; if(temp.late_count=1) statj.late_count+; if(temp.early_count=1) statj.early_count+; break; if(status=0) statk.id=temp.id; strcpy(,); statk.late_count=temp.late_count; statk.early_count=temp.early_count; k+; status=0; printf(n); fcl
27、ose(fp); printf(ntt考勤统计n); printf(tIDt姓名t迟到次数t早退次数n); for(j=0;jk;j+) printf(t%dt%st%dtt%dn,statj.id,,statj.late_count,statj.early_count); printf(ttt是否保存(y/n):t); save=getch(); if(save=y) printf(请输入文件名;t); scanf(%s,filename); fp=fopen(filename,w); fprintf(fp,t考勤统计n); fprintf(fp,IDt姓名t迟到次数t早
28、退次数n); for(j=0;jk;j+) fprintf(fp,%dt%st%dtt%dn,statj.id,,statj.late_count,statj.early_count); fclose(fp); system(pause);/查询某一天的考勤情况void single_quire() int key; int id; int flag=0; /判断记录是否为空 int choice; int year,month,day; char ID20; char name20; char late20; char early20; char filename20;
29、struct date oneday; struct attendance atten; FILE *fp; system(cls); printf(ttt查询某一天的考勤n); printf(nt请输入日期:t); scanf(%d%d%d,&oneday.year,&oneday.month,&oneday.day); key=computer(oneday); itoa(key,filename, 10); /int转换成string strcat(filename,.txt); fp=fopen(filename,r); fscanf(fp,%d%d%d%s%s%s%s,&year,&
30、month,&day,ID,name,late,early); printf(nt1.查询全体员工考勤t); printf(2.按ID查询t); printf(3.按姓名查询t); printf(4.返回主菜单n); printf(nt请选择(14):t); start: scanf(%d,&choice); if(choice4) printf(t输入错误,请重输:t); goto start; switch(choice) case(1): printf(tttIDt姓名t迟到t早退n); while(!feof(fp) fscanf(fp,%d%s%d%d,&atten.id,atten
31、.name,&atten.late,&atten.early); printf(ttt%dt%st%dt%dn,atten.id,,atten.late,atten.early); break; case(2): printf(t请输入ID:t); scanf(%d,&id); printf(tttIDt姓名t迟到t早退n); while(!feof(fp) fscanf(fp,%d%s%d%d,&atten.id,,&atten.late,&atten.early); if(atten.id=id) flag=1; printf(ttt%dt%st%d
32、t%dn,atten.id,,atten.late,atten.early); break; if(flag=0) printf(t对不起,没有此ID 的员工,谢谢!n); break; case(3): printf(t请输入姓名:t); scanf(%s,name); printf(tttIDt姓名t迟到t早退n); while(!feof(fp) fscanf(fp,%d%s%d%d,&atten.id,,&atten.late,&atten.early); if(strcmp(,name)=0) flag=1; printf(
33、ttt%dt%st%dt%dn,atten.id,,atten.late,atten.early); break; if(flag=0) printf(t对不起,没有此姓名的员工,谢谢!n); break; case(4): break; fclose(fp); system(pause);/查询一段连续时间的考勤情况void multi_quire() int begin_page,end_page,id; int i; int k; int flag=0; int choice; int year,month,day; char ID20; char name20; char late20; char early20; char filename20; struct date begin,end; struct attendance atten; FILE *fp; system(cls); printf(ttttt查询某一段时间的考勤n); printf(nt请输入起止日期n); printf(ntt起始日期:); scanf(%d%d%d,&begin.year,&b
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
评论
0/150
提交评论