分享
分销 收藏 举报 申诉 / 68
播放页_导航下方通栏广告

类型人员签到管理系统.doc

  • 上传人:丰****
  • 文档编号:3564883
  • 上传时间:2024-07-09
  • 格式:DOC
  • 页数:68
  • 大小:91.04KB
  • 下载积分:14 金币
  • 播放页_非在线预览资源立即下载上方广告
    配套讲稿:

    如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。

    特殊限制:

    部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。

    关 键  词:
    人员 签到 管理 系统
    资源描述:
    《我的第一个管理系统》 这是我的第一个人员签到签出管理系统。 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<stdio.h> #include<stdlib.h> #include<string.h> #include<conio.h> typedef struct days { int stime;//上班时间 int gotime;//下班时间 char islate;//是否迟到Y为迟到N为没有迟到 char isgoearly;//是否早退 days *next; }day; typedef struct emplore { char join[20];//用户名 char sec[20];//用户密码 emplore *next; day *next1; }emp; int findjoin(emp *head,const char *name)//通过用户名查找 { char C; while(head!=NULL) { if(int(strcmp(head->join,name))==0) { printf("请输入用户密码:\n"); return 1;//查找到相应的用户名 } else { head=head->next; } } if(head==NULL) { printf("此用户名不存在,您现在需要注册吗?Y注册,N不注册\n"); C=getche(); //scanf("%c",&C); if(C=='Y') return 2;//需要注册 else return 3;//不需要注册 } return 0; } int insert1(emp *&head,char *name,char *mima1)//用户注册时候需要的链表????注意head要用引用哦! { emp *p; p=(emp*)malloc(sizeof(emp)); if(p==NULL) { printf("注册失败\n"); return 0; } else printf("\n恭喜您注册成功\n"); strcpy(p->join,name); strcpy(p->sec,mima1); p->next=head; p->next1=NULL;//重要的一步一定要初始化为NULL方便标记 head=p; return 0; } int findmima(emp *head,const char *name,const char *mima1)//一定是在有用户名的情况下 { while(head!=NULL) { if(int(strcmp(head->join,name))==0) { if(strcmp(head->sec,mima1)==0) { printf("\n密码对的请选择签到还是签退:\ne签到l签退t退出系统\n");//提供选项让用户选择签到还是签退 return 0; } else { printf("\n密码错误请重新输入:"); return 1; } } else head=head->next; } return 0; } int cometime(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"); return 0; } int goouttime(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"); return 0; } int insert2(emp *head,char *name,day *p)//找到本用户的头结点并插入,这里找到的head就是该用户的头结点 { while(head!=NULL) { if(int(strcmp(head->join,name))==0) { p->next=head->next1; head->next1=p; return 0; } head=head->next; } return 0; } int findrec(emp *head,char *name)//查找用户信息 { int rday=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); return 0;//这一步是必要的哦 } head=head->next;//这一步不要忘掉啊 } return 0; } int findname(emp *head,char *name)//查找用户信息 { while(head!=NULL) { if(int(strcmp(head->join,name))==0) return 1; head=head->next; } if(head==NULL) return 0; return 0; } int delete_q(emp *p)//删除本人尚有其所有的记录 { day *p1,*p2; if(p==NULL) return 0; p1=p->next1; free(p); while(p1!=NULL) { p2=p1; p1=p1->next; free(p2); } return 0; } int goout(emp *&p,char *name,char *mima)//用户注销,返回一注销成功删除所有记录 { emp *p1; if(p==NULL) { printf("\n用户名不存在或密码错误\n"); return 0; } if(p->next==NULL)//一定不是不能操作 { if(strcmp(p->join,name)==0&&strcmp(p->sec,mima)==0) { delete_q(p); p=NULL; printf("注销成功"); return 1; } else { printf("密码错误,注销失败"); return 0; } } if(strcmp(p->join,name)==0) { if(strcmp(p->next->join,mima)!=0) { p1=p; p=p->next; delete_q(p1); //printf("册成功yue"); return 1; } } 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("注销成功"); return 1; } p1=p1->next; } printf("注销失败\n"); return 0; } int change_mima(emp *p,char *name) { char a[20],b[20]; if(findname(p,name)==0) { printf("\n该用户名不存在"); return 0; } while(p!=NULL) { if(int(strcmp(p->join,name))==0) { printf("请输入用户密码"); scanf("%s",a); if(strcmp(p->sec,a)!=0) { printf("密码错误"); return 0; } else { loop7: printf("请输入您的新密码:\n"); scanf("%s",a); printf("请重新输入您的新密码:\n"); scanf("%s",b); if(strcmp(a,b)!=0) { printf("两次新密码不一致请重新输入:"); goto loop7; } else { strcpy(p->sec,a); printf("恭喜您密码更改成功"); return 1; } } } } return 0; } ///////////////////////////////////////////////////////////////// int main() { printf("+_+欢迎进入-_-欣欣-_-自动签到系统+_+\n"); emp *head1=NULL; char name[20],mima[20],mimayangli[20],biao,kk; day *p1=NULL; int pp=0,pp1=0,i=0; loop: pp=0; pp1=0; i=0; printf("\n按任意键进入系统:\n"); getch();//暂停 loop6: printf("请选择操作:\nA查询,B签到,C注册,D退出,E用户注销,G更改用户密码(不区分大小写)\n"); biao=getche(); if(biao=='G'||biao=='g') { printf("\n请输入您要更改密码的用户名\n"); scanf("%s",name); change_mima(head1,name); goto loop6; } if(biao=='e'||biao=='E') { printf("\n请输入您的用户名:\n"); scanf("%s",name); printf("请输入密码:\n"); i=0; while(kk=getch()) { if(kk=='\r') break; if(kk=='\b') { i--; printf("\b "); printf("\b"); if(i<=0) i=0; continue; } printf("*"); mima[i]=kk; i++; } mima[i]='\0'; if(goout(head1,name,mima)==1)//用户注销 printf("\n用户注销成功,感谢您近期的使用\n"); goto loop6; } if(biao=='d'||biao=='D') { printf("\n系统已近退出请按提醒操作"); goto loop; } if(biao=='a'||biao=='A') { printf("\n现在您正处在查询状态中\n"); goto loop3; } if(biao=='c'||biao=='C') goto loop4; printf("\n请输入用户名:\n"); scanf("%s",name); pp=findjoin(head1,name); if(pp==2)//假如返回值是2那么就用户注册 { loop4: printf("\n请输入您的注册名:\n"); scanf("%s",name); if(findname(head1 , name)==1) { printf("此用户名已存在请重新拟定您的注册名"); goto loop4; } loop5: printf("请输入您的注册密码 :\n"); i=0; while(kk=getch()) { if(kk=='\r') break; if(kk=='\b') { i--; printf("\b "); printf("\b"); if(i<=0) i=0; continue; } printf("*"); mima[i]=kk; i++; } mima[i]='\0'; printf("\n请再次输入您的注册密码:\n"); i=0; while(kk=getch()) { if(kk=='\r') break; if(kk=='\b') { i--; printf("\b "); printf("\b"); if(i<=0) i=0; continue; } printf("*"); mimayangli[i]=kk; i++; } mimayangli[i]='\0'; if(strcmp(mima,mimayangli)==0) { insert1(head1,name,mima); printf("请继续选择您需要的操作\n"); goto loop6; } else { printf("\n两次密码输入不同请重新输入"); goto loop5; } } if(pp==3) goto loop;//这位用户选择退出从头开始 if(pp==1)//假如返回值是1那么就输入密码 { loop1: i=0; while(kk=getch()) { if(kk=='\r')//// break; if(kk=='\b') { i--; printf("\b "); printf("\b"); if(i<=0) i=0; continue; } printf("*"); mima[i]=kk; i++; }mima[i]='\0'; } pp1=findmima(head1,name,mima); if(pp1==1)//假如返回值是一的话那么就要用户重新输入密码跳到输入密码处 goto loop1; //这里就是把每一次签到或签退的情况分开解决 if(pp1==0)//在密码这对的的情况下提醒用户操作 { p1=(day*)malloc(sizeof(day)); //p1->next=NULL; biao=getch(); if(biao=='t') goto loop;//这一步用户选择退出程序跳转到开头供下一位用户选择使用 if(biao=='e')// cometime(p1);//这一步完毕签早到信息并判断了是否迟到 if(biao=='l') goouttime(p1);//这一步完毕签退信息并判断了是否早退 insert2(head1,name,p1);//这一步完毕向头结点插入,每次插入都是最新的位置,这一步是必须的 } printf("请重新选择操作或者选择退出\n"); goto loop6; loop3: printf("请输入您要查询的用户名:\n"); scanf("%s",name); if(findname(head1,name)==1)//假如返回值是1那么就用户存在 { findrec(head1,name); } else { printf("用户名错误或者该用户不存在请重新选择操作"); printf("\n"); goto loop6; } printf("查询已完毕请继续选择操作或者退出\n"); goto loop6; return 0; } 《此程序局限性》《下面有修改过的程序》 #include<stdio.h> #include<stdlib.h> #include<string.h> #include<conio.h> typedef struct days { int stime;//上班时间 int gotime;//下班时间 char islate;//是否迟到Y为迟到N为没有迟到 char isgoearly;//是否早退 days *next; }day; typedef struct emplore { char join[20];//用户名 char sec[20];//用户密码 emplore *next; day *next1; }emp; int findjoin(emp *head,const char *name)//通过用户名查找 { char C; while(head!=NULL) { if(int(strcmp(head->join,name))==0) { printf("请输入用户密码(输入#表达密码输入结束):\n"); return 1;//查找到相应的用户名 } else { head=head->next; } } if(head==NULL) { printf("此用户名不存在,您现在需要注册吗?Y注册,N不注册\n"); C=getche(); //scanf("%c",&C); if(C=='Y') return 2;//需要注册 else return 3;//不需要注册 } return 0; } int insert1(emp *&head,char *name,char *mima1)//用户注册时候需要的链表????注意head要用引用哦! { emp *p; p=(emp*)malloc(sizeof(emp)); if(p==NULL) { printf("注册失败\n"); return 0; } else printf("\n恭喜您注册成功\n"); strcpy(p->join,name); strcpy(p->sec,mima1); p->next=head; p->next1=NULL;//重要的一步一定要初始化为NULL方便标记 head=p; return 0; } int findmima(emp *head,const char *name,const char *mima1)//一定是在有用户名的情况下 { while(head!=NULL) { if(int(strcmp(head->join,name))==0) { if(strcmp(head->sec,mima1)==0) { printf("\n密码对的请选择签到还是签退:\ne签到l签退t退出系统\n");//提供选项让用户选择签到还是签退 return 0; } else { printf("\n密码错误请重新输入:"); return 1; } } else head=head->next; } return 0; } int cometime(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"); return 0; } int goouttime(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"); return 0; } int insert2(emp *head,char *name,day *p)//找到本用户的头结点并插入,这里找到的head就是该用户的头结点 { while(head!=NULL) { if(int(strcmp(head->join,name))==0) { p->next=head->next1; head->next1=p; return 0; } } return 0; } int findrec(emp *head,char *name)//查找用户信息 { int rday=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); return 0;//这一步是必要的哦 } head=head->next;//这一步不要忘掉啊 } return 0; } int findname(emp *head,char *name)//查找用户信息 { while(head!=NULL) { if(int(strcmp(head->join,name))==0) return 1; head=head->next; } if(head==NULL) return 0; return 0; } ///////////////////////////////////////////////////////////////// int main() { printf("+_+欢迎进入-_-欣欣-_-自动签到系统+_+\n"); emp *head1=NULL; char name[20],mima[20],mimayangli[20],biao,kk; day *p1=NULL; int pp=0,pp1=0,i=0; loop: pp=0; pp1=0; i=0; printf("\n按任意键进入系统:\n"); getch();//暂停 printf("请选择操作:A查询,B签到,C注册,D退出(不区分大小写)\n"); biao=getche(); if(biao=='d'||biao=='D') { printf("\n系统已近退出请按提醒操作"); goto loop; } if(biao=='a'||biao=='A') goto loop3; if(biao=='c'||biao=='C') goto loop4; printf("\n请输入用户名:\n"); scanf("%s",name); pp=findjoin(head1,name); if(pp==2)//假如返回值是2那么就用户注册 { loop4: printf("\n请输入您的注册名:\n"); scanf("%s",name); if(findname(head1 , name)==1) { printf("此用户名已存在请重新拟定您的注册名"); goto loop4; } loop5: printf("请输入您的注册密码(输入到#表达密码输入完毕):\n"); i=0; while(kk=getch()) { if(kk=='#') break; printf("*"); mima[i]=kk; i++; } mima[i]='\0'; printf("\n请再次输入您的注册密码(输入到#表达密码输入完毕):\n"); i=0; while(kk=getch()) { if(kk=='#') break; printf("*"); mimayangli[i]=kk; i++; } mimayangli[i]='\0'; if(strcmp(mima,mimayangli)==0) { insert1(head1,name,mima); printf("系统已经退出,想继续进入系统请重新开始\n"); goto loop; } else { printf("\n两次密码输入不同请重新输入"); goto loop5; } } if(pp==3) goto loop;//这位用户选择退出从头开始 if(pp==1)//假如返回值是1那么就输入密码 { loop1: i=0; while(kk=getch()) { if(kk=='#') break; printf("*"); mima[i]=kk; i++; }mima[i]='\0'; } pp1=findmima(head1,name,mima); if(pp1==1)//假如返回值是一的话那么就要用户重新输入密码跳到输入密码处 goto loop1; //这里就是把每一次签到或签退的情况分开解决 if(pp1==0)//在密码这对的的情况下提醒用户操作 { p1=(day*)malloc(sizeof(day)); //p1->next=NULL; biao=getch(); if(biao=='t') goto loop;//这一步用户选择退出程序跳转到开头供下一位用户选择使用 if(biao=='e')// cometime(p1);//这一步完毕签早到信息并判断了是否迟到 if(biao=='l') goouttime(p1);//这一步完毕签退信息并判断了是否早退 insert2(head1,name,p1);//这一步完毕向头结点插入,每次插入都是最新的位置,这一步是必须的 } printf("系统已经退出,想继续进入系统请重新开始\n"); goto loop; loop3: printf("请输入用户名:\n"); scanf("%s",name); if(findname(head1,name)==1)//假如返回值是1那么就用户存在 { findrec(head1,name); } else { printf("用户名错误或者该用户不存在\n"); printf("系统已经退出,想继续进入系统请重新开始\n"); goto loop; } printf("系统已经退出,想继续进入系统请重新开始\n"); goto loop; return 0; } 《修改过的较好的程序》 #include<stdio.h> #include<stdlib.h> #include<string.h> #include<conio.h> typedef struct days { int stime;//上班时间 int gotime;//下班时间 char islate;//是否迟到Y为迟到N为没有迟到 char isgoearly;//是否早退 days *next; }day; typedef struct emplore { char join[20];//用户名 char sec[20];//用户密码 emplore *next; day *next1; }emp; int findjoin(emp *head,const char *name)//通过用户名查找 { char C; while(head!=NULL) { if(int(strcmp(head->join,name))==0) { printf("请输入用户密码(输入#表达密码输入结束):\n"); return 1;//查找到相应的用户名 } else { head=head->next; } } if(head==NULL) { printf("此用户名不存在,您现在需要注册吗?Y注册,N不注册\n"); C=getche(); //scanf("%c",&C);
    展开阅读全文
    提示  咨信网温馨提示:
    1、咨信平台为文档C2C交易模式,即用户上传的文档直接被用户下载,收益归上传人(含作者)所有;本站仅是提供信息存储空间和展示预览,仅对用户上传内容的表现方式做保护处理,对上载内容不做任何修改或编辑。所展示的作品文档包括内容和图片全部来源于网络用户和作者上传投稿,我们不确定上传用户享有完全著作权,根据《信息网络传播权保护条例》,如果侵犯了您的版权、权益或隐私,请联系我们,核实后会尽快下架及时删除,并可随时和客服了解处理情况,尊重保护知识产权我们共同努力。
    2、文档的总页数、文档格式和文档大小以系统显示为准(内容中显示的页数不一定正确),网站客服只以系统显示的页数、文件格式、文档大小作为仲裁依据,个别因单元格分列造成显示页码不一将协商解决,平台无法对文档的真实性、完整性、权威性、准确性、专业性及其观点立场做任何保证或承诺,下载前须认真查看,确认无误后再购买,务必慎重购买;若有违法违纪将进行移交司法处理,若涉侵权平台将进行基本处罚并下架。
    3、本站所有内容均由用户上传,付费前请自行鉴别,如您付费,意味着您已接受本站规则且自行承担风险,本站不进行额外附加服务,虚拟产品一经售出概不退款(未进行购买下载可退充值款),文档一经付费(服务费)、不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
    4、如你看到网页展示的文档有www.zixin.com.cn水印,是因预览和防盗链等技术需要对页面进行转换压缩成图而已,我们并不对上传的文档进行任何编辑或修改,文档下载后都不会有水印标识(原文档上传前个别存留的除外),下载后原文更清晰;试题试卷类文档,如果标题没有明确说明有答案则都视为没有答案,请知晓;PPT和DOC文档可被视为“模板”,允许上传人保留章节、目录结构的情况下删减部份的内容;PDF文档不管是原文档转换或图片扫描而得,本站不作要求视为允许,下载前可先查看【教您几个在下载文档中可以更好的避免被坑】。
    5、本文档所展示的图片、画像、字体、音乐的版权可能需版权方额外授权,请谨慎使用;网站提供的党政主题相关内容(国旗、国徽、党徽--等)目的在于配合国家政策宣传,仅限个人学习分享使用,禁止用于任何广告和商用目的。
    6、文档遇到问题,请及时联系平台进行协调解决,联系【微信客服】、【QQ客服】,若有其他问题请点击或扫码反馈【服务填表】;文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“【版权申诉】”,意见反馈和侵权处理邮箱:1219186828@qq.com;也可以拔打客服电话:0574-28810668;投诉电话:18658249818。

    开通VIP折扣优惠下载文档

    自信AI创作助手
    关于本文
    本文标题:人员签到管理系统.doc
    链接地址:https://www.zixin.com.cn/doc/3564883.html
    页脚通栏广告

    Copyright ©2010-2026   All Rights Reserved  宁波自信网络信息技术有限公司 版权所有   |  客服电话:0574-28810668    微信客服:咨信网客服    投诉电话:18658249818   

    违法和不良信息举报邮箱:help@zixin.com.cn    文档合作和网站合作邮箱:fuwu@zixin.com.cn    意见反馈和侵权处理邮箱:1219186828@qq.com   | 证照中心

    12321jubao.png12321网络举报中心 电话:010-12321  jubao.png中国互联网举报中心 电话:12377   gongan.png浙公网安备33021202000488号  icp.png浙ICP备2021020529号-1 浙B2-20240490   


    关注我们 :微信公众号  抖音  微博  LOFTER               

    自信网络  |  ZixinNetwork