当前位置:文档之家› 职工考勤管理系统方案

职工考勤管理系统方案

C语言程序设计课程设计报告课设题目:考勤管理系统专业:班级: 姓名:成绩:完成日期: 指导教师:目录1.课程设计目的 (2)2.需求分析 (2)2.1要求 (2)2.2任务描述 (2)2.3运行环境 (2)2.4开发工具 (3)3.总体设计 (3)3.1系统流设计 (3)3.2系统模块设计 (4)4.详细设计 (5)4.1数据结构设计 (5)4.2模块接口设计 (6)4.3 以下是几个主要模块的流程图: (7)5.运行结果 (9)5.1主菜单界面: (9)5.2信息录入界面: (9)5.3信息浏览界面: (10)5.4 信息查询界面: (10)5.5信息修改界面: (11)6.程序调试与测试 (12)6.1程序调试 (12)6.2程序测试 (12)7.问题与不足 (13)8.建议 (13)9.编程体会 (13)10.程序源代码: (13)11.参考文献 (30)12.用户使用手册 (30)1.课程设计目的1)通过课程设计,加深对结构化程序设计思想的理解,能对系统功能进行分析,并设计合理的模块化结构。

2)通过课程设计,进一步掌握C语言中重要的数据结构。

掌握并熟练运用指针、链表、结构体、文件等数据结构。

3)通过课程设计,提高程序开发能力,能运用合理的控制流编写清晰高效的程序。

4)通过课程设计,培养C语言知识运用和自学能力,真正的把课堂上获得的知识运用起来,培养自己对程序编写的兴趣,并能独立设计和实现一个小型系统。

5)通过课程设计,加强了自己的程序分析能力。

2.需求分析2.1要求1)遵循软件开发过程的基本规;能灵活应用,初步具备运用C程序解决实际问题的能力。

2)运用结构化程序设计方法,按照课程设计题目要求,完成包括需求分析、数据结构设计、概要设计、详细设计、编写代码、调试和测试C程序等过程。

3)学会利用数组、结构体、链表进行相关信息表示。

4)功能模块划分清晰,系统结构图符合功能操作要求,且有详尽的功能描述5)各主要功能模块有详尽的流程图及描述,用函数的形式实现,且调用入口、功能、出口等关系正确。

6)所设计的C程序较好的可读性和可靠性;程序书写风格规,注释清晰。

7)界面友好(良好的人机互交),凡需要输入信息时,都有较详尽的提示信息,并对输入信息有较完善的值域分析。

8)程序经上机调试通过,不应出现语法型、功能型错误,并获得满意的结果。

9)学会通过各功能性测试用例测试程序的能力,尽可能避免原则性错误的出现。

10)掌握编写、调试和测试C语言程序的基本技巧,充分理解结构化程序设计的基本方法。

11)C语言课程设计报告的容反应实际设计过程,且符合格式要求,无抄袭现象。

2.2任务描述此系统以对职工考勤为背景,提供对职工信息、上下班时间的新建、录入、编辑、查询、密码保护等功能。

具体功能实现如下:1)职工信息新建:实现职工工号以及的录入功能,并能将其以文件形式加以保存。

2)考勤信息编辑:实现对职工上下时间的记录,并对指定职工的考勤信息进行删除或修改等功能。

3)考情信息浏览:实现对全体职工当天迟到、早退、矿工、全勤的浏览功能。

4)查询功能:实现按工号或查询职工一周的上下班时间的功能。

5)密码功能:实现对进入系统、修改和删除考勤信息的保护功能以及密码重设的功能。

6)系统以菜单方式工作,界面清晰,易于操作。

2.3运行环境1)WindowsXP/7系统2)VC++6.0编译环境2.4开发工具C语言3.总体设计3.1系统流设计本系统的功能模块如图1所示,主要有以下模块:图1系统功能模块图3.2系统模块设计1)系统欢迎界面:构造函数void welcome(),实现欢迎使用职工考勤管理系统的显示。

2)主菜单界面:构造函数int menu_select(),实现系统主菜单的显示。

3)职工信息新建:构造函数void createInfo(),实现职工基本信息的录入及显示。

并可以通过函数void deleteRec()和void modifyRec(),实现对职工基本信息的删除和修改。

4)职工考勤录入:构造函数void createRec(),实现由主菜单选择通过工号和两种方式职工上下班时间的录入。

