经验首页 前端设计 程序设计 Java相关 移动开发 数据库/运维 软件/图像 大数据/云计算 其他经验
当前位置:技术经验 » 程序设计 » C 语言 » 查看文章
C语言实现职工工资管理系统
来源:jb51  时间:2022/2/28 8:51:20  对本文有异议

本文实例为大家分享了C语言实现职工工资管理系统的具体代码,供大家参考,具体内容如下

设计要求:

模拟并设计一个企业的职工工资管理系统,职工信息包括工号、姓名、基本工资、津贴,设职工人数不超过500人,以菜单选项的方式完成相应的功能,主要功能需求如下:

1、建立工资表;

2、职工扣税和实发工资;

3、按实发工资从高到低的顺序显示工资明细表;

4、修改职工的工资信息;

5、按工号查询职工工资信息;

6、职工工资统计分析;

7、退出系统。

基本思路:

将职工工资管理系统的职工信息录入功能、数据处理并存入文件功能、按照职工工号查找职工工资信息功能、修改职工信息功能分成多个模块,为了使程序的可读性更强,程序的编写将以函数形式编写封装各个功能,然后在主函数中以循环形式读取用户输入的指令,根据用户的指令选择不同的函数入口地址,从而执行不同的操作,实现设计要求的职工工资管理系统的各项功能。

