职工考勤管理系统_第1页
职工考勤管理系统_第2页
职工考勤管理系统_第3页
职工考勤管理系统_第4页
职工考勤管理系统_第5页
已阅读5页,还剩27页未读 继续免费阅读

下载本文档

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

文档简介

1、 职工考勤管理系统c语言程序设计课程设计报告课设题目: 考勤管理系统 专 业: 班 级: 姓 名: 成 绩: 完成日期: 指导教师: 目 录1.课程设计目的22.需求分析22.1要求22.2任务描述22.3运行环境22.4开发工具33.总体设计33.1系统流设计33.2系统模块设计44.详细设计54.1数据结构设计54.2模块接口设计64.3 以下是几个主要模块的流程图:75.运行结果95.1主菜单界面:95.2信息录入界面:95.3信息浏览界面:105.4 信息查询界面:105.5信息修改界面:116.程序调试与测试126.1程序调试126.2程序测试127.问题与不足138.建议139.编

2、程体会1310.程序源代码:1311.参考文献3012.用户使用手册301.课程设计目的1) 通过课程设计,加深对结构化程序设计思想的理解,能对系统功能进行分析,并设计合理的模块化结构。2) 通过课程设计,进一步掌握c语言中重要的数据结构。掌握并熟练运用指针、链表、结构体、文件等数据结构。3) 通过课程设计,提高程序开发能力,能运用合理的控制流编写清晰高效的程序。4) 通过课程设计,培养c语言知识运用和自学能力,真正的把课堂上获得的知识运用起来,培养自己对程序编写的兴趣,并能独立设计和实现一个小型系统。5) 通过课程设计,加强了自己的程序分析能力。2.需求分析2.1要求1) 遵循软件开发过程的

3、基本规范;能灵活应用,初步具备运用c程序解决实际问题的能力。2) 运用结构化程序设计方法,按照课程设计题目要求,完成包括需求分析、数据结构设计、概要设计、详细设计、编写代码、调试和测试c程序等过程。3) 学会利用数组、结构体、链表进行相关信息表示。4) 功能模块划分清晰,系统结构图符合功能操作要求,且有详尽的功能描述5) 各主要功能模块有详尽的流程图及描述,用函数的形式实现,且调用入口、功能、出口等关系正确。6) 所设计的c程序较好的可读性和可靠性;程序书写风格规范,注释清晰。7) 界面友好(良好的人机互交),凡需要输入信息时,都有较详尽的提示信息,并对输入信息有较完善的值域分析。8) 程序经

4、上机调试通过,不应出现语法型、功能型错误,并获得满意的结果。9) 学会通过各功能性测试用例测试程序的能力,尽可能避免原则性错误的出现。10) 掌握编写、调试和测试c语言程序的基本技巧,充分理解结构化程序设计的基本方法。11) c语言课程设计报告的内容反应实际设计过程,且符合格式要求,无抄袭现象。2.2任务描述此系统以对职工考勤为背景,提供对职工信息、上下班时间的新建、录入、编辑、查询、密码保护等功能。具体功能实现如下:1) 职工信息新建:实现职工工号以及姓名的录入功能,并能将其以文件形式加以保存。2) 考勤信息编辑:实现对职工上下时间的记录,并对指定职工的考勤信息进行删除或修改等功能。3) 考

5、情信息浏览:实现对全体职工当天迟到、早退、矿工、全勤的浏览功能。4) 查询功能:实现按工号或姓名查询职工一周的上下班时间的功能。5) 密码功能:实现对进入系统、修改和删除考勤信息的保护功能以及密码重设的功能。6) 系统以菜单方式工作,界面清晰,易于操作。2.3运行环境1) windowsxp/7系统2) vc+6.0编译环境2.4开发工具c语言3.总体设计3.1系统流设计 本系统的功能模块如图1所示,主要有以下模块:密码输入界面系统欢迎界面主菜单职工个人信息新建职工考勤信息录入职工考勤信息浏览退出(信息自动保存)职工考勤信息查询职工考勤信息修改密码重设功能保存所有信息职工考勤信息删除通过工号录

6、入通过姓名录入通过工号修改xiugai 通过姓名修改通过工号查询通过姓名查询通过工号删除通过姓名删除图1系统功能模块图3.2系统模块设计1) 系统欢迎界面:构造函数void welcome(),实现欢迎使用职工考勤管理系统的显示。2) 主菜单界面:构造函数int menu_select(),实现系统主菜单的显示。3) 职工信息新建:构造函数void createinfo(),实现职工基本信息的录入及显示。并可以通过函数void deleterec()和void modifyrec(),实现对职工基本信息的删除和修改。4) 职工考勤录入:构造函数void createrec(),实现由主菜单选择

