职工工资管理系统

 

#include<stdlib.h>
#include<stdio.h>
#include<string.h>
#include<conio.h>
#define HEADER1 " ------------------------------职工工资表---------------------------------------  \n"
#define HEADER2 "|职工工号|  职工姓名 | 职工年龄| 职工性别 |  基本工资 |  岗位工资 | 总工资| \n"
#define HEADER3 "|--------|-----------|---------|----------|-----------|-----------|-------| \n"
#define FORMAT  "|%-8s|%-10s |%-9d|%-10s|%-11.0f|%-11.0f|%-7.0f|\n"
#define DATA      p->num,p->name,p->age,p->sex,p->jbgz,p->gwgz,p->zgz
#define END     "------------------------------------------------------------------- --------\n"
#define N 5
/********************************************************************************************************
       定义结构体
*********************************************************************************************************/
/*定义与职工有关的数据结构*/
typedef struct emp    /*标记为emp*/
{
 char num[10];   /*职工编号*/
 char name[15];  /*职工姓名*/
 int age;     /*年龄*/
 char  sex[10];       /*性别*/
 float jbgz;       /*基本工资*/
 float gwgz;     /*岗位工资*/
 float zgz;      /*总工资*/
}EMP;
void save(EMP emp[] ,int n);
int Locate(EMP emp[],int n);
/****************************************************************************************************
       显示菜单
****************************************************************************************************/
char displaymenu()
{
        char  k;
        system("cls");   
           printf("                          职工工资系统                            \n");
           printf("     *************************菜单********************************\n");
           printf("     *  1 添加职工信息               2 输出职工信息              *\n");
           printf("     *  3 查询职工信息               4 修改职工信息              *\n");
           printf("     *  5 职工工资排序               6 职工工资统计              *\n");
           printf("     *  7 导出数据                   8 导入数据                  *\n");
           printf("     *  9 退出系统                                               *\n");
     printf("                                         请选择你想进行的操作:");
        
     k=getchar();
     printf("     ***************************************************************\n");

           return k;

}
/******************************************************************************************************
       定义输出函数
*******************************************************************************************************/
void printheader() /*格式化输出表头*/
{
  printf(HEADER1);
  printf(HEADER2);
  printf(HEADER3);
}
void printdata(EMP pp) /*格式化输出表中数据*/
{
 EMP* p;
 p=&pp;
 printf(FORMAT,DATA);
}
/************************************************************************************
      添加职工信息
************************************************************************************/
int add(EMP emp[] ,int  *n)
{  
    int i=0;
    system("cls");
 printf("*****************请输入职工信息********\n");
 printf("请输入职工工号:\n");
 scanf("%s",emp[i].num);
    while(strcmp(emp[i].num,"0") )
  {
    printf("请输入职工姓名: \n");
    scanf("%s",emp[i].name);
    printf("请输入职工年龄:\n ");
    scanf("%d",&emp[i].age);
    printf("请输入职工性别: \n");
    scanf("%s",emp[i].sex);
    printf("请输入职工基本工资: \n");
    scanf("%f",&emp[i].jbgz);
    printf("请输入职工岗位工资: \n");
    scanf("%f",&emp[i].gwgz);
    emp[i].zgz=emp[i].jbgz+emp[i].gwgz;
    printf("职工总工资:\n %-8.0f\n",emp[i].zgz);
       i++;
    printf("请输入职工工号:\n");
    scanf("%s",emp[i].num);
  }
     *n=i;
    save(emp ,i);
 return i; 
}
/*****************************************************************************************************
      显示函数
******************************************************************************************************/  
void Disp(EMP emp[],int n)  /*显示数组emp[]中存储的记录,内容为employee结构中定义的内容*/
{
 int i;
 system("cls");
 if(n==0)  /*表示没有职工工资记录*/
 {
  printf("\n=====>没有职工记录!\n"); 
 }
 
 printf("\n\n");
 printheader(); /*输出表格头部*/
 i=0;
 while(i<n)    /*逐条输出数组中存储的职工信息*/
 {
  printdata(emp[i]);
  i++;
  printf(HEADER3);
 }
 getchar(); 
}
/*********************************************************************************************************
    查询职工信息函数
**********************************************************************************************************/
int Locate(EMP emp[],int n)
{
 int k,m=-1;
 char num[10],name[20];
 int i=0;
 system("cls");
 printf("请选择以什么方式查询:1.按职工工号查询     2.按职工姓名查询       \n ");
 scanf("%d",&k);
 if(k==1)
 {
  printf("请输入你要查询的职工工号:\n");
  scanf("%s",num);
  while(i<n)
  {
   if(strcmp(emp[i].num,num)==0) /*若找到工号*/
   { 
    printf("职工工号:%s\n职工姓名:%s\n职工年龄:%d\n职工性别:%s\n职工基本工资:%-8.0f\n职工岗位工资:%-8.0f\n职工总工资:%-8.0f\n",emp[i].num,emp[i].name,emp[i].age,emp[i].sex,emp[i].jbgz,emp[i].gwgz,emp[i].zgz);
    m=i;
    getchar();
    break;
   }  
   i++; 
  }
  if(i>=n)
   printf("没有所找职工信息\n");
  getchar();
 }
 else if(k==2)
 {
  printf("请输入你要查询的职工姓名:\n");
  scanf("%s",name);
  while(i<n)
  {
   if(strcmp(emp[i].name,name)==0) /*若找到姓名*/
   { printf("职工工号:%s\n职工姓名:%s\n职工年龄:%d\n职工性别:%s\n职工基本工资:%-8.0f\n职工岗位工资:%-8.0f\n职工总工资:%-8.0f\n",emp[i].num,emp[i].name,emp[i].age,emp[i].sex,emp[i].jbgz,emp[i].gwgz,emp[i].zgz);
       m=i;
       getchar();
       break;
   }   
   i++;
  }
  if(i>=n)
   printf("没有所找职工信息\n");
 }
 return m;/*返回一个整数m*/
 getchar();
}
/************************************************************************************************
修改职工信息。先按输入的职工编号查询到该记录,然后提示用户修改编号之外的值,编号不能修改
*************************************************************************************************/
void Modify(EMP emp[],int n)

 int i;
 if(n<=0)
 {
  system("cls");
     printf("\n=====>No employee record!\n");
     getchar();
     return ;
 }
 system("cls");
 printf("修改职工信息");
 Disp(emp,n);
 i=Locate(emp,n); /*查询到该数组元素,并返回下标值*/
 if(i!=-1) /*若p!=-1,表明已经找到该数组元素*/
 {
  printf("请输入新的职工信息: \n");
  printf("职工工号:\n");
  scanf("%s",emp[i].num);
  printf("职工姓名: \n");
  scanf("%s",emp[i].name);
  printf("职工年龄:\n ");
  scanf("%d",&emp[i].age);
  printf("职工性别: \n");
  scanf("%s",emp[i].sex);
  printf("职工基本工资: \n");
  scanf("%f",&emp[i].jbgz);
  printf("职工岗位工资: \n");
  scanf("%f",&emp[i].gwgz);
  emp[i].zgz=emp[i].jbgz+emp[i].gwgz;
  printf("职工总工资:\n %-8.0f\n",emp[i].zgz);
        save(emp ,n);
  printf("\n=====>修改成功!\n");
  getchar();
  Disp(emp,n);
  getchar(); 
 }
 else
  printf("没有职工信息\n");
    getchar();
}
/************************************************************************************************
          统计公司的员工的工资在各等级的人数
 ************************************************************************************************/
