#include <stdio.h>
#include <stdlib.h>
#include <math.h>
#include <windows.h>#define Q 15               //最大字符串长度
#define N 500              //最大员工数量 typedef struct workers{int workersID;            //职工工号char name[Q];             //职工姓名double basicsalary;       //基本工资double allowance;         //津贴double taxsalary;         //扣税double truesalary;        //实发工资
}WORKERS;                     //职工信息void Menu(int *n);                               //主菜单
void Payroll(WORKERS work[],int *p);             //建立工资表
void Taxsalary(WORKERS work[],int num);          //计算职工扣税和实发工资
void Sort(WORKERS work[],int num ) ;             //将工资从高到低排序
void Change(WORKERS work[],int num);             //修改职工的工资信息
int Find(WORKERS work[],int num);                //按工号查询职工工资信息
void Analyse(WORKERS work[],int num);            //职工工资统计分析
void Printworkroll(WORKERS work[],int num);      //显示工资明细表
void Writefile(WORKERS work[],int num);          //输出数据并写入 data.txt 文件 int main()
{   WORKERS work[N];                             //定义一个结构体数组来存储员工信息 char ch;                                     //ch为检测是否返回主菜单 int n,num=0,ret;                             //n为操作数,num为总人数,ret判断数 while(1){system("cls");Menu(&n);                                //主菜单 switch(n){case 0:system("cls");                   //退出程序 printf("退出成功!\n");exit(0);case 1:Payroll(work,&num);            //建立工资表break;case 2:Taxsalary(work,num);             //职工扣税和实发工资Writefile(work,num);             //输出数据并写入 data.txt 文件 printf("计算完成,并输出数据至txt文件!\n");Sleep(2000);system("cls");break;case 3:Sort(work,num);                  //将工资从高到低排序Printworkroll(work,num);         //显示工资明细表printf("\n是否返回主菜单?Y or N\n");fflush(stdin);ch=getchar();if(ch=='N'){exit(0);}break;case 4:Change(work,num);                //修改职工的工资信息printf("\n是否返回主菜单?Y or N\n");fflush(stdin);ch=getchar();if(ch=='N'){exit(0);}break;case 5:ret=Find(work,num);              //按工号查询职工工资信息if(ret==0){printf("查无此人!");        //反馈查询不到信息 }printf("\n是否返回主菜单?Y or N\n");fflush(stdin);ch=getchar();if(ch=='N'){exit(0);}break;case 6:Analyse(work,num);               //职工工资统计分析printf("\n是否返回主菜单?Y or N\n");fflush(stdin);ch=getchar();if(ch=='N'){exit(0);}break;}}return 0;
}void Menu(int *n)                                 //主菜单   *n为返回操作数
{int a;printf(" ——————职工工资管理系统——————\n");printf("|       1.建立职工工资表                 |\n");printf("|       2.职工扣税和实发工资             |\n");printf("|       3.实发工资从高到低排序           |\n");printf("|       4.修改职工工资信息               |\n");printf("|       5.查询职工工资信息               |\n");printf("|       6.职工工资统计分析               |\n");printf("|       0.退出系统                      |\n");printf(" ————————————————————\n");printf("提示:请输入数字序号选择对应的操作!\n");scanf("%d",&a);*n=a;system("cls");
}void Payroll(WORKERS work[],int *p)               //建立工资表
{int num=*p;char ch;do{system("cls");printf("员工(%d)的信息\n",num+1);printf("工号:");scanf("%d",&work[num].workersID);printf("姓名:");scanf("%s",&work[num].name);printf("基本工资:");scanf("%lf",&work[num].basicsalary);printf("津贴:");scanf("%lf",&work[num].allowance);printf("是否继续录入?Y or N\n"); fflush(stdin);scanf("%c",&ch);num++;}while(ch=='Y');*p=num;      //返回总人数 system("cls");
}void Taxsalary(WORKERS work[],int num)            //职工扣税和实发工资
{int i;double money;for(i=0;i<num;i++){money=work[i].basicsalary+work[i].allowance;if( money<3000){work[i].taxsalary=0;work[i].truesalary= money-work[i].taxsalary;}else if((money<4000)&&(money>=3000)){work[i].taxsalary=(money-3000)*0.05;work[i].truesalary= money-work[i].taxsalary; }else{ work[i].taxsalary=(money-3000)*0.05+(money-4000)*0.1;work[i].truesalary= money-work[i].taxsalary; } }
}void Sort(WORKERS work[],int num)                 //将工资从高到低排序
{int i,j;WORKERS temp;for (i=0;i<num-1;i++){for(j=i+1;j<num;j++)    {if (work[i].truesalary<work[j].truesalary){temp=work[j];work[j]=work[i];work[i]=temp;} }    }
} void Change(WORKERS work[],int num)               //修改职工的工资信息
{int n,i,sum;char ch;printf("修改职工的工资信息\n\n");printf("请输入你的工号:");scanf("%d",&n);putchar('\n');for( i=0;i<num;i++){if(work[i].workersID==n){printf("工号:%-10d\n",work[i].workersID);printf("姓名:%s\n",work[i].name); printf("基本工资:%6.2lf\n",work[i].basicsalary); printf("津贴:%6.2lf\n",work[i].allowance); printf("扣税:%6.2lf\n",work[i].taxsalary); printf("实发工资:%6.2lf\n",work[i].truesalary); printf("\n是否需要修改信息?Y or N\n");fflush(stdin);scanf("%c",&ch);if(ch=='Y'){printf("\n基本工资:");scanf("%lf",&work[i].basicsalary);printf("津贴:");scanf("%lf",&work[i].allowance);sum=work[i].basicsalary+work[i].allowance;if(sum<=3000){  work[i].taxsalary=0;work[i].truesalary=sum;}else if((sum<=4000)&&(sum>3000)){work[i].taxsalary=(sum-3000)*0.05;work[i].truesalary=3000+((sum-3000)*0.95);}else{work[i].taxsalary=50+(sum-4000)*0.10;work[i].truesalary=3950+((sum-4000)*0.9);}system("cls");printf("员工信息修改成功!\n\n");printf("扣税:%6.2lf\n",work[i].taxsalary); printf("实发工资:%6.2lf\n",work[i].truesalary); break;  }else{break;}   }}
} int Find(WORKERS work[],int num)                  //按工号查询职工工资信息
{int s,i,flag=0;printf("查询职工工资信息\n\n");printf("请输入您的工号:");scanf("%d",&s);putchar('\n');for(i=0;i<num;i++){if(work[i].workersID==s)                 //查询输入的工号并调用信息; {flag=1; printf("工号:%d\n",work[i].workersID);printf("姓名:%s\n",work[i].name); printf("基本工资:%.2lf\n",work[i].basicsalary); printf("津贴:%.2lf\n",work[i].allowance); printf("扣税:%.2lf\n",work[i].taxsalary); printf("实发工资:%.2lf\n",work[i].truesalary); break;}}return flag;
}void Analyse(WORKERS work[],int num)              //职工工资统计分析
{int i,s=0,m=0,l=0;      //s表示工资小于3000的人数;m表示工资在3000到4000的人数;l表示工资大于4000的人数。 double x,y,z;for(i=0;i<num;i++){if(work[i].truesalary<3000)  {s++;}    else if((work[i].truesalary<=4000)&&(work[i].truesalary>=3000)){m++;}     else{l++;}}x=(double)s/num*100;y=(double)m/num*100;z=(double)l/num*100;printf("实发工资\n");printf("(3000元以下)        人数:%d\t比例:%.2lf%%\n",s,x);              printf("(3000以上4000以下)  人数:%d\t比例:%.2lf%%\n",m,y);  printf("(4000以上)          人数:%d\t比例:%.2lf%%\n",l,z);    }void Printworkroll(WORKERS work[],int num)        //显示工资明细表
{int i;printf("工号\t姓名\t基本工资\t津贴\t扣税\t实发工资\n");for(i=0;i<num;i++){printf("%d\t",work[i].workersID);printf("%s\t",work[i].name); printf("   %.2lf\t",work[i].basicsalary); printf("%.2lf\t",work[i].allowance); printf("%.2lf\t",work[i].taxsalary); printf("%.2lf\n",work[i].truesalary); }
}void Writefile(WORKERS work[],int num)            //输出数据并写入 data.txt 文件
{ int i,j;WORKERS temp;for(i=0;i<num-1;i++){for( j=i+1;j<num;j++){if(work[i].workersID>work[j].workersID){temp=work[i];work[i]=work[j];work[j]=temp;}}}FILE *fp;if((fp=fopen("data.txt","w"))==0){printf("错误!\n");exit(0);}fprintf(fp,"职工工资管理系统\n成功录入%d人\n详表如下:\n\n",num);fprintf(fp,"工号\t姓名\t基本工资\t津贴\t扣税\t实发工资\n");for(i=0;i<num;i++){fprintf(fp,"%-10d\t",work[i].workersID);fprintf(fp,"%s\t",work[i].name); fprintf(fp,"%.2lf\t",work[i].basicsalary); fprintf(fp,"%.2lf\t",work[i].allowance); fprintf(fp,"%.2lf\t",work[i].taxsalary); fprintf(fp,"%.2lf\n",work[i].truesalary); }fclose(fp);
}

C语言|职工工资管理系统相关推荐

  1. 7-1 计算职工工资c语言,C语言职工工资管理系统

    一. 设计需求说明 一.职工工资管理系统功能设计要求 1. 输入记录:将每一个职工的姓名.ID号以及基本工资.职务工资.岗位津贴.医疗保险.公积金的数据作为一个记录.该软件能建立一个新的数据文件或给已 ...

  2. c语言课程设计 职工工资处理系统,院职工工资管理系统_C语言课程设计-2017年10月.doc...

    信息科学与技术学院 课程设计报告 2012-2013学年第一学期 课程名称:C语言课程设计上机 设计题目:院职工工资管理系统 学 号:__________________ 姓 名:__________ ...

  3. C语言源码做的职工工资管理系统课程设计(源码+课程设计报告)

    一.课程设计的目的: C语言课程设计是计算机科学与技术专业重要的实践性教学环节之一,本次设计结合实际应用的要求,使课程设计既覆盖C语言程序设计的知识点,又接近工程实际需要.本次设计的目的是通过课程设计 ...

  4. c语言 输入职工工资资料,通过结构体的数组来进行操作 报告,c语言课程设计报告-职工工资管理系统...

    <c语言课程设计报告-职工工资管理系统>由会员分享,可在线阅读,更多相关<c语言课程设计报告-职工工资管理系统(33页珍藏版)>请在人人文库网上搜索. 1.c 语言课程设计报告 ...

  5. 基于C语言编程的职工工资管理系统项目的设计与开发

    文章目录 基于C语言编程的职工工资管理系统项目的设计与开发 一.需求分析 二.项目环境 2.1.项目创建过程 2.2.向项目添加头文件与源文件 三.职工工资管理系统模块功能 3.1.系统总体设计框图 ...

  6. 职工工资程序c语言doc,职工工资管理系统C语言程序课程设计方案.doc

    职工工资管理系统C语言程序课程设计方案 1 课 程 设 计 报 告 课程名称 C语言程序设计 课题名称 职工工资管理系统 专 业 机械电子 班 级 1101班 学 号 1 姓 名 王贝贝 指导教师 肖 ...

  7. C语言课程设计_职工工资管理系统

    要求 设计一个职工工资管理系统: (1)输入记录:将每一个职工的姓名.ID号以及基本工资.职务工资.岗位津贴.医疗保险.公积金的数据作为一个记录.该软件能建立一个新的数据文件或给已建立好的数据文件增加 ...

  8. c语言代码大全500行,C语言职工档案管理系统 500多行代码1

    <C语言职工档案管理系统 500多行代码1>由会员分享,可在线阅读,更多相关<C语言职工档案管理系统 500多行代码1(17页珍藏版)>请在人人文库网上搜索. 1.1程序的总体 ...

  9. C语言编写工资管理系统类似学生管理系统

    C语言编写工资管理系统类似学生管理系统 开始界面和菜单界面B void start() //开始界面 {system("cls");//清屏 system("color ...

最新文章

  1. 马斯克:我有一个大胆的想法!给红绿灯加个AI视觉「外挂」
  2. Android怎么自定义listview布局,android – 如何将listView标头添加为自定义布局
  3. python3.5安装-Linux:Python3.5安装和配置
  4. Superset-Quick-Start-Guide翻译(没有完成)
  5. LeetCode 990. 等式方程的可满足性(并查集)
  6. 数据交互智能终端设想
  7. MySQL数据库事物隔离级别
  8. 键入一个网页后了发生什么
  9. OpenCV Cookbook by Eric
  10. Raj Reddy:从印度农村走出来的图灵奖得主
  11. Silverlight/Windows8/WPF/WP7/HTML5周学习导读(8月20日-8月26日)
  12. mybatis 自定义插件的使用
  13. BP算法的matlab代码学习
  14. 内核的解压缩过程详解
  15. 企业微信api,企业微信sdk接口java调用源码
  16. 计算机毕业设计情况进展记录表,南京理工大学泰州科技学院毕业设计(论文)进展情况记录表.doc...
  17. 电脑开热点手机无法连接,无法启用 Internet 连接共享.为 LAN 连接配置的 IP 地址需要使用自动 IP 寻址.
  18. 图书管理系统(C SQL)
  19. linux系统fasta程序,快速计算fasta序列长度的方法
  20. Jedis分析一-Pipeline is currently not supported for JedisClusterConnection.

热门文章

  1. java 淘口令_淘口令解析丶Java教程网-IT开发者们的技术天堂
  2. 动漫java从入门到入土_适合刚入宅的萌新悠哉观看的经典番,全员致郁,从入门到入土?...
  3. 网卡清空缓存命令_清除网卡中IP缓存
  4. 动作捕捉系统用于柔性机械臂的末端定位控制
  5. iOS代码混淆安全加固
  6. CD-Adapco star ccm+ v10.02.010 crack 安装教程与资源
  7. 11月获得融资的区块链企业汇总
  8. RabbitMQ mandatory参数 路由器匹配不到队列返回响应
  9. python-GUI:利用pyqt5设计一个bootloader上位机页面(ZLG驱动)及打包报错faild to execute script pyi_rth_multiprocessing精简方案
  10. 2021秋招嵌入式笔试面试题目汇总