7、通过工号和姓名两种方式职工上下班时间的录入。5) 职工考勤修改:构造函数void modifyrec(),实现由主菜单选择通过工号和姓名两种方式对职工考勤以及基本信息的修改。6) 职工考勤删除:构造函数void deleterec(),实现由主菜单选择通过工号和姓名两种方式对职工考勤信息的删除。7) 职工考勤查询:构造函数void searchrec(),实现对指定职工一周内上下班的时间的查询。8) 职工考勤浏览:构造函数void listrec();,实现所有职工一天中上下班的出勤情况的浏览。9) 密码重设:构造函数void resetpassword(),实现对初始密码888888的重设,

8、并保存在文件中10) 保存所有信息:构造函数void saverec(),实现随时对考勤信息的保存。4.详细设计4.1数据结构设计根据系统要求,系统中需要保存的数据信息,其结构如下:数据项名称数据项系统表示数据类型数据长度备注工号idchar10个字符姓名namechar10个字符小时hourint4个字节数组分钟minuteint4个字节数组下一个节点地址nextworker4个字节worker为定义结构体密码passwordchar16个字符头指针headworker4个字节worker为定义结构体为了能实现不受限制的增加职工信息,采用链表的结构保存职工信息,在增加职工的基本信息时,创建一

9、个职工信息的节点,将其插入到链表中,示意图如下。 职工信息1职工信息2通讯录信息1221职工信息3职工信息4为此,先声明一个类型为struct worker的结构体,其成员为职工的考勤信息。然后通过对指针、链表、文件等数据结构的操作,实现对职工考勤信息的录入,插入,存盘,查询,浏览,删除,修改等一系列操作。还声明了一个结构体time,用于储存职工上下班的时间。其中,结构体定义如下:typedef struct/结构体定义int hour;int minute;time;typedef struct workerchar id10;char name10;time time20;struct w

10、orker *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();/重设

11、密码2) 并定义三个全局变量:worker *head=null;/链表头指针headwriteinfo_flag=0;/信息保存标记char password16=888888;/密码保存3) 主要模块的实现系统以主函数void main()为入口。调用void welcome( )函数,显示课程设计名称及作者信息。然后调用void loadrec( )函数读取文件中的信息。然后调用int menu_select( )函数,进入主菜单界面。系统接收用户输入的选择,调用相应的函数,进入到下一级菜单进行相关工作。4.3 以下是几个主要模块的流程图:1) 主菜单函数:否打印主菜单接收用户选项是否合

12、法调用对应选项函数进入下一级菜单退出系统是否是是否为8打印时间图2 主函数流程图2) 考勤查询函数:按姓名查询接收姓名显示职工考勤信息打印信息查询子菜单接收用户选项按工号查询接收工号显示职工考勤信息判断为1或2为1为2图3 信息查询流程图删除成功打印信息子菜单输入密码判断密码错误正确选择输入工号或姓名工号姓名接收工号接收姓名删除成功3) 考勤删除函数:图4考勤删除流程图5.运行结果5.1主菜单界面:图5主菜单界面输入功能选择,系统自动进入相应功能界面。5.2考勤录入界面:图6 信息录入界面5.3考勤浏览界面:图7 全部信息浏览5.4 考勤查询界面: 从键盘中输入选择,可以按工号和姓名进行查询,

13、并显示结果。 图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的响应的位置。通过查询功能可

14、也查看他的时间。选择4输入初始密码删除1后,在查询可以看到aa不存在了密码修改测试:略。7.问题与不足(1) 系统对时间的识别方面比较的差,比如上午:8:00上班,12:30下班,而16:30的时候输入上午上班,系统还是会记为迟到。(2) 工号和姓名不能输入太长,不然整个屏幕的输出都会乱。(3) 必须每周周日开启系统的时候,才能初始化考勤信息。8.建议我觉得这个题目中有些要求不是很明确,程序刚开始里面的信息要怎么建立,职工是哪里来的啊,题目所给的功能中并没有要求要建立职工的档案,就给我职工是系统本来就有的感觉,我不需要去建立职工信息。在课设过程中我觉得老师和学生接触有点少啊,每个星期就见一次,

15、有些问题都不能及时的解决。9.编程体会通过这次做c语言课设,我发现这学期在老师那学的只是一些皮毛而已。编程的知识博大精深,还有许许多多的函数我都不知道,不会用,在今后自己还要不断的学习。这次我做的题目中就有一个要求要自动获取系统时间,当初看到这个我就苦恼了,最后还是在网上找到了time.h这个头文件的里面有相关的函数。课设中我遇到的最大的困难就是信息库的建立,之前总是想着把信息都存在文件中,系统在从中读取,可我自己有对文件不是很熟;之后我改变路径,先通过系统建立链表,在保存到文件中。通过这几天做课设,我体会到这个过程是艰辛并快乐着的,这个过程中充满了编程的乐趣。每次为如何把实际中的问题转化为计

