#includestdio.h#includestring.h#includestdlib.h#includeconio.h#includemalloc.h#includetime.h/*所使用的头文件*/typedefstruct/*时间结构体定义*/{inthour;intminute;}TIME;typedefstructworker/*职工结构体定义*/{charid[10];charname[10];TIMEtime[20];structworker*next;}worker;intmenu_select();/*主菜单*/voidwelcome();/*欢迎界面*/voidcreateInfo();/*新建职工信息*/voidcreateRec();/*录入考勤信息*/voidlistRec();/*浏览当天考勤信息*/voidsearchRec();/*/查询考勤信息*/voidsaveRec();/*保存所有信息*/voiddeleteRec();/*删除考勤信息*/voidmodifyRec();/*修改考勤信息*/voidloadRec();/*加载文件信息*/voidresetPassword();/*重设密码*/intfun();/*判断输入选择是否正确*/worker*head=NULL;/*链表头指针head*/writeinfo_flag=0;/*信息保存标记*/charpassword[16]=888888;/*初始密码*/structtm*timeinfo;intmain()/*主函数*/{chars[16];welcome();/*欢迎界面*/loadRec();/*加载文件信息*/printf(\n提示:\n\n初始密码为:888888\n);/*进入系统密码管理*/printf(\t\t\t\n\n\n\n\n请输入密码,进去系统(密码不超过15个字符):);scanf(%s,s);while(strcmp(password,s)!=0){printf(\n密码错误,请重新输入:);scanf(%s,s);}system(cls);for(;;)/*菜单循环*/{switch(menu_select()){case0:system(cls);createInfo();break;case1:system(cls);createRec();break;case2:system(cls);listRec();break;case3:system(cls);searchRec();break;case4:system(cls);deleteRec();break;case5:system(cls);modifyRec();break;case6:system(cls);saveRec();break;case7:system(cls);resetPassword();break;case8:system(cls);if(writeinfo_flag==1)saveRec();return0;default:{printf(\n选择错误,请按回车键返回后,重新输入(0~8)!);getchar();getchar();system(cls);break;}}}return0;}/*选择菜单*/intmenu_select(){worker*p=head;intc,k;time_tnowtime;time(&nowtime);timeinfo=localtime(&nowtime);printf(\t\t**************选择菜单**************\t);/*在菜单中显示当前时间*/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(\t\t\t0.新建职工信息\n);printf(\t\t1.录入考勤信息\n);printf(\t\t2.浏览考勤信息\n);printf(\t\t3.查询考勤信息\n);printf(\t\t4.删除考勤信息\n);printf(\t\t5.修改考勤信息\n);printf(\t\t6.保存所有信息\n);printf(\t\t7.重设密码\n);printf(\t\t8.退出(退出后信息会自动保存在磁盘中)\n\t\t(任何情况下按Ctrl+C退出程序)\n);printf(\n---------------------------------------------------------------------------);printf(\n\n请输入您的选择(0~8):);scanf(%d,&c);if(timeinfo-tm_wday==0&&p!=NULL)/*每周周日所有考勤信息初始化*/{for(k=0;k20;k++){p-time[k].hour=88;p-time[k].minute=88;}}returnc;}voidloadRec()/*从磁盘导入信息*/{worker*rear,*p,*pre;FILE*fp,*key;inti,pos=0;key=fopen(key.txt,r);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(\n\n\n\n\n\n\t\t提示:\n\n\t\t数据库中没有职工信息,文本为空或文件不存在!\n);printf(\n\t\t请按回车键进入主菜单新建职工信息^_^\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;i20;i++)fscanf(fp,%d%d,&p-time[i].hour,&p-time[i].minute);if(head==NULL){head=p;pre=p;rear=p;}else{rear-next=p;pre=rear;rear=p;}}pre-next=NULL;fclose(fp);/*关闭文件*/return;}voidcreateInfo()/*新建职工信息*/{worker*p,*rear;inti,k,n;chars[10];if(head!=NULL){printf(\n\n\n\n\n\n\n\t\t\t职工信息数据库已存在\n\n\t\t\t新建职工信息将续接在信息库的后面\n\n\n\t\t\t按回车键继续);getchar();getchar();rear=head;while(rear-next!=NULL)rear=rear-next;system(cls);}printf(\n\n请输入希望建立职工信息条数:);scanf(%s,s);if(fun(s)==0)return;elsen=atoi(s);printf(\n请输入职工的工号(至多6个字符)和姓名(至多5个字符):\n);for(i=0;in;i++){p=(worker*)malloc(sizeof(worker));scanf(%s%s,p-id,p-name);if(strlen(p-id)6||strlen(p-name)5){printf(\n职工工号或姓名输入长度不合法!\n\n请按回车键返回主菜单\n,n);rear-next=NULL;free(p);getchar();getchar();system(cls);return;}for(k=0;k20;k++)/*时间初始化为88:88*/{p-time[k].hour=88;p-time[k].minute=88;}if(head==NULL){head=p;rear=p;}else{rear-next=p;rear=p;}}p-next=NULL;printf(\n%d条信息建立完毕!\n\n请按回车键返回主菜单\n,n);getchar();getchar();system(cls);writeinfo_flag=1;return;}voidcreateRec()/*录入考勤信息*/{time_tnowtime;worker*p;chars[10],k[10],*g=k,ss[10];intc,m,week;time(&nowtime);timeinfo=localtime(&nowtime);week=timeinfo-tm_wday;if(head==NULL){printf(\n\n\n\n\t\t\t数据库中没有职工信息\n\n\t\t\t无法使用该功能\n\n\t\t\t请按回车键返回主菜单新建职工信息!);getchar();getchar();system(cls);return;}if(timeinfo-tm_wday==6||timeinfo-tm_wday==0){printf(\n\n\n\n\t\t\t今天不是工作日\n\n\t\t\t无法录入考勤信息\n\n\t\t\t请按回车键返回主菜单!);getchar();getchar();system(cls);return;}printf(\n\n\n\t\t\t请选择录入考勤种类:\n\n\t\t\t1.上午上班(8:00)\n\n\t\t\t2.上午下班(11:30)\n\n\t\t\t3.下午上班(14:00)\n\n\t\t\t4.下午下班(17:30)\n\n);printf(\n\t\t您的选择(以回车键结束):);scanf(%s,k);if(fun(k)==0)return;elsem=atoi(k);if(m1||m4){printf(\n\n\t\t输入错误!\n\n\t\t请按回车键返回主菜单重新开始!\n);getchar();getchar();system(cls);return;}system(cls);if(m==1&&(timeinfo-tm_hour11||(timeinfo-tm_hour==11&&timeinfo-tm_min30))){printf(\n\n\n\t\t\t现在已经过了上午下班的时间(11:30)\n\n\t\t\t无法录入上班的时间(8:00)信息\n\n\t\t\t请按回车键返回主菜单);getchar();getchar();system(cls);return;}if(m==3&&(timeinfo-tm_hour17||(timeinfo-tm_hour==17&&timeinfo-tm_min30))){printf(\n\n\n\t\t\t现在已经过了下午下班的时间(17:30)\n\n\t\t\t无法录入上班的时间(14:00)信息\n\n\t\t\t请按回车键返回主菜单);getchar();getchar();system(cls);r