人员签到管理系统.docx

上传人:b****3 文档编号:720763 上传时间:2022-10-12 格式:DOCX 页数:51 大小:28.20KB
下载 相关 举报
人员签到管理系统.docx_第1页
第1页 / 共51页
人员签到管理系统.docx_第2页
第2页 / 共51页
人员签到管理系统.docx_第3页
第3页 / 共51页
人员签到管理系统.docx_第4页
第4页 / 共51页
人员签到管理系统.docx_第5页
第5页 / 共51页
点击查看更多>>
下载资源
资源描述

人员签到管理系统.docx

《人员签到管理系统.docx》由会员分享,可在线阅读,更多相关《人员签到管理系统.docx(51页珍藏版)》请在冰豆网上搜索。

人员签到管理系统.docx

人员签到管理系统

《我的第一个管理系统》

这是我的第一个人员签到签出管理系统。

A.可以实现的功能

1.用户注册(只要内存足够可以实现无穷多个用户注册)

2.用户签到记录用户员工是否迟到

3.用户签退记录用户员工是否早退

4.员工出勤情况查询(包括总共上班天数,迟到次数,早退次数)

B.我认为程序比较好的地方

1.如果内存可以系统可以让无穷多个用户实现注册。

2.可以让用户在任意时刻签到或者签退,并且如果内存足够可以实现无穷多次的签到或者签退,并且完整记录信息。

3.用户注册时候提供了注册名不会重复的功能,如果重复提示用户重新确定注册名。

4.在输入注册密码时让用户两次输入密码比较是否一样,如果不一样则提示用户密码不一致请重新输入。

5.所有密码在输入时全部以*回显,保证密码不会泄露。

6.每一步都有完整的提示指导用户操作,对每一种可能发生的情况都做了相应的处理(当然还会有我没有想到的情况)。

7.本程序是用纯C编写出来的,依靠的是链表指针操作,看起来不是很容易。

C.程序的主要思想

1.不用C++里面的类,完全用结构体来代替。

2.先创建一个用户emp结构体,用来作为横向链表的节点,存储用户名,用户密码等基本信息。

3.再创建一个day签到签退结构体用来作为竖向节点,用来记录用户每天签到情况。

4.总体就是一个用户就是一个链表,每注册一个用户就在横向链表里插入一个节点记录用户名等基本信息,然后就是每个横向节点又作为每个用户签到链表的头结点,这样签到一次就在该用户对应的横节点下插入一个节点记录该用户签到情况。

D.程序的不足之处

1.没有漂亮的界面,看起来不爽。

2.没有提供开除员工的取消用户注册的操作(其实也比较好实现,再多加一个函数就可以解决)。

(以实现)

3.程序中用到大量的goto语句,这里不提倡使用。

4.记录数据不是十分充分,但是随时可以扩充。

5.如果程序意外停止,那么所有数据全部丢失,所以本系统不是用来用的,是用来看的。

6.程序重复代码有好多,其实可以精简。

7《此程序最终可以实现回车重新输入密码》

《所有功能都实现了哈哈哈哈哈》

#include

#include

#include

#include

 

typedefstructdays

{

intstime;//上班时间

intgotime;//下班时间

charislate;//是否迟到Y为迟到N为没有迟到

charisgoearly;//是否早退

days*next;

}day;

typedefstructemplore

{

charjoin[20];//用户名

charsec[20];//用户密码

emplore*next;

day*next1;

}emp;

intfindjoin(emp*head,constchar*name)//通过用户名查找