16、算机可以识别的语言而苦恼、烦躁,不停的在图书馆和网上查找自己需要的资料,可是一旦自己把程序编出来了,并在计算机上运行通过,自己心里又是快乐的,有一种巨大的成就感回荡在心头,把坐在电脑前几个小时的苦和累都忘了。这次课设,是我自己第一次靠自己编出来的一个完整的程序,我会把这个程序一直的保存着,随着我今后在编程方面的学习加深,我会自己慢慢的改进它,让它见证我的成长历程。总言而之,这几天做课设我国的非常的充实,也让我学习到了很多。10.程序源代码:#include#include#include#include#include#include/所使用的头文件typedef struct/时间结构体定义

17、int hour;int minute;time;typedef struct worker /职工结构体定义char id10;char name10;time time20;struct worker *next;worker;int menu_select();/主菜单void welcome();void createinfo();/新建职工信息void createrec();/录入考勤信息void listrec();/浏览当天考勤信息void searchrec();/查询考勤信息void saverec();/保存所有信息void deleterec();/删除考勤信息void

18、 modifyrec();/修改考勤信息void loadrec();/加载文件信息void resetpassword();/重设密码worker *head=null;/链表头指针headwriteinfo_flag=0;/信息保存标记char password16=888888;/初始密码struct tm *timeinfo;int main()/主函数char s16;welcome(); /欢迎界面loadrec(); /加载文件信息printf(n提示:nn初始密码为:888888n);/进入系统密码管理printf(tttnnnnn请输入密码,进去系统(密码不超过15个字符):

19、);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();brea

20、k;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 选择错误,请按回车键返回后,重新输入(08)!);getchar();getchar();system(cls);break;return 0;/*选择菜单*/int menu_select()worker *p=hea

