⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 staff.cpp

📁 完全用C语言编写的员工管理系统
💻 CPP
字号:
///////////////////////////////////////////员 工 信 息 管 理 系 统///////////////////////////////////////////
//////////////////////////////////////////////////////////////////////////////////////////////////
///////////////////////主菜单模块//////////////////////////
#include<stdio.h>
#include<stdlib.h>
#define PER_NUM 1000
extern int NUM=0;
void si_input();
void si_modify();
void si_delet();
void si_sequence();
void si_search();
void si_save();
void seq_sn();
void seq_wage();
void f_print(int,int);
void ser_sx();   
void ser_ef();
void save_txt();
void save_bin();
struct person
{
	double sn;
	char name[20];
	double bir_date;
	char gender;
	double tel;
	double wage;
};
struct person per_inp[PER_NUM];
int main(void)
{
	int i,choice;
	do
	{
	  for(i=1;i<=79;i++)
		  printf("*");
	  printf("\n");
 	  printf("*                             员 工 信 息 管 理 系 统                         *");
	  printf("\n");
	  printf("*-----------------------------------------------------------------------------*");
	  printf("\n");
	  printf("*                               1.  员工信息输入                              *");
	  printf("\n");
	  printf("*                               2.  员工信息修改                              *");
	  printf("\n");
 	  printf("*                               3.  员工信息删除                              *");
	  printf("\n");
	  printf("*                               4.  员工信息排序                              *");
	  printf("\n");
	  printf("*                               5.  员工信息查找                              *");
	  printf("\n");
	  printf("*                               6.  员工信息保存                              *");
	  printf("\n");
	  printf("*                               0.  退出                                      *");
	  printf("\n");
      for(i=1;i<=79;i++)
		  printf("*");
      printf("\n");
	  printf("请选择(0~6):");
	  scanf("%d",&choice);  
	  switch(choice)
	  {
	  case 1:si_input();break;
	  case 2:si_modify();break;
	  case 3:si_delet();break;
      case 4:si_sequence();break;
      case 5:si_search();break;
      case 6:si_save();break;
  	  }
	}
	while(choice!=0);
	return 0;
}
///////////////////////输入模块//////////////////////////
void si_input()
{
	char confirm;
	do
	{
	    printf("请输入第%d个员工信息:\n",NUM+1);
		printf("编号:");
		scanf("%lf",&per_inp[NUM].sn);
		printf("\n");
		printf("姓名:");
		scanf("%s",per_inp[NUM].name);
		printf("\n");
		do
		{   getchar();
			printf("性别(男输入m,女输入f):");
		    scanf("%c",&per_inp[NUM].gender);
			if((per_inp[NUM].gender!='m')&&(per_inp[NUM].gender!='f'))
				printf("对不起,我没看懂,请重新输入,");
		}
		while((per_inp[NUM].gender!='m')&&(per_inp[NUM].gender!='f'));
		printf("\n");
        printf("出生年月(如:19880101):");
		scanf("%lf",&per_inp[NUM].bir_date);
		printf("\n");
		printf("基本工资:");
		scanf("%lf",&per_inp[NUM].wage);
		printf("\n");
		printf("联系电话:");
		scanf("%lf",&per_inp[NUM].tel);
		printf("\n");
		NUM=NUM+1;
		getchar();
	    printf("是否继续(y/n)");
    	scanf("%c",&confirm);
	}
	while(confirm=='y');
	
}
///////////////////////修改模块//////////////////////////
void si_modify()
{ 
	char confirm;
	double modi_sn;
	int modi_num;
	int flag=0;
	do
	{
		
	    printf("请输入需要修改员工信息的编号:");
		scanf("%lf",&modi_sn);
		for(modi_num=0;modi_num<NUM;modi_num++)
		{
			if(modi_sn==per_inp[modi_num].sn)
			{
				flag=1;
				printf("请输入该员工新的信息\n");
				printf("编号:");
		        scanf("%lf",&per_inp[modi_num].sn);
		        printf("\n");
		        printf("姓名:");
		        scanf("%s",per_inp[modi_num].name);
		        printf("\n");
                do
				{   
					getchar();
			        printf("性别(男输入m,女输入f):");
		            scanf("%c",&per_inp[modi_num].gender);
			        if((per_inp[modi_num].gender!='m')&&(per_inp[modi_num].gender!='f'))
						printf("对不起,我没看懂,请重新输入,");
				}
		        while((per_inp[modi_num].gender!='m')&&(per_inp[modi_num].gender!='f'));
		        printf("\n");
                printf("出生年月(如:19880101):");
		        scanf("%lf",&per_inp[modi_num].bir_date);
		        printf("\n");
		        printf("基本工资:");
		        scanf("%lf",&per_inp[modi_num].wage);
		        printf("\n");
		        printf("联系电话:");
		        scanf("%lf",&per_inp[modi_num].tel);
		        printf("\n");
			}
		}
		if(flag==0)
			printf("未找到该员工,");
		getchar();
	    printf("是否继续(y/n)");
    	scanf("%c",&confirm);
	}
	while(confirm=='y');
}
///////////////////////删除模块//////////////////////////
void si_delet()
{
	int flag=0;
	char confirm;
	int del_num;
    double del_sn;
	int temp;
    do
	{
		printf("请输入要删除员工信息的编号:");
		scanf("%lf",&del_sn);
		for(del_num=0;del_num<NUM;del_num++)
		{
			if(del_sn==per_inp[del_num].sn)
			{
				flag=1;
				for(temp=del_num;temp<NUM;temp++)
					per_inp[temp]=per_inp[temp+1];
			}
		}
		if(!flag)
			printf("未找到该员工,");
		getchar();
		NUM=NUM-1;
	    printf("是否继续(y/n)");
    	scanf("%c",&confirm);
	}
	while(confirm=='y');
}
///////////////////////排列总模块//////////////////////////
void si_sequence()
{
	char confirm;
	int seq_cho;
    do
	{
		printf("请输入排序条件(按1编号,按2工资):");
		scanf("%ld",&seq_cho);
		switch(seq_cho)
		{
		case 1:seq_sn();break;
		case 2:seq_wage();break;
		}
		getchar();
	    printf("是否继续(y/n)");
    	scanf("%c",&confirm);
	}
	while(confirm=='y');
}
///////////////////////按序号排列//////////////////////////
void seq_sn()
{
	struct person temp;
	int i,j;
	for(i=NUM-1;i>0;i--)
	{
		for(j=0;j<i;j++)
			if(per_inp[j].sn>per_inp[j+1].sn)
			{
				temp=per_inp[j];
				per_inp[j]=per_inp[j+1];
                per_inp[j+1]=temp;
			}
	}
	f_print(NUM,-1);
///////////////////////按工资排列//////////////////////////     
}
void seq_wage()
{
    struct person temp;
	int i,j;
	double t;
	for(i=1;i<NUM;i++)
	{
		t=per_inp[i].wage;
		temp=per_inp[i];
		j=i-1;
		while(j>=0&&t>per_inp[j].wage)
		{
			per_inp[j+1]=per_inp[j];
			j--;
		}
		per_inp[j+1]=temp;
	}
    f_print(NUM,-1);
}	
///////////////////////查找总模块//////////////////////////	

