C语言员工信息管理系统源代码

今天分享: C语言员工信息管理系统源代码,供大家参考,具体内容如下

/******************************************************************************** 文件名:UI.Cpp   **          ** 文件功能: 该文件主要是定义(实现)和用户操作有关的一些函数,之所以把和用户 ** 操作有关的函数单独放到ui.c中,是为了使程序结构更加清晰,源代码更  ** 容易管理,这也是遵循结构化程序设计的要求(模块化、层次化) **   ** 作者:         **          ********************************************************************************/ #include <stdio.h>#include <stdlib.h>#include <string.h>#include "ui.h"  //选择身份void UserOperateChoose(ListType L){ int option = 0; do {  //提示用户操作选择 PrintOptionChoose( ); scanf("%d", &option );  //根据用户选择调用相关函数完成指定的操作 switch(option ) { //添加一个员工 /* case 1:   UserOperateOne(L); break;*/  //删除员工 /* case 2: DelStu(L); break;  //修改员工 case 3: ModifyStu(L); break;  */  //查询某个员工 case 1: UserOperatemanager(L);  break; //排序 /* case 3: UserOperateThree(L); break;*/ //打印所有员工信息 case 2: UserOperateVisitor(L);  break;  default: break; } }while(option );  //程序退出时,显示BYEBYE PrintHello( );} //该函数根据管理员的选择,完成指定的操作void UserOperateVisitor(ListType L){ int option = 0;  //显示欢迎信息  do { //提示用户操作选择 PrintOptionVisitor( ); scanf("%d", &option );  //根据用户选择调用相关函数完成指定的操作 switch(option ) { //添加一个员工 /* case 1:   UserOperateOne(L); break;*/  //删除员工 /* case 2: DelStu(L); break;  //修改员工 case 3: ModifyStu(L); break;  */  //查询某个员工 case 1: UserOperateTwo(L);  break;  //排序 /* case 3: UserOperateThree(L); break;*/ //打印所有员工信息 case 2: PrntAll(L);  break;  default: break; } }while(option );  //程序退出时,显示BYEBYE } //该函数根据管理员的选择,完成指定的操作void UserOperatemanager(ListType L){ int option = 0;   //用密码进入系统 password();   do { //提示用户操作选择 PrintOption( ); scanf("%d", &option );  //根据用户选择调用相关函数完成指定的操作 switch(option ) { //添加一个员工 case 1:   UserOperateOne(L); break;  //删除员工 /* case 2: DelStu(L); break;  //修改员工 case 3: ModifyStu(L); break;  */  //查询某个员工 case 2: UserOperateTwo(L);  break;  //排序 case 3: UserOperateThree(L); break; //打印所有员工信息 case 4: PrntAll(L);  break;   default: break; } }while(option );  //程序退出时,显示BYEBYE } //该函数为基本操作的二级菜单,完成指定的操作void UserOperateOne(ListType L){ int option = 0;   do { //提示用户操作选择 PrintOptionOne( ); scanf("%d", &option );  //根据用户选择调用相关函数完成指定的操作 switch(option ) { //添加一个员工 case 1:  AddStu(L); break;  //删除员工 case 2: DelStu(L); break;  //修改员工 case 3: ModifyStu(L); break;  //返回上级菜单 case 0: return; break;  /* //查询某个员工 case 5: chkStuname(L); break;   //打印所有员工信息 case 6: PrntAll(L); break;  //按ID号排序 case 7: sortbyID(L);  break; case 8: //按姓名排序 sortbyname(L); break; case 9: //按部门分类显示信息 sortbyoffice(L); break;*/  default: break; } }while(option );  //程序退出时,显示BYEBYE //PrintHello( );}  //该函数为基本操作的第二个二级菜单,完成指定的操作void UserOperateTwo(ListType L){ int option = 0;   do { //提示用户操作选择 PrintOptionTwo( ); scanf("%d", &option );  //根据用户选择调用相关函数完成指定的操作 switch(option ) { //查询某个员工 case 1: chkStu(L); break;  //查询某个员工 case 2: chkStuname(L);  break;  //返回上级菜单 case 0: return; break;  /* //查询某个员工 case 5: chkStuname(L); break;   //打印所有员工信息 case 6: PrntAll(L); break;  //按ID号排序 case 7: sortbyID(L);  break; case 8: //按姓名排序 sortbyname(L); break; case 9: //按部门分类显示信息 sortbyoffice(L); break;*/  default: break; } }while(option );  //程序退出时,显示BYEBYE //PrintHello( );} //该函数为基本操作的第三个二级菜单,完成指定的操作void UserOperateThree(ListType L){ int option = 0;   do { //提示用户操作选择 PrintOptionThree( ); scanf("%d", &option );  //根据用户选择调用相关函数完成指定的操作 switch(option ) { //按ID号排序 case 1: sortbyID(L);  break; case 2: //按姓名排序 sortbyname(L); break; case 3: //按部门分类显示信息 sortbyoffice(L); break;  //按性别排序显示信息 case 4:  sortbysex(L); break;  //按年龄排序显示信息 case 5: sortbyage(L); break;  //按电话排序显示信息   case 6: sortbyphone( L); break; //按地址排序显示信息 case 7: sortbyaddress( L); break;   //按工资排序显示信息  case 8: sortbypay( L); break;  //按电子邮件排序显示信息 case 9:  sortbyemil( L); break;  //返回上级菜单 case 0: return; break;  /* //查询某个员工 case 5: chkStuname(L); break;   //打印所有员工信息 case 6: PrntAll(L); break;  //按ID号排序 case 7: sortbyID(L);  break; case 8: //按姓名排序 sortbyname(L); break; case 9: //按部门分类显示信息 sortbyoffice(L); break;*/  default: break; } }while(option );  //程序退出时,显示BYEBYE //PrintHello( );}   /* 用户操作界面启动时,在显示器上显示一些欢迎信息 */void PrintWelcome( ){ puts(" "); puts("********************************************************************" ); puts("   欢迎使用员工管理系统!" ); puts("********************************************************************" ); puts("  若有有问题请在留言区交流"); puts("********************************************************************" ); } /* 在显示器上显示用户可以进行的操作,以及操作的方法 */void PrintOption( ){ puts(" "); puts("请选择操作:" ); puts("0:返回 " ); puts("1:进入基本操作菜单"); puts("2:进入员工查询系统"); puts("3:进入信息排序系统"); puts("4:打印员工信息"); }  //选择身份void PrintOptionChoose( ) { puts(" "); puts("请选择身份:" ); puts("0:退出系统 " ); puts("1:以管理员身份进入 " ); puts("2:以游客身份进入 " ); } //显示第一个二级的提示信息void PrintOptionOne( ){ puts(" "); puts("请选择操作:" ); puts("0:返回 " ); puts("1:添加员工  2:删除员工  3:修改员工信息" ); }//显示第二个二级的提示信息void PrintOptionTwo( ){ puts(" "); puts("请选择操作:" ); puts("0:返回 " ); puts("1:按员工ID号查询  2:按员工姓名查询" ); } //显示第三个二级的提示信息void PrintOptionThree( ){ puts(" "); puts("请选择操作:" ); puts("0:返回 " ); puts("1:按ID号排序显示信息 2:按姓名排序显示信息 3:按部门分类显示信息"); puts("4:按性别排序显示信息 5:按年龄排序显示信息 6:按电话排序显示信息"); puts("7:按地址排序显示信息 8:按工资排序显示信息 9:按电子邮件排序显示信息"); } //显示游客查询系统void PrintOptionVisitor( ){ puts(" "); puts("请选择操作:" ); puts("0:返回 " );  puts("1:进入员工查询系统");  puts("2:打印员工信息");}    /* 程序退出时,在显示器上显示一些感谢语言,以给使用者一个好印象 */void PrintHello( ){  puts("********************************************************************" ); puts("   谢谢使用员工管理系统,再见!" ); puts("********************************************************************" ); puts(" "); }  //比较两个员工信息的学号是否相等//若相等则返回TRUE,否则返回FALSE//当调用线性表操作函数int LocateElem(ListType L, ElemType e, STATUS (*compare)(ElemType e1, ElemType e2) //的时候,将该函数名作为第三个参数传递给compareSTATUS IsEqual(ElemType e1, ElemType e2 ){ if( strcmp(e1.ID, e2.ID)==0 ) return TRUE;  return FALSE;}STATUS IsEqual2(ElemType e1, ElemType e2 ){ if( strcmp(e1.name, e2.name)==0 ) return TRUE;  return FALSE;} //往线性表中添加一个员工void AddStu(ListType L){ ElemType stu;  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号决定删除哪个员工void DelStu(ListType L){ ElemType stu; int pos;  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号决定修改哪个员工的成绩void ModifyStu(ListType L){ int pos; ElemType stu;  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("操作失败" ); }  } //根据学号查询某个员工的成绩void chkStu(ListType L){ int pos; ElemType stu;  printf("请输入员工的ID号(不超过15位):" ); getchar(); //吃掉前面的回车键,否则后面的字符串输入时会出错 gets(stu.ID );  if(pos = LocateElem(L, stu, IsEqual) ) { GetElem(L, pos, stu ); PrntOneStu(stu ); } else { puts("操作失败" ); } } //根据姓氏查询某个员工的成绩void chkStuname(ListType L){ int pos; ElemType stu;  printf("请输入员工的姓氏(不超过15位):" ); getchar(); //吃掉前面的回车键,否则后面的字符串输入时会出错 gets(stu.name);  if(pos = LocateElem(L, stu, IsEqual2) ) { GetElem(L, pos, stu ); PrntOneStu(stu ); } else { puts("操作失败" ); } } //成绩统计,统计全体员工的平均成绩/*void StateScore(ListType L){float total[2] = {0.0, 0.0};int num = 0;ElemType e; 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()函数的时候,将该函数的名字作为第二个参数传递给visitSTATUS PrntOneStu(ElemType stu ){ 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);  return OK;} //打印所有学生信息void PrntAll(ListType L){  ListTraverse(L, PrntOneStu ); } //用于做新的链表  //按ID排序void sortbyID(struct lnode *head){ struct lnode *p1,*p2,*l;  l=(struct lnode *)malloc(sizeof(struct lnode));    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); }  //按姓名排序void sortbyname(struct lnode *head){ struct lnode *p1,*p2,*l;  l=(struct lnode *)malloc(sizeof(struct lnode));    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); } //按性别分类显示信息void sortbysex(struct lnode *head){ struct lnode *p1,*p2,*l;  l=(struct lnode *)malloc(sizeof(struct lnode));    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); }  //按年龄分类显示信息void sortbyage(struct lnode *head){ struct lnode *p1,*p2,*l;  l=(struct lnode *)malloc(sizeof(struct lnode));    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); }  //按电话分类显示信息void sortbyphone(struct lnode *head){ struct lnode *p1,*p2,*l;  l=(struct lnode *)malloc(sizeof(struct lnode));    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); }  //按地址分类显示信息void sortbyaddress(struct lnode *head){ struct lnode *p1,*p2,*l;  l=(struct lnode *)malloc(sizeof(struct lnode));    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); }  //按工资分类显示信息void sortbypay(struct lnode *head){ struct lnode *p1,*p2,*l;  l=(struct lnode *)malloc(sizeof(struct lnode));    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); }//按邮件地址分类显示信息void sortbyemil(struct lnode *head){ struct lnode *p1,*p2,*l;  l=(struct lnode *)malloc(sizeof(struct lnode));    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); } //按部门分类显示信息void sortbyoffice(struct lnode *head){ struct lnode *p1,*p2,*l;  l=(struct lnode *)malloc(sizeof(struct lnode));    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); } //按密码进入系统void password(){ char password[7]="123456";   int choice;  char s[7];  int flag=0;  int n=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);   }}

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持。

爱人,却不一定能够听懂。他们听见的,多是抱怨不休,心烦意乱。

C语言员工信息管理系统源代码

相关文章:

你感兴趣的文章:

标签云: