考勤管理系統(tǒng)源代碼_第1頁
考勤管理系統(tǒng)源代碼_第2頁
考勤管理系統(tǒng)源代碼_第3頁
考勤管理系統(tǒng)源代碼_第4頁
考勤管理系統(tǒng)源代碼_第5頁
已閱讀5頁,還剩16頁未讀, 繼續(xù)免費閱讀

下載本文檔

版權說明:本文檔由用戶提供并上傳,收益歸屬內容提供方,若內容存在侵權,請進行舉報或認領

文檔簡介

1、#include<stdio.h>#include<string.h>#include<stdlib.h>#include<conio.h>#include<malloc.h>#include<time.h>/*所使用的頭文件*/typedef struct/*時間結構體定義*/int hour;int minute;TIME;typedef struct worker /*職工結構體定義*/char id10;char name10;TIME time20;struct worker *next;worker;int m

2、enu_select();/*主菜單*/void welcome();/*歡迎界面*/void createInfo();/*新建職工信息*/void createRec();/*錄入考勤信息*/void listRec();/*瀏覽當天考勤信息*/void searchRec();/*/查詢考勤信息*/void saveRec();/*保存所有信息*/void deleteRec();/*刪除考勤信息*/void modifyRec();/*修改考勤信息*/void loadRec();/*加載文件信息*/void resetPassword();/*重設密碼*/int fun();/*判斷

3、輸入選擇是否正確*/worker *head=NULL;/*鏈表頭指針head*/writeinfo_flag=0;/*信息保存標記*/char password16="888888"/*初始密碼*/struct tm *timeinfo;int main()/*主函數(shù)*/char s16;welcome(); /*歡迎界面*/loadRec(); /*加載文件信息*/printf("n提示:nn初始密碼為:888888n");/*進入系統(tǒng)密碼管理*/printf("tttnnnnn請輸入密碼,進去系統(tǒng)(密碼不超過15個字符):");