5)职工考勤修改:构造函数void modifyRec(),实现由主菜单选择通过工号和两种方式对职工考勤以及基本信息的修改。

6)职工考勤删除:构造函数void deleteRec(),实现由主菜单选择通过工号和两种方式对职工考勤信息的删除。

7)职工考勤查询:构造函数void searchRec(),实现对指定职工一周上下班的时间的查询。

8)职工考勤浏览:构造函数void listRec();,实现所有职工一天中上下班的出勤情况的浏览。

9)密码重设:构造函数void resetPassword(),实现对初始密码888888的重设,并保存在文件中10)保存所有信息:构造函数void saveRec(),实现随时对考勤信息的保存。

4.详细设计4.1数据结构设计为了能实现不受限制的增加职工信息,采用链表的结构保存职工信息,在增加职工的基本信息时,创建一个职工信息的节点,将其插入到链表中,示意图如下。

为此,先声明一个类型为struct worker的结构体,其成员为职工的考勤信息。

然后通过对指针、链表、文件等数据结构的操作,实现对职工考勤信息的录入,插入,存盘,查询,浏览,删除,修改等一系列操作。

还声明了一个结构体TIME,用于储存职工上下班的时间。

其中,结构体定义如下:typedef struct //结构体定义{int hour;int minute;}TIME;typedef struct worker{char id[10];char name[10];TIME time[20];struct worker *next;}worker;4.2模块接口设计1)所有函数模块声明如下:int menu_select(); //主菜单void welcome(); //显示欢迎界面void createInfo(); //新建职工信息void createRec(); //录入考勤信息void listRec(); //浏览当天考勤信息void searchRec(); //查询考勤信息void saveRec(); //保存所有信息void deleteRec(); //删除考勤信息void modifyRec(); //修改考勤信息void loadRec(); //加载文件信息void resetPassword(); //重设密码2)并定义三个全局变量:worker *head=NULL; //链表头指针headwriteinfo_flag=0; //信息保存标记char password[16]="888888"; //密码保存3)主要模块的实现系统以主函数void main()为入口。

调用void welcome( )函数,显示课程设计名称及作者信息。

然后调用void loadRec( )函数读取文件中的信息。

然后调用int menu_select( )函数,进入主菜单界面。

系统接收用户输入的选择,调用相应的函数,进入到下一级菜单进行相关工作。

4.3 以下是几个主要模块的流程图:1)主菜单函数:图2 主函数流程图2)考勤查询函数:3)图4考勤删除流程图图3 信息查询流程图5.运行结果5.1主菜单界面:图5主菜单界面输入功能选择,系统自动进入相应功能界面。

5.2考勤录入界面:图6 信息录入界面5.3考勤浏览界面:图7 全部信息浏览5.4 考勤查询界面:从键盘中输入选择,可以按工号和进行查询,并显示结果。

图8 按查询的结果5.5信息修改界面:从键盘中输入需要修改的信息代码,自动提示输入新的信息。

图9 按工号修改的结果6.程序调试与测试6.1程序调试(1)各模块分别调试过程及结果。

(2)集成调试过程及结果。

(3)功能调试过程及结果6.2程序测试(1)输入初始密码后进入系统。

首先选择‘0’新建4个职工信息。

分别为1 aa;2 bb;3 cc;4 dd。

(2)建立信息后系统的各功能都可以使用。

输入‘2’,可以看到刚才新建的所有职工信息,由于还没有考勤,所以都显示为旷工。

选择‘1’,可以录入上午上班考勤信息,通过工号输入1,可以将现在的时间录入到职工号为1的响应的位置。

通过查询功能可也查看他的时间。

选择‘4’输入初始密码删除1后,在查询可以看到aa不存在了密码修改测试:略。

7.问题与不足(1)系统对时间的识别方面比较的差,比如上午:8:00上班,12:30下班,而16:30的时候输入上午上班,系统还是会记为迟到。

(2)工号和不能输入太长,不然整个屏幕的输出都会乱。

(3)必须每周周日开启系统的时候,才能初始化考勤信息。

8.建议我觉得这个题目中有些要求不是很明确,程序刚开始里面的信息要怎么建立,职工是哪里来的啊,题目所给的功能中并没有要求要建立职工的档案,就给我职工是系统本来就有的感觉,我不需要去建立职工信息。

