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

📄 企业员工管理系统.c

📁 有密码功能 密码加密功能 在wintc编译通过
💻 C
📖 第 1 页 / 共 3 页
字号:
			printf("请你输入身体情况:\n");
			printf("1好2为一般3为差\n");
			fflush(stdin);
			
			scanf("%c",&em[i].state);
			if(em[i].state<49||em[i].state>51)
			{printf("您的输入有误,请重新输入\n");
			stateflag=1;}
			else stateflag=0;
			
		}while(stateflag); //49  --->1  . --53  --->5
		
		printf("\n");
		printf("是否继续输入?(y/n)\n");
		fflush(stdin);
		scanf("%s",&choice);
		fwrite(&em[i],sizeof(struct employee),1,fp);
 }while(choice=='y'||choice=='Y');
 if(choice!='y'||choice!='Y')
 {
	 fclose(fp);
	 printf("输入完毕,任意键返回\n");
	 getch();
	 return;
 }
}


void mdisplay()
{
	FILE *fp;
	int i;
	if((fp=fopen("employee.txt","r"))==NULL)
		return;
	printf("输出结果:\n");
	printf("工号\t职位\t\t姓名\t年龄\t性别\t文化程度\t工资\t身体情况\n");
	for(i=0;fread(&em[i],sizeof(struct employee),1,fp)!=0;i++)//读出每行信息并输出
	{
		printf("%s\t",em[i].num);
		switch(em[i].position)
		{
		case '1':printf("董事长\t\t");break;
		case '2':printf("总经理\t\t");break;
		case '3':printf("副总经理\t");break;
		case '4':printf("经理\t\t");break;
		case '5':printf("副经理\t\t");break;
		case '6':printf("秘书\t\t");break;
		case '7':printf("技术员\t\t");break;
		case '8':printf("领班\t\t");break;
		case '9':printf("员工\t\t");break;
		}
		printf("%s\t",em[i].name);
		printf("%s\t",em[i].age);
		switch(em[i].sex)
		{
		case 'm':printf("男\t");break;
		case 'f':printf("女\t");break;
		}
		switch(em[i].cult)
		{
		case '1':printf("专家\t\t");break;
		case '2':printf("博士\t\t");break;
		case '3':printf("硕士\t\t");break;
		case '4':printf("学士\t\t");break;
		case '5':printf("其他\t\t");break;
		}
		printf("%s\t",em[i].salary);
		switch(em[i].state)
		{
		case '1':printf("好\n");break;
		case '2':printf("一般\n");break;
		case '3':printf("差\n");break;
		}
		
	}
	printf("\n完毕按任意键返回\n");
	getch();
    fclose(fp);
    //return;
}

