📄 企业员工管理系统.c
字号:
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 + -