员工考勤信息管理的设计和实现_第1页
员工考勤信息管理的设计和实现_第2页
员工考勤信息管理的设计和实现_第3页
员工考勤信息管理的设计和实现_第4页
员工考勤信息管理的设计和实现_第5页
已阅读5页,还剩58页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

1、63/63职员考勤信息治理的设计和实现系统描述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 so

5、meday) /计算日期对应的文件名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#in

6、clude #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 n

7、ame20;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.tx

8、t,w); 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,%d

9、t%st%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,&pe

10、rsonCOUNT.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(

11、nttttIDt姓名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%

13、dt%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(tt

14、tIDt姓名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)

15、system(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() /治理职员信息总函

16、数 int 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(); br

17、eak; 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); bre

18、ak; 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; ca

19、se 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(fi

21、lename,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

22、,name,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

23、 day; 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,.t

25、xt); 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_c

26、ount); 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);

27、fclose(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迟到次

28、数t早退次数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 filename2

29、0; 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,&yea

30、r,&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,at

31、,&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%s

32、t%dt%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; prin

33、tf(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

34、; 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,&begin.month,&begin.day); printf(ntt终止日期:); scanf(%d%d%d,&end.year,&end.month,&end.day); begin

35、_page=computer(begin); end_page=computer(end); 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): for(i=begin_page;i=end_page;i+) itoa(i,filename, 10); /int转换

36、成string strcat(filename,.txt); fp=fopen(filename,r); fscanf(fp,%d%d%d%s%s%s%s,&year,&month,&day,ID,name,late,early); printf(ttt%dt%dt%dnttt%st%st%st%sn,year,month,day,ID,name,late,early); while(!feof(fp) fscanf(fp,%d%s%d%d,&atten.id,,&atten.late,&atten.early); printf(ttt%dt%st%dt%dn,atten.

37、id,,atten.late,atten.early); fclose(fp); break; case(2): printf(nt请输入ID:t); scanf(%d,&id); printf(tttIDt姓名t迟到t早退n); for(k=begin_page;k=end_page;k+) itoa(k,filename, 10); /int转换成string strcat(filename,.txt); fp=fopen(filename,r); fscanf(fp,n%d%d%d%s%s%s%s,&year,&month,&day,ID,name,late,earl

38、y); 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%dt%dn,atten.id,,atten.late,atten.early); fclose(fp); if(flag=0) printf(t对不起,没有此ID的职员,感谢!n); break; case(3): printf(nt请输入姓名:t); scanf(%s,name); printf(tttIDt姓名t迟到t

39、早退n); for(k=begin_page;k=end_page;k+) itoa(k,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); /存放每个文件开头的相同信息 while(!feof(fp) fscanf(fp,%d%s%d%d,atten.id,,&atten.late,&atten.early); if(strcmp(

40、,name)=0) flag=1; printf(ttt%dt%st%dt%dn,atten.id,,atten.late,atten.early); fclose(fp); if(flag=0) printf(t对不起,没有此姓名的职员,感谢!n); break; case(4): break; system(pause);/查询的总函数void quire_attendance() int choice; system(cls); printf(ttttt查询职员考勤n); printf(nt1.查询某一天的考勤t); printf(t2.查询一段时刻的考勤t); pr

41、intf(t3.返回主菜单n); printf(nt请选择(13):t); start: scanf(%d,&choice); if(choice3) printf(t输入错误,请重输:t); goto start; switch(choice) case(1): single_quire(); break; case(2): multi_quire(); break; case(3): break; /考勤治理的总函数void management_attendance() int choice; printf(nttttt考勤信息治理n); printf(nt1.考勤记录t); printf(2.考勤统计t); printf(3.考勤查询t); printf(4.返回主菜单n); printf(nt请选择(14):t); start: scanf(%d,&choice); if(choice4) printf(t输入错误,请重输:t);

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论