/*
修改员工信息功能的实现
*/
void mchange()
{
	FILE *fp;
	int count=0; //记录文件中记录的条数
	/*emp1用于存放修改后的信息,empd用于循环读取文件中的内容,*temp修改时使用*/
	struct employee emp1,empd,*temp;
	int i;
	
	int choicechange;
	printf("请你输入要修改的人的姓名:\n");
	scanf("%s",emp1.name);
	if((fp=fopen("employee.txt","rb"))==NULL)
	{
		printf("不能够打开这个文件\n");
		return;
	}
	while(fread(&empd,sizeof(struct employee),1,fp))//循环查找是否存在该信息
	{
		if(strcmp(emp1.name,empd.name)==0)  //如果存在显示可以修改的信息
		{
			
			
			
			printf("这是你要修改的人的信息\n");
			printf("工号\t职位\t\t姓名\t年龄\t性别\t文化程度\t工资\t身体情况\n");
			printf("%s\t",empd.num);
			switch(empd.position)
			{
			case '1':printf("董事长\t\t");break;
			case '2':printf("总经理\t\t");break;
			case '3':printf("副总经理\t");break;
			case '4':printf("经理\t\t");break;
			case '5':printf("副经理\t\t");break;
			case '6':printf("秘书\t\t");break;
			case '7':printf("技术员\t\t");break;
			case '8':printf("领班\t\t");break;
			case '9':printf("员工\t\t");break;
			}
			printf("%s\t",empd.name);
			printf("%s\t",empd.age);
			switch(empd.sex)
			{
			case 'm':printf("男\t");break;
			case 'f':printf("女\t");break;
			}
			switch(empd.cult)
			{
			case '1':printf("专家\t\t");break;
			case '2':printf("博士\t\t");break;
			case '3':printf("硕士\t\t");break;
			case '4':printf("学士\t\t");break;
			case '5':printf("其他\t\t");break;
			}
			printf("%s\t",em[i].salary);
			switch(empd.state)
			{
			case '1':printf("好\n");break;
			case '2':printf("一般\n");break;
			case '3':printf("差\n");break;
			}
			do{
				printf("------------------------------------------------------------\n");
				printf("请你输入要修改的部分:\n");
				printf("======================\n");
				printf("1修改职位\n");
				printf("2修改文化程度\n");
				printf("3修改工资\n");
				printf("4修改身体情况\n");
				printf("0修改完成,返回上一层\n");
				printf("======================\n");
				printf("请选择\n");
				emp1=empd;
				fflush(stdin);
				scanf("%d",&choicechange);
				switch(choicechange)  //根据选择的修改内容,调用相应的函数实现相应的修改功能
				{
				case 1:
					emp1.position=changeposition(); //修改职务
					break;
				case 2:
					emp1.cult=changecult();     //修改文化程度
					break;
				case 3:
					changesalary(emp1.salary);  //修改工资
					break;
				case 4:
					emp1.state=changestate();  //修改身体情况
					break;
				case 0:
					return;
				default :
					printf("输入有错误");
				}
			}while(1);
			rewind(fp);
			
			
			/*该循环结构用于获得文件中记录的条数*/
			while(fread(&empd,sizeof(struct employee),1,fp))
			{
				count++;
			}
			/*开辟一片存储空间用于存放这些数据*/
			temp=(struct employee *)malloc(count*(sizeof(struct employee)));
			rewind(fp);//文件指针回到起始的位置
			/*将文件中内容读入到内存中*/
			fread(temp,sizeof(struct employee),count,fp);
			fclose(fp);
			/*清空文件中的内容*/
			if((fp=fopen("EMPLOYEE.TXT","w")==NULL)){
				printf("Error Create new telefon.dat file");
				return;
			}
			else
			{
				fclose(fp);
				fp=fopen("EMPLOYEE.TXT","a");
				/*循环写入到文件中*/
				for(i=0;i<count;i++)
				{
					if(strcmp(temp[i].name,emp1.name)==0)
						//当遇到和emp1名字相同的记录时,写入新的信息
						fwrite(&emp1,sizeof(struct employee),1,fp);
					else
						fwrite(&temp[i],sizeof(struct employee),1,fp);
			} }
  }
  else printf("您要修改的人的信息不存在\n");
  
 } 
 fclose(fp);
 printf("操作完成按任意键返回\n");
 getch();
 return;
}

/*获取修改的职务信息*/
char changeposition()   //修改职务信息
{
	char newposition;
	
	do{   printf("\n");
	printf("请您输入职位:\n");
	printf("1为董事长2为总经理3为副总经理\n");
	printf("4为经理5为副经理6为秘书\n");
	printf("7为技术员8为领班9为员工\n");
	fflush(stdin);
	scanf("%c",&newposition);
	if(newposition<49||newposition>57)
		printf("您的输入有误,请重新输入\n");
	
	}while(newposition<49||newposition>57); //49  --->1  . --57  --->9
	return(newposition);
}


/*获取修改的学历文凭信息*/
char changecult() //修改学历文凭
{
	char newcult;
	
	do{  printf("\n");
	printf("请你输入文化程度:\n");
	printf("1为专家2为博士3为硕士4为学士5为其他\n");
	fflush(stdin);
	
	scanf("%c",&newcult);
	if(newcult<49||newcult>53)
		printf("您的输入有误,请重新输入\n");
	
	}while(newcult<49||newcult>53); //49  --->1  . --53  --->5
	
	
	return(newcult);
}

/*获取修改的工资信息*/
void changesalary(char input[])  //修改工资
{
	int i=0;
	printf("请你输入新的工资:\n");
	do
    {
        input[i]=getch();
        if (input[i]<48||input[i]>57)
			;
        else
        {
			if(input[i]==8)
			{
				if(i>0)
				{
					printf("\b \b");
					i--;
				}
				continue;
			}
			printf("%c",input[i]);
			i++;
        }
        if(input[i]==13&&i!=0)
			break;
		
    }
    while (input[i]>48||input[i]<57);
    input[i]='\0';
}

/*获取修改的健康状况信息*/
char changestate()  //修改健康状况
{
	char newstate;
	int stateflag;
	do{ 
		printf("\n");
		printf("请你输入身体情况:\n");
		printf("1好2为一般3为差\n");
		fflush(stdin);
		
		scanf("%c",&newstate);
		if(newstate<49||newstate>51)
		{printf("您的输入有误,请重新输入\n");
		stateflag=1;}
		else stateflag=0;
		
	}while(stateflag); //49  --->1  . --53  --->5
	return(newstate);
}