在课设过程中我觉得老师和学生接触有点少啊,每个星期就见一次,有些问题都不能及时的解决。

9.编程体会通过这次做C语言课设,我发现这学期在老师那学的只是一些皮毛而已。

编程的知识博大精深,还有许许多多的函数我都不知道,不会用,在今后自己还要不断的学习。

这次我做的题目中就有一个要求要自动获取系统时间,当初看到这个我就苦恼了,最后还是在网上找到了time.h这个头文件的里面有相关的函数。

课设中我遇到的最大的困难就是信息库的建立,之前总是想着把信息都存在文件中,系统在从中读取,可我自己有对文件不是很熟;之后我改变路径,先通过系统建立链表,在保存到文件中。

通过这几天做课设,我体会到这个过程是艰辛并快乐着的,这个过程中充满了编程的乐趣。

每次为如何把实际中的问题转化为计算机可以识别的语言而苦恼、烦躁,不停的在图书馆和网上查找自己需要的资料,可是一旦自己把程序编出来了,并在计算机上运行通过,自己心里又是快乐的,有一种巨大的成就感回荡在心头,把坐在电脑前几个小时的苦和累都忘了。

这次课设,是我自己第一次靠自己编出来的一个完整的程序,我会把这个程序一直的保存着,随着我今后在编程方面的学习加深,我会自己慢慢的改进它,让它见证我的成长历程。

总言而之,这几天做课设我国的非常的充实,也让我学习到了很多。