void Tongji(EMP emp[],int n)
{
   int count2000=0,count3000=0,count0=0;
   int i=0;
  system("cls");
    Disp(emp,n);
i=0;
while(i<n)
{
  if(emp[i].zgz>=3000) {count3000++;i=i+1;continue;}  /*实发工资>3000*/
  if(emp[i].zgz>=2000)  {count2000++;i=i+1;continue;}   /*2000<=实发工资<3000*/
  if(emp[i].zgz<2000)   {count0++;i=i+1;continue;}      /*实发工资<2000*/
}
printf("\n------------------------------the TongJi result--------------------------------\n");
printf("zgz  >=   3000:%d (ren)\n",count3000);
printf("2000<=zgz<3000:%d (ren)\n",count2000);
printf("zgz  <    2000:%d (ren)\n",count0);
printf("-------------------------------------------------------------------------------\n");
printf("\n\n**************统计结束****************");
getchar();
}
/************************************************************************************************
          导出数据
************************************************************************************************/
void save(EMP emp[],int n)
{
 FILE* fp;
 int i=0;
 fp=fopen("emp","wb+");/*以只写方式打开二进制文件*/
 if(fp==NULL) /*打开文件失败*/
 {
  printf("\n=====>打开文件错误!\n");
  return ;
 }
 for(i=0;i<n;i++)
 {
  if(fwrite(&emp[i],sizeof(EMP),1,fp)==1)/*每次写一条记录或一个结构数组元素至文件*/
  {
   continue;
  }
  else
  {
   break;
  }
 }
 if(i>0)
 {
  getchar();
  printf("\n\n*******导出完成,总共导出个数为:%d     ********************\n",i);
  getchar();
 
 }
 else
 {
  system("cls");
     printf("************没有信息导出!!!********************\n");
     getchar();
 }
 fclose(fp); /*关闭此文件*/
}
/**************************************************************************************
    导入数据
**************************************************************************************/
void Read(EMP emp[],int  * n)
{
 FILE* fp;
 int i=0;
 fp=fopen("emp","rb");/*以只读方式打开二进制文件*/
 if(fp==NULL) /*打开文件失败*/
 {
  printf("\n=====>打开文件错误!\n");
  exit(0);
  
 }
 for(i=0;i<N;i++)
 {
  if(fread(&emp[i],sizeof(EMP),1,fp)==1)/*如果读过程发生错误*/
   continue;
  else
   break;
 }
 *n=i;
 if(i>0)
 {
  printf("\n\n******导入完成,总共导入个数为:%d    **************\n",i);
  getchar();
  
 }
 else
 { system("cls");
   printf("************没有信息导入!!!********************\n");
   getchar();
  
 }
 getchar();
 fclose(fp); /*关闭此文件*/
}
/**********************************************************************************************
           职工总工资排序
**********************************************************************************************/    
/*用冒泡法对职工总工资排序*/
void sort(EMP emp[],int n)
{
 int i,j;
    float t;
   for(i=0;i<n;i++)
   for(j=0;j<n-i;j++)
   if(emp[j].zgz<emp[j+1].zgz)
   {
    t=emp[j].zgz;
    emp[j].zgz=emp[j+1].zgz;
    emp[j+1].zgz=t;
   }
 Disp(emp,n);  /*显示排序后的所有记录*/
 save(emp ,n);
   printf("\n    =====>sort complete!\n");
 }
/*选择法对职工总工资排序*
void sort1(EMP emp[],int n)
{int i,j,k;
 float t;
 for(i=0; i<N-1; i++)
 {k=i;
  for(j=i+1; j<N; j++)
    if(emp[j].zgz>emp[k].zgz) k=j;
  if (k!=i)                
   {t=emp[i].zgz; emp[i].zgz=emp[k].zgz;emp[k].zgz=t;}     /* a[i]和a[k]互换 *
   Disp(emp,n);  /*显示排序后的所有记录*
   saveflag=1;
   printf("\n    =====>sort complete!\n");

}
}
/*用冒泡法对职工总工资排序*/


/*用插入法对职工总工资排序*
void sort2(EMP emp[],int n)
{int i,p,j;
float t;
for(i=1;i<n;i++)
{
 t=emp[i].zgz;
 for(p=0;p<i;p++)
  if(emp[p].zgz<t)
   break;
  if(p==i)
   continue;
  for(j=i;j>p;j--)
   emp[j].zgz=emp[j-1].zgz;
  emp[p].zgz=t;
}
Disp(emp,n);  /*显示排序后的所有记录*
printf("\n    =====>sort complete!\n");
} */

/*****************************************************************************************************
          主函数
*****************************************************************************************************/
void main()
{
 EMP  emp[N];
 int n;
 char s1[8],s2[8]={"123456"};
 int i,k;
 
 for(i=0;i<3;i++)
 {
  printf("\n请输入密码:");
  gets(s1);
  
  
  if(strcmp(s1,s2)==0)
   break;
  else
   printf("\n密码错误请重新输入");
 }
 if(i>2)
 { 
  printf("\n您已连续3次将用户名或密码输错,系统将退出!\n");
  exit(0);
 }
 else
 {
  while(1)
  {
   k=displaymenu();
   switch(k)
   { 
     case '1' : add(emp,&n); break;
     case '2' : Read(emp,&n);Disp(emp,n) ;break;
     case '3' : Read(emp,&n);Locate(emp,n);break;
     case '4' : Read(emp,&n);Modify(emp,n);;break;
     case '5' : Read(emp,&n);sort(emp,n);break;
        case '6' : Read(emp,&n);Tongji(emp,n); break;
     case '7' : save(emp,n) ;break;
     case '8' : Read(emp,&n);break;
     case '9' : system("cls");printf("*******系统退出,谢谢使用********\n");exit(0);break;
     default :  printf("输入错误,输入必须是0~9之间的一个数字!请重新输入\n");getchar();getchar();
   }
  }
 }
}

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值