要求

设计一个职工工资管理系统:

  1. (1)输入记录:将每一个职工的姓名、ID号以及基本工资、职务工资、岗位津贴、医疗保险、公积金的数据作为一个记录。该软件能建立一个新的数据文件或给已建立好的数据文件增加记录。
  2. (2)显示记录:根据用户提供的记录或者根据职工姓名显示一个或几个职工的各项工资和平均工资。
  3. (3)修改记录:可以对数据文件的任意记录的数据进行修改并在修改前后对记录内容进行显示。
  4. (4)查找记录:可以对数据文件的任意记录的数据进行查找并在查找前后对记录内容进行显示。
  5. (5)删除记录:可删除数据文件中的任一记录。
  6. (6)统计: (A)计算各项工资平均工资及总工资, (B)统计符合指定条件(如职工工资前三项之和在3000元以上、3000~2000元、2000~1000元) 以内的工资职工人数及占总职工人数的百分比。(C)按字符表格形式打印全部职工工资信息表及平均工资(包括各项总的平均工资)。
  7. (7)保存数据文件功能。

课程设计说明书

(1)系统分析:包括系统功能模块划分、数据的存储和记录属性分析
(2)概要设计:本程序功能模块根据程序设计的要求,将程序划分为6个模块分别编写。六个模块分别为:
1.输入职工基本信息模块
2.显示职工基本信息模块
3.修改职工基本信息模块
4.查找职工基本信息模块
5.删除职工基本信息模块 
6.统计职工基本信息模块

源代码