10.程序源代码:#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 id[10];char name[10];TIME time[20];struct worker *next;}worker;int menu_select(); //主菜单void welcome();void createInfo(); //新建职工信息void createRec(); //录入考勤信息void listRec(); //浏览当天考勤信息void searchRec(); //查询考勤信息void saveRec(); //保存所有信息void deleteRec(); //删除考勤信息void modifyRec(); //修改考勤信息void loadRec(); //加载文件信息void resetPassword(); //重设密码worker *head=NULL; //链表头指针headwriteinfo_flag=0; //信息保存标记char password[16]="888888"; //初始密码struct tm *timeinfo;int main() //主函数{char s[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()){case 0:system("cls");createInfo();break;case 1:system("cls");createRec();break;case 2:system("cls");listRec();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(writeinfo_flag==1)saveRec();return 0;default:{printf("\n 选择错误,请按回车键返回后,重新输入(0~8)!");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("\t\t**************选择菜单**************\t");//在菜单中显示当前时间printf("时间:星期%d %2d:%2d",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;k<20;k++){p->time[k].hour=88;p->time[k].minute=88;}}return c;}void loadRec() //从磁盘导入信息{worker *rear,*p,*pre;FILE *fp,*key;int i;if((fp=fopen("workerRec.txt","r"))==NULL) //打开职工信息文件和密码文件{printf("\n提示:\n\n提取职工信息失败,文本无法打开或文件不存在!\n");printf("\n请按回车键进入主菜单新建职工信息^_^\n");getchar();system("cls"); //清屏return;}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->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;key=fopen("key.txt","r");while(!feof(key)) fscanf(key,"%s",password);fclose(fp);fclose(key); //关闭文件return;}void createInfo() //新建职工信息{worker *p,*rear;int i,n,k;if(head!=NULL){printf("\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("%d",&n);if(n<=0){printf("\n\n输入错误,建立信息条数至少为1条!\n");printf("\n\n请按回车键返回主菜单重新开始!\n");getchar();getchar();system("cls");return;}printf("\n请输入职工的工号(至多10个字符)和(至多10个字符):\n");for(i=0;i<n;i++){p=(worker*)malloc(sizeof(worker));scanf("%s%s",p->id,p->name);for(k=0;k<20;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;}void createRec() //录入考勤信息{time_t nowtime;worker *p;char s[10];int c,m,week;if(head==NULL){printf("\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.下午上班(2:00)\n\n\t\t\t4.下午下班(5:30)\n\n");printf("\n\t\t您的选择(以回车键结束):");scanf("%d",&m);system("cls");//可通过工号或;录入printf("\n\n\n\t\t\t请选择输入工号还是:\n\n\t\t\t1.选择输入工号\n\n\t\t\t2.选择输入\n\n");printf("\n\t\t您的选择(以回车键结束):");scanf("%d",&c);system("cls");switch(c){case 1:{printf("\n\n\n\n\n\n\t\t\t请输入工号(以回车键结束):");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("\n\n\n\n\t\t\t不存在该工号\n");printf("\n\n\n\n\t\t\t请按回车键返回主菜单重新开始!\n");getchar();getchar();system("cls");return;}time( &nowtime );timeinfo = localtime( &nowtime );week=timeinfo->tm_wday;p->time[4*week+m-5].hour=(timeinfo->tm_hour); //存储时间p->time[4*week+m-5].minute=(timeinfo->tm_min);break;}case 2:{printf("\n\n\n\n\n\n\t\t\t请输入(以回车键结束):");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("\\n\n\n\n\t\t\t不存在该\n");printf("\n\n\n\n\t\t\t请按回车键返回主菜单重新开始!\n");getchar();getchar();system("cls");return;}time( &nowtime );timeinfo = localtime( &nowtime );week=timeinfo->tm_wday;p->time[4*week+m-5].hour=(timeinfo->tm_hour);p->time[4*week+m-5].minute=(timeinfo->tm_min);break;}}system("cls");printf("\n\n\n\n\n\n\t\t\t考勤成功!请按回车键返回主菜单\n");getchar();getchar();writeinfo_flag=1;system("cls");return;}void listRec() //浏览当天的考勤信息{worker *p=head;int m,week;week=timeinfo->tm_wday;if(head==NULL){printf("\n不存在职工信息\n\n请按回车键返回主菜单新建职工信息!");getchar();getchar();system("cls");return;}printf("\n职工今天整体出勤情况如下(没有考勤一律视为旷工):\n\n");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->time[( week-1)*4].hour==8&&p->time[(week-1)*4].minute>0))printf(" 迟到");else if(p->time[(week-1)*4].hour==88)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->tim e[(week-1)*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->t ime[(week-1)*4+2].hour==14&&p->time[(week-1)*4+2].minute>0))printf(" 迟到");else if(p->time[(week-1)*4+2].hour==88)printf(" 旷工");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->t ime[(week-1)*4+3].hour==17&&p->time[(week-1)*4+3].minute<30))printf(" 早退");else {printf(" ");m++;}if(m==4)printf(" 全勤!");p=p->next;}printf("\n\n显示完毕,按回车键返回主菜单!");getchar();getchar();system("cls");return;}void searchRec() //根据工号或查找考勤信息{worker *p=head;int c,i;char s[10];if(head==NULL){printf("\n不存在职工信息\n\n请按回车键返回主菜单新建职工信息!");getchar();getchar();system("cls");return;}printf("\n\n\n\t\t\t请选择输入工号还是:\n\n\t\t\t1.选择输入工号\n\n\t\t\t2.选择输入\n\n");printf("\n\t\t您的选择(以回车键结束):");scanf("%d",&c);system("cls");switch(c){case 1:{printf("\n\n\n\n\n\n\t\t\t请输入工号(以回车键结束):");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("\n\n\n\n\t\t\t不存在该工号\n");printf("\n\n\n\n\t\t\t请按回车键返回主菜单重新开始!\n");getchar();getchar();system("cls");return;}break;}case 2:{printf("\n\n\n\n\n\n\t\t\t请输入(以回车键结束):");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("\n\n\n\n\t\t\t不存在该\n");printf("\n\n\n\n\t\t\t请按回车键返回主菜单重新开始!\n");getchar();getchar();system("cls");return;}break;}}system("cls");printf("职工号上午上班上午下班下午上班下午下班\n\n");printf(" %s %s",p->id,p->name);printf(" 周一");for(i=0;i<4;i++){if(p->time[i].hour==88)printf(" --:-- ");if(p->time[i].hour!=88)printf(" %2d:%2d ",p->time[i].hour,p->time[i].minute);if(i==4)printf("\n\n");}printf("\n 周二");for(i=4;i<8;i++){if(p->time[i].hour==88)printf(" --:-- ");if(p->time[i].hour!=88)printf(" %2d:%2d ",p->time[i].hour,p->time[i].minute);if(i==8)printf("\n\n");}printf("\n 周三");for(i=8;i<12;i++){if(p->time[i].hour==88)printf(" --:-- ");if(p->time[i].hour!=88)printf(" %2d:%2d ",p->time[i].hour,p->time[i].minute);if(i==12)printf("\n\n");}printf("\n 周四");for(i=12;i<16;i++){if(p->time[i].hour==88)printf(" --:-- ");if(p->time[i].hour!=88)printf(" %2d:%2d ",p->time[i].hour,p->time[i].minute);if(i==16)printf("\n\n");}printf("\n 周五");for(i=16;i<20;i++){if(p->time[i].hour==88)printf(" --:-- ");if(p->time[i].hour!=88)printf(" %2d:%2d ",p->time[i].hour,p->time[i].minute);if(i==20)printf("\n\n");}printf("\n\n\n\n\n\n\t\t\t显示完毕,按回车键返回主菜单!");getchar();getchar();system("cls");return;}void saveRec() //储存所有信息{worker *p=head;FILE *fp,*key;int i;if(writeinfo_flag==0){printf("\n\n\n\n\t\t\t信息无改动,无需保存!\n\n\t\t\t请按回车键返回主菜单\n");getchar();getchar();system("cls");return;}if(writeinfo_flag==1){if((fp=fopen("workerRec.txt","w"))==NULL||(key=fopen("key.txt","w"))==NU LL){printf("\n\t\t\t提示:\n\n\t\t\t存储信息失败!\n");printf("\n\t\t\t请按回车键进入主菜单重新开始\n");getchar();getchar();system("cls");return;}while(p!=NULL){fprintf(fp,"%s\n%s\n",p->id,p->name);for(i=0;i<20;i++)fprintf(fp,"%d\n%d\n",p->time[i].hour,p->time[i].minute);p=p->next;}fprintf(key,"%s",password);fclose(fp),fclose(key);writeinfo_flag=0; //消除改动标志printf("\n\n\n\n\n\t\t\t保存完毕,按回车键继续!");getchar();getchar();system("cls");return;}}void deleteRec() //删除考勤信息{worker *p,*pre=head;char s[16];int c;if(head==NULL){printf("\n不存在职工信息\n\n请按回车键返回主菜单新建职工信息!");getchar();getchar();system("cls");return;}printf("\n\n\n\t\t\t提示:\n\n\t\t\t初始密码为:888888\n");printf("\n\n\n\t\t\t请输入密码(密码不超过15个字符):");scanf("%s",s);while(strcmp(password,s)!=0){printf("n\n\n\t\t\t密码错误!\n\n");printf("\t\t\t按回车键返回主菜单!");getchar();getchar();system("cls");return;}printf("\n\n\n\t\t\t密码输入成功!\n\n\t\t\t请按回车键继续");getchar();getchar();system("cls");printf("\n\n\n\t\t\t请选择输入工号还是:\n\n\t\t\t1.选择输入工号\n\n\t\t\t2.选择输入\n\n");printf("\n\t\t您的选择(以回车键结束):");scanf("%d",&c);system("cls");switch(c){case 1:{printf("\n\n\n\n\n\n\t\t\t请输入工号:");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("\n\n\n\n\t\t\t不存在该工号\n");printf("\n\n\n\n\t\t\t请按回车键返回主菜单重新开始!\n");getchar();getchar();system("cls");return;}break;}case 2:{printf("\n\n\n\n\n\n\t\t\t请输入:");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("\n\n\n\n\t\t\t不存在该\n");printf("\n\n\n\n\t\t\t请按回车键返回主菜单重新开始!\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=p->next;}free(p);printf("\n\n\n\n\n\n\t\t\t删除成功,请按回车键返回主菜单!");getchar();getchar();system("cls");writeinfo_flag=1;return;}void modifyRec() //修改考勤信息{worker *p,*pre=head;char s[16];int c;if(head==NULL){printf("\n不存在职工信息\n\n请按回车键返回主菜单新建职工信息!");getchar();getchar();system("cls");return;}printf("\n\n\n\t\t\t提示:\n\n\t\t\t初始密码为:888888\n");printf("\n\n\n\t\t\t请输入密码(密码不超过15个字符):");scanf("%s",s);if(strcmp(password,s)!=0){printf("n\n\n\t\t\t密码错误!\n\n");printf("\t\t\t按回车键返回主菜单!");getchar();getchar();system("cls");return;}printf("\n\n\n\t\t\t密码输入成功!\n\n\t\t\t请按回车键继续");getchar();getchar();system("cls");printf("\n\n\n\t\t\t请选择通过工号修改还是修改:\n\n\t\t\t1.选择输入工号\n\n\t\t\t2.选择输入\n\n");printf("\n\n\n\t\t您的选择(以回车键结束):");scanf("%d",&c);system("cls");switch(c){case 1:{printf("\n\n\n\n\n\n\t\t\t请输入工号:");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("\n\n\n\n\t\t\t不存在该工号\n");printf("\n\n\n\n\t\t\t请按回车键返回主菜单重新开始!\n");getchar();getchar();system("cls");return;}break;}case 2:{printf("\n\n\n\n\n\n\t\t\t请输入:");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("\n\n\n\n\t\t\t不存在该\n");printf("\n\n\n\n\t\t\t请按回车键返回主菜单重新开始!\n");getchar();getchar();system("cls");return;}break;}}system("cls");printf("\n\n\n\t\t\t请选择要修改的容:\n\n\t\t\t1.工号\n\n\t\t\t2.\n\n\t\t\t3.上午上班时间\n\n\t\t\t4.上午下班时间\n\n\t\t\t5.下午上班时间\n\n\t\t\t6.下午下班时间");printf("\n\n\n\t\t您的选择(以回车键结束):");scanf("%d",&c);system("cls");switch(c){case 1:printf("\n\n\n\t\t\t请输入要修改的工号:");scanf("%s",p->id);break;case 2:printf("\n\n\n\t\t\t请输入要修改的:");scanf("%s",p->name);break;case 3:printf("\n\n\n\t\t\t请输入要修改星期几的考勤:");scanf("%d",&c);printf("\n\n\n\t\t\t请输入要修改的时间和分钟:");scanf("%d%d",&p->time[(c-1)*4].hour,&p->time[(c-1)*4].minute);break;case 4:printf("\n\n\n\t\t\t请输入要修改星期几的考勤:");scanf("%d",&c);printf("\n\n\n\t\t\t请输入要修改的时间和分钟:");scanf("%d%d",&p->time[(c-1)*4+1].hour,&p->time[(c-1)*4+1].minute);break;case 5:printf("\n\n\n\t\t\t请输入要修改星期几的考勤:");scanf("%d",&c);printf("\n\n\n\t\t\t请输入要修改的时间和分钟:");scanf("%d%d",&p->time[(c-1)*4+2].hour,&p->time[(c-1)*4+2].minute);break;case 6:printf("\n\n\n\t\t\t请输入要修改星期几的考勤:");scanf("%d",&c);printf("\n\n\n\t\t\t请输入要修改的时间和分钟:");scanf("%d%d",&p->time[(c-1)*4+3].hour,&p->time[(c-1)*4+3].minute);break;}printf("\n\n\n\t\t\t修改成功,请按回车键返回主菜单!");getchar();getchar();system("cls");writeinfo_flag=1;return;}void resetPassword() //重设密码{char s[16];if(head==NULL){printf("\n\n\n\n\n\t\t\t不存在职工信息\n\n\t\t\t请按回车键返回主菜单新建职工信息!");getchar();getchar();system("cls");return;}printf("\n\n\n\t\t提示:\n\n\t\t初始密码为:888888\n");printf("\n\t\t请输入密码(密码不超过15个字符):");scanf("%s",s);if(strcmp(password,s)!=0){printf("\n\n\n\t\t密码错误!\n\n");printf("\n\n\n\t\t按回车键返回主菜单!");getchar();getchar();system("cls");return;}printf("\n\n\t\t密码输入成功!\n\n\t\t请按回车键继续");getchar();getchar();system("cls");printf("\n\n\n\t请输入要修改的密码(密码不超过15个字符):");scanf("%s",s);strcpy(password,s);printf("\n\n\t修改成功,请按回车键返回主菜单!");getchar();getchar();system("cls");writeinfo_flag=1;return;}void welcome() //欢迎界面{printf("\n\n\n\n\n\n\n\t\t\t欢迎使用职工考勤管理系统");printf("\n\n\n\t\t\t请按任意键进入系统,开始您的操作");printf("\n\n\n\n\n\n\n\n\n\t\t\t\t\t\t\t作者:胡开喜T1123-7");getch();system("cls");return;}11.参考文献[1] 廖湖声.C程序设计案例教程.人民邮电,2010.9[2] 谭浩强.C程序设计(第2、3、4版).清华大学,2000.1.12.用户使用手册(1)该系统为职工考勤管理系统。

相关主题