void si_search()
{
	char confirm;
	int ser_cho;
    do
	{
		printf("请输入查找方式(按1顺序,按2二分):");
		scanf("%d",&ser_cho);
		switch(ser_cho)
		{
		case 1:ser_sx();break;
		case 2:ser_ef();break;
		}
		getchar();
	    printf("是否继续(y/n)");
    	scanf("%c",&confirm);
	}
	while(confirm=='y');
}
///////////////////////二分查找//////////////////////////
void ser_ef()
{
////////////////*先按编号升序排列*///////////////////////
	struct person temp;
	int i,j;
	for(i=NUM-1;i>0;i--)
	{
		for(j=0;j<i;j++)
			if(per_inp[j].sn>per_inp[j+1].sn)
			{
				temp=per_inp[j];
				per_inp[j]=per_inp[j+1];
                per_inp[j+1]=temp;
			}
	}
///////////////////////////////////////////////////////
	  
	  int flag;
	  char confirm;
	  double ser_sn;
      int left,mid,right;
	  do
	  {  
		flag=0;
        left=0;
        right=NUM-1;
		printf("请输入要查找员工信息的编号:");
		scanf("%lf",&ser_sn);
		if(NUM>1)
		{
			while(!flag&&(per_inp[left].sn<=per_inp[right].sn))
			{   
			 mid=(left+right)/2;
			
			 if(ser_sn==per_inp[mid].sn)
				flag=1;
			 else
				if(ser_sn<per_inp[mid].sn)
					right=mid-1;
				else
					left=mid+1;
			}
		}
		if(NUM==1&&(ser_sn==per_inp[NUM-1].sn))
			f_print(0,NUM-1);
		else
		{
			if(flag==1)
				f_print(0,mid);
		    else
			     printf("未找到该员工,");
		}
		getchar();
	    printf("继续使用该查找方式(y/n)");
    	scanf("%c",&confirm);
	}
	while(confirm=='y');
}
///////////////////////顺序查找//////////////////////////
void ser_sx()
{
	int flag=0;
	char confirm;
	int ser_num;
	double ser_sn;
    do
	{
		printf("请输入要查找员工信息的编号:");
		scanf("%lf",&ser_sn);
		for(ser_num=0;ser_num<NUM;ser_num++)
		{
			if(ser_sn==per_inp[ser_num].sn)			
			{
				flag=1;
				f_print(0,ser_num);
			}
		}
		if(flag==0)
			printf("未找到该员工,");
		getchar();
	    printf("继续使用该查找方式(y/n)");
    	scanf("%c",&confirm);
	}
	while(confirm=='y');
}
///////////////////////保存主模块//////////////////////////
void si_save()
{	char confirm;
	int save_cho;
    do
	{
		printf("请输入存储方式(按1文本,按2二进制):");
		scanf("%ld",&save_cho);
		switch(save_cho)
		{
		case 1:save_txt();break;
		case 2:save_bin();break;
		}
		getchar();
	    printf("是否继续(y/n)");
    	scanf("%c",&confirm);
	}
	while(confirm=='y');
}
///////////////////////文本保存//////////////////////////
void save_txt()
{
	FILE *fp;
	int i;
	if((fp=fopen("staff.txt","w"))==NULL)
	{
		printf("文件staff.txt打开错误!");
		exit(1);
	}
	for(i=0;i<NUM;i++)
	{
		fprintf(fp,"编号:%lf\n姓名:%s\n性别:%c\n出生年月:%lf\n基本工资:%lf\n联系电话:%lf\n",per_inp[i].sn,per_inp[i].name,per_inp[i].gender,per_inp[i].bir_date,per_inp[i].wage,per_inp[i].tel);
	}
	fclose(fp);
}
///////////////////////二进制保存//////////////////////////
void save_bin()
{	
	FILE *fp;
	int i; 
	if((fp=fopen("staff.bin","wb"))==NULL)
	{
		printf("文件staff.bin打开错误!");
		exit(1);
	}
	for(i=0;i<NUM;i++)
	{
		fwrite(&per_inp,sizeof(per_inp),2,fp);
	}
	fclose(fp);

}
///////////////////////输出表格模块//////////////////////////
void f_print(int k,int l)
{
	int i,j;
	for(i=1;i<=80;i++)
		 printf("-");
	 printf("| 序号 |  编号  |    姓名    |  性别  |  出生年月  |  基本工资  |   联系电话   |");
	 for(i=1;i<=80;i++)
		 printf("-");
	 if(l==-1)
	 {
		 for(i=0;i<k;i++)
	     {
		 printf("| %-5d| %-7.0lf| %-11s|",i+1,per_inp[i].sn,per_inp[i].name);
		 if(per_inp[i].gender=='m')
			 printf("   男   ");
		 else 
			 printf("   女   ");
		 printf("| %-11.0lf|",per_inp[i].bir_date);
		 printf(" %-11.2lf|",per_inp[i].wage);
		 printf(" %-13.0lf|",per_inp[i].tel);
		 for(j=1;j<=80;j++)
		 printf("-");
	     }
	 }
	 if(l!=-1)
	 { 
		 printf("| %-5d| %-7.0lf| %-11s|",l+1,per_inp[l].sn,per_inp[l].name);
		 if(per_inp[l].gender=='m')
			 printf("   男   ");
		 else 
			 printf("   女   ");
		 printf("| %-11.0lf|",per_inp[l].bir_date);
		 printf(" %-11.2lf|",per_inp[l].wage);
		 printf(" %-13.0lf|",per_inp[l].tel);
		 for(j=1;j<=80;j++)
		  printf("-");
	  }
}
/////////////////////////////////////////////////////////////////////////////////////////////////

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -