//职工管理系统
#include<stdio.h>
#include<stdlib.h>
#include<string.h>
int NUM=0; //记录程序运行期间职工总人数。
struct Data
{
int year;
int month;
int day;
};
struct Info
{
int num;
char name[8];
char sex[2];
struct Data birthday;
char duty[8];
float wage;
}Staff[100]; //职工信息
void Menu(); //主菜单函数
void NewStaff(); //新建立职工信息文件 函数
void Addto(); //添加职工函数(职工工号)
void Out(); //输出职工信息函数
void Search(); //搜索指定工号职工的函数
void Modify(); //修改指定工号职工信息的函数
void Save(); //保存到文件函数
void Delete(); //删除指定工号的职工函数
void Sort(); //按照职工工号排序的函数
void Menu()
{
printf(" 欢迎来到职工管理系统\n");
printf("**********************************************************\n");
printf(" 1、新建职工信息\n");
printf(" 2、添加职工信息\n");
printf(" 3、输出教职工信息\n");
printf(" 4、查找职工信息\n");
printf(" 5、修改职工信息\n");
printf(" 6、删除指定工号的职工信息\n");
printf(" 7、按职工号排序并输出\n");
printf("**********************************************************\n");
}
void NewStaff()
{
FILE *fp;
fp=fopen("StaffInfo.dat","wb");
NUM=0;
if(fp==NULL)
{
printf("打开文件失败!\n");
return ;
}
printf("请输入员工信息,当员工工号为0时结束。\n");
do{
printf("请输入员工信息:\n");
printf("工号:"); scanf("%d",&Staff[NUM].num);getchar();
if(Staff[NUM].num==0) break;
printf("姓名:"); gets(Staff[NUM].name);
printf("性别:"); gets(Staff[NUM].sex);
printf("生日:年/月/日"); scanf("%d%d%d",&Staff[NUM].birthday.year,&Staff[NUM].birthday.month,&Staff[NUM].birthday.day); getchar();
printf("学历:"); gets(Staff[NUM].duty);
printf("工资:"); scanf("%f",&Staff[NUM].wage);
fwrite(&Staff[NUM],sizeof(struct Info),1,fp);
NUM++;
}while(1);
fclose(fp);
}
void Addto()
{
FILE *fp;
fp=fopen("StaffInfo.dat","ab");
if(fp==NULL)
{
printf("打开文件失败!\n");
return;
}
printf("请输入添加员工信息,当员工工号为0时结束。\n");
do{
printf("请输入员工信息:\n");
printf("工号:"); scanf("%d",&Staff[NUM].num);getchar();
if(Staff[NUM].num==0) break;
printf("姓名:"); gets(Staff[NUM].name);
printf("性别:"); gets(Staff[NUM].sex);
printf("生日:年/月/日"); scanf("%d%d%d",&Staff[NUM].birthday.year,&Staff[NUM].birthday.month,&Staff[NUM].birthday.day); getchar();
printf("学历:"); gets(Staff[NUM].duty);
printf("工资:"); scanf("%f",&Staff[NUM].wage);
fwrite(&Staff[NUM],sizeof(struct Info),1,fp);
NUM++;
}while(1);
fclose(fp);
}
void Out()
{
int i;
printf("本企业所有员工信息(%d个)如下:\n",NUM);
printf("工号\t姓名\t性别\t生日\t\t学历\t工资\n");
for(i=0;i<NUM;i++)
printf("%d\t%s\t%s\t%d-%d-%d\t%s\t%.0f\n",Staff[i].num,Staff[i].name,Staff[i].sex,
Staff[i].birthday.year,Staff[i].birthday.month,Staff[i].birthday.day,Staff[i].duty,Staff[i].wage);
}
void Search()
{
int n,i;
printf("现在有%d个员工:",NUM);
printf("请输入要查找的职工工号:");
scanf("%d",&n);getchar();
for(i=0;i<NUM;i++)
if(Staff[i].num==n)
{
printf("工号为:%d的职工的基本信息如下:\n",n);
printf("工号\t姓名\t性别\t生日\t\t学历\t工资\n");
printf("%d\t%s\t%s\t%d-%d-%d\t%s\t%.0f\n",Staff[i].num,Staff[i].name,Staff[i].sex,
Staff[i].birthday.year,Staff[i].birthday.month,Staff[i].birthday.day,Staff[i].duty,Staff[i].wage);
break;
}
if(i>=NUM) printf("无%d职工!\n",n);
}
void Modify()
{
int n,i;
FILE *fp;
char name[8];
char sex[2];
struct Data birthday;
char duty[8];
float wage;
do
{
printf("请输入要修改的职工工号(输入工号为0时结束):");
scanf("%d",&n);getchar();
if(n==0) break;
for(i=0;i<NUM;i++)
if(Staff[i].num==n)
{
printf("工号:"); scanf("%d",&Staff[i].num); getchar();
printf("姓名:"); gets(Staff[i].name);
printf("性别:"); gets(Staff[i].sex);
printf("生日:年/月/日"); scanf("%d%d%d",&Staff[i].birthday.year,&Staff[i].birthday.month,&Staff[i].birthday.day); getchar();
printf("学历:"); gets(Staff[i].duty);
printf("工资:"); scanf("%f",&Staff[i].wage);
break;
}
if(i>=NUM) printf("无%d职工!\n",n);
}while(1);
//数据修改后重新写入文件
Save();
printf("修改后的职工信息如下:\n");
Out();
}
void Save()
{
//数据修改后重新写入文件
FILE *fp;
int i;
fp=fopen("StaffInfo.dat","wb");
if(fp==NULL)
{
printf("打开文件失败!\n");
return ;
}
for(i=0; i<NUM; i++)
fwrite(&Staff[i],sizeof(struct Info),1,fp);
fclose(fp);
}
void Delete()
{
int n,i,j;
do{
printf("请输入要删除的职工工号(输入0时结束):");
scanf("%d",&n);getchar();
if(n==0) break;
for(i=0;i<NUM;i++)
if(Staff[i].num==n)
{ for(j=i+1;j<NUM; j++)
Staff[j-1]=Staff[j];
NUM--;
}
if(i>=NUM) printf("没有这工号为%d的这个个人!",n);
}while(1);
Save();
Out();
}
void Sort()
{
struct Info t;
int i,j;
for(i=1;i<NUM-1;i++)
for(j=0; j<NUM-i; j++) //i=2,NUM,NUM-2;
if(Staff[j].num > Staff[j+1].num)
{ t=Staff[j];
Staff[j]=Staff[j+1];
Staff[j+1]=t;
}
Save();
printf("按照排序后:\n");
Out();
}
int main()
{
int i=0;
char c;
FILE *fp;
//打开文件已有信息,并读入数组StaffIfo,职工个数由外部变量NUM记录。
fp=fopen("StaffInfo.dat","rb");
if(fp!=NULL)
do
{ fread(&Staff[i],sizeof(struct Info),1,fp);
}while(!feof(fp) && Staff[i++].num!=0);
NUM=i;
printf("NUM=%d\n",NUM);
printf("本企业所有员工信息如下:\n");
printf("工号\t姓名\t性别\t生日\t\t学历\t工资\n");
for(i=0;i<NUM;i++)
{
printf("%d\t%s\t%s\t%d-%d-%d\t%s\t%.0f\n",Staff[i].num,Staff[i].name,Staff[i].sex,
Staff[i].birthday.year,Staff[i].birthday.month,Staff[i].birthday.day,Staff[i].duty,Staff[i].wage);
}
fclose(fp);
Menu();
do
{
printf("请输入需要操作的菜单命令的序号:\n");
scanf("%d",&i);getchar();
switch(i)
{
case 1:NewStaff();break;
case 2:Addto();break;
case 3:Out();break;
case 4:Search();break;
case 5:Modify();break;
case 6:Delete();break;
case 7:Sort();break;
default:printf("输入有误!请重修输入!\n");break;
}
printf("你还要继续操作吗?继续请输入“Y”,不继续请输入“N”\n");
c=getchar();getchar();
if(c=='Y'||c=='y') Menu();
else exit(0);
}while(1);
system("pause");
return 0;
}