欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页  >  IT编程

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

程序员文章站 2022-07-02 19:14:40
今天分享: 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) 
//的时候,将该函数名作为第三个参数传递给compare
status 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()函数的时候,将该函数的名字作为第二个参数传递给visit
status 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); 
 
 }
}

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