版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
年6月23日人员签到管理系统资料内容仅供参考,如有不当或者侵权,请联系本人改正或者删除。《我的第一个管理系统》这是我的第一个人员签到签出管理系统。能够实现的功能用户注册(只要内存足够能够实现无穷多个用户注册)用户签到记录用户员工是否迟到用户签退记录用户员工是否早退员工出勤情况查询(包括总共上班天数,迟到次数,早退次数)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>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],b[20]; if(findname(p,name)==0) { printf("\n该用户名不存在"); return0; }while(p!=NULL) { if(int(strcmp(p->join,name))==0) { printf("请输入用户密码"); scanf("%s",a); if(strcmp(p->sec,a)!=0) { printf("密码错误"); return0; } else {loop7: printf("请输入您的新密码:\n"); scanf("%s",a); printf("请重新输入您的新密码:\n");scanf("%s",b); if(strcmp(a,b)!=0) { printf("两次新密码不一致请重新输入:"); gotoloop7; } else { strcpy(p->sec,a); printf("恭喜您密码更改成功"); return1; } } } }return0;}/////////////////////////////////////////////////////////////////intmain(){ printf("+_+欢迎进入-_-欣欣-_-自动签到系统+_+\n"); emp*head1=NULL; charname[20],mima[20],mimayangli[20],biao,kk; day*p1=NULL; intpp=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); gotoloop6; } 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"); gotoloop6; } if(biao=='d'||biao=='D') { printf("\n系统已近退出请按提示操作"); gotoloop; } if(biao=='a'||biao=='A') { printf("\n现在您正处于查询状态中\n"); gotoloop3; } if(biao=='c'||biao=='C') gotoloop4; 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("此用户名已存在请重新确定您的注册名"); gotoloop4;}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"); gotoloop6; } else { printf("\n两次密码输入不同请重新输入"); gotoloop5; } } if(pp==3) gotoloop;//这位用户选择退出从头开始 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)//如果返回值是一的话那么就要用户重新输入密码跳到输入密码处 gotoloop1; //这里就是把每一次签到或签退的情况分开处理 if(pp1==0)//在密码这正确的情况下提示用户操作 { p1=(day*)malloc(sizeof(day)); //p1->next=NULL; biao=getch(); if(biao=='t') gotoloop;//这一步用户选择退出程序跳转到开头供下一位用户选择使用 if(biao=='e')// cometime(p1);//这一步完成签早到信息并判断了是否迟到 if(biao=='l') goouttime(p1);//这一步完成签退信息并判断了是否早退 insert2(head1,name,p1);//这一步完成向头结点插入,每次插入都是最新的位置,这一步是必须的 } printf("请重新选择操作或者选择退出\n"); gotoloop6;loop3: printf("请输入您要查询的用户名:\n"); scanf("%s",name); if(findname(head1,name)==1)//如果返回值是1那么就用户存在 { findrec(head1,name); } else { printf("用户名错误或者该用户不存在请重新选择操作"); printf("\n"); gotoloop6; } printf("查询已完成请继续选择操作或者退出\n"); gotoloop6; return0;}《此程序不足》《下面有修改过的程序》#include<stdio.h>#include<stdlib.h>#include<string.h>#include<conio.h>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; } } 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;}/////////////////////////////////////////////////////////////////intmain(){ printf("+_+欢迎进入-_-欣欣-_-自动签到系统+_+\n"); emp*head1=NULL; charname[20],mima[20],mimayangli[20],biao,kk; day*p1=NULL; intpp=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系统已近退出请按提示操作"); gotoloop; } if(biao=='a'||biao=='A') gotoloop3; if(biao=='c'||biao=='C') gotoloop4; 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("此用户名已存在请重新确定您的注册名"); gotoloop4;}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"); gotoloop; } else { printf("\n两次密码输入不同请重新输入"); gotoloop5; } } if(pp==3) gotoloop;//这位用户选择退出从头开始 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)//如果返回值是一的话那么就要用户重新输入密码跳到输入密码处 gotoloop1; //这里就是把每一次签到或签退的情况分开处理 if(pp1==0)//在密码这正确的情况下提示用户操作 { p1=(day*)malloc(sizeof(day)); //p1->next=NULL; biao=getch(); if(biao=='t') gotoloop;//这一步用户选择退出程序跳转到开头供下一位用户选择使用 if(biao=='e')// cometime(p1);//这一步完成签早到信息并判断了是否迟到 if(biao=='l') goouttime(p1);//这一步完成签退信息并判断了是否早退 insert2(head1,name,p1);//这一步完成向头结点插入,每次插入都是最新的位置,这一步是必须的 } printf("系统已经退出,想继续进入系统请重新开始\n"); gotoloop;loop3: printf("请输入用户名:\n"); scanf("%s",name); if(findname(head1,name)==1)//如果返回值是1那么就用户存在 { findrec(head1,name); } else { printf("用户名错误或者该用户不存在\n"); printf("系统已经退出,想继续进入系统请重新开始\n"); gotoloop; } printf("系统已经退出,想继续进入系统请重新开始\n"); gotoloop; return0;}《修改过的较好的程序》#include<stdio.h>#include<stdlib.h>#include<string.h>#include<conio.h>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;}/////////////////////////////////////////////////////////////////intmain(){ printf("+_+欢迎进入-_-欣欣-_-自动签到系统+_+\n"); emp*head1=NULL; charname[20],mima[20],mimayangli[20],biao,kk; day*p1=NULL; intpp=0,pp1=0,i=0;loop: pp=0; pp1=0; i=0; printf("\n按任意键进入系统:\n"); getch();//暂停loop6: printf("请选择操作:A查询,B签到,C注册,D退出(不区分大小写)\n"); biao=getche(); if(biao=='d'||biao=='D') { printf("\n系统已近退出请按提示操作"); gotoloop; } if(biao=='a'||biao=='A') { printf("\n现在您正处于查询状态中\n"); gotoloop3; } if(biao=='c'||biao=='C') gotoloop4; 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("此用户名已存在请重新确定您的注册名"); gotoloop4;}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"); gotoloop6; } else { printf("\n两次密码输入不同请重新输入"); gotoloop5; } } if(pp==3) gotoloop;//这位用户选择退出从头开始 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)//如果返回值是一的话那么就要用户重新输入密码跳到输入密码处 gotoloop1; //这里就是把每一次签到或签退的情况分开处理 if(pp1==0)//在密码这正确的情况下提示用户操作 { p1=(day*)malloc(sizeof(day)); //p1->next=NULL; biao=getch(); if(biao=='t') gotoloop;//这一步用户选择退出程序跳转到开头供下一位用户选择使用 if(biao=='e')// cometime(p1);//这一步完成签早到信息并判断了是否迟到 if(biao=='l') goouttime(p1);//这一步完成签退信息并判断了是否早退 insert2(head1,name,p1);//这一步完成向头结点插入,每次插入都是最新的位置,这一步是必须的 } printf("请重新选择操作或者选择退出\n"); gotoloop6;loop3: printf("请输入您要查询的用户名:\n"); scanf("%s",name); if(findname(head1,name)==1)//如果返回值是1那么就用户存在 { findrec(head1,name); } else { printf("用户名错误或者该用户不存在请重新选择操作"); printf("\n"); gotoloop6; } printf("查询已完成请继续选择操作或者退出\n"); gotoloop6; return0;}《所有基本上都改好》#include<stdio.h>#include<stdlib.h>#include<string.h>#include<conio.h>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;}/////////////////////////////////////////////////////////////////intmain(){ printf("+_+欢迎进入-_-欣欣-_-自动签到系统+_+\n"); emp*head
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 年产14.4万立方米高强度零甲醛秸杆板生产建设项目可行性研究报告
- 小店商城运营方案模板
- 生鲜企业抖音运营方案
- 图书商城运营策略方案
- 军营食堂运营方案
- 城市索道运营方案范文
- 旧衣分拣厂运营方案
- 新加坡智慧城市运营方案
- 智慧校园亲情运营方案
- 视频运维运营方案范文
- 化工安全设计电子版课件
- 2025年高考化学试题(浙江卷) 含答案
- 避免电磁辐射课件
- 激光器调试知识培训总结
- 国际道路运输安全生产管理制度文本
- 2025年6月浙江省高考化学试卷真题(含答案及解析)
- 2025年教育政策法规考试试题及答案
- T-DGGC 022-2023 盾构机保养与维修技术规范
- DB32∕T 4082-2021 采煤塌陷地生态修复基础环境治理技术规范
- 养老保险对家庭金融资产配置的作用及其区域差异分析
- 数控加工程序管理办法
评论
0/150
提交评论