全部代码:

  1. #include <stdio.h>?
  2. #include <stdlib.h>
  3. #include <math.h>
  4. #include <windows.h>
  5.  
  6.  
  7. #define Q 15 ? ? ? ? ? ? ? //最大字符串长度?
  8. #define N 500 ? ? ? ? ? ? ?//最大员工数量?
  9.  
  10.  
  11. typedef struct workers{
  12. ?? ?int workersID; ? ? ? ? ? ?//职工工号
  13. ?? ?char name[Q]; ? ? ? ? ? ? //职工姓名
  14. ?? ?double basicsalary; ? ? ? //基本工资
  15. ?? ?double allowance; ? ? ? ? //津贴
  16. ?? ?double taxsalary; ? ? ? ? //扣税
  17. ?? ?double truesalary; ? ? ? ?//实发工资
  18. }WORKERS; ? ? ? ? ? ? ? ? ? ? //职工信息
  19.  
  20.  
  21. void Menu(int *n); ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? //主菜单?
  22. void Payroll(WORKERS work[],int *p); ? ? ? ? ? ? //建立工资表?
  23. void Taxsalary(WORKERS work[],int num); ? ? ? ? ?//计算职工扣税和实发工资
  24. void Sort(WORKERS work[],int num ) ; ? ? ? ? ? ? //将工资从高到低排序
  25. void Change(WORKERS work[],int num); ? ? ? ? ? ? //修改职工的工资信息
  26. int Find(WORKERS work[],int num); ? ? ? ? ? ? ? ?//按工号查询职工工资信息
  27. void Analyse(WORKERS work[],int num); ? ? ? ? ? ?//职工工资统计分析?
  28. void Printworkroll(WORKERS work[],int num); ? ? ?//显示工资明细表
  29. void Writefile(WORKERS work[],int num); ? ? ? ? ?//输出数据并写入 data.txt 文件?
  30.  
  31. ?? ?
  32. int main()
  33. { ??
  34. ?? ?WORKERS work[N]; ? ? ? ? ? ? ? ? ? ? ? ? ? ? //定义一个结构体数组来存储员工信息?
  35. ?? ?char ch; ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? //ch为检测是否返回主菜单?
  36. ?? ?int n,num=0,ret; ? ? ? ? ? ? ? ? ? ? ? ? ? ? //n为操作数,num为总人数,ret判断数?
  37. ?? ?while(1){
  38. ?? ??? ?system("cls");
  39. ?? ??? ?Menu(&n); ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ?//主菜单?
  40. ?? ??? ?
  41. ?? ??? ?switch(n){
  42. ?? ??? ??? ?case 0:
  43. ?? ??? ??? ??? ?system("cls"); ? ? ? ? ? ? ? ? ? //退出程序?
  44. ?? ??? ??? ??? ?printf("退出成功!\n");
  45. ?? ??? ??? ??? ?exit(0);
  46. ?? ??? ??? ?case 1:
  47. ?? ??? ??? ??? ?Payroll(work,&num); ?? ??? ??? ? //建立工资表
  48. ?? ??? ??? ??? ?break;
  49. ?? ??? ??? ?case 2:
  50. ?? ??? ??? ??? ?Taxsalary(work,num); ? ? ? ? ? ? //职工扣税和实发工资
  51. ?? ??? ??? ??? ?Writefile(work,num); ? ? ? ? ? ? //输出数据并写入 data.txt 文件?
  52. ?? ??? ??? ??? ?printf("计算完成,并输出数据至txt文件!\n");
  53. ?? ??? ??? ??? ?Sleep(2000);
  54. ?? ??? ??? ??? ?system("cls");
  55. ?? ??? ??? ??? ?break;
  56. ?? ??? ??? ?case 3:
  57. ?? ??? ??? ??? ?Sort(work,num); ? ? ? ? ? ? ? ? ?//将工资从高到低排序
  58. ?? ??? ??? ??? ?Printworkroll(work,num); ? ? ? ? //显示工资明细表
  59. ?? ??? ??? ??? ?printf("\n是否返回主菜单?Y or N\n");
  60. ?? ??? ??? ??? ?fflush(stdin);
  61. ?? ??? ??? ??? ?ch=getchar();
  62. ?? ??? ??? ??? ?if(ch=='N'){
  63. ?? ??? ??? ??? ??? ?exit(0);
  64. ?? ??? ??? ??? ?}
  65. ?? ??? ??? ??? ?break;
  66. ?? ??? ??? ?case 4:
  67. ?? ??? ??? ??? ?Change(work,num); ? ? ? ? ? ? ? ?//修改职工的工资信息
  68. ?? ??? ??? ??? ?printf("\n是否返回主菜单?Y or N\n");
  69. ?? ??? ??? ??? ?fflush(stdin);
  70. ?? ??? ??? ??? ?ch=getchar();
  71. ?? ??? ??? ??? ?if(ch=='N'){
  72. ?? ??? ??? ??? ??? ?exit(0);
  73. ?? ??? ??? ??? ?}
  74. ?? ??? ??? ??? ?break;
  75. ?? ??? ??? ?case 5:
  76. ?? ??? ??? ??? ?ret=Find(work,num); ? ? ? ? ? ? ?//按工号查询职工工资信息
  77. ?? ??? ??? ??? ?if(ret==0){
  78. ?? ??? ??? ??? ??? ?printf("查无此人!"); ? ? ? ?//反馈查询不到信息?
  79. ?? ??? ??? ??? ?}
  80. ?? ??? ??? ??? ?printf("\n是否返回主菜单?Y or N\n");
  81. ?? ??? ??? ??? ?fflush(stdin);
  82. ?? ??? ??? ??? ?ch=getchar();
  83. ?? ??? ??? ??? ?if(ch=='N'){
  84. ?? ??? ??? ??? ??? ?exit(0);
  85. ?? ??? ??? ??? ?}
  86. ?? ??? ??? ??? ?break;
  87. ?? ??? ??? ?case 6:
  88. ?? ??? ??? ??? ?Analyse(work,num); ? ? ? ? ? ? ? //职工工资统计分析
  89. ?? ??? ??? ??? ?printf("\n是否返回主菜单?Y or N\n");
  90. ?? ??? ??? ??? ?fflush(stdin);
  91. ?? ??? ??? ??? ?ch=getchar();
  92. ?? ??? ??? ??? ?if(ch=='N'){
  93. ?? ??? ??? ??? ??? ?exit(0);
  94. ?? ??? ??? ??? ?}
  95. ?? ??? ??? ??? ?break;
  96. ?? ??? ?}
  97. ?? ?}
  98. ?? ?return 0;
  99. }
  100.  
  101.  
  102. void Menu(int *n) ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? //主菜单 ? *n为返回操作数?
  103. {
  104. ?? ?int a;
  105. ?? ?printf(" ——————职工工资管理系统——————\n");
  106. ?? ?printf("| ? ? ? 1.建立职工工资表 ? ? ? ? ? ? ? ? |\n");
  107. ?? ?printf("| ? ? ? 2.职工扣税和实发工资 ? ? ? ? ? ? |\n");
  108. ?? ?printf("| ? ? ? 3.实发工资从高到低排序 ? ? ? ? ? |\n");
  109. ?? ?printf("| ? ? ? 4.修改职工工资信息 ? ? ? ? ? ? ? |\n");
  110. ?? ?printf("| ? ? ? 5.查询职工工资信息 ? ? ? ? ? ? ? |\n");
  111. ?? ?printf("| ? ? ? 6.职工工资统计分析 ? ? ? ? ? ? ? |\n");
  112. ?? ?printf("| ? ? ? 0.退出系统 ? ? ? ? ? ? ? ? ? ? ? |\n");
  113. ?? ?printf(" ————————————————————\n");
  114. ?? ?printf("提示:请输入数字序号选择对应的操作!\n");
  115. ?? ?scanf("%d",&a);
  116. ?? ?*n=a;
  117. ?? ?system("cls");
  118. }
  119.  
  120.  
  121. void Payroll(WORKERS work[],int *p) ? ? ? ? ? ? ? //建立工资表?
  122. {
  123. ?? ?int num=*p;
  124. ?? ?char ch;
  125. ?? ?do{
  126. ?? ??? ?system("cls");
  127. ?? ??? ?printf("员工(%d)的信息\n",num+1);
  128. ?? ??? ?printf("工号:");
  129. ?? ??? ?scanf("%d",&work[num].workersID);
  130. ?? ??? ?printf("姓名:");
  131. ?? ??? ?scanf("%s",&work[num].name);
  132. ?? ??? ?printf("基本工资:");
  133. ?? ??? ?scanf("%lf",&work[num].basicsalary);
  134. ?? ??? ?printf("津贴:");
  135. ?? ??? ?scanf("%lf",&work[num].allowance);
  136. ?? ??? ?printf("是否继续录入?Y or N\n");?
  137. ?? ??? ?fflush(stdin);
  138. ?? ??? ?scanf("%c",&ch);
  139. ?? ??? ?num++;
  140. ?? ?}while(ch=='Y');
  141. ?? ?
  142. ?? ?*p=num; ? ? ?//返回总人数?
  143. ?? ?system("cls");
  144. }
  145.  
  146.  
  147. void Taxsalary(WORKERS work[],int num) ? ? ? ? ? ?//职工扣税和实发工资
  148. {
  149. ?? ?
  150. ?? ?int i;
  151. ?? ?double money;
  152. ?? ?for(i=0;i<num;i++)
  153. ?? ?{
  154. ?? ??? ?money=work[i].basicsalary+work[i].allowance;
  155. ?? ??? ?if( money<3000)
  156. ?? ??? ?{
  157. ?? ? ??? ??? ?work[i].taxsalary=0;
  158. ?? ? ?? ??? ?work[i].truesalary= money-work[i].taxsalary;
  159. ? ??? ??? ?}
  160. ?? ??? ?else if((money<4000)&&(money>=3000))
  161. ?? ??? ?{
  162. ?? ??? ??? ?work[i].taxsalary=(money-3000)*0.05;
  163. ?? ??? ??? ?work[i].truesalary= money-work[i].taxsalary;?
  164. ?? ??? ?}
  165. ?? ??? ?else
  166. ?? ??? ?{?
  167. ?? ??? ??? ?work[i].taxsalary=(money-3000)*0.05+(money-4000)*0.1;
  168. ?? ??? ??? ?work[i].truesalary= money-work[i].taxsalary;?
  169. ?? ??? ?}?
  170. ?? ?}
  171. }
  172.  
  173.  
  174. void Sort(WORKERS work[],int num) ? ? ? ? ? ? ? ? //将工资从高到低排序
  175. {
  176. ?? ?int i,j;
  177. ? ? WORKERS temp;
  178. ?? ?for (i=0;i<num-1;i++)
  179. ?? ?{
  180. ?? ??? ?for(j=i+1;j<num;j++) ? ?
  181. ?? ??? ?{
  182. ?? ??? ??? ?if (work[i].truesalary<work[j].truesalary)
  183. ?? ??? ??? ?{
  184. ?? ??? ??? ??? ?temp=work[j];
  185. ? ? ? ? ? ? ? ? work[j]=work[i];
  186. ? ? ? ? ? ? ? ? work[i]=temp;
  187. ?? ??? ??? ?}?
  188. ?? ??? ?}?? ?
  189. ?? ?}
  190. }?
  191.  
  192.  
  193. void Change(WORKERS work[],int num) ? ? ? ? ? ? ? //修改职工的工资信息
  194. {
  195. ?? ?int n,sum;
  196. ?? ?char ch;
  197. ?? ?printf("修改职工的工资信息\n\n");
  198. ?? ?printf("请输入你的工号:");
  199. ?? ?scanf("%d",&n);
  200. ?? ?putchar('\n');
  201. ?? ?for(int i=0;i<num;i++){
  202. ?? ??? ?if(work[i].workersID==n){
  203. ?? ??? ??? ?printf("工号:%-10d\n",work[i].workersID);
  204. ?? ??? ??? ?printf("姓名:%s\n",work[i].name);?
  205. ?? ??? ??? ?printf("基本工资:%6.2lf\n",work[i].basicsalary);?
  206. ?? ??? ??? ?printf("津贴:%6.2lf\n",work[i].allowance);?
  207. ?? ??? ??? ?printf("扣税:%6.2lf\n",work[i].taxsalary);?
  208. ?? ??? ??? ?printf("实发工资:%6.2lf\n",work[i].truesalary);?
  209. ?? ??? ??? ?printf("\n是否需要修改信息?Y or N\n");
  210. ?? ??? ??? ?fflush(stdin);
  211. ?? ??? ??? ?scanf("%c",&ch);
  212. ?? ??? ??? ?if(ch=='Y'){
  213. ?? ??? ??? ??? ?printf("\n基本工资:");
  214. ?? ??? ??? ??? ?scanf("%lf",&work[i].basicsalary);
  215. ?? ??? ??? ??? ?printf("津贴:");
  216. ?? ??? ??? ??? ?scanf("%lf",&work[i].allowance);
  217. ?? ??? ??? ??? ?sum=work[i].basicsalary+work[i].allowance;
  218. ?? ??? ??? ??? ?if(sum<=3000){ ?
  219. ?? ??? ??? ??? ??? ?work[i].taxsalary=0;
  220. ?? ??? ??? ??? ??? ?work[i].truesalary=sum;
  221. ?? ??? ??? ??? ?}
  222. ?? ??? ??? ??? ?else if((sum<=4000)&&(sum>3000)){
  223. ?? ??? ??? ??? ??? ?work[i].taxsalary=(sum-3000)*0.05;
  224. ?? ? ? ??? ??? ??? ?work[i].truesalary=3000+((sum-3000)*0.95);
  225. ?? ??? ??? ??? ?}
  226. ?? ? ? ?? ??? ??? ?else{
  227. ?? ? ? ??? ??? ??? ?work[i].taxsalary=50+(sum-4000)*0.10;
  228. ?? ? ? ??? ??? ??? ?work[i].truesalary=3950+((sum-4000)*0.9);
  229. ?? ??? ??? ??? ?}
  230. ?? ??? ??? ??? ?system("cls");
  231. ?? ??? ??? ??? ?
  232. ?? ??? ??? ??? ?printf("员工信息修改成功!\n\n");
  233. ?? ??? ??? ??? ?printf("扣税:%6.2lf\n",work[i].taxsalary);?
  234. ?? ??? ??? ??? ?printf("实发工资:%6.2lf\n",work[i].truesalary);?
  235. ?? ??? ??? ??? ?
  236. ?? ??? ??? ??? ?break;?? ?
  237. ?? ??? ??? ?}
  238. ?? ??? ??? ?else{
  239. ?? ??? ??? ??? ?break;
  240. ?? ??? ??? ?}?? ?
  241. ?? ??? ?}
  242. ?? ?}
  243. }?
  244.  
  245.  
  246. int Find(WORKERS work[],int num) ? ? ? ? ? ? ? ? ?//按工号查询职工工资信息
  247. {
  248. ?? ?int s,i,flag=0;
  249. ?? ?printf("查询职工工资信息\n\n");
  250. ?? ?printf("请输入您的工号:");
  251. ?? ?scanf("%d",&s);
  252. ?? ?putchar('\n');
  253. ?? ?for(i=0;i<num;i++)
  254. ?? ?{
  255. ?? ??? ?if(work[i].workersID==s) ? ? ? ? ? ? ? ? //查询输入的工号并调用信息;?
  256. ?? ??? ?{
  257. ?? ??? ??? ?flag=1;?
  258. ?? ??? ??? ?printf("工号:%d\n",work[i].workersID);
  259. ?? ??? ??? ?printf("姓名:%s\n",work[i].name);?
  260. ?? ??? ??? ?printf("基本工资:%.2lf\n",work[i].basicsalary);?
  261. ?? ??? ??? ?printf("津贴:%.2lf\n",work[i].allowance);?
  262. ?? ??? ??? ?printf("扣税:%.2lf\n",work[i].taxsalary);?
  263. ?? ??? ??? ?printf("实发工资:%.2lf\n",work[i].truesalary);?
  264. ?? ??? ??? ?break;
  265. ?? ??? ?}
  266. ? ? }
  267. ? ? return flag;
  268. }
  269.  
  270.  
  271. void Analyse(WORKERS work[],int num) ? ? ? ? ? ? ?//职工工资统计分析
  272. {
  273. ?? ?int i,s=0,m=0,l=0; ? ? ?//s表示工资小于3000的人数;m表示工资在3000到4000的人数;l表示工资大于4000的人数。?
  274. ?? ?double x,y,z;
  275. ?? ?for(i=0;i<num;i++)
  276. ?? ?{
  277. ?? ??? ?if(work[i].truesalary<3000)?? ?
  278. ?? ??? ?{
  279. ?? ??? ??? ?s++;
  280. ?? ??? ?}?? ?
  281. ?? ??? ?else if((work[i].truesalary<=4000)&&(work[i].truesalary>=3000))
  282. ?? ??? ?{
  283. ?? ??? ??? ?m++;
  284. ?? ??? ?}?? ??? ?
  285. ?? ??? ?else
  286. ?? ??? ?{
  287. ?? ??? ??? ?l++;
  288. ?? ??? ?}
  289. ?? ?}
  290. ? ? x=(double)s/num*100;
  291. ?? ?y=(double)m/num*100;
  292. ?? ?z=(double)l/num*100;
  293. ?? ?printf("实发工资\n");
  294. ?? ?printf("(3000元以下) ? ? ? ?人数:%d\t比例:%.2lf%%\n",s,x); ? ? ??? ??? ?
  295. ?? ?printf("(3000以上4000以下) ?人数:%d\t比例:%.2lf%%\n",m,y); ?? ?
  296. ?? ?printf("(4000以上) ? ? ? ? ?人数:%d\t比例:%.2lf%%\n",l,z); ?? ?
  297. ?? ?
  298. }
  299.  
  300.  
  301. void Printworkroll(WORKERS work[],int num) ? ? ? ?//显示工资明细表
  302. {
  303. ?? ?printf("工号\t姓名\t基本工资\t津贴\t扣税\t实发工资\n");
  304. ?? ?for(int i=0;i<num;i++){
  305. ?? ??? ?printf("%d\t",work[i].workersID);
  306. ?? ??? ?printf("%s\t",work[i].name);?
  307. ?? ??? ?printf(" ? %.2lf\t",work[i].basicsalary);?
  308. ?? ??? ?printf("%.2lf\t",work[i].allowance);?
  309. ?? ??? ?printf("%.2lf\t",work[i].taxsalary);?
  310. ?? ??? ?printf("%.2lf\n",work[i].truesalary);?
  311. ?? ?}
  312. }
  313.  
  314.  
  315. void Writefile(WORKERS work[],int num) ? ? ? ? ? ?//输出数据并写入 data.txt 文件
  316. {?
  317. ?? ?WORKERS temp;
  318. ?? ?for(int i=0;i<num-1;i++)
  319. ?? ?{
  320. ?? ??? ?for(int j=i+1;j<num;j++)
  321. ?? ??? ?{
  322. ?? ??? ??? ?if(work[i].workersID>work[j].workersID)
  323. ?? ??? ??? ?{
  324. ?? ??? ??? ? ? ?temp=work[i];
  325. ?? ??? ??? ? ? ?work[i]=work[j];
  326. ?? ??? ??? ? ? ?work[j]=temp;
  327. ?? ??? ??? ?}
  328. ?? ??? ?}
  329. ?? ?}
  330. ?? ?
  331. ?? ?FILE *fp;
  332. ?? ?if((fp=fopen("data.txt","w"))==0){
  333. ?? ??? ?printf("错误!\n");
  334. ?? ??? ?exit(0);
  335. ?? ?}
  336. ?? ?fprintf(fp,"职工工资管理系统\n成功录入%d人\n详表如下:\n\n",num);
  337. ?? ?fprintf(fp,"工号\t姓名\t基本工资\t津贴\t扣税\t实发工资\n");
  338. ?? ?for(int i=0;i<num;i++){
  339. ?? ??? ?fprintf(fp,"%-10d\t",work[i].workersID);
  340. ?? ??? ?fprintf(fp,"%s\t",work[i].name);?
  341. ?? ??? ?fprintf(fp,"%.2lf\t",work[i].basicsalary);?
  342. ?? ??? ?fprintf(fp,"%.2lf\t",work[i].allowance);?
  343. ?? ??? ?fprintf(fp,"%.2lf\t",work[i].taxsalary);?
  344. ?? ??? ?fprintf(fp,"%.2lf\n",work[i].truesalary);?
  345. ?? ?}
  346. ?? ?fclose(fp);
  347. }

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持w3xue。

 友情链接:直通硅谷  点职佳  北美留学生论坛

本站QQ群:前端 618073944 | Java 606181507 | Python 626812652 | C/C++ 612253063 | 微信 634508462 | 苹果 692586424 | C#/.net 182808419 | PHP 305140648 | 运维 608723728

W3xue 的所有内容仅供测试,对任何法律问题及风险不承担任何责任。通过使用本站内容随之而来的风险与本站无关。
关于我们  |  意见建议  |  捐助我们  |  报错有奖  |  广告合作、友情链接(目前9元/月)请联系QQ:27243702 沸活量
皖ICP备17017327号-2 皖公网安备34020702000426号