#include<stdio.h>
#include<windows.h>
#include<string.h>
#include<conio.h>
#define N 100
struct clerk
{int num;         char name[20];   int jbgz;        int zwgz;       int jt;          int yb;         int gjj;        int total;
}em[100];
void menu();        //菜单界面
void input();       //输入
void save(int);     //保存文件
void display();     //显示职工文件
void del();         //删除
void search();      //查找
void search_num();  //按工号
void search_name(); //按姓名
void modify();      //修改
void sta();         //统计
void start();       //开始
void start()
{system("cls");    //清屏printf("\n\n\n\n\n\n");printf("********进入职工工资管理系统**********");
}
void menu()
{system("cls"); printf("***菜单***\n\n");printf(">>>>>>>>>>>>>>>>>>>>>>>>>  1  输入  \n\n");printf(">>>>>>>>>>>>>>>>>>>>>>>>>  2  显示  \n\n");printf(">>>>>>>>>>>>>>>>>>>>>>>>>  3  查找  \n\n");printf(">>>>>>>>>>>>>>>>>>>>>>>>>  4  删除  \n\n");printf(">>>>>>>>>>>>>>>>>>>>>>>>>  5  添加  \n\n");printf(">>>>>>>>>>>>>>>>>>>>>>>>>  6  修改  \n\n");printf(">>>>>>>>>>>>>>>>>>>>>>>>>  7  统计  \n\n");printf(">>>>>>>>>>>>>>>>>>>>>>>>>  8  退出  \n\n");}
void input()
{int i,m;system("cls");printf("职工人数(1--100):");scanf("%d",&m);for (i=0;i<m;i++){printf("请输入职工号: ");scanf("%d",&em[i].num);printf("请输入姓名:  ");scanf("%s",&em[i].name);getchar();printf("请输入基本工资:  ");scanf("%d",&em[i].jbgz);printf("请输入职务工资:  ");scanf("%d",&em[i].zwgz);printf("请输入津贴:  ");scanf("%d",&em[i].jt);printf("请输入医疗保险:  ");scanf("%d",&em[i].yb);printf("请输入公积金:  ");scanf("%d",&em[i].gjj);em[i].total=((em[i].jbgz)+(em[i].zwgz)+(em[i].jt)-(em[i].yb)-(em[i].gjj));printf("\n");}printf("\n创建完毕!\n");save(m);
}
void save(int m)          //开始界面
{int i;FILE*fp;          //声明fp是指针,用来指向FILE类型的对象if ((fp=fopen("clerk_list","wb"))==NULL)   //打开职工列表文件为空{printf ("打开失败\n");exit(0);}for (i=0;i<m;i++)              //将内存中职工的信息输出到磁盘文件中去if (fwrite(&em[i],sizeof(struct clerk),1,fp)!=1)    //写入数据块printf("文件读写错误\n");fclose(fp);               //关闭文件
}
int load()
{FILE*fp;int i=0;if((fp=fopen("clerk_list","rb"))==NULL){printf ("cannot open file\n");exit(0);}else {do {fread(&em[i],sizeof(struct clerk),1,fp);     //读取i++;}while(feof(fp)==0);       //检测文件结束符}fclose(fp);return(i-1);    //返回人数
}
void display()         //显示信息
{int i,sum=0;int m=load();system("cls");printf("职工号   姓名   基本工资  职务工资   津贴    医疗保险  公积金   总工资 \n");for(i=0;i<m;i++){printf("\n  %-6d%-6s  %-8d  %-8d  %-8d  %-8d  %-8d %-8d  ",em[i].num,em[i].name,em[i].jbgz,em[i].zwgz,em[i].jt,em[i].yb,em[i].gjj,em[i].total);sum+=em[i].total;}printf("\n\n职工平均工资为:%d \n",sum/m);
}
void del()
{int m=load();int i,j,n,t,button;char name[20];printf("\n 原来的职工信息:\n");display(); printf("\n");printf("按姓名删除:\n");scanf("%s",name);for(button=1,i=0;button&&i<m;i++) //主函数中确定button==1时各函数才可以被调用{if(strcmp(em[i].name,name)==0)    //按员工姓名查找到某员工 并调出其资料{printf("\n此人原始记录为:\n");  //显示选定员工的信息printf("职工号   姓名   基本工资  职务工资   津贴    医疗保险  公积金   总工资 \n");printf("\n  %-6d%-6s  %-8d  %-8d  %-8d  %-8d  %-8d %-8d  ",em[i].num,em[i].name,em[i].jbgz,em[i].zwgz,em[i].jt,em[i].yb,em[i].gjj,em[i].total);  printf("\n确定删除 请按1,不删除请按0\n");  scanf("%d",&n);if(n==1){for(j=i;j<m-1;j++)//从第i项开始 将后一项的各成员的值赋给前一项各对应的成员 完成对第i项的删除{strcpy(em[j].name,em[j+1].name);em[j].num=em[j+1].num;em[j].jbgz=em[j+1].jbgz;em[j].zwgz=em[j+1].zwgz;em[j].jt=em[j+1].jt;em[j].yb=em[j+1].yb;  em[j].gjj=em[j+1].gjj;em[j].total=em[j+1].total;}button=0;   //表明删除已完成}}}if(!button)m=m-1;  //总员工数减少一人elseprintf("\n查无此人!\n");printf("\n 删除后的所有职工信息:\n");save(m);    display();  printf("\n继续删除请按1,不再删除请按0\n");scanf("%d",&t);switch(t){case 1:del();break;case 0:break;default :break;}
}
void search()   //查找
{int t,button;system("cls");do{printf("\n按1 按工号查询\n按2 按姓名查询\n按3 回主菜单\n");scanf("%d",&t);if(t>=1&&t<=3){button=1;break;}else{button=0;printf("输入错误");}}while(button==0);while(button==1){switch(t)   //选择查询方式{ case 1:printf("按工号查询");search_num();break;case 2:printf("按姓名查询");search_name();break;case 3:button=1;break;default:break;}}}
void search_num()   //按职工号查询
{int a;int i,t;int m=load();printf("请输入要查找的职工号:\n");scanf("%d",&a);for(i=0;i<m;i++)if(a==em[i].num){  printf("职工号   姓名   基本工资  职务工资   津贴    医疗保险  公积金   总工资 \n");printf("\n  %-6d%-6s  %-8d  %-8d  %-8d  %-8d  %-8d %-8d  ",em[i].num,em[i].name,em[i].jbgz,em[i].zwgz,em[i].jt,em[i].yb,em[i].gjj,em[i].total);   break;}if(i==m)  printf("\n对不起,查无此人\n");printf("\n");printf("返回查询函数请按1,继续查询职工号请按2\n");scanf("%d",&t);switch(t){ case 1:search();break;case 2: break;default:break;}
}
void search_name()   //按姓名查询
{char name[30];int i,t;int m=load();printf("请输入姓名:\n");scanf("%s",name);for(i=0;i<m;i++)if(strcmp(em[i].name,name)==0){printf("\n已找到,其记录为:\n");printf("职工号   姓名   基本工资  职务工资   津贴    医疗保险  公积金   总工资 \n");printf("\n  %-6d%-6s  %-8d  %-8d  %-8d  %-8d  %-8d %-8d  ",em[i].num,em[i].name,em[i].jbgz,em[i].zwgz,em[i].jt,em[i].yb,em[i].gjj,em[i].total);      }if(i==m) printf("\n\n");printf("\n");printf("返回查询菜单请按1,继续查询姓名请按2\n");scanf("%d",&t);switch(t){ case 1:search();break;case 2:break;default :break;}}
void modify()    //修改
{int num;char name[20];int jbgz;  int zwgz;int jt;int yb;int gjj;int b,c,i,n,t,button;int m=load();system("cls");printf("\n 原来的职工信息:\n");display(); printf("\n");printf("请输入要修改的职工的姓名:\n");scanf("%s",name);for(button=1,i=0;button&&i<m;i++){if(strcmp(em[i].name,name)==0){printf("\n此人原始记录为:\n");printf("职工号   姓名   基本工资  职务工资   津贴    医疗保险  公积金   总工资 \n");printf("\n  %-6d%-6s  %-8d  %-8d  %-8d  %-8d  %-8d %-8d  ",em[i].num,em[i].name,em[i].jbgz,em[i].zwgz,em[i].jt,em[i].yb,em[i].gjj,em[i].total);    printf("\n确定 按1 ; 不修改请按0\n");scanf("%d",&n);if(n==1){printf("\n需要进行修改的选项\n 1.职工号 2.姓名 3.基本工资 4.职务工资 5.津贴 6.医疗保险 7.公积金 8.返回上层\n");  printf("请选择序号1-8:\n");  scanf("%d",&c);  if(c>8||c<1)  printf("\n选择错误,请重新选择!\n");  }button=0;}      }if(button==1)printf("\n查无此人\n");do  {switch(c)      {  case 1:printf("职工号改为: ");scanf("%d",&num);em[i-1].num=num;break;  case 2:printf("姓名改为: ");scanf("%s",name);strcpy(em[i-1].name,name); break;  case 3:printf("基本工资改为: ");getchar();scanf("%d",&jbgz);em[i-1].jbgz=jbgz;em[i-1].total=( em[i-1].jbgz+ em[i-1].zwgz + em[i-1].jt- em[i-1].yb- em[i-1].gjj);break;  case 4:printf("职务工资改为: ");scanf("%d",&zwgz);em[i-1].zwgz=zwgz;em[i-1].total=( em[i-1].jbgz+ em[i-1].zwgz + em[i-1].jt- em[i-1].yb- em[i-1].gjj);break;  case 5:printf("津贴改为: ");scanf("%d",&jt);em[i-1].jt=jt; em[i-1].total=( em[i-1].jbgz+ em[i-1].zwgz + em[i-1].jt- em[i-1].yb- em[i-1].gjj);break;  case 6:printf("医疗保险改为: ");scanf("%d",&yb);em[i-1].yb=yb;em[i-1].total=( em[i-1].jbgz+ em[i-1].zwgz + em[i-1].jt- em[i-1].yb- em[i-1].gjj);break;  case 7:printf("公积金改为: ");scanf("%d",&gjj);em[i-1].gjj=gjj;em[i-1].total=( em[i-1].jbgz+ em[i-1].zwgz + em[i-1].jt- em[i-1].yb- em[i-1].gjj);break;  case 8:modify(); break;  }printf("\n");printf("\n\n 确定修改 请按1 ; 重新修改 请按2:  \n"); scanf("%d",&b);}    while(b==2);printf("\n修改后的所有职工信息:\n");printf("\n");save(m);display();printf("\n按1 继续修改 ,不再修改请按0\n");scanf("%d",&t);switch(t){case 1:modify();break;case 0:break;default :break;}
}
void sta()    //统计
{int i;int sum=0; int a=0,b=0,c=0;int m=load();system("cls");for(i=0;i<m;i++) {sum+=em[i].total;if((em[i].total)<=2000&&em[i].total>=1000) {a++;}if(em[i].total>2000&&em[i].total<=3000) {b++;}if(em[i].total>3000) {c++;}}printf("\n\n工资总额为:%d\n",sum);printf("平均工资为:%d\n",sum/m);printf("\n基本工资、职务工资、津贴之和\n");printf("在1000-2000圆的员工占总员工的百分之%d\n",a*100/m); printf("在2000-3000圆的员工占总员工的百分之%d\n",b*100/m); printf("在3000圆以上的员工占总员工的百分之%d\n",c*100/m);printf("\n\n按任意键继续");getch();menu();
}
void main()
{   int n,button;start();getch();menu();do{printf("功能选择(1--7):");scanf("%d",&n);if(n>=1&&n<=7){button=1;break;}else{button=0;printf("您输入有误,请重新选择!");}}while(button==0);while(button==1){switch(n){  case 1: input();break;case 2: display();break;case 3: search();break; case 4:del();break;case 5:modify();break;case 6:sta();break;case 7:exit(0);break;default :break;}getchar();printf("\n");printf("按任意键继续\n");getch();system("cls");  menu();printf("功能选择(1--7):");scanf("%d",&n);printf("\n");}}

设计心得

这两周的c语言课程设计,我加深了对c语言程序设计的理解,使自己的操作更加熟练,发现了自己的不足,为自己今后的继续学习指明了方向。在我看来,考试考察的仅仅是个别知识点,而课程设计就比较的全面。虽然说只是做了一个程序,但是其中运用到的知识确实很多所学到的内容,很好的考验了我们的综合能力。在这次课程设计中,我巩固所了学过的知识,能用汇编语言熟练地运用顺序、选择、循环三大结构,进一步掌握结构体数组的使用,文件函数的使用,掌握了子程序的定义及调用。并在调试过程中不断发现与改正错误,完善算法,改进用户体验等等。调试索然繁琐而艰苦,但极大的促进了我编程能力的提高。由于自己目前能力有限,该程序还有诸多不足,感谢指正。感谢老师的悉心教导与细致的帮助。虽然c语言的课程与课程设计都已结束,但通过这次课程设计我也发现了差距,并将在未来努力学习,积极实践,使自己能真正的掌握运用c语言。

附件:源码下载

计算机课程设计-C语言课程设计职工工资管理系统.zip-C文档类资源-CSDN文库https://download.csdn.net/download/NBITer/87372935?spm=1001.2014.3001.5503

C语言课程设计_职工工资管理系统相关推荐

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

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

  2. 二叉链表和职工管理系统结合_C语言课程设计_职工信息管理系统_单链表实现程序源代码...

    有 %d 条记录已经保存 .)\n",count); saveflag=0; } else { system("cls"); printf(" 保存文件失败, ...

  3. c语言销售管理系统设计,原创:终稿C语言课程设计_服装销售管理系统.docOK版

    <C语言课程设计_服装销售管理系统.doc>由会员分享,可免费在线阅读全文,更多与<(终稿)C语言课程设计_服装销售管理系统.doc(OK版)>相关文档资源请在帮帮文库(www ...

  4. c语言银行卡管理系统程序设计报告,《c语言程序设计》课程设计报告-职工信息管理系统.doc...

    <c语言程序设计>课程设计报告-职工信息管理系统.doc 还剩 24页未读, 继续阅读 下载文档到电脑,马上远离加班熬夜! 亲,很抱歉,此页已超出免费预览范围啦! 如果喜欢就下载吧,价低环 ...

  5. c语言声明第一个学生的成绩,C语言课程设计报告--学生成绩管理系统

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

  6. c语言课程设计 日历显示,c语言课程设计_电子日历.doc

    c语言课程设计_电子日历 第 PAGE \* Arabic \* MERGEFORMAT 14 页第 PAGE \* Arabic \* MERGEFORMAT 14 页 课 程 设 计( 论 文 ) ...

  7. c语言拍飞虫课程设计报告,c语言课程设计_拍飞虫提高篇.doc

    c语言课程设计_拍飞虫提高篇 C语言课程设计二 拍飞虫 一.游戏介绍 拍飞虫游戏是玩家用鼠标控制拍子,拍飞虫.飞虫每次从不同的位置.以不同的速度飞来飞去.玩家拍的飞虫越多,分数越高. 二.实验目的 综 ...

  8. 用C语言编程网上购物系统,华中科技大学C语言课程设计报告 -- 网上购物管理系统.pdf...

    华中科技大学自动化学院 C 语言课程设计报告 网上购物管理系统 专 业:自 动 化 班 级:自动化1306 班 组 员: 指导教师:周纯杰 何顶新 彭刚 周凯波 完成时间:2014 年11 月7 日星 ...

  9. c语言课程设计-商场商品信息管理,C语言课程设计商场商品信息管理系统

    C语言课程设计商场商品信息管理系统 1目 录1 系统分析 21.1 课程设计内容 21.2 系统功能需求分析 21.3 数据结构设计 32 系统设计 32.1 总体设计 32.2 详细设计 42.2. ...

最新文章

  1. 超全大厂数据结构面试
  2. python中->是什么意思
  3. 用树状数组解决求区间最值的问题:hdu1754
  4. 二十、Threaded I/O模型
  5. 查看centos信息
  6. 【One by One系列】IdentityServer4(二)使用Client Credentials保护API资源
  7. 升级项目到.NET Core 2.0,在Linux上安装Docker,并成功部署
  8. (132)FPGA面试题-Verilog实现格雷码转二进制
  9. 计算机二级考试考不考二进制,如何通过计算机一、二级考试?方法很重要,过来人的经验告诉你...
  10. x264源代码简单分析:宏块分析(Analysis)部分-帧间宏块(Inter)
  11. 设置VS2015背景图片(转载)
  12. JPA Example查询
  13. 【单片机】51单片机烧录那些事儿
  14. Linux netstat 命令详解
  15. PFC离散元程序及其在工程领域中的应用(新手必看)
  16. 一键智能抠图-原理实现
  17. 从键盘输入直接三角形的两条直接边的长度,求斜边的长度和三角形的面积,计算结果保留两位小数
  18. 国开教育学形考任务2试题1试题及答案
  19. 带倍速音频播放器_带有播放列表HTML5音频播放器
  20. grub无法正常启动的解决方法

热门文章

  1. openwrt 使用校园网 无法ping6通ipv6.google.com
  2. Mysql exits和in的区别
  3. 浙大小姐姐搞出秃头生成器登CVPR,完美保留五官脸型,这就去给我的简历加加分...
  4. MySQL授权修改表结构_MySQL创建修改表结构
  5. 最新版Redis安装配置教程(Windows+Linux)
  6. jquery兄弟标签_JQ获取兄弟元素的值
  7. 410_Arduino UNO库模块梳理
  8. 为什么要用NoSQL
  9. springboot心跳检测_springboot结合netty+心跳机制
  10. MKL库之BLAS汇总