职工考勤管理系统Word文档下载推荐.docx
- 文档编号:21566379
- 上传时间:2023-01-31
- 格式:DOCX
- 页数:37
- 大小:222.36KB
职工考勤管理系统Word文档下载推荐.docx
《职工考勤管理系统Word文档下载推荐.docx》由会员分享,可在线阅读,更多相关《职工考勤管理系统Word文档下载推荐.docx(37页珍藏版)》请在冰豆网上搜索。
4开发工具
C语言
3。
总体设计
3.1系统流设计
本系统的功能模块如图1所示,主要有以下模块:
图1系统功能模块图
3.2系统模块设计
1)系统欢迎界面:
构造函数voidwelcome(),实现欢迎使用职工考勤管理系统的显示。
2)主菜单界面:
构造函数intmenu_select(),实现系统主菜单的显示.
3)职工信息新建:
构造函数voidcreateInfo(),实现职工基本信息的录入及显示。
并可以通过函数voiddeleteRec()和voidmodifyRec(),实现对职工基本信息的删除和修改。
4)职工考勤录入:
构造函数voidcreateRec(),实现由主菜单选择通过工号和姓名两种方式职工上下班时间的录入.
5)职工考勤修改:
构造函数voidmodifyRec(),实现由主菜单选择通过工号和姓名两种方式对职工考勤以及基本信息的修改。
6)职工考勤删除:
构造函数voiddeleteRec(),实现由主菜单选择通过工号和姓名两种方式对职工考勤信息的删除。
7)职工考勤查询:
构造函数voidsearchRec(),实现对指定职工一周内上下班的时间的查询。
8)职工考勤浏览:
构造函数voidlistRec();
,实现所有职工一天中上下班的出勤情况的浏览.
9)密码重设:
构造函数voidresetPassword(),实现对初始密码888888的重设,并保存在文件中
10)保存所有信息:
构造函数voidsaveRec(),实现随时对考勤信息的保存。
4。
详细设计
1数据结构设计
根据系统要求,系统中需要保存的数据信息,其结构如下:
数据项名称
数据项系统表示
数据类型
数据长度
备注
工号
id
char
10个字符
姓名
name
小时
hour
int
4个字节
数组
分钟
minute
下一个节点地址
next
worker
worker为定义结构体
密码
password
16个字符
头指针
head
为了能实现不受限制的增加职工信息,采用链表的结构保存职工信息,在增加职工的基本信息时,创建一个职工信息的节点,将其插入到链表中,示意图如下。
为此,先声明一个类型为structworker的结构体,其成员为职工的考勤信息。
然后通过对指针、链表、文件等数据结构的操作,实现对职工考勤信息的录入,插入,存盘,查询,浏览,删除,修改等一系列操作。
还声明了一个结构体TIME,用于储存职工上下班的时间。
其中,结构体定义如下:
typedefstruct//结构体定义
{
inthour;
intminute;
}TIME;
typedefstructworker
{
charid[10];
charname[10];
TIMEtime[20];
structworker*next;
}worker;
4.2模块接口设计
1)所有函数模块声明如下:
intmenu_select();
//主菜单
voidwelcome();
//显示欢迎界面
voidcreateInfo();
//新建职工信息
voidcreateRec();
//录入考勤信息
voidlistRec();
//浏览当天考勤信息
voidsearchRec();
//查询考勤信息
voidsaveRec();
//保存所有信息
voiddeleteRec();
//删除考勤信息
voidmodifyRec();
//修改考勤信息
voidloadRec();
//加载文件信息
voidresetPassword();
//重设密码
2)并定义三个全局变量:
worker*head=NULL;
//链表头指针head
writeinfo_flag=0;
//信息保存标记
charpassword[16]="
888888”;
//密码保存
3)主要模块的实现
系统以主函数voidmain()为入口。
调用voidwelcome()函数,显示课程设计名称及作者信息。
然后调用voidloadRec()函数读取文件中的信息.
然后调用intmenu_select()函数,进入主菜单界面。
系统接收用户输入的选择,调用相应的函数,进入到下一级菜单进行相关工作.
4.3以下是几个主要模块的流程图:
1)主菜单函数:
图2主函数流程图
2)考勤查询函数:
图3信息查询流程图
3)
考勤删除函数:
图4考勤删除流程图
5.运行结果
5.1主菜单界面:
图5主菜单界面
输入功能选择,系统自动进入相应功能界面。
5。
2考勤录入界面:
图6信息录入界面
3考勤浏览界面:
图7全部信息浏览
5.4考勤查询界面:
从键盘中输入选择,可以按工号和姓名进行查询,并显示结果.
图8按姓名查询的结果
5.5信息修改界面:
从键盘中输入需要修改的信息代码,自动提示输入新的信息。
图9按工号修改的结果
6。
程序调试与测试
6.1程序调试
(1)各模块分别调试过程及结果.
(2)集成调试过程及结果。
(3)功能调试过程及结果
2程序测试
(1)输入初始密码后进入系统.首先选择‘0’新建4个职工信息。
分别为1aa;
2bb;
3cc;
4dd.
(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〉
conio.h>
malloc。
h>
time.h>
//所使用的头文件
typedefstruct//时间结构体定义
intminute;
typedefstructworker//职工结构体定义
charid[10];
charname[10];
TIMEtime[20];
structworker*next;
voidwelcome();
voidlistRec();
voidsaveRec();
voiddeleteRec();
voidmodifyRec();
voidloadRec();
writeinfo_flag=0;
charpassword[16]="
//初始密码
structtm*timeinfo;
intmain()//主函数
chars[16];
welcome();
//欢迎界面
loadRec();
//加载文件信息
printf("
\n提示:
\n\n初始密码为:
888888\n”);
//进入系统密码管理
\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:
createRec();
break;
case2:
system(”cls”);
listRec();
case3:
cls”);
searchRec();
case4:
deleteRec();
case5:
modifyRec();
case6:
saveRec();
case7:
resetPassword();
case8:
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);
\t\t**************选择菜单**************\t”);
//在菜单中显示当前时间
printf(”时间:
星期%d%2d:
%2d”,timeinfo-〉tm_wday,timeinfo—>
tm_hour,timeinfo—〉tm_min);
\n——-—---—-——--——-—-——---—-——-——--—--—--—-——-—-—---—--—--—-———————--—-—----—-”);
printf(”\t\t\t0。
新建职工信息\n"
);
printf(”\t\t1.录入考勤信息\n"
printf(”\t\t2。
浏览考勤信息\n”);
\t\t3。
查询考勤信息\n"
\t\t4。
删除考勤信息\n”);
printf(”\t\t5.修改考勤信息\n”);
printf(”\t\t6。
保存所有信息\n”);
printf(”\t\t7.重设密码\n"
\t\t8.退出(退出后信息会自动保存在磁盘中)\n\t\t(任何情况下按Ctrl+C退出程序)\n"
printf(”\n———--———————-—-——-—--—-----—--——-—-—--—---—-—————-———-—-———-—-——-—-——---—-—"
\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;
}
returnc;
voidloadRec()//从磁盘导入信息
worker*rear,*p,*pre;
FILE*fp,*key;
inti;
if((fp=fopen("
workerRec。
txt”,”r”))==NULL)//打开职工信息文件和密码文件
{
\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”);
feof(key))fscanf(key,”%s”,password);
fclose(fp);
fclose(key);
//关闭文件
return;
}
voidcreateInfo()//新建职工信息
worker*p,*rear;
inti,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!
rear=rear->
next;
system(”cls”);
printf(”\n\n请输入希望建立职工信息条数:
scanf("
%d”,&n);
if(n〈=0)
printf(”\n\n输入错误,建立信息条数至少为1条!
printf(”\n\n请按回车键返回主菜单重新开始!
\n”);
getchar();
system(”cls"
return;
printf(”\n请输入职工的工号(至多10个字符)和姓名(至多10个字符):
for(i=0;
i<
n;
p=(worker*)malloc(sizeof(worker));
%s%s"
,p—〉id,p—>
for(k=0;
k<
20;
k++)//时间初始化为88:
88
p—>
time[k].hour=88;
p->
time[k].minute=88;
head=p;
rear—〉next=p;
p—〉next=NULL;
printf(”\n%d条信息建立完毕!
\n\n请按回车键返回主菜单\n”,n);
getchar();
writeinfo_flag=1;
voidcreateRec()//录入考勤信息
time_tnowtime;
worker*p;
chars[10];
intc,m,week;
if(head==NULL)
printf(”\n\t\t\t不存在职工信息\n\n\t\t\t请按回车键返回主菜单新建职工信息!
system("
\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您的选择(以回车键结束):
%d”,&m);
system(”cls"
//可通过工号或姓名;
录入
\n\n\n\t\t\t请选择输入工号还是姓名:
\n\n\t\t\t1.选择输入工号\n\n\t\t\t2.选择输入姓名\n\n”);
scanf(”%d”,&
c);
switch(c)
case1:
{
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)!
p—〉next==NULL)
{
printf("
\n\n\n\n\t\t\t不存在该工号\n”);
printf(”\n\n\n\n\t\t\t请按回车键返回主菜单重新开始!
system(”cls"
return;
}
time(&
nowtime);
timeinfo=localtime(&nowtime);
week=timeinfo—>
tm_wday;
time[4*we
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 职工 考勤 管理 系统