今天就跟大家聊聊有关使用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("\n");
puts("");
exit(0);
}
}
看完上述内容,你们对使用C语言怎么编写一个员工信息管理系统有进一步的了解吗?如果还想了解更多知识或者相关内容,请关注亿速云行业资讯频道,感谢大家的支持。
亿速云「云服务器」,即开即用、新一代英特尔至强铂金CPU、三副本存储NVMe SSD云盘,价格低至29元/月。点击查看>>
免责声明:本站发布的内容(图片、视频和文字)以原创、转载和分享为主,文章观点不代表本网站立场,如果涉及侵权请联系站长邮箱:is@yisu.com进行举报,并提供相关证据,一经查实,将立刻删除涉嫌侵权内容。