1、 目录一、系统开发的背景1二、系统分析与设计1(一)系统功能要求1(二)系统模块结构设计2三、系统的设计与实现3 (一) 输入职工基本信息3(二)显示职工信息4(三)添加新的职工信息4 (四) 修改职工信息5(五)删除职工信息9(六)查询职工信息11四、系统测试13(一)测试main()函数13(二)测试输入输出函数13(三)测试添加、删除、修改函数14(四)测试查询函数15五、总结17六、附件(代码、部分图表)17职工工资管理系统一、系统开发的背景工资管理是一个单位不可缺少的部分,因为工资是一个单位与职员之间最重要的关系纽带,它是职员辛勤劳动的主要成果,不同的职员工资不同,所产生的价值也不同
2、。一直以来人们都是使用传统的方式管理,但是这种方法效率低,管理不方便,随着计算机科学的不断发展,更加不能满足人们的需求,为了能合理的管理工资问题,使用计算机对单位工资信息进行管理成为人们的迫切需要。对企业源是企而言,全面开发和应用计算机管理信息系统就是近期不能回避的问题。在企业管理中,人力资业最宝贵的资源,也是企业的“生命线”,因此人事管理是企业的计算机管理信息系统重要组成部分。而工资管理又是人力资源管理的重中之重。二、系统分析与设计(一)系统功能要求 输入记录:将每一个职工的姓名、ID 号以及基本工资、职务工资、岗位津贴、医疗保险、公积金的数据作为一个记录。该软件能建立一个新的数据文件或给已
3、建立好的数据文件增加记录。 显示记录:根据用户提供的记录或者根据职工姓名显示一个或几个职工的各项工资和平均工资。 修改记录:可以对数据文件的任意记录的数据进行修改并在修改前后对记录内容进行显示。 查找记录:对数据文件的任意记录进行查找。 删除记录:可删除数据文件中的任一记录。 统计:计算各项工资平均工资及总工资、统计符合指定条件(二)系统模块结构设计首先是定义了一个输入输出头文件,接着是一个宏定义,下面是函数声明部分,用结构体存储和录入该程序的所有数据,主函数部分包括设计的全部信息,之后是输出主菜单和调用函数,退出程序。此程序中包括:输入模块、查询模块、修改模块、删除模块、输出模块、追加模块。
4、 职 工 工 资 管 理 追加模块输出模块删除模块查询模块修改模块输入模块 图1 职工工资管理系统功能图通过上图的功能分析,把整个系统分为六个模块输入模块:该模块先是对职工的姓名、ID 号以及基本工资、职务工资、岗位津贴、医疗保险、公积金的数据的录入并保存。查询模块:实现按姓名、ID 号查询每个职工的信息,查询显示 基本工资、职务工资、岗位津贴、医疗保险、公积金。修改模块:该模块实现按职工号对职工所有信息的修改。删除模块:该模块实现按职工号对职工所有信息的删除。输出模块: 该模块实现按职工号输出职工的所有信息。追加模块:该模块实现添加新的职工的信息。三、系统的设计与实现(一)输入职工基本信息分
5、析:通过结构体的数组来进行操作,先头定义数组str,先输入需要输入的职工人数m,然后进入循环,每次循环将各项输入结构体数组对应项的对应成员中,当循环次数等于人数时,完成全部员工的资料输入,退出循环。该模块的具体代码如下所示。void save() printf(n输入数据:n);system(cls);printf(职工人数(1-10):n);scanf(%d,&m);for(i=0;im;i+)/注:输入输出最好选用空格相隔scanf(%d %s %d %d %d %d %d,&stri.id,stri.xm,&stri.jbgz,&stri.zwgz,&stri.jt,&stri.yb,&
6、stri.gjj);if(fp=fopen(stu.data,wb)=NULL)printf(cannot open filen);exit(0);for(i=0;im;i+)fprintf(fp,%d %s %d %d %d %d %dn,stri.id,stri.xm,stri.jbgz,stri.zwgz,stri.jt,stri.yb,stri.gjj); fclose(fp);(二)显示职工信息先通过读取函数的返回值确定职工人数m,再通过循环将员工工资资料逐个打印,当循环次数达到m时退出循环。其中总工资由程序计算,总工资=基本工资+职务工资+津贴-医疗保险-公积金该模块的具体代码如下
7、所示。void display() /*浏览函数*/int i,sum=0;system(cls);printf(职工号 姓名 基本工资 职务工资 津贴 医疗保险 公积金 总工资 n);for(i=0;im;i+) /*m为输入部分的职工人数*/printf(n %-6d%-6s %-8d %-8d %-8d %-8d %-8d %-8d ,stri.id,stri.xm,stri.jbgz,stri.zwgz,stri.jt,stri.yb,stri.gjj,stri.total);sum+=stri.total;/计算员工总工资之和 printf(nn职工平均工资为:%d n,sum/m)
8、;(三)添加新的职工信息打印原有职工资料,询问要添加的职工人数并询问是否确定添加。逐个逐项输入员工信息,之后程序计算其总工资。完成后显示“添加成功”,打印新的员工资料并自动保存。添加的方法为:定义一个相同类型的结构体数组,将原有项复制后增添新的项,并保存新的数组。该模块的具体代码如下所示。void crzgxx() int n;int count=0; int j;printf(n 原来的职工信息:n);sczgxx();display(); printf(n);printf(请输入想增加的职工数:n);/确定要加入的职工数nscanf(%d,&n);for (j=m;j(m+n);j+)/添
9、加n名员工的信息printf(n 请输入新增加职工的信息:n);printf(职工号 姓名 基本工资 职务工资 津贴 医疗保险 公积金n);scanf(%d %s %d %d %d %d %d,&strj.id,strj.xm,&strj.jbgz,&strj.zwgz,&strj.jt,&strj.yb,&strj.gjj);strj.total=( strj.jbgz+ strj.zwgz + strj.jt- strj.yb-strj.gjj);/计算该员工总工资printf(n);count=count+1;printf(已增加的人数:n);printf(%dn,count); pri
10、ntf(n添加成功n); m=m+count;/将新添加员工的人数加到总员工人数中printf(n增加后的所有职工信息:n);printf(n);display();/显示添加后的信息fclose(fp);(四) 修改职工信息打印员工信息并提示输入要修改资料的职工姓名。按提示确定要修改,确定要修改的项目,输入要修改成的结果并将该结果赋给对应项的对应成员,完成对特定职工特定项目的修改。该模块的具体代码如下所示。void xgzgxx() int id;char xm20;int jbgz; int zwgz;int jt;int yb;int gjj;int b,c,i,n,t,button;
11、system(cls);printf(n 原来的职工信息:n);display(); printf(n);printf(请输入要修改的职工的姓名:n);scanf(%s,xm);for(button=1,i=0;button&i8|c1) printf(n选择错误,请重新选择!n); button=0; if(button=1)printf(n查无此人n); do switch(c) /*因为当找到第i个职工时,for语句后i自加了1,所以下面的应该把改后的信息赋值给第i-1个人*/ case 1:printf(职工号改为: );scanf(%d,&id);stri-1.id=id;break
12、; case 2:printf(姓名改为: );scanf(%s,xm);strcpy(stri-1.xm,xm); break; case 3:printf(基本工资改为: );getchar();scanf(%d,&jbgz);stri-1.jbgz=jbgz;stri-1.total=( stri-1.jbgz+ stri-1.zwgz + stri-1.jt- stri-1.yb- stri-1.gjj); break; case 4:printf(职务工资改为: ); scanf(%d,&zwgz);stri-1.zwgz=zwgz;stri-1.total=( stri-1.jbg
13、z+ stri-1.zwgz + stri-1.jt- stri-1.yb- stri-1.gjj); break; case 5:printf(津贴改为: ); scanf(%d,&jt); stri-1.jt=jt; stri-1.total=( stri-1.jbgz+ stri-1.zwgz + stri-1.jt- stri-1.yb- stri-1.gjj);break; case 6:printf(医疗保险改为: );scanf(%d,&yb);stri-1.yb=yb;stri-1.total=( stri-1.jbgz+ stri-1.zwgz + stri-1.jt- st
14、ri-1.yb- stri-1.gjj);break; case 7:printf(公积金改为: );scanf(%d,&gjj);stri-1.gjj=gjj;stri-1.total=( stri-1.jbgz+ stri-1.zwgz + stri-1.jt- stri-1.yb- stri-1.gjj); break; case 8:xgzgxx(); break; printf(n);printf(nn 确定修改 请按1 ; 重新修改 请按2: n); scanf(%d,&b); while(b=2);printf(n修改后的所有职工信息:n);printf(n);display()
15、;printf(n按1 继续修改 ,不再修改请按0n);scanf(%d,&t);switch(t) case 1:xgzgxx();break;case 0:break;default :break; (五)删除职工信息打印员工资料并提示输入要删除职工的姓名,输入后若该职工不存在则打印“查无此人”;若存在,则显示该职工资料并询问是否确定删除。若确定,则删除。删除时,通过对比输入的姓名与资料中的姓名做对比从而确定要删除的项i,从第i项开始,将后一项的各成员的值赋给前一项各对应的成员,完成对第i项的删除。该模块的具体代码如下所示。void delet()/*删除函数 */ int i,j,n,t
16、,button; char xm20; printf(n 原来的职工信息:n); display(); /显示删除前的员工信息 printf(n);printf(按姓名删除:n); scanf(%s,xm); for(button=1,i=0;button&im;i+)/主函数中确定button=1时各函数才可以被调用 if(strcmp(stri.xm,xm)=0)/按员工姓名查找到某员工 并调出其资料 printf(n此人原始记录为:n);/显示选定员工的信息 printf(职工号 姓名 基本工资 职务工资 津贴 医疗保险 公积金 总工资 n);printf(n %-6d%-6s %-8d
17、 %-8d %-8d %-8d %-8d %-8d ,stri.id,stri.xm,stri.jbgz,stri.zwgz,stri.jt,stri.yb,stri.gjj,stri.total); printf(n确定删除 请按1,不删除请按0n); scanf(%d,&n);if(n=1)for(j=i;jm-1;j+)/从第i项开始 将后一项的各成员的值赋给前一项各对应的成员 完成对第i项的删除strcpy(strj.xm,strj+1.xm);strj.id=strj+1.id;strj.jbgz=strj+1.jbgz;strj.zwgz=strj+1.zwgz;strj.jt=s
18、trj+1.jt;strj.yb=strj+1.yb; strj.gjj=strj+1.gjj;strj.total=strj+1.total; button=0; if(!button)/button=0表明删除已完成m=m-1;/总员工数减少一人elseprintf(n查无此人!n);printf(n 删除后的所有职工信息:n);display(); /调用浏览函数printf(n继续删除请按1,不再删除请按0n);scanf(%d,&t);switch(t)case 1:delet();break;case 0:break;default :break; (六)查询职工信息根据提示输入要
19、查询的ID号,程序通过循环语句将输入的数字与以保存的结构体数组中的数据对比,若相同,则打印“已找到”及该员工的资料;当循环次数等于人数时结束循环,若至结束循环时也没有找到相同的,则打印“查无此人”。该模块的具体代码如下所示。void cxzgxx()/查询函数 int a; int i,t; printf(请输入要查找的职工号:n); scanf(%d,&a); for(i=0;im;i+) if(a=stri.id) printf(职工号 姓名 基本工资 职务工资 津贴 医疗保险 公积金 总工资 n); printf(n %-6d%-6s %-8d %-8d %-8d %-8d %-8d %
20、-8d ,stri.id,stri.xm,stri.jbgz,stri.zwgz,stri.jt,stri.yb,stri.gjj,stri.total); break; if(i=m) printf(n对不起,查无此人n); printf(n); printf(继续查询请按1,返回菜单请按2n); scanf(%d,&t); switch(t) case 1:cxzgxx();break; case 2: break; default:break; 四、系统测试(一)测试main()函数进入vc6.0环境,运行此程序得到如下图 (图2)主函数的输出 (二)测试输入输出函数 (图3)测试输出函
21、数(三)测试添加、删除、修改函数 (图4)测试添加函数 (图5)测试删除函数(图6)测试删除函数 (图7)测试删除函数的结果(四)测试查询函数(图8)测试查找函数 (图9)测试查找的结果五、总结该系统基本完成了实现工资信息管理。系统包括录入,浏览,查询,修改统计等功能。经过一学期的C语言学习,通过这俩周的努力,我上网查阅有关资料,以及有关c语言程序设计书籍,我们掌握了C语言的基础知识,我对课程设计有了一定的了解,并且通过这次课程设计使我懂得了理论与实际相结合是很重要的,只有理论知识是远远不够的,对C语言的深层知识还没有掌握,所以我发现只有把所学的理论知识与实践结合起来,从理论中得出结论,才能真
22、正为今后的学习、工作服务,从而提高自己的实际动手能力和独立思考的能力。通过这次课程程序设计,使我加深了对C语言的认识,进一步熟悉了对C语言功能的灵活运用,而且加深了我对程序的理解和编写能力,通过文献资料和网络资料的帮助,使我对C语言程序设计这一基础学科又一次加深了认识,也意识到了其具有的强大功能和发展前景。六、附件(代码、部分图表)#include#include#include #define N 10struct gjgl /工资管理系统int id; /ID号 char xm20; /姓名int jbgz; /基本工资 int zwgz; /职务工资 int jt; / 津贴 int y
23、b; /医疗保险 int gjj; /公积金/int total; /总工资strN;FILE *fp;int i,m;void save() printf(n输入数据:n); system(cls); printf(职工人数(1-10):n); scanf(%d,&m); for(i=0;im;i+)/注:输入输出最好选用空格相隔 scanf(%d %s %d %d %d %d %d,&stri.id,stri.xm,&stri.jbgz,&stri.zwgz,&stri.jt,&stri.yb,&stri.gjj); if(fp=fopen(stu.data,wb)=NULL)printf
24、(cannot open filen);exit(0); for(i=0;im;i+) fprintf(fp,%d %s %d %d %d %d %dn,stri.id,stri.xm,stri.jbgz,stri.zwgz,stri.jt,stri.yb,stri.gjj); fclose(fp);void sczgxx()/输出函数 int sum=0;if(fp=fopen(stu.data,rb)=NULL)printf(cannort open filenN);exit(0);for(i=0;im;i+)fscanf(fp,%d %s %d %d %d %d %d,&stri.id,
25、stri.xm,&stri.jbgz,&stri.zwgz,&stri.jt,&stri.yb,&stri.gjj);fclose(fp);printf(输出读出的数据:n);for(i=0;im;i+)printf(%d %s %d %d %d %d %d,stri.id,stri.xm,stri.jbgz,stri.zwgz,stri.jt,stri.yb,stri.gjj);printf( %dn,stri.total=stri.jbgz+stri.zwgz+stri.jt-stri.yb-stri.gjj);sum+=stri.total;/计算员工总工资之和printf(nn职工平均
26、工资为:%d n,sum/m);getchar();void display() /*浏览函数*/ int i,sum=0; system(cls); printf(职工号 姓名 基本工资 职务工资 津贴 医疗保险 公积金 总工资 n); for(i=0;im;i+) /*m为输入部分的职工人数*/ printf(n %-6d%-6s %-8d %-8d %-8d %-8d %-8d %-8d ,stri.id,stri.xm,stri.jbgz,stri.zwgz,stri.jt,stri.yb,stri.gjj,stri.total); sum+=stri.total;/计算员工总工资之和
27、 printf(nn职工平均工资为:%d n,sum/m);void crzgxx() int n; int count=0; int j; printf(n 原来的职工信息:n); sczgxx(); display(); printf(n); printf(请输入想增加的职工数:n);/确定要加入的职工数n scanf(%d,&n); for (j=m;j(m+n);j+)/添加n名员工的信息 printf(n 请输入新增加职工的信息:n);printf(职工号 姓名 基本工资 职务工资 津贴 医疗保险 公积金n);scanf(%d %s %d %d %d %d %d,&strj.id,s
28、trj.xm,&strj.jbgz,&strj.zwgz,&strj.jt,&strj.yb,&strj.gjj); strj.total=( strj.jbgz+ strj.zwgz + strj.jt- strj.yb-strj.gjj);/计算该员工总工资 printf(n); count=count+1;printf(已增加的人数:n);printf(%dn,count); printf(n添加成功n); m=m+count;/将新添加员工的人数加到总员工人数中 printf(n增加后的所有职工信息:n); printf(n); display();/显示添加后的信息 fclose(f
29、p);void xgzgxx() int id; char xm20; int jbgz; int zwgz; int jt; int yb; int gjj; int b,c,i,n,t,button; system(cls); printf(n 原来的职工信息:n); display(); printf(n);printf(请输入要修改的职工的姓名:n); scanf(%s,xm); for(button=1,i=0;button&i8|c1) printf(n选择错误,请重新选择!n); button=0; if(button=1) printf(n查无此人n); do switch(c
30、) /*因为当找到第i个职工时,for语句后i自加了1,所以下面的应该把改后的信息赋值给第i-1个人*/ case 1:printf(职工号改为: ); scanf(%d,&id); stri-1.id=id; break; case 2:printf(姓名改为: ); scanf(%s,xm); strcpy(stri-1.xm,xm); break; case 3:printf(基本工资改为: ); getchar(); scanf(%d,&jbgz); stri-1.jbgz=jbgz; stri-1.total=( stri-1.jbgz+ stri-1.zwgz + stri-1.j
31、t- stri-1.yb- stri-1.gjj); break; case 4:printf(职务工资改为: ); scanf(%d,&zwgz); stri-1.zwgz=zwgz; stri-1.total=( stri-1.jbgz+ stri-1.zwgz + stri-1.jt- stri-1.yb- stri-1.gjj); break; case 5:printf(津贴改为: ); scanf(%d,&jt); stri-1.jt=jt; stri-1.total=( stri-1.jbgz+ stri-1.zwgz + stri-1.jt- stri-1.yb- stri-1
32、.gjj); break; case 6:printf(医疗保险改为: ); scanf(%d,&yb); stri-1.yb=yb; stri-1.total=( stri-1.jbgz+ stri-1.zwgz + stri-1.jt- stri-1.yb- stri-1.gjj); break; case 7:printf(公积金改为: ); scanf(%d,&gjj); stri-1.gjj=gjj; stri-1.total=( stri-1.jbgz+ stri-1.zwgz + stri-1.jt- stri-1.yb- stri-1.gjj); break; case 8:x
33、gzgxx(); break; printf(n); printf(nn 确定修改 请按1 ; 重新修改 请按2; 返回请按0: n); scanf(%d,&b); while(b=2); printf(n修改后的所有职工信息:n); printf(n); display(); printf(n按1 继续修改 ,不再修改请按0n); scanf(%d,&t);switch(t) case 1:xgzgxx();break; case 0:break; default :break; void delet()/*删除函数 */ int i,j,n,t,button; char xm20;prin
34、tf(n 原来的职工信息:n); display(); /显示删除前的员工信息 printf(n);printf(按姓名删除:n); scanf(%s,xm); for(button=1,i=0;button&im;i+)/主函数中确定button=1时各函数才可以被调用 if(strcmp(stri.xm,xm)=0)/按员工姓名查找到某员工 并调出其资料 printf(n此人原始记录为:n);/显示选定员工的信息 printf(职工号 姓名 基本工资 职务工资 津贴 医疗保险 公积金 总工资 n); printf(n %-6d%-6s %-8d %-8d %-8d %-8d %-8d %-
35、8d ,stri.id,stri.xm,stri.jbgz,stri.zwgz,stri.jt,stri.yb,stri.gjj,stri.total); printf(n确定删除 请按1,不删除请按0n); scanf(%d,&n); if(n=1) for(j=i;jm-1;j+)/从第i项开始 将后一项的各成员的值赋给前一项各对应的成员 完成对第i项的删除 strcpy(strj.xm,strj+1.xm); strj.id=strj+1.id; strj.jbgz=strj+1.jbgz; strj.zwgz=strj+1.zwgz; strj.jt=strj+1.jt; strj.yb=strj+1.yb; strj.gjj=strj+1.gjj; strj.total=strj+1.total; button=0; if(!button)/button=0表明删除已完成 m=m-1;/总员工数减少一人 else printf(n查无此人!n); printf(n 删除后的所有职工信息:n); display(); /调用浏览函数
版权声明:以上文章中所选用的图片及文字来源于网络以及用户投稿,由于未联系到知识产权人或未发现有关知识产权的登记,如有知识产权人并不愿意我们使用,如有侵权请立即联系:2622162128@qq.com ,我们立即下架或删除。
Copyright© 2022-2024 www.wodocx.com ,All Rights Reserved |陕ICP备19002583号-1
陕公网安备 61072602000132号 违法和不良信息举报:0916-4228922