考勤管理系统.docx
《考勤管理系统.docx》由会员分享,可在线阅读,更多相关《考勤管理系统.docx(25页珍藏版)》请在冰豆网上搜索。
考勤管理系统
#include
#include
#include
#include
#defineNUM10
intbc=0;/**/
structstudent
{
charnum[13];/*工号*/
charname[20];
intchidao;
intzaotui;
//intlate;
};
typedefstructnode
{
structstudentdata;
structnode*next;
}Node,*Link;
voidmenu()//菜单//
{
printf("================================================================================");
printf("-----------------------考勤系统-----------------------");
printf("================================================================================");
printf("\t\t\t\t1删除职工资料\t\t\t\t\n");
printf("\t\t\t\t2职工资料录入\t\t\t\t\n");
printf("\t\t\t\t3查询职工资料\t\t\t\t\n");
printf("\t\t\t\t4修改职工资料\t\t\t\t\n");
printf("\t\t\t\t5保存职工资料\t\t\t\t\n");
printf("\t\t\t\t6整体浏览\t\t\t\t\n");
printf("\t\t\t\t7题目要求\t\t\t\t\n");
printf("\t\t\t\t0退出\t\t\t\t\n");
}
//查询职工板块//
Node*search(Linkl,charfindmess[],charnameorcal[])/*该函数用于定位链表中符合要求的接点,并返回该指针*/
{
Node*r;
if(strcmp(nameorcal,"num")==0)/*按工号查询*/
{
r=l->next;
while(r!
=NULL)
{
if(strcmp(r->data.num,findmess)==0)//比较//
returnr;
r=r->next;
}
}
elseif(strcmp(nameorcal,"name")==0)/*按姓名查询*/
{
r=l->next;
while(r!
=NULL)
{
if(strcmp(r->data.name,findmess)==0)
returnr;
r=r->next;
}
}
return0;
}
voidQur1(Linkl)/*职工上班录入功能*/
{
intc;
charfindmess[20];
Node*p;
inth,s,y,d,mi;
charstr[20]="",m[4],w[4];
time_ttimep;
time(&timep);
strcpy(str,ctime(&timep));
printf("%s\n",str);
sscanf(str,"%s%s%d%d:
%d:
%d%d",w,m,&d,&h,&s,&mi,&y);
printf("%d:
%d:
%d\n",h,s,mi);
if(!
l->next)
{
printf("\n提示:
没有资料可以查询!
\n");
return;
}
printf("\n1按工号录入:
\n");
printf("\n2按姓名录入:
\n");
printf("\n请选择序号:
\n");
scanf("%d",&c);
if(c==1)/*工号*/
{
printf("请你输入要查找的工号:
");
scanf("%s",findmess);
p=search(l,findmess,"num");
if(p)
{
printf("\t\t\t\t录入结果\n");
printf("------------------------------------------------------------\n");
if(h>8&&h<12&&s>0&&s<30)
{
printf("他迟到了\n");
p->data.chidao++;
}
elseif(h>14&&h<18&&s>0&&s<30)
{
printf("他迟到了\n");
p->data.chidao++;
}
else
{
printf("休息时间\n");
}
}
else
{
printf("\n没有找到该职工!
");
}
}
elseif(c==2)/*姓名*/
{
printf("请你输入要查找的姓名:
");
scanf("%s",findmess);
p=search(l,findmess,"name");
if(p)
{
printf("\t\t\t\t查找结果\n");
printf("------------------------------------------------------------\n");
printf("%s---%s\n",p->data.num,p->data.name);
if(h>8&&h<12&&s>0&&s<30)
{
printf("他迟到了\n");
p->data.zaotui++;
}
elseif(h>14&&h<18&&s>0&&s<30)
{
printf("他迟到了\n");
p->data.zaotui++;
}
else
{
printf("休息时间\n");
}
}
else
{
printf("\n没有找到该职工!
");
}
}
else
printf("\n输入错误!
\n");
}
voidQur2(Linkl)/*职工下班录入功能*/
{
intc;
charfindmess[20];
Node*p;
inth,s,y,d,mi;
charstr[20]="",m[4],w[4];
time_ttimep;
time(&timep);
strcpy(str,ctime(&timep));
printf("%s\n",str);
sscanf(str,"%s%s%d%d:
%d:
%d%d",w,m,&d,&h,&s,&mi,&y);
printf("%d:
%d:
%d\n",h,s,mi);
if(!
l->next)
{
printf("\n提示:
没有资料可以查询!
\n");
return;
}
printf("\n1按工号录入:
\n");
printf("\n2按姓名录入:
\n");
printf("\n请选择序号:
\n");
scanf("%d",&c);
if(c==1)/*工号*/
{
printf("请你输入要查找的工号:
");
scanf("%s",findmess);
p=search(l,findmess,"num");
if(p)
{
printf("\t\t\t\t录入结果\n");
printf("------------------------------------------------------------\n");
if(h>8&&h<12&&s>0&&s<30)
{
printf("他早退了\n");
p->data.zaotui++;
}
elseif(h>14&&h<18&&s>0&&s<30)
{
printf("他早退了\n");
p->data.zaotui++;
}
else
{
printf("休息时间\n");
}
}
else
{
printf("\n没有找到该职工!
");
}
}
elseif(c==2)/*姓名*/
{
printf("请你输入要查找的姓名:
");
scanf("%s",findmess);
p=search(l,findmess,"name");
if(p)
{
printf("\t\t\t\t查找结果\n");
printf("------------------------------------------------------------\n");
printf("%s---%s\n",p->data.num,p->data.name);
if(h>8&&h<12&&s>0&&s<30)
{
printf("他早退了\n");
p->data.zaotui++;
}
elseif(h>14&&h<18&&s>0&&s<30)
{
printf("他早退了\n");
p->data.zaotui++;
}
else
{
printf("休息时间\n");
}
}
else
{
printf("\n没有找到该职工!
");
}
}
else
printf("\n输入错误!
\n");
}
voidfind(Linkl)
{
intc;
charfindmess[20];
Node*p;
if(!
l->next)
{
printf("\n提示:
没有资料可以查询!
\n");
return;
}
printf("\n1按工号查询:
\n");
printf("\n2按姓名查询:
\n");
printf("\n请选择序号:
\n");
scanf("%d",&c);
if(c==1)/*工号*/
{
printf("请你输入要查找的工号:
");
scanf("%s",findmess);
p=search(l,findmess,"num");
printf("%s---%s---%d---%d\n",p->data.name,p->data.num,p->data.chidao,p->data.zaotui);
}
elseif(c==2)/*姓名*/
{
printf("请你输入要查找的姓名:
");
scanf("%s",findmess);
p=search(l,findmess,"name");
printf("%s---%s---%d---%d\n",p->data.name,p->data.num,p->data.chidao,p->data.zaotui);
}
}
//删除职工板块//
voidDel(Linkl)
{
intc;
chara;
Node*p,*r,*p1;
charfindmess[20];
if(!
l->next)
{
printf("\n没有资料可以删除!
\n");
return;
}
printf("\n1按工号删除");
printf("\n2按姓名删除");
printf("\n请选择序号:
\n");
scanf("%d",&c);
if(c==1)
{
printf("请你输入要删除的工号:
");
scanf("%s",findmess);
getchar();
printf("是否将全部此工号的都删除?
(y/n)");
scanf("%c",&a);
if(a=='y'){
p=search(l,findmess,"num");
if(p)
{
while(p1!
=NULL){
p=search(l,findmess,"num");
r=l;
while(r->next!
=p)
r=r->next;//删除节点r//
r->next=p->next;
p1=search(l,findmess,"num");
}
free(p);
printf("\n提示:
该职工已经成功删除!
\n");
}
else
{
printf("没有该职工的信息\n");
}
}
}
if(a=='n'){
p=search(l,findmess,"num");
if(p)
{
r=l;
while(r->next!
=p)
r=r->next;//删除节点r//
r->next=p->next;
free(p);
printf("\n提示:
该职工已经成功删除!
\n");
}
else
{
printf("没有该职工的信息\n");
}
}
elseif(c==2)
{
printf("请你输入要删除的姓名:
");
scanf("%s",findmess);
p=search(l,findmess,"name");
if(p)
{
r=l;
while(r->next!
=p)
r=r->next;
r->next=p->next;
free(p);
printf("\n提示:
该职工已经成功删除!
\n");
bc=1;
}
else
{
printf("没有该职工的信息\n");
}
}
}
//修改职工板块//
voidModify(Linkl)
{
Node*p;
charfindmess[20];
if(!
l->next)
{
printf("\n=====>提示:
没有资料可以修改!
\n");
return;
}
printf("请你输入要修改的职工工号:
");
scanf("%s",findmess);
p=search(l,findmess,"num");
if(p)
{
printf("请你输入新职工工号:
",p->data.num);
scanf("%s",p->data.num);
printf("请你输入姓名:
");
scanf("%s",p->data.name);
printf("\n=====>提示:
资料修改成功!
\n");
bc=1;
}
else
printf("\n没有找到该职工!
");
}
voidDisp(Linkl)
{
Node*p;
p=l->next;
if(!
p)
{
printf("\n没有资料可以显示!
\n");
return;
}
printf("\t\t\t\t显示结果\n");
printf("------------------------------------------------------------\n");
printf("工号---姓名---迟到---早退");
printf("\n");
while(p)
{
printf("%s---%s---%d---%d\n",p->data.num,p->data.name,p->data.chidao,p->data.zaotui);
p=p->next;
}
printf("\n");
}
//保存//
voidSave(Linkl)
{
FILE*fp;
Node*p;
intflag=1,count=0;
fp=fopen("in.txt","w");
if(fp==NULL)
{
printf("\n重新打开文件时发生错误!
\n");
exit
(1);
}
p=l->next;
while(p)
{
fprintf(fp,"%s%s%d%d\n",p->data.num,p->data.name,p->data.chidao,p->data.zaotui);
p=p->next;
count++;
}
if(flag=1)
{
printf("\n文件保存成功.(有%d条记录已经保存.)\n",count);
bc=0;
}
fclose(fp);
}
//主函数//
intmain()
{
Linkl;/*链表*/
FILE*fp;/*文件指针*/
intc,j;
intn=0;//计数导入内存的数目//
charpassword[20],mima[20]={"123456\0"},mima2[20]={"123456\0"},x;
Node*p,*r,*p1;
l=(Node*)malloc(sizeof(Node));//创建一个空链表//
l->next=NULL;
r=l;
fp=fopen("123.txt","r");
if(fp==NULL)
{
printf("\n文件不存在");
}
while(!
feof(fp))
{
p=(Node*)malloc(sizeof(Node));
fscanf(fp,"%s%s%d%d",p->data.num,p->data.name,&p->data.chidao,&p->data.zaotui);
p->next=l->next;
l->next=p;/*将该接点挂入连中*/
n++;
}
fclose(fp);/*关闭文件*/
printf("记录导入完毕,共导入%d条记录.\n",n);
printf("职工信息如下\n");
while(p!
=NULL)
{
printf("%s--%s\n",p->data.name,p->data.num);
p=p->next;
}
while
(1)
{
menu();//菜单//
printf("请你选择操作:
");
scanf("%d",&c);
if(c==0)
{
if(bc==1)
{
getchar();
printf("\n资料已经改动,将改动保存到文件中\n");
Save(l);
}
printf("\n你已经退出系统!
\n");
break;
}
switch(c)
{
case1:
system("cls");
while
(1){
printf("请输入密码(正确为123456)");
scanf("%s",password);
getchar();
if(strcmp(password,mima)==0){
printf("是否修改密码?
(y/n)\n");
scanf("%c",&x);
if(x=='y'){
printf("输入新密码\n");
scanf("%s",mima);
getchar();
}
while
(1){
printf("要删除请再输入密码:
\n");
scanf("%s",password);
getchar();
if(strcmp(password,mima)==0)
Del(l);
break;
}
break;
}
else{
printf("密码错误\n");
}
}
break;/*删除职工*/
case2:
system("cls");
while
(1){
printf("输入录入方式的数字(1上班录入。
2下班录入):
");
scanf("%d",&j);
if(j<1||j>2)
printf("输入错误,请重新输入\n");
else
break;
}
if(j==1)
Qur1(l);
if(j==2)
Qur2(l);
break;/*职工资料录入*/
case3:
system("cls");
find(l);
break;
case4:
system("cls");
while
(1){
printf("请输入密码(正确为123456)");
scanf(