/*该段程序实现的功能是向文件中追加一条记录*/
void madd()//追加一个职工信息
{
	struct employee emp;
	FILE *fp;
	int sexflag,stateflag,flag=1,agei=0,salaryi=0;
	do{
		if((fp=fopen("employee.txt","ab+"))==NULL)
		{
			printf("不能够打开这个文件\n");
			getch();
			return;
		}
		printf("请你输入新人的内容:\n");
		printf("请你输入工号:\n");
		fflush(stdin);
		scanf("%s",emp.num);
		
		
		
		do{   printf("\n");
		printf("请您输入职位:\n");
		printf("1为董事长2为总经理3为副总经理\n");
		printf("4为经理5为副经理6为秘书\n");
		printf("7为技术员8为领班9为员工\n");
		fflush(stdin);
		scanf("%c",&emp.position);
		if(emp.position<49||emp.position>57)
			printf("您的输入有误,请重新输入\n");
		
		}while(emp.position<49||emp.position>57); //49  --->1  . --57  --->9
		
		printf("\n");
		printf("请你输入姓名:\n");
		fflush(stdin);
		scanf("%s",emp.name);
		
		do{   printf("\n");
        printf("请你输入性别以m为男f为女:\n");
		fflush(stdin);
		scanf("%c",&emp.sex);
		if(emp.sex==102||emp.sex==109)
			sexflag=0;
		else
		{
			printf("您的输入有误,请重新输入\n");
			sexflag=1;
		}
		
		}while(sexflag);
		
		
		printf("请输入年龄\n");
		fflush(stdin);
		do
		{
			emp.age[agei]=getch();
			if (emp.age[agei]<48||emp.age[agei]>57)
				;
			else
			{
				if(emp.age[agei]==8)
				{
					if(agei>0)
					{
						printf("\b \b");
						agei--;
					}
					continue;
				}
				printf("%c",emp.age[agei]);
				agei++;
			}
			if(emp.age[agei]==13&&agei!=0)
				break;
			
		}
		while (emp.age[agei]>48||emp.age[agei]<57);
		emp.age[agei]='\0';
		
		
		do{  printf("\n");
		printf("请你输入文化程度:\n");
		printf("1为专家2为博士3为硕士4为学士5为其他\n");
		fflush(stdin);
		
		scanf("%c",&emp.cult);
		if(emp.cult<49||emp.cult>53)
			printf("您的输入有误,请重新输入\n");
		
		}while(emp.cult<49||emp.cult>53); //49  --->1  . --53  --->5
		
		printf("\n");
		printf("请你输入工资\n");
		fflush(stdin);
		do
		{
			emp.salary[salaryi]=getch();
			if (emp.salary[salaryi]<48||emp.salary[salaryi]>57)
				;
			else
			{
				if(emp.salary[salaryi]==8)
				{
					if(salaryi>0)
					{
						printf("\b \b");
						salaryi--;
					}
					continue;
				}
				printf("%c",emp.salary[salaryi]);
				salaryi++;
			}
			if(emp.salary[salaryi]==13&&salaryi!=0)
				break;
			
		}
		while (emp.salary[salaryi]>48|emp.salary[salaryi]<57);
		emp.salary[salaryi]='\0';
		do{ 
			printf("\n");
			printf("请你输入身体情况:\n");
			printf("1好2为一般3为差\n");
			fflush(stdin);
			
			scanf("%c",&emp.state);
			if(emp.state<49||emp.state>51)
			{printf("您的输入有误,请重新输入\n");
			stateflag=1;}
			else stateflag=0;
			
		}while(stateflag); //49  --->1  . --53  --->5
		
		printf("\n");
		
		
		fwrite(&emp,sizeof(struct employee),1,fp);
		rewind(fp);
		//printf("插入完毕,按任意键返回\n");
		//getch();
		fclose(fp);
		printf("插入完毕,是否继续?(Y/N)\n");
		fflush(stdin);
		scanf("%c",&flag);
		if(flag=='y'||flag=='Y') //只有if(choice1=='y'||choice1=='Y')才可行if(choice1!='y'||choice1!='Y')不可行
			;
		else return;
		
}while(1);
return;
}

/*
删除一个员工信息功能的实现,其实现的方法与修改类似
教学过程中可引导学生自己解决
*/
void mdelete()//删除一个职工信息
{
	int i=0,count=0;
	char flag;
	struct employee emp1,empd,*temp;
	FILE *fp;
	do{
		if((fp=fopen("employee.txt","rb"))==NULL)
		{
			printf("文件为空,不能够打开\n");
			printf("按任意键返回\n");
			getch();
			return;
		}
		printf("请你输入要删除的人的姓名:\n");//删除的职工的信息
		scanf("%s",emp1.name);
		rewind(fp);
		while(fread(&empd,sizeof(struct employee),1,fp)) //循环查找该员工信息
		{
			if(strcmp(empd.name,emp1.name)!=0) //不一样 ,返回

⌨️ 快捷键说明

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