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

最近咨询这方面源码的朋友比较多,所以扒一扒以前的网盘,发现了好多之前攒的源码,分享给大家。

扫描上方二维码,回复 999 直接获取作者之前收藏的学习资源,谢谢网友们的分享。

更多管理系统更新中,请注意关注!

今天分享: 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); 

	}
}

做报告课程设计也是在网上找到了很多好的资源,感谢原作者的分享,现在也记不清名字啦,不过也学习网友们的无私奉献精神,把资料分享给大家,帮助更多的朋友吧

相关文章推荐:

1、 C语言学生成绩管理系统源代码 ★★★★★

2、 C语言学籍管理系统源代码 ★★

3、C语言学生成绩管理系统设计 《C语言程序设计》实训报告 ★★★

4、C语言学生信息管理系统源代码 ★★★

感谢阅读!

  • 10
    点赞
  • 92
    收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
©️2022 CSDN 皮肤主题:代码科技 设计师:Amelia_0503 返回首页
评论

打赏作者

小满笔记

你的鼓励将是我创作的最大动力

¥2 ¥4 ¥6 ¥10 ¥20
输入1-500的整数
余额支付 (余额:-- )
扫码支付
扫码支付:¥2
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、C币套餐、付费专栏及课程。

余额充值