{

charC;

while(head!

=NULL)

{

if(int(strcmp(head->join,name))==0)

{

printf("请输入用户密码:

\n");

return1;//查找到对应的用户名

}

else

{

head=head->next;

}

}

if(head==NULL)

{

printf("此用户名不存在,您现在需要注册吗?

Y注册,N不注册\n");

C=getche();

//scanf("%c",&C);

if(C=='Y')

return2;//需要注册

else

return3;//不需要注册

}

return0;

}

intinsert1(emp*&head,char*name,char*mima1)//用户注册时候需要的链表?

?

?

?

注意head要用引用哦!

{

emp*p;

p=(emp*)malloc(sizeof(emp));

if(p==NULL)

{

printf("注册失败\n");

return0;

}

else

printf("\n恭喜您注册成功\n");

strcpy(p->join,name);

strcpy(p->sec,mima1);

p->next=head;

p->next1=NULL;//重要的一步一定要初始化为NULL方便标记

head=p;

return0;

}

intfindmima(emp*head,constchar*name,constchar*mima1)//一定是在有用户名的情况下

{

while(head!

=NULL)

{

if(int(strcmp(head->join,name))==0)

{

if(strcmp(head->sec,mima1)==0)

{

printf("\n密码正确请选择签到还是签退:

\ne签到l签退t退出系统\n");//提供选项让用户选择签到还是签退

return0;

}

else

{

printf("\n密码错误请重新输入:

");

return1;

}

}

else

head=head->next;

}

return0;

}

intcometime(day*&p)//输入签早到信息并且处理信息

{

printf("请输入签早到时间,相信你是诚实的哦\n");

scanf("%d",&(p->stime));//这个地方一定要注意,这不是C++是纯C一定要注意啊

if(p->stime>8)

p->isgoearly='Y';

else

p->isgoearly='N';

p->islate='N';//实现分开处理的必要条件

printf("您已经完成签到\n");

return0;

}

intgoouttime(day*&p)//输入签退信息并且处理信息

{

printf("\n请输入签退时间,相信你是诚实的哦\n");

scanf("%d",&(p->gotime));

if(p->gotime<18)

p->islate='Y';

else

p->islate='N';

p->isgoearly='N';//实现分开处理的必要条件

printf("您已经完成签退\n");

return0;

}

intinsert2(emp*head,char*name,day*p)//找到本用户的头结点并插入,这里找到的head就是该用户的头结点

{

while(head!

=NULL)

{

if(int(strcmp(head->join,name))==0)

{

p->next=head->next1;

head->next1=p;

return0;

}

head=head->next;

}

return0;

}

intfindrec(emp*head,char*name)//查找用户信息

{

intrday=0,rlate=0,rearly=0;

day*p=NULL;

while(head!

=NULL)

{

if(int(strcmp(head->join,name))==0)

{

p=head->next1;

while(p!

=NULL)

{

rday++;//记录一共签到多少次

if(p->isgoearly=='Y')

rearly++;

if(p->islate=='Y')

rlate++;

p=p->next;

}

printf("总共有记录的条数:

%d\n",rday);

printf("总共有记录迟到的次数:

%d\n",rlate);

printf("总共有记录早退的次数:

%d\n",rearly);

return0;//这一步是必要的哦

}

head=head->next;//这一步不要忘记啊

}

return0;

}

intfindname(emp*head,char*name)//查找用户信息

{

while(head!

=NULL)

{

if(int(strcmp(head->join,name))==0)

return1;

head=head->next;

}

if(head==NULL)

return0;

return0;

}

intdelete_q(emp*p)//删除本人还有其所有的记录

{

day*p1,*p2;

if(p==NULL)

return0;

p1=p->next1;

free(p);

while(p1!

=NULL)

{

p2=p1;

p1=p1->next;

free(p2);

}

return0;

}

intgoout(emp*&p,char*name,char*mima)//用户注销,返回一注销成功删除所有记录

{

emp*p1;

if(p==NULL)

{

printf("\n用户名不存在或密码错误\n");

return0;

}

if(p->next==NULL)//一定不是不能操作

{

if(strcmp(p->join,name)==0&&strcmp(p->sec,mima)==0)

{

delete_q(p);

p=NULL;

printf("注销成功");

return1;

}

else

{

printf("密码错误,注销失败");

return0;

}

}

if(strcmp(p->join,name)==0)

{

if(strcmp(p->next->join,mima)!

=0)

{

p1=p;

p=p->next;

delete_q(p1);

//printf("册成功yue");

return1;

}

}

 

p1=p;

while(p1->next!

=NULL)

{

if(strcmp(p1->next->join,name)==0&&strcmp(p1->next->sec,mima)==0)

{

//printf("%s%s",p1->next->sec,mima);

p1->next=p1->next->next;

delete_q(p1->next);

printf("注销成功");

return1;

}

p1=p1->next;

}

printf("注销失败\n");

return0;

}

 

intchange_mima(emp*p,char*name)

{

chara[20

展开阅读全文
相关资源
猜你喜欢
相关搜索

当前位置:首页 > IT计算机 > 电脑基础知识

copyright@ 2008-2022 冰豆网网站版权所有

经营许可证编号:鄂ICP备2022015515号-1