当前位置:文档之家› 员工考勤信息管理的设计和实现

员工考勤信息管理的设计和实现

职员考勤信息治理的设计和实现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 姓名部门…. ….. …..例:2010 3 1ID 姓名部门11 张三安保部12 李四安保部2.2.2.存储职员考勤信息的文件:文件名:由日期通过变换后得到。

变换方式:(1)给整个系统设置一个基准日期基准日期:一段时期内的起始日期,通常规定为一个月的1号,考勤所记录的是基准日期之后的考勤信息.(2)考勤记录的日期与基准日期相差的天数加1。

由以上变换可得:基准日期的考勤的文件名为“1.txt”。

2.2.3.存储考勤一段时期的统计信息的文件:文件名:治理员自己输入。

文件内容:起始日期终止日期ID 姓名迟到次数早退次数……. ……例如:2010 4 1 2010 6 30ID 姓名迟到次数早退次数11 张三 1 212 李四 2 0各文件之间的关系:考勤文件是按照当天的职员信息文件的顺序依次记录。

在此把请假等排除在外不考虑。

2.3代码设计设计代码要紧包括: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 someday) //计算日期对应的文件名void recorder() //记录每天每个职员的考勤情况void statistic() //统计所有职员某段时刻的考勤情况,把统计结果输入文件中void single_quire() //查询某一天的考勤情况void multi_quire() //查询一段连续时刻的考勤情况void quire_attendance() //查询的总函数void management_attendance() //考勤治理的总函数2.4 程序代码#include "stdafx.h"#include<stdio.h>#include<stdlib.h>#include<string.h>#include "process.h"#include <conio.h>#define MAX_COUNT 30 //最大职员数struct employee //职员信息结构体{int id;char name[20];char department[20];};struct date //日期结构体{int year;int month;int day;};struct attendance //考勤结构体{int id;int late;int early;char name[20];struct date dat;};struct statistic //统计表结构体{int id;int late_count;int early_count;char name[20];};int COUNT=0; //记录职员的人数int FLAG_pause=1; //涉及插入,输出函数的联合操作时某些位置是否调用system(“pause”)struct employee person[MAX_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");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.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,,te mp.department);fprintf(fp2,"%d\t%s\t%s\n",temp.id,,temp.depar tment);printf("\t\t\t\t");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 file\n");exit(1);}while(!feof(fp)){fscanf(fp,"%d%s%s",&person[COUNT].id,person[COUNT].n ame,person[COUNT].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 file\n");exit(1);}fprintf(fp1,"\t\t\t\t 输入职员信息\n");printf("\n\t\t\t\tID\t姓名\t部门\n");for(i=0;i<COUNT;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);}//输出职员信息void output_employee(){int i;int id;int choice;char temp[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"); goto start;}。

相关主题