C语言员工信息管理系统源代码
今天分享:C语言员工信息管理系统源代码,供大家参考,具体内容如下
/******************************************************************************* *文件名:UI.Cpp* ** *文件功能:该文件主要是定义(实现)和用户操作有关的一些函数,之所以把和用户* *操作有关的函数单独放到ui.c中,是为了使程序结构更加清晰,源代码更* *容易管理,这也是遵循结构化程序设计的要求(模块化、层次化)* ** *作者:* ** *******************************************************************************/ #include#include #include #include"ui.h" //选择身份 voidUserOperateChoose(ListTypeL) { intoption=0; do { //提示用户操作选择 PrintOptionChoose(); scanf("%d",&option); //根据用户选择调用相关函数完成指定的操作 switch(option) { //添加一个员工 /*case1: UserOperateOne(L); break;*/ //删除员工 /*case2: DelStu(L); break; //修改员工 case3: ModifyStu(L); break;*/ //查询某个员工 case1: UserOperatemanager(L); break; //排序 /*case3: UserOperateThree(L); break;*/ //打印所有员工信息 case2: UserOperateVisitor(L); break; default:break; } }while(option); //程序退出时,显示BYEBYE PrintHello(); } //该函数根据管理员的选择,完成指定的操作 voidUserOperateVisitor(ListTypeL) { intoption=0; //显示欢迎信息 do { //提示用户操作选择 PrintOptionVisitor(); scanf("%d",&option); //根据用户选择调用相关函数完成指定的操作 switch(option) { //添加一个员工 /*case1: UserOperateOne(L); break;*/ //删除员工 /*case2: DelStu(L); break; //修改员工 case3: ModifyStu(L); break;*/ //查询某个员工 case1: UserOperateTwo(L); break; //排序 /*case3: UserOperateThree(L); break;*/ //打印所有员工信息 case2: PrntAll(L); break; default:break; } }while(option); //程序退出时,显示BYEBYE } //该函数根据管理员的选择,完成指定的操作 voidUserOperatemanager(ListTypeL) { intoption=0; //用密码进入系统 password(); do { //提示用户操作选择 PrintOption(); scanf("%d",&option); //根据用户选择调用相关函数完成指定的操作 switch(option) { //添加一个员工 case1: UserOperateOne(L); break; //删除员工 /*case2: DelStu(L); break; //修改员工 case3: ModifyStu(L); break;*/ //查询某个员工 case2: UserOperateTwo(L); break; //排序 case3: UserOperateThree(L); break; //打印所有员工信息 case4: PrntAll(L); break; default:break; } }while(option); //程序退出时,显示BYEBYE } //该函数为基本操作的二级菜单,完成指定的操作 voidUserOperateOne(ListTypeL) { intoption=0; do { //提示用户操作选择 PrintOptionOne(); scanf("%d",&option); //根据用户选择调用相关函数完成指定的操作 switch(option) { //添加一个员工 case1: AddStu(L); break; //删除员工 case2: DelStu(L); break; //修改员工 case3: ModifyStu(L); break; //返回上级菜单 case0: return; break; /*//查询某个员工 case5: chkStuname(L); break; //打印所有员工信息 case6: PrntAll(L); break; //按ID号排序 case7: sortbyID(L); break; case8: //按姓名排序 sortbyname(L); break; case9: //按部门分类显示信息 sortbyoffice(L); break;*/ default:break; } }while(option); //程序退出时,显示BYEBYE //PrintHello(); } //该函数为基本操作的第二个二级菜单,完成指定的操作 voidUserOperateTwo(ListTypeL) { intoption=0; do { //提示用户操作选择 PrintOptionTwo(); scanf("%d",&option); //根据用户选择调用相关函数完成指定的操作 switch(option) { //查询某个员工 case1: chkStu(L); break; //查询某个员工 case2: chkStuname(L); break; //返回上级菜单 case0: return; break; /*//查询某个员工 case5: chkStuname(L); break; //打印所有员工信息 case6: PrntAll(L); break; //按ID号排序 case7: sortbyID(L); break; case8: //按姓名排序 sortbyname(L); break; case9: //按部门分类显示信息 sortbyoffice(L); break;*/ default:break; } }while(option); //程序退出时,显示BYEBYE //PrintHello(); } //该函数为基本操作的第三个二级菜单,完成指定的操作 voidUserOperateThree(ListTypeL) { intoption=0; do { //提示用户操作选择 PrintOptionThree(); scanf("%d",&option); //根据用户选择调用相关函数完成指定的操作 switch(option) { //按ID号排序 case1: sortbyID(L); break; case2: //按姓名排序 sortbyname(L); break; case3: //按部门分类显示信息 sortbyoffice(L); break; //按性别排序显示信息 case4: sortbysex(L); break; //按年龄排序显示信息 case5: sortbyage(L); break; //按电话排序显示信息 case6: sortbyphone(L); break; //按地址排序显示信息 case7: sortbyaddress(L); break; //按工资排序显示信息 case8: sortbypay(L); break; //按电子邮件排序显示信息 case9: sortbyemil(L); break; //返回上级菜单 case0: return; break; /*//查询某个员工 case5: chkStuname(L); break; //打印所有员工信息 case6: PrntAll(L); break; //按ID号排序 case7: sortbyID(L); break; case8: //按姓名排序 sortbyname(L); break; case9: //按部门分类显示信息 sortbyoffice(L); break;*/ default:break; } }while(option); //程序退出时,显示BYEBYE //PrintHello(); } /*用户操作界面启动时,在显示器上显示一些欢迎信息*/ voidPrintWelcome() { puts(""); puts("********************************************************************"); puts("欢迎使用员工管理系统!"); puts("********************************************************************"); puts("若有有问题请在留言区交流"); puts("********************************************************************"); } /*在显示器上显示用户可以进行的操作,以及操作的方法*/ voidPrintOption() { puts(""); puts("请选择操作:"); puts("0:返回"); puts("1:进入基本操作菜单"); puts("2:进入员工查询系统"); puts("3:进入信息排序系统"); puts("4:打印员工信息"); } //选择身份 voidPrintOptionChoose() { puts(""); puts("请选择身份:"); puts("0:退出系统"); puts("1:以管理员身份进入"); puts("2:以游客身份进入"); } //显示第一个二级的提示信息 voidPrintOptionOne() { puts(""); puts("请选择操作:"); puts("0:返回"); puts("1:添加员工2:删除员工3:修改员工信息"); } //显示第二个二级的提示信息 voidPrintOptionTwo() { puts(""); puts("请选择操作:"); puts("0:返回"); puts("1:按员工ID号查询2:按员工姓名查询"); } //显示第三个二级的提示信息 voidPrintOptionThree() { puts(""); puts("请选择操作:"); puts("0:返回"); puts("1:按ID号排序显示信息2:按姓名排序显示信息3:按部门分类显示信息"); puts("4:按性别排序显示信息5:按年龄排序显示信息6:按电话排序显示信息"); puts("7:按地址排序显示信息8:按工资排序显示信息9:按电子邮件排序显示信息"); } //显示游客查询系统 voidPrintOptionVisitor() { puts(""); puts("请选择操作:"); puts("0:返回"); puts("1:进入员工查询系统"); puts("2:打印员工信息"); } /*程序退出时,在显示器上显示一些感谢语言,以给使用者一个好印象*/ voidPrintHello() { puts("********************************************************************"); puts("谢谢使用员工管理系统,再见!"); puts("********************************************************************"); puts(""); } //比较两个员工信息的学号是否相等 //若相等则返回TRUE,否则返回FALSE //当调用线性表操作函数intLocateElem(ListTypeL,ElemTypee,STATUS(*compare)(ElemTypee1,ElemTypee2) //的时候,将该函数名作为第三个参数传递给compare STATUSIsEqual(ElemTypee1,ElemTypee2) { if(strcmp(e1.ID,e2.ID)==0) returnTRUE; returnFALSE; } STATUSIsEqual2(ElemTypee1,ElemTypee2) { if(strcmp(e1.name,e2.name)==0) returnTRUE; returnFALSE; } //往线性表中添加一个员工 voidAddStu(ListTypeL) { ElemTypestu; printf("请输入员工的ID号(不超过15位):"); getchar();//吃掉前面的回车键,否则后面的字符串输入时会出错 gets(stu.ID); printf("请输入员工的姓名(不超过15位):"); gets(stu.name); printf("请输入员工的性别(输入M/W):"); stu.sex=getchar(); printf("请输入员工的年龄:"); scanf("%d",&stu.age); printf("请输入员工的电话(不超过20位):"); getchar();//吃掉前面的回车键,否则后面的字符串输入时会出错 gets(stu.phone); printf("请输入员工的地址(不超过100位):"); gets(stu.address); printf("请输入员工的电子邮件(不超过50位):"); gets(stu.email); printf("请输入员工的工资(不超过10位):"); gets(stu.pay); printf("请输入员工的工龄:"); scanf("%d",&stu.workingyears); getchar();//吃掉前面的回车键,否则后面的字符串输入时会出错 printf("请输入员工的所在部门(不超过100位):"); gets(stu.office); //判断线性表中是否已经存在该ID号的员工,如果已经存在,则放弃插入操作 if(LocateElem(L,stu,IsEqual)) { puts("操作失败,该员工已经存在"); return; } //将该学生放入线性表中 //为简单起见,我们把新添加的结点放到线性表的前面 if(ListInsert(L,1,stu)) puts("操作成功"); else puts("操作失败"); } //从线性表中删除一个员工,根据员工的ID号决定删除哪个员工 voidDelStu(ListTypeL) { ElemTypestu; intpos; printf("请输入员工的ID号(不超过15位):"); getchar();//吃掉前面的回车键,否则后面的字符串输入时会出错 gets(stu.ID); pos=LocateElem(L,stu,IsEqual);//如果存在该ID号的V,则返回其在线性表中的位序,如果不存在返回0 if(pos) { if(ListDelete(L,pos,stu)) { puts("操作成功"); return; } } puts("操作失败"); } //修改员工成绩,根据ID号决定修改哪个员工的成绩 voidModifyStu(ListTypeL) { intpos; ElemTypestu; printf("请输入员工的ID号(不超过15位):"); getchar();//吃掉前面的回车键,否则后面的字符串输入时会出错 gets(stu.ID); printf("请输入员工的姓名(不超过15位):"); gets(stu.name); printf("请输入员工的性别(输入M/W):"); scanf("%c",&stu.sex); printf("请输入员工的年龄:"); scanf("%d",&stu.age); printf("请输入员工的电话(不超过20位):"); getchar();//吃掉前面的回车键,否则后面的字符串输入时会出错 gets(stu.phone); printf("请输入员工的地址(不超过100位):"); gets(stu.address); printf("请输入员工的电子邮件(不超过50位):"); gets(stu.email); printf("请输入员工的工资(不超过10位):"); gets(stu.pay); printf("请输入员工的工龄:"); scanf("%d",&stu.workingyears); getchar();//吃掉前面的回车键,否则后面的字符串输入时会出错 printf("请输入员工的所在部门:"); gets(stu.office); pos=LocateElem(L,stu,IsEqual); if(pos>0) { ListModify(L,pos,stu); puts("操作成功"); } else { puts("操作失败"); } } //根据学号查询某个员工的成绩 voidchkStu(ListTypeL) { intpos; ElemTypestu; printf("请输入员工的ID号(不超过15位):"); getchar();//吃掉前面的回车键,否则后面的字符串输入时会出错 gets(stu.ID); if(pos=LocateElem(L,stu,IsEqual)) { GetElem(L,pos,stu); PrntOneStu(stu); } else { puts("操作失败"); } } //根据姓氏查询某个员工的成绩 voidchkStuname(ListTypeL) { intpos; ElemTypestu; printf("请输入员工的姓氏(不超过15位):"); getchar();//吃掉前面的回车键,否则后面的字符串输入时会出错 gets(stu.name); if(pos=LocateElem(L,stu,IsEqual2)) { GetElem(L,pos,stu); PrntOneStu(stu); } else { puts("操作失败"); } } //成绩统计,统计全体员工的平均成绩 /*voidStateScore(ListTypeL) { floattotal[2]={0.0,0.0}; intnum=0; ElemTypee; while(GetElem(L,num+1,e))//GetElem(...)返回值为FALSE时说明没有位序为num+1的数据 { num++; total[0]+=e.score[0]; total[1]+=e.score[1]; } if(num>0) { printf("平均成绩分别为:%.2f,%.2f\n",total[0]/num,total[1]/num); } else { puts("没有数据信息"); } }*/ //打印一个员工的信息 //调用ListTraverse()函数的时候,将该函数的名字作为第二个参数传递给visit STATUSPrntOneStu(ElemTypestu) { printf("ID号:%s姓名:%s性别:%c年龄:%d电话:%s地址:%s电子邮件:%s工资:%s工龄:%d所在部门:%s\n",stu.ID,stu.name,stu.sex,stu.age,stu.phone,stu.address, stu.email,stu.pay,stu.workingyears,stu.office); returnOK; } //打印所有学生信息 voidPrntAll(ListTypeL) { ListTraverse(L,PrntOneStu); } //用于做新的链表 //按ID排序 voidsortbyID(structlnode*head) { structlnode*p1,*p2,*l; l=(structlnode*)malloc(sizeof(structlnode)); l->next=NULL; for(p1=head;p1->next!=NULL;p1=p1->next) { for(p2=p1->next;p2!=NULL;p2=p2->next) { if(strcmp(p1->data.ID,p2->data.ID)==-1) { l->data=p1->data; p1->data=p2->data; p2->data=l->data; } } } printf("降序排序成功\n"); PrntAll(head); } //按姓名排序 voidsortbyname(structlnode*head) { structlnode*p1,*p2,*l; l=(structlnode*)malloc(sizeof(structlnode)); l->next=NULL; for(p1=head;p1->next!=NULL;p1=p1->next) { for(p2=p1->next;p2!=NULL;p2=p2->next) { if(strcmp(p1->data.name,p2->data.name)==-1) { l->data=p1->data; p1->data=p2->data; p2->data=l->data; } } } printf("降序排序成功\n"); PrntAll(head); } //按性别分类显示信息 voidsortbysex(structlnode*head) { structlnode*p1,*p2,*l; l=(structlnode*)malloc(sizeof(structlnode)); l->next=NULL; for(p1=head;p1->next!=NULL;p1=p1->next) { for(p2=p1->next;p2!=NULL;p2=p2->next) { if(p1->data.sex>p2->data.sex) { l->data=p1->data; p1->data=p2->data; p2->data=l->data; } } } PrntAll(head); } //按年龄分类显示信息 voidsortbyage(structlnode*head) { structlnode*p1,*p2,*l; l=(structlnode*)malloc(sizeof(structlnode)); l->next=NULL; for(p1=head;p1->next!=NULL;p1=p1->next) { for(p2=p1->next;p2!=NULL;p2=p2->next) { if(p1->data.age>p2->data.age) { l->data=p1->data; p1->data=p2->data; p2->data=l->data; } } } PrntAll(head); } //按电话分类显示信息 voidsortbyphone(structlnode*head) { structlnode*p1,*p2,*l; l=(structlnode*)malloc(sizeof(structlnode)); l->next=NULL; for(p1=head;p1->next!=NULL;p1=p1->next) { for(p2=p1->next;p2!=NULL;p2=p2->next) { if(strcmp(p1->data.phone,p2->data.phone)==-1) { l->data=p1->data; p1->data=p2->data; p2->data=l->data; } } } PrntAll(head); } //按地址分类显示信息 voidsortbyaddress(structlnode*head) { structlnode*p1,*p2,*l; l=(structlnode*)malloc(sizeof(structlnode)); l->next=NULL; for(p1=head;p1->next!=NULL;p1=p1->next) { for(p2=p1->next;p2!=NULL;p2=p2->next) { if(strcmp(p1->data.address,p2->data.address)==-1) { l->data=p1->data; p1->data=p2->data; p2->data=l->data; } } } PrntAll(head); } //按工资分类显示信息 voidsortbypay(structlnode*head) { structlnode*p1,*p2,*l; l=(structlnode*)malloc(sizeof(structlnode)); l->next=NULL; for(p1=head;p1->next!=NULL;p1=p1->next) { for(p2=p1->next;p2!=NULL;p2=p2->next) { if(strcmp(p1->data.pay,p2->data.pay)==-1) { l->data=p1->data; p1->data=p2->data; p2->data=l->data; } } } PrntAll(head); } //按邮件地址分类显示信息 voidsortbyemil(structlnode*head) { structlnode*p1,*p2,*l; l=(structlnode*)malloc(sizeof(structlnode)); l->next=NULL; for(p1=head;p1->next!=NULL;p1=p1->next) { for(p2=p1->next;p2!=NULL;p2=p2->next) { if(strcmp(p1->data.email,p2->data.email)==-1) { l->data=p1->data; p1->data=p2->data; p2->data=l->data; } } } PrntAll(head); } //按部门分类显示信息 voidsortbyoffice(structlnode*head) { structlnode*p1,*p2,*l; l=(structlnode*)malloc(sizeof(structlnode)); l->next=NULL; for(p1=head;p1->next!=NULL;p1=p1->next) { for(p2=p1->next;p2!=NULL;p2=p2->next) { if(strcmp(p1->data.office,p2->data.office)==-1) { l->data=p1->data; p1->data=p2->data; p2->data=l->data; } } } PrntAll(head); } //按密码进入系统 voidpassword() { charpassword[7]="123456"; intchoice; chars[7]; intflag=0; intn=3; do { printf("请你输入密码:\n"); scanf("%s",s); if(strcmp(s,password)==0)//若密码正确 { printf("恭喜你成功登陆了\n\n\n"); flag=1; break; } else { printf("输入有错误请重新输入:\n"); n--; } }while(n>0); if(!flag) { printf("哈哈,O(∩_∩)O哈!,想暴力破解是行不通的\n"); puts("若有有问题留言区交流"); exit(0); } }
以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持毛票票。