#include <stdio.h>
#include <stdlib.h>
#include <string.h>
int g=0;
struct ZG // 结构体定义变量
{
char num[20];//职工号
char name[10];//名字
char sex[4];//性别
int age;//年龄
char bumen[30];//部门
char zhuzhi[150];//住址
float pay;//工资
char wen[15];//文化程度
}ren[220];
void duqu()
{
struct ZG c;
int a,b;
FILE *fp;
if((fp=fopen("zgzl.dat","rb+"))==NULL)
exit(0);
g=0;
while(fread(&ren[g],sizeof(struct ZG),1,fp)==1)
g++;
for (a=0;a<g;a++)
{
for (b=0;b<g-a-1;b++)
{
if (strcmp(ren[b].num,ren[b+1].num)>0)
{
c=ren[b];
ren[b]=ren[b+1];
ren[b+1]=c;
}
}
}
fclose(fp);
}
void menu()
{
system("cls");
system("color B6");
printf("\t\t********************************\n\n"); //欢迎信息
printf("\t\t 欢迎进入职工档案管理系统\n");
printf("\n\t\t********************************\n"); //管理菜单
printf("\t\t==\t1.录入职工信息\n\t\t+\n");
printf("\t\t==\t2.显示职工信息\n\t\t+\n");
printf("\t\t==\t3.查询职工信息\n\t\t+\n");
printf("\t\t==\t4.添加职工信息\n\t\t+\n");
printf("\t\t==\t5.修改职工信息\n\t\t+\n");
printf("\t\t==\t6.删除职工信息\n\t\t+\n");
printf("\t\t==\t7.退出系统\n");
printf("\t\t********************************\n");
printf("please choise 1--7:\t");
putchar(10);
}
void scanf_1()//第一次输入
{
system("cls");
system("color D1");
struct ZG c;
int a,b;
char ch;
FILE *fp;
if((fp=fopen("zgzl.dat","wb+"))==NULL)
{
system("color 4D");
printf("cannot open file\n");
exit(0);
}
g=0;
ch='y';
while(ch=='y'||ch=='Y')
{
printf("请输入职工的职工号:\t");
getchar();
gets(ren[g].num);
for(a=0;a<g;a++)
if(strcmp(ren[a].num,ren[g].num)==0)
{
a=-2;
}
if(a!=-2)
{
printf("姓名:\t");
gets(ren[g].name);
printf("性别:\t");
gets(ren[g].sex);
printf("年龄:\t");
scanf("%d",&ren[g].age);
getchar();
printf("部门:\t");
gets(ren[g].bumen);
printf("住址:\t");
gets(ren[g].zhuzhi);
printf("基本工资:\t");
scanf("%f",&ren[g].pay);
getchar();
printf("文化程度:\t");
gets(ren[g].wen);
printf("是否继续输入y or n ?\t");
g++;
}
else
{
printf("职工号重复,是否重新输入y or n ?\t");
}
// getchar();
// getchar();
ch=getchar();
}
for (a=0;a<g;a++)
{
for (b=0;b<g-a-1;b++)
{
if (strcmp(ren[b].num,ren[b+1].num)>0)
{
c=ren[b];
ren[b]=ren[b+1];
ren[b+1]=c;
}
}
}
for (a=0;a<g;a++)
{
if(ren[a].age<=0&&ren[a].age>100)
continue;
if(fwrite(&ren[a],sizeof(struct ZG),1,fp)!=1)
{
system("color 4D");
printf("file write error\n");
exit(0);
}
}
fclose(fp);
}
void printf_1()//输出
{
int a,b,s[4]={0};
char ch[20],ck;
float max,min;
do
{
system("cls");
printf("\n\t\t==\t1.按职工号显示\n\t\t+\n");
printf("\t\t==\t2.按部门显示\n\t\t+\n");
printf("\t\t==\t3.员工年龄分布\n\t\t+\n");
printf("\t\t********************************\n");
printf("please choise 1--3:\t");
scanf("%d",&a);
if(a==1)//按工号排序显示
{
printf("\n职工号\t\t\t姓名\t性别\t年龄\t部门\t\t住址\t\t\t基本工资\t文化程度\n");
for(b=0;b<g;b++)
{
if(~(ren[b].age<=0&&ren[b].age>100))
printf("%s\t\t%s\t%s\t%d\t%s\t\t%s\t%.1f\t\t%s\n",ren[b].num,ren[b].name,ren[b].sex,ren[b].age,ren[b].bumen,ren[b].zhuzhi,ren[b].pay,ren[b].wen);
}
printf("\n退出?(Y or N)");
while(ck!='y'&&ck!='Y')
ck=getchar();
}
else if(a==2)// 按部门显示
{
getchar();
do
{
printf("请输入部门名称:");
gets(ch);
printf("%s\n",ch);
printf("\n职工号\t\t\t姓名\t性别\t基本工资\n");
max=ren[0].pay;
min=ren[0].pay;
for(b=0;b<g;b++)
{
if(max<ren[b].pay)
max=ren[b].pay;
if(min>ren[b].pay)
min=ren[b].pay;
if(strcmp(ren[b].bumen,ch)==0)
if(ren[b].age>0)
printf("%s\t\t%s\t%s\t%.1f\n",ren[b].num,ren[b].name,ren[b].sex,ren[b].pay);
}
for(b=0;b<g;b++)
{
if(max==ren[b].pay)
if(~(ren[b].age<=0&&ren[b].age>100))
printf("\n 最高工资 %s\n\n%s\t\t%s\t%s\t%.1f\n",ren[b].bumen,ren[b].num,ren[b].name,ren[b].sex,ren[b].pay);
if(min==ren[b].pay)
if(~(ren[b].age<=0&&ren[b].age>100))
printf("\n 最低工资 %s\n\n%s\t\t%s\t%s\t%.1f\n",ren[b].bumen,ren[b].num,ren[b].name,ren[b].sex,ren[b].pay);
}
printf("\n继续?是(Y or y);否(N or n)");
ck=getchar();
}
while(ck=='Y'||ck=='y');
}
else if(a==3)//显示各年龄段人数
{
for(b=0;b<g;b++)
{
if(ren[b].age<=0&&ren[b].age>100)
continue;
if(ren[b].age<35)
s[0]++;
else if(ren[b].age>=36&&ren[b].age<=45)
s[1]++;
else if(ren[b].age>=46&&ren[b].age<=55)
s[2]++;
else if(ren[b].age>55&&ren[b].age<=100)
s[3]++;
}
printf("\n\t 年龄分布:\n");
printf("\t************************\n");
printf("\t1#ago: <35 : %d\n",s[0]);
printf("\t2#ago:36--45: %d\n",s[1]);
printf("\t3#ago:46--55: %d\n",s[2]);
printf("\t4#ago: >55 : %d\n",s[3]);
printf("\n退出?(Y or N)");
ck='n';
getchar();
while(ck=='N'||ck=='n')
ck=getchar();
}
system("cls");
printf("\n\t\t==\t1.按职工号显示\n\t\t+\n");
printf("\t\t==\t2.按部门显示\n\t\t+\n");
printf("\t\t==\t3.员工年龄分布\n\t\t+\n");
printf("\t\t********************************\n");
printf("\n继续?(Y or N) ");
getchar();
ck=getchar();
}
while(ck!='n'&&ck!='N');
}
void find()//查找
{
int a,b=0,c=0;
char ch[20],ck;
do
{
system("cls");
system("color F0");
printf("\n\t\t==\t1.按职工号查找\n\t\t+\n");
printf("\t\t==\t2.按姓名查找\n\t\t+\n");
printf("\t\t********************************\n");
printf("please choise 1--2:\t");
scanf("%d",&a);
if(a==1)
{
c=0;
b=0;
printf("请输入职工号:\t");
getchar();
gets(ch);
while(b<g)
{
if(strcmp(ren[b].num,ch)==0)
if(~(ren[b].age<=0&&ren[b].age>100))
{
printf("职工号\t\t\t姓名\t性别\t年龄\t部门\t\t住址\t\t\t基本工资\t文化程度\n");
printf("%s\t\t%s\t%s\t%d\t%s\t\t%s\t%.1f\t\t%s\n",ren[b].num,ren[b].name,ren[b].sex,ren[b].age,ren[b].bumen,ren[b].zhuzhi,ren[b].pay,ren[b].wen);
c++;
}
b++;
}
if(c==0) {system("color 4D");printf("对不起!没有找到相关信息:\n");}
}
else if(a==2)
{
c=0;
b=0;
printf("请输入职工的姓名:\t");
getchar();
gets(ch);
while(b<g)
{
if(strcmp(ren[b].name,ch)==0)
if(~(ren[b].age<=0&&ren[b].age>100))
{
system("color F0");
printf("职工号\t\t\t姓名\t性别\t年龄\t部门\t\t住址\t\t\t基本工资\t文化程度\n");
printf("%s\t\t%s\t%s\t%d\t%s\t\t%s\t%.1f\t\t%s\n",ren[b].num,ren[b].name,ren[b].sex,ren[b].age,ren[b].bumen,ren[b].zhuzhi,ren[b].pay,ren[b].wen);
c++;
}
b++;
}
if(c==0) {system("color 4D");printf("对不起!没有找到相关信息:\n");}
}
printf("继续查找?(y or n) ");
ck=getchar();
}
while(ck=='Y'||ck=='y');
}
void scanf_2()//二次输入
{
system("cls");
system("color A5");
int a,b;
char ch;
struct ZG c;
FILE *fp;
if((fp=fopen("zgzl.dat","wb+"))==NULL)
{
system("color 4D");
printf("cannot open file\n");
exit(0);
}
do
{
printf("请输入职工的职工号:\t");
getchar();
gets(ren[g].num);
for(a=0;a<g;a++)
{
if(strcmp(ren[a].num,ren[g].num)==0)
{
a=-2;
}
}
if(a!=-2)
{
printf("姓名:\t");
gets(ren[g].name);
printf("性别:\t");
gets(ren[g].sex);
printf("年龄:\t");
scanf("%d",&ren[g].age);
getchar();
printf("部门:\t");
gets(ren[g].bumen);
printf("住址:\t");
gets(ren[g].zhuzhi);
printf("基本工资:\t");
scanf("%f",&ren[g].pay);
getchar();
printf("文化程度:\t");
gets(ren[g].wen);
printf("是否继续输入y or n ?\t");
g++;
}
else
{
printf("职工号重复,是否重新输入y or n ?\t");
}
ch=getchar();
}
while((ch=='y')||(ch=='Y'));
for (a=0;a<g;a++)
{
for (b=0;b<g-a-1;b++)
{
if (strcmp(ren[b].num,ren[b+1].num)>0)
{
c=ren[b];
ren[b]=ren[b+1];
ren[b+1]=c;
}
}
}
for (a=0;a<g;a++)
{
if(ren[a].age<=0&&ren[a].age>100)
continue;
if(fwrite(&ren[a],sizeof(struct ZG),1,fp)!=1)
{
system("color 4D");
printf("file write error\n");
exit(0);
}
}
fclose(fp);
}
void change()//修改
{
system("cls");
system("color 9E");
int a=0,b=0,n=0;
char ch[20],ck;
struct ZG c;
FILE *fp;
if((fp=fopen("zgzl.day","wb+"))==NULL)
{
system("color 4D");
printf("cannot open file\n");
exit(0);
}
do
{
printf("请输入要修改的职工号:\t");
getchar();
gets(ch);
n++;
a=-1;
while(b<g)
{
while((strcmp(ren[b].num,ch)==0))
{
printf("职工号\t\t\t姓名\t性别\t年龄\t部门\t\t住址\t\t\t基本工资\t文化程度\n");
printf("%s\t\t%s\t%s\t%d\t%s\t\t%s\t%.1f\t\t%s\n",ren[b].num,ren[b].name,ren[b].sex,ren[b].age,ren[b].bumen,ren[b].zhuzhi,ren[b].pay,ren[b].wen);
printf("请输入职工的新信息:\n职工号:\t");
gets(ren[b].num);
for(a=0;a<g;a++)
if(strcmp(ren[a].num,ren[g].num)==0)
{
a=-2;
break;
}
if(a!=-2)
{
printf("姓名:\t");
gets(ren[b].name);
printf("性别:\t");
gets(ren[b].sex);
printf("年龄:\t");
scanf("%d",&ren[b].age);
getchar();
printf("部门:\t");
gets(ren[b].bumen);
printf("住址:\t");
gets(ren[b].zhuzhi);
printf("基本工资:\t");
scanf("%f",&ren[b].pay);
getchar();
printf("文化程度:\t");
gets(ren[b].wen);
a=b;
b++;
}
else
{
printf("职工号重复,是否重新输入 y or n ?\t");
}
}
b++;
}
if(a==-1)
{
system("color 4D");
printf("\t没有找到相关信息!\n");
getchar();
}
printf("是否继续修改?enter 'y' or 'n' \t");
ck=getchar();
system("color 9E");
}
while(ck=='y'||ck=='Y');
for (a=0;a<g;a++)
{
for (b=0;b<g-a-1;b++)
{
if (strcmp(ren[b].num,ren[b+1].num)>0)
{
c=ren[b];
ren[b]=ren[b+1];
ren[b+1]=c;
}
}
}
for (a=0;a<g;a++)
{
if(ren[a].age<=0&&ren[a].age>100)
continue;
if(fwrite(&ren[a],sizeof(struct ZG),1,fp)!=1)
{
system("color 4D");
printf("file write error\n");
exit(0);
}
}
fclose(fp);
if(b!=0)
printf("\t修改成功:\n");
}
void dell()//删除
{
system("cls");
system("color 7C");
int a=0,b=0,n=0;
char ch[20],ck;
struct ZG c;
FILE *fp;
if((fp=fopen("zgzl.day","wb+"))==NULL)
{
system("color 4D");
printf("cannot open file\n");
exit(0);
}
do
{
printf("请输入要删除的职工号:\t");
scanf("%s",ch);
n++;
a=-1;
while(b<g)
{
if((strcmp(ren[b].num,ch)==0))
if(~(ren[b].age<=0&&ren[b].age>100))
{
a=b;
printf("职工号\t\t\t姓名\t性别\t年龄\t部门\t\t住址\t\t\t基本工资\t文化程度\n");
printf("%s\t\t%s\t%s\t%d\t%s\t\t%s\t%.1f\t\t%s\n",ren[b].num,ren[b].name,ren[b].sex,ren[b].age,ren[b].bumen,ren[b].zhuzhi,ren[b].pay,ren[b].wen);
}
b++;
}
if(a==-1)
{
system("color 4D");
printf("\t没有找到相关信息!\n");
getchar();
}
else
ren[a].age=-1;
getchar();
getchar();
printf("删除成功!");
getchar();
printf("是否继续删除?enter 'y' or 'n' \t");
ck=getchar();
system("color 7C");
}
while(ck=='y'||ck=='Y');
if(b!=0)
printf("\t保存成功:\n");
for (a=0;a<g;a++)
{
for (b=0;b<g-a-1;b++)
{
if (strcmp(ren[b].num,ren[b+1].num)>0)
{
c=ren[b];
ren[b]=ren[b+1];
ren[b+1]=c;
}
}
}
for (a=0;a<g;a++)
{
if(ren[a].age<=0&&ren[a].age>100)
continue;
if(fwrite(&ren[a],sizeof(struct ZG),1,fp)!=1)
{
system("color 4D");
printf("file write error\n");
exit(0);
}
}
fclose(fp);
}
void myexit()
{
system("cls");
//int a;
char ch;
printf("\t是否确定退出?请选择 y or n: ");
getchar();
ch=getchar();
if(ch=='y'||ch=='Y') {system("color 4D");exit(0);}
else menu();
}
int main()
{
system("color B6");
int a;
duqu();
menu();
while(1)
{
scanf("%d",&a);
if(a==1)
scanf_1();
else if(a==2)
printf_1();
else if(a==3)
find();
else if(a==4)
scanf_2();
else if(a==5)
change();
else if(a==6)
dell();
else if(a==7)
myexit();
else {system("color 4D");printf("输入错误!!!请重新输入:\t");}
printf("\t按任意键继续!\n");
getchar();
menu();
}
getchar();
return 0;
}
职工管理系统
以上是职工管理系统的代码,由自己的想法和老师的建议从而构建出这个系统,经测试还有一些小bug,各位可以进行参考、改进,也可以评论提出建议,我不胜感激!