4、scanf("%s",s);while(strcmp(password,s)!=0)printf("n密碼錯誤,請重新輸入:");scanf("%s",s);system("cls");for(;)/*菜單循環(huán)*/switch(menu_select()case 0:system("cls");createInfo();break;case 1:system("cls");createRec();break;case 2:system("cls");lis

5、tRec();break;case 3:system("cls");searchRec();break;case 4:system("cls");deleteRec();break;case 5:system("cls");modifyRec();break;case 6:system("cls");saveRec();break;case 7:system("cls");resetPassword();break;case 8:system("cls");if(writei

6、nfo_flag=1)saveRec();return 0;default:printf("n 選擇錯誤,請按回車鍵返回后,重新輸入(08)!");getchar();getchar();system("cls");break;return 0;/*選擇菜單*/int menu_select()worker *p=head;int c,k;time_t nowtime;time( &nowtime );timeinfo = localtime( &nowtime );printf("tt*選擇菜單*t");/*在菜單中

7、顯示當前時間*/if(timeinfo->tm_wday=0)printf("時間:星期天");printf(" %d:%d",timeinfo->tm_hour,timeinfo->tm_min);elseprintf("時間:星期%d %d:%d",timeinfo->tm_wday,timeinfo->tm_hour,timeinfo->tm_min);printf("n-");printf("ttt0.新建職工信息n");printf("tt

8、1.錄入考勤信息n");printf("tt2.瀏覽考勤信息n");printf("tt3.查詢考勤信息n");printf("tt4.刪除考勤信息n");printf("tt5.修改考勤信息n");printf("tt6.保存所有信息n");printf("tt7.重設密碼n");printf("tt8.退出(退出后信息會自動保存在磁盤中)ntt(任何情況下按Ctrl+C退出程序)n");printf("n-");print

9、f("nn 請輸入您的選擇(08):");scanf("%d",&c);if(timeinfo->tm_wday=0&&p!=NULL)/*每周周日所有考勤信息初始化*/for(k=0;k<20;k+)p->timek.hour=88;p->timek.minute=88;return c;void loadRec()/*從磁盤導入信息*/worker *rear,*p,*pre;FILE *fp,*key;int i,pos=0;key=fopen("key.txt","r&

10、quot;);if(key!=NULL) fscanf(key,"%s",password);fclose(key);fp=fopen("workerRec.txt","r");if(fp!=NULL)fseek(fp, 0, SEEK_END);/*指針移到文件末尾*/pos= ftell(fp);if(fp=NULL|0 = pos)/*打開職工信息文件和密碼文件*/printf("nnnnnntt提示:nntt數(shù)據(jù)庫中沒有職工信息,文本為空或文件不存在!n");printf("ntt請按回車鍵進入主

11、菜單新建職工信息_n");getchar();system("cls");/*清屏*/return;fseek(fp, 0, SEEK_SET);/*指針移到文件開頭*/while(!feof(fp)/*fp不指向文件末尾*/p=(worker*)malloc(sizeof(worker);/*開辟一個新單元*/fscanf(fp,"%s%s",p->id,p->name);for(i=0;i<20;i+)fscanf(fp,"%d%d",&p->timei.hour,&p->t

12、imei.minute);if(head=NULL)head=p;pre=p;rear=p;elserear->next=p;pre=rear;rear=p;pre->next=NULL;fclose(fp);/*關閉文件*/return;void createInfo()/*新建職工信息*/worker *p,*rear;int i,k,n;char s10;if(head!=NULL)printf("nnnnnnnttt職工信息數(shù)據(jù)庫已存在nnttt新建職工信息將續(xù)接在信息庫的后面nnnttt按回車鍵繼續(xù)");getchar();getchar();rear

13、=head;while(rear->next!=NULL)rear=rear->next;system("cls");printf("nn請輸入希望建立職工信息條數(shù):");scanf("%s",s);if(fun(s)=0)return;elsen=atoi(s);printf("n請輸入職工的工號(至多6個字符)和姓名(至多5個字符):n");for(i=0;i<n;i+)p=(worker*)malloc(sizeof(worker);scanf("%s%s",p->

14、id,p->name);if(strlen(p->id)>6|strlen(p->name)>5)printf("n職工工號或姓名輸入長度不合法!nn請按回車鍵返回主菜單n",n);rear->next=NULL;free(p);getchar();getchar();system("cls");return;for(k=0;k<20;k+)/*時間初始化為88:88*/p->timek.hour=88;p->timek.minute=88;if(head=NULL)head=p;rear=p;els

15、erear->next=p;rear=p;p->next=NULL;printf("n%d條信息建立完畢!nn請按回車鍵返回主菜單n",n);getchar();getchar();system("cls");writeinfo_flag=1;return;void createRec()/*錄入考勤信息*/time_t nowtime;worker *p;char s10,k10,*g=k,ss10;int c,m,week;time( &nowtime );timeinfo = localtime( &nowtime );

16、week=timeinfo->tm_wday;if(head=NULL)printf("nnnnttt數(shù)據(jù)庫中沒有職工信息nnttt無法使用該功能nnttt請按回車鍵返回主菜單新建職工信息!");getchar();getchar();system("cls");return;if(timeinfo->tm_wday=6|timeinfo->tm_wday=0)printf("nnnnttt今天不是工作日nnttt無法錄入考勤信息nnttt請按回車鍵返回主菜單!");getchar();getchar();syste

17、m("cls");return;printf("nnnttt請選擇錄入考勤種類:nnttt1.上午上班(8:00)nnttt2.上午下班(11:30)nnttt3.下午上班(14:00)nnttt4.下午下班(17:30)nn");printf("ntt您的選擇(以回車鍵結束):");scanf("%s",k);if(fun(k)=0)return;elsem=atoi(k);if(m<1|m>4)printf("nntt輸入錯誤!nntt請按回車鍵返回主菜單重新開始!n");get

18、char();getchar();system("cls");return ;system("cls");if(m=1&&(timeinfo->tm_hour>11|(timeinfo->tm_hour=11&&timeinfo->tm_min>30)printf("nnnttt現(xiàn)在已經(jīng)過了上午下班的時間(11:30)nnttt無法錄入上班的時間(8:00)信息nnttt請按回車鍵返回主菜單");getchar();getchar();system("cls&qu

19、ot;);return;if(m=3&&(timeinfo->tm_hour>17|(timeinfo->tm_hour=17&&timeinfo->tm_min>30)printf("nnnttt現(xiàn)在已經(jīng)過了下午下班的時間(17:30)nnttt無法錄入上班的時間(14:00)信息nnttt請按回車鍵返回主菜單");getchar();getchar();system("cls");return;/*可通過工號或姓名;錄入*/printf("nnnttt請選擇輸入工號還是姓名:nn

20、ttt1.選擇輸入工號nnttt2.選擇輸入姓名nn");printf("ntt您的選擇(以回車鍵結束):");scanf("%s",ss);if(fun(ss)=0)return;elsec=atoi(ss);if(c<1|c>2)printf("nntt輸入錯誤!nntt請按回車鍵返回主菜單重新開始!n");getchar();getchar();system("cls");return ;system("cls");switch(c)case 1:printf(&qu

21、ot;nnnnnnttt請輸入工號(以回車鍵結束):");scanf("%s",s);for(p=head;strcmp(p->id,s)!=0&&p->next!=NULL;p=p->next);if(strcmp(p->id,s)!=0&&p->next=NULL)printf("nnnnttt不存在該工號n");printf("nnnnttt請按回車鍵返回主菜單重新開始!n");getchar();getchar();system("cls&quo

22、t;);return;if(m=2|m=4)&&p->time4*week+m-6.hour=88)printf("nnnnttt該職工無上班記錄,無法記錄下班信息,請先錄入上班信息n");printf("nnnnttt請按回車鍵返回主菜單重新開始!n");getchar();getchar();system("cls");return;p->time4*week+m-5.hour=(timeinfo->tm_hour);/*存儲時間*/p->time4*week+m-5.minute=(tim

23、einfo->tm_min);break;case 2:printf("nnnnnnttt請輸入姓名(以回車鍵結束):");scanf("%s",s);for(p=head;strcmp(p->name,s)!=0&&p->next!=NULL;p=p->next);if(strcmp(p->name,s)!=0&&p->next=NULL)printf("nnnnttt不存在該姓名n");printf("nnnnttt請按回車鍵返回主菜單重新開始!n&qu

24、ot;);getchar();getchar();system("cls");return;if(m=2|m=4)&&p->time4*week+m-6.hour=88)printf("nnnnttt該職工無上班記錄,無法記錄下班信息,請先錄入上班信息n");printf("nnnnttt請按回車鍵返回主菜單重新開始!n");getchar();getchar();system("cls");return;time( &nowtime );timeinfo = localtime( &

25、amp;nowtime );week=timeinfo->tm_wday;p->time4*week+m-5.hour=(timeinfo->tm_hour);p->time4*week+m-5.minute=(timeinfo->tm_min);break;system("cls");printf("nnnnnnttt考勤成功!請按回車鍵返回主菜單n");getchar();getchar();writeinfo_flag=1;system("cls");return;void listRec()/*瀏

26、覽當天的考勤信息*/worker *p=head;int m,week;week=timeinfo->tm_wday;if(head=NULL)printf("nnnnttt數(shù)據(jù)庫中沒有職工信息nnttt無法使用該功能nnttt請按回車鍵返回主菜單新建職工信息!");getchar();getchar();system("cls");return;if(timeinfo->tm_wday=6|timeinfo->tm_wday=0)printf("nnnnttt今天不是工作日,無考勤記錄nnttt無法瀏覽當天的考勤信息nntt

27、t請按回車鍵返回主菜單!");getchar();getchar();system("cls");return;printf("n職工今天整體出勤情況如下:nn");printf("職工號姓名上午上班上午下班下午上班下午下班n");while(p!=NULL)m=0;printf("n%s%s",p->id,p->name);if(p->time(week-1)*4.hour>8&&p->time(week-1)*4.hour<25)|(p->ti

28、me(week-1)*4.hour=8&&p->time(week-1)*4.minute>0)printf("遲到");/*上班時間之后來的都算遲到*/else if(p->time(week-1)*4.hour=88&&(timeinfo->tm_hour>11|(timeinfo->tm_hour=11&&timeinfo->tm_min>30)printf("曠工");/*過了下班時間就是曠工*/else if(p->time(week-1)*4

29、.hour=88&&(timeinfo->tm_hour<11|(timeinfo->tm_hour=8&&timeinfo->tm_min=30)printf("無記錄");/*下班之前還沒有來顯示無記錄*/else if(p->time(week-1)*4.hour!=88)printf(" ");m+;if(p->time(week-1)*4+1.hour<11&&p->time(week-1)*4.hour!=0)|(p->time(week-1

30、)*4+1.hour=11&&p->time(week-1)*4+1.minute<30)printf("早退");else printf(" ");m+;if(p->time(week-1)*4+2.hour>14&&p->time(week-1)*4+2.hour<25)|(p->time(week-1)*4+2.hour=14&&p->time(week-1)*4+2.minute>0)printf("遲到");else if(

31、p->time(week-1)*4+2.hour=88&&(timeinfo->tm_hour>17|(timeinfo->tm_hour=17&&timeinfo->tm_min>30)printf("曠工");else if(p->time(week-1)*4+2.hour=88&&(timeinfo->tm_hour<17|(timeinfo->tm_hour=17&&timeinfo->tm_min=30)printf("無記錄

32、");else if(p->time(week-1)*4+2.hour!=88)printf(" ");m+;if(p->time(week-1)*4+3.hour<17&&p->time(week-1)*4+2.hour!=0)|(p->time(week-1)*4+3.hour=17&&p->time(week-1)*4+3.minute<30)printf("早退");else printf(" ");m+;if(m=4&&(ti

33、meinfo->tm_hour>17|(timeinfo->tm_hour=17&&timeinfo->tm_min>30)printf(" 全勤!");p=p->next;printf("nn顯示完畢,按回車鍵返回主菜單!");getchar();getchar();system("cls");return;void searchRec()/*根據(jù)工號或姓名查找考勤信息*/worker *p=head;int c,i;char s10,k10;if(head=NULL)printf

34、("nnnnttt數(shù)據(jù)庫中沒有職工信息nnttt無法使用該功能nnttt請按回車鍵返回主菜單新建職工信息!");getchar();getchar();system("cls");return;printf("nnnttt請選擇輸入工號還是姓名:nnttt1.選擇輸入工號nnttt2.選擇輸入姓名nn");printf("ntt您的選擇(以回車鍵結束):");scanf("%s",k);if(fun(k)=0)return;elsec=atoi(k);if(c<1|c>2)print

35、f("nntt輸入錯誤!nntt請按回車鍵返回主菜單重新開始!n");getchar();getchar();system("cls");return ;system("cls");switch(c)case 1:printf("nnnnnnttt請輸入工號(以回車鍵結束):");scanf("%s",s);for(p=head;strcmp(p->id,s)!=0&&p->next!=NULL;p=p->next);if(strcmp(p->id,s)!

36、=0&&p->next=NULL)printf("nnnnttt不存在該工號n");printf("nnnnttt請按回車鍵返回主菜單重新開始!n");getchar();getchar();system("cls");return;break;case 2:printf("nnnnnnttt請輸入姓名(以回車鍵結束):");scanf("%s",s);for(p=head;strcmp(p->name,s)!=0&&p->next!=NULL;

37、p=p->next);if(strcmp(p->name,s)!=0&&p->next=NULL)printf("nnnnttt不存在該姓名n");printf("nnnnttt請按回車鍵返回主菜單重新開始!n");getchar();getchar();system("cls");return;break;system("cls");printf("職工號姓名 上午上班 上午下班 下午上班 下午下班nn");printf(" %s%s",p

38、->id,p->name);printf("周一");for(i=0;i<4;i+)if(p->timei.hour=88)printf(" -:- ");if(p->timei.hour!=88)printf(" %2d:%2d ",p->timei.hour,p->timei.minute);if(i=4)printf("nn");printf("n 周二");for(i=4;i<8;i+)if(p->timei.hour=88)prin

39、tf(" -:- ");if(p->timei.hour!=88)printf(" %2d:%2d ",p->timei.hour,p->timei.minute);if(i=8)printf("nn");printf("n 周三");for(i=8;i<12;i+)if(p->timei.hour=88)printf(" -:- ");if(p->timei.hour!=88)printf(" %2d:%2d ",p->timei.

40、hour,p->timei.minute);if(i=12)printf("nn");printf("n 周四");for(i=12;i<16;i+)if(p->timei.hour=88)printf(" -:- ");if(p->timei.hour!=88)printf(" %2d:%2d ",p->timei.hour,p->timei.minute);if(i=16)printf("nn");printf("n 周五");for(

41、i=16;i<20;i+)if(p->timei.hour=88)printf(" -:- ");if(p->timei.hour!=88)printf(" %2d:%2d ",p->timei.hour,p->timei.minute);if(i=20)printf("nn");printf("nnnnnnttt顯示完畢,按回車鍵返回主菜單!");getchar();getchar();system("cls");return;void saveRec()/*儲存

42、所有信息*/worker *p=head;FILE *fp,*key;int i;if(writeinfo_flag=0)printf("nnnnttt信息無改動,無需保存!nnttt請按回車鍵返回主菜單n");getchar();getchar();system("cls");return;if(writeinfo_flag=1)if(fp=fopen("workerRec.txt","w")=NULL|(key=fopen("key.txt","w")=NULL)prin

43、tf("nttt提示:nnttt存儲信息失敗!n");printf("nttt請按回車鍵進入主菜單重新開始n");getchar();getchar();system("cls");return;while(p!=NULL)fprintf(fp,"%sn%sn",p->id,p->name);for(i=0;i<20;i+)fprintf(fp,"%dn%dn",p->timei.hour,p->timei.minute);p=p->next;fprintf(

44、key,"%s",password);fclose(fp),fclose(key);writeinfo_flag=0;/*消除改動標志*/printf("nnnnnttt保存完畢,按回車鍵繼續(xù)!");getchar();getchar();system("cls");return;void deleteRec()/刪除考勤信息*/worker *p,*pre=head;char s16,k10;int c;if(head=NULL)printf("nnnnttt數(shù)據(jù)庫中沒有職工信息nnttt無法使用該功能nnttt請按回車鍵

45、返回主菜單新建職工信息!");getchar();getchar();system("cls");return;printf("nnnttt提示:nnttt初始密碼為:888888n");printf("nnnttt請輸入密碼(密碼不超過15個字符):");scanf("%s",s);while(strcmp(password,s)!=0)printf("nnttt密碼錯誤!nn");printf("ttt按回車鍵返回主菜單!");getchar();getchar

46、();system("cls");return;printf("nnnttt密碼輸入成功!nnttt請按回車鍵繼續(xù)");getchar();getchar();system("cls");printf("nnnttt請選擇輸入工號還是姓名:nnttt1.選擇輸入工號nnttt2.選擇輸入姓名nn");printf("ntt您的選擇(以回車鍵結束):");scanf("%s",k);if(fun(k)=0)return;elsec=atoi(k);if(c<1|c>

47、2)printf("nntt輸入錯誤!nntt請按回車鍵返回主菜單重新開始!n");getchar();getchar();system("cls");return ;system("cls");switch(c)case 1:printf("nnnnnnttt請輸入工號:");scanf("%s",s);for(p=head;strcmp(p->id,s)!=0&&p->next!=NULL;p=p->next);if(strcmp(p->id,s)!=

48、0&&p->next=NULL)printf("nnnnttt不存在該工號n");printf("nnnnttt請按回車鍵返回主菜單重新開始!n");getchar();getchar();system("cls");return;break;case 2:printf("nnnnnnttt請輸入姓名:");scanf("%s",s);for(p=head;strcmp(p->name,s)!=0&&p->next!=NULL;p=p->n

49、ext);if(strcmp(p->name,s)!=0&&p->next=NULL)printf("nnnnttt不存在該姓名n");printf("nnnnttt請按回車鍵返回主菜單重新開始!n");getchar();getchar();system("cls");return;break;system("cls");if(p=head)head=p->next;else for(;pre->next!=p;pre=pre->next);pre->next=

50、p->next;free(p);printf("nnnnnnttt刪除成功,請按回車鍵返回主菜單!");getchar();getchar();system("cls");writeinfo_flag=1;return;void modifyRec()/*修改考勤信息*/worker *p,*pre=head;char s16,k10;int c;if(head=NULL)printf("nnnnttt數(shù)據(jù)庫中沒有職工信息nnttt無法使用該功能nnttt請按回車鍵返回主菜單新建職工信息!");getchar();getchar

51、();system("cls");return;printf("nnnttt提示:nnttt初始密碼為:888888n");printf("nnnttt請輸入密碼(密碼不超過15個字符):");scanf("%s",s);if(strcmp(password,s)!=0)printf("nnnttt密碼錯誤!nn");printf("ttt按回車鍵返回主菜單!");getchar();getchar();system("cls");return;print

52、f("nnnttt密碼輸入成功!nnttt請按回車鍵繼續(xù)");getchar();getchar();system("cls");printf("nnnttt請選擇通過工號修改還是姓名修改:nnttt1.選擇輸入工號nnttt2.選擇輸入姓名nn");printf("nnntt您的選擇(以回車鍵結束):");scanf("%s",k);if(fun(k)=0)return;elsec=atoi(k);if(c<1|c>2)printf("nntt輸入錯誤!nntt請按回車鍵

53、返回主菜單重新開始!n");getchar();getchar();system("cls");return ;system("cls");switch(c)case 1:printf("nnnnnnttt請輸入工號:");scanf("%s",s);for(p=head;strcmp(p->id,s)!=0&&p->next!=NULL;p=p->next);if(strcmp(p->id,s)!=0&&p->next=NULL)printf

54、("nnnnttt不存在該工號n");printf("nnnnttt請按回車鍵返回主菜單重新開始!n");getchar();getchar();system("cls");return;break;case 2:printf("nnnnnnttt請輸入姓名:");scanf("%s",s);for(p=head;strcmp(p->name,s)!=0&&p->next!=NULL;p=p->next);if(strcmp(p->name,s)!=0&a

55、mp;&p->next=NULL)printf("nnnnttt不存在該姓名n");printf("nnnnttt請按回車鍵返回主菜單重新開始!n");getchar();getchar();system("cls");return;break;system("cls");printf("nnnttt請選擇要修改的內容:nnttt1.工號nnttt2.姓名nnttt3.上午上班時間nnttt4.上午下班時間nnttt5.下午上班時間nnttt6.下午下班時間");printf("nnntt您的選擇(以回車鍵結束):");scanf("%s",&k);if(fun(k)=0)return;elsec=atoi(k);if(c<1|c>6)printf("nntt輸入錯誤!nntt請按回車鍵返回主菜單重新開始!n");getchar();getchar();system("cls");return ;system("c

溫馨提示

  • 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內容里面會有圖紙預覽,若沒有圖紙預覽就沒有圖紙。
  • 4. 未經(jīng)權益所有人同意不得將文件中的內容挪作商業(yè)或盈利用途。
  • 5. 人人文庫網(wǎng)僅提供信息存儲空間,僅對用戶上傳內容的表現(xiàn)方式做保護處理,對用戶上傳分享的文檔內容本身不做任何修改或編輯,并不能對任何下載內容負責。
  • 6. 下載文件中如有侵權或不適當內容,請與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

評論

0/150

提交評論