21、d;int c,k;time_t nowtime;time( &nowtime );timeinfo = localtime( &nowtime );printf(tt*选择菜单*t);/在菜单中显示当前时间printf(时间:星期%d %2d:%2d,timeinfo-tm_wday,timeinfo-tm_hour,timeinfo-tm_min);printf(n-);printf(ttt0.新建职工信息n);printf(tt1.录入考勤信息n);printf(tt2.浏览考勤信息n);printf(tt3.查询考勤信息n);printf(tt4.删除考勤信息n);printf(tt5

22、.修改考勤信息n);printf(tt6.保存所有信息n);printf(tt7.重设密码n);printf(tt8.退出(退出后信息会自动保存在磁盘中)ntt(任何情况下按ctrl+c退出程序)n);printf(n-);printf(nn 请输入您的选择(08):);scanf(%d,&c);if(timeinfo-tm_wday=0&p!=null)/每周周日所有考勤信息初始化for(k=0;ktimek.hour=88;p-timek.minute=88;return c;void loadrec()/从磁盘导入信息worker *rear,*p,*pre;file *fp,*key;

23、int i;if(fp=fopen(workerrec.txt,r)=null)/打开职工信息文件和密码文件printf(n提示:nn提取职工信息失败,文本无法打开或文件不存在!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;itimei.hour,&p-timei.minute);if(head=null)head

24、=p;pre=p;rear=p;elserear-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(nnnnttt职工信息数据库已存在nnttt新建职工信息将续接在信息库的后面nnnttt按回车键继续);getchar();getchar(

25、);rear=head;while(rear-next!=null)rear=rear-next;system(cls);printf(nn请输入希望建立职工信息条数:);scanf(%d,&n);if(n=0)printf(nn输入错误,建立信息条数至少为1条!n);printf(nn请按回车键返回主菜单重新开始!n);getchar();getchar();system(cls);return;printf(n请输入职工的工号(至多10个字符)和姓名(至多10个字符):n);for(i=0;iid,p-name);for(k=0;ktimek.hour=88;p-timek.minute=

26、88;if(head=null)head=p;rear=p;elserear-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;int c,m,week;if(head=null)printf(nttt不存在职工信息nnttt请按回车键返回主菜单新建职工信息!);getchar();getchar()

27、;system(cls);return;printf(nnnttt请选择录入考勤种类:nnttt1.上午上班(8:00)nnttt2.上午下班(11:30)nnttt3.下午上班(2:00)nnttt4.下午下班(5:30)nn);printf(ntt您的选择(以回车键结束):);scanf(%d,&m);system(cls);/可通过工号或姓名;录入printf(nnnttt请选择输入工号还是姓名:nnttt1.选择输入工号nnttt2.选择输入姓名nn);printf(ntt您的选择(以回车键结束):);scanf(%d,&c);system(cls);switch(c)case 1:p

28、rintf(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);return;time( &nowtime );timeinfo = localtime( &nowtime );week=timeinfo-tm_wday;p-time

29、4*week+m-5.hour=(timeinfo-tm_hour);/存储时间p-time4*week+m-5.minute=(timeinfo-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);getchar();getchar

30、();system(cls);return;time( &nowtime );timeinfo = localtime( &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()/

31、浏览当天的考勤信息worker *p=head;int m,week;week=timeinfo-tm_wday;if(head=null)printf(n不存在职工信息nn请按回车键返回主菜单新建职工信息!);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.hour8&p-time(week-1)*4.

32、hourtime(week-1)*4.hour=8&p-time(week-1)*4.minute0)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.hourtime(week-1)*4.hour!=0)|(p-time(week-1)*4+1.hour=11&p-time(week-1)*4+1.minutetime(week-1)*4+2.hour14&p-time(week-1)*4+2.h

33、ourtime(week-1)*4+2.hour=14&p-time(week-1)*4+2.minute0)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.hourtime(week-1)*4+2.hour!=0)|(p-time(week-1)*4+3.hour=17&p-time(week-1)*4+3.minutenext;printf(nn显示完毕,按回车键返回主菜单!);get

34、char();getchar();system(cls);return;void searchrec()/根据工号或姓名查找考勤信息worker *p=head;int c,i;char s10;if(head=null)printf(n不存在职工信息nn请按回车键返回主菜单新建职工信息!);getchar();getchar();system(cls);return;printf(nnnttt请选择输入工号还是姓名:nnttt1.选择输入工号nnttt2.选择输入姓名nn);printf(ntt您的选择(以回车键结束):);scanf(%d,&c);system(cls);switch(c)

35、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(nnnnttt不存在该工号n);printf(nnnnttt请按回车键返回主菜单重新开始!n);getchar();getchar();system(cls);return;break;case 2:printf(nnnnnnttt请输入姓名(以回车键结束):);scanf(%s,s);for(p=head;st

36、rcmp(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);getchar();getchar();system(cls);return;break;system(cls);printf(职工号姓名 上午上班 上午下班 下午上班 下午下班nn);printf( %s%s,p-id,p-name);printf(周一);for(i=0;itimei.hour=88)printf( -:- );if

37、(p-timei.hour!=88)printf( %2d:%2d ,p-timei.hour,p-timei.minute);if(i=4)printf(nn);printf(n 周二);for(i=4;itimei.hour=88)printf( -:- );if(p-timei.hour!=88)printf( %2d:%2d ,p-timei.hour,p-timei.minute);if(i=8)printf(nn);printf(n 周三);for(i=8;itimei.hour=88)printf( -:- );if(p-timei.hour!=88)printf( %2d:%2

38、d ,p-timei.hour,p-timei.minute);if(i=12)printf(nn);printf(n 周四);for(i=12;itimei.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(i=16;itimei.hour=88)printf( -:- );if(p-timei.hour!=88)printf( %2d:%2d ,p-timei.hour,p-timei.minu

39、te);if(i=20)printf(nn);printf(nnnnnnttt显示完毕,按回车键返回主菜单!);getchar();getchar();system(cls);return;void saverec()/储存所有信息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

40、)=null|(key=fopen(key.txt,w)=null)printf(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;itimei.hour,p-timei.minute);p=p-next;fprintf(key,%s,password);fclose(fp),fclose(key);writeinfo_flag=0;/消除改动标志printf(n

41、nnnnttt保存完毕,按回车键继续!);getchar();getchar();system(cls);return;void deleterec()/删除考勤信息worker *p,*pre=head;char s16;int c;if(head=null)printf(n不存在职工信息nn请按回车键返回主菜单新建职工信息!);getchar();getchar();system(cls);return;printf(nnnttt提示:nnttt初始密码为:888888n);printf(nnnttt请输入密码(密码不超过15个字符):);scanf(%s,s);while(strcmp(

42、password,s)!=0)printf(nnnttt密码错误!nn);printf(ttt按回车键返回主菜单!);getchar();getchar();system(cls);return;printf(nnnttt密码输入成功!nnttt请按回车键继续);getchar();getchar();system(cls);printf(nnnttt请选择输入工号还是姓名:nnttt1.选择输入工号nnttt2.选择输入姓名nn);printf(ntt您的选择(以回车键结束):);scanf(%d,&c);system(cls);switch(c)case 1:printf(nnnnnnttt请输入工号:);scanf(%s,s);for(p=head;strcmp(p-id,s)!=0&p-next!=null;

温馨提示

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

评论

0/150

提交评论