C职工工资管理系统报告_第1页
C职工工资管理系统报告_第2页
C职工工资管理系统报告_第3页
C职工工资管理系统报告_第4页
C职工工资管理系统报告_第5页
已阅读5页,还剩24页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

1、精选优质文档-倾情为你奉上1.题目职工工资管理系统的设计与实现2.功能(1)每一条记录包括一个职工的工号、姓名、基本工资、职务工资、津贴、医疗保险、公积金和总工资。(2)输入功能:可以一次完成多条记录的输入。(3)显示功能:完成全部职工记录的显示。(4)查找功能:完成按工号和姓名查找职工记录,并显示。(5)排序功能:按职工的工号进行排序。(6)插入功能:可以插入多名职工信息记录。(7)保存功能:将职工记录保存在任何自定义的文件中。(8)读取功能:将保存在文件中的职工信息工资信息读取出来。(9)有一个清晰美观界面来调用各个功能3.要求(1)整个系统均用C语言实现;(2)利用指针、链表来实现学生成

2、绩的数据结构设计;(3)系统具有输入、显示、查询、删除、排序、插入,保存、读取基本功能;(4)系统的各个功能模块都用函数的形式来实现;(5)可以将职工工资信息保存在文件中。(6)可以将职工工资信息从文件中读取出来。4.设计内容整个系统除了主函数外,另外还有14个函数,实现八大功能:输入功能、显示功能、查找功能、排序功能、插入功能、保存功能、读取功能。各个函数的详细设计说明分别如下:4.1主函数 main()利用无限次循环for( )和swithch()实现各函数的调用,系统根据输入的数字选项来调用相应的函数。4.2菜单选择函数 void menu()这是一个无参函数,主要实现“功能选择”的界面

3、,在这个界面里有显示系统的主要功能,根据每个功能前面的序号进行选择。等执行完每一个函数功能后,按任一键回到主界面也要通过这个函数来实现!void menu() /菜单界面system("cls");printf("*菜单*nn");printf("* 0 排序 *nn");printf("* 1 输入 *nn");printf("* 2 显示 *nn");printf("* 3 查找 *nn");printf("* 4 删除 *nn");printf(&q

4、uot;* 5 添加 *nn");printf("* 6 修改 *nn");printf("* 7 帮助 *nn");printf("* 8 退出 *nn");4.3输入记录函数 void input()通过结构体的数组来进行操作,先头定义数组em,先输入需要输入的职工人数m,然后进入循环,每次循环将各项输入结构体数组对应项的对应成员中,当循环次数等于人数时,完成全部职工的信息输入,退出循环,同时将数据存储在employee_list文件中并自动保存到磁盘中。void input() /*录入函数*/ int i,m; sy

5、stem("cls"); printf("职工人数(1-100):n"); scanf("%d",&m);for (i=0;i<m;i+) printf("请输入职工号: "); scanf("%d",&emi.num); printf("请输入姓名: "); scanf("%s",&); getchar(); printf("请输入基本工资: "); scanf("%d"

6、;,&emi.jbgz);printf("请输入职务工资: "); scanf("%d",&emi.zwgz); printf("请输入津贴: "); scanf("%d",&emi.jt); printf("请输入医疗保险: "); scanf("%d",&emi.yb); printf("请输入公积金: "); scanf("%d",&emi.gjj); emi.total=(emi.jbgz

7、)+(emi.zwgz)+(emi.jt)-(emi.yb)-(emi.gjj);/计算总工资 printf("n");/计算总工资 printf("n创建完毕!n"); save(m);/保存职工人数m4.4保存数据到文件函数 void save(int m)读取文件employee_list,若文件不存在,打印“打开失败”并退出。若存在,通过循环语句将输入到结构体数组的数据逐个输入磁盘。void save(int m) /*保存文件函数*/ int i; FILE*fp; /声明fp是指针,用来指向FILE类型的对象 if (fp=fopen(&qu

8、ot;employee_list","wb")=NULL) /打开职工列表文件为空 printf ("打开失败n"); exit(0); for (i=0;i<m;i+) /*将内存中职工的信息输出到磁盘文件中去*/ if (fwrite(&emi,sizeof(struct employee),1,fp)!=1)/写入数据块 &emi:是要输出数据的地址 sizeof(struct employee):获取一个单体的长度 1:数据项的个数 fp:目标文件指针 printf("文件读写错误n"); fc

9、lose(fp);/ 缓冲区内最后剩余的数据输出到磁盘文件中,并释放文件指针和有关的缓冲区4.5从文件读数据函数 int load()打开文件employee_list,若文件不存在,打印“打开失败”并退出。若存在读取文件中的数据,并返回职工人数。int load() /*导入函数 int型*/ FILE*fp; int i=0; if(fp=fopen("employee_list","rb")=NULL) printf ("cannot open filen"); exit(0); else do fread(&emi,s

10、izeof(struct employee),1,fp); /读取 i+; while(feof(fp)=0); /检测流上的文件结束符 fclose(fp); return(i-1);/返回人数4.6显示记录函数 void display()先通过读取函数的返回值确定职工人数m,再通过循环将员工工资信息逐个打印,当循环次数达到m时退出循环。void display() /*浏览函数*/ int i,sum=0; int m=load(); system("cls"); printf("职工号 姓名 基本工资 职务工资 津贴 医疗保险 公积金 总工资 n"

11、;); for(i=0;i<m;i+) /*m为输入部分的职工人数*/ printf("n %-6d%-6s %-8d %-8d %-8d %-8d %-8d %-8d ",emi.num,,emi.jbgz,emi.zwgz,emi.jt,emi.yb,emi.gjj,emi.total); sum+=emi.total;/计算员工总工资之和 printf("nn职工平均工资为:%d n",sum/m);4.7查找记录函数 void search()根据提示输入要查询的工号或者姓名,程序通过循环语句将输入的数字与保存的结构体数组中

12、的数据对比,如果相同,则打印该职工的信息,当循环数等于人数时结束循环,若等循环结束也没有找到相同的,则输出“查无此人”。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(b

13、utton=0);/回到查询选择项 while(button=1) switch(t)/选择查询方式 case 1:printf("按工号查询n");search_num();break; case 2:printf("按姓名查询n");search_name();break; case 3:main();break; default:break; 按照工号查询:void search_num()/按职工号查询 int a; int i,t; int m=load(); printf("请输入要查找的职工号:n"); scanf(&q

14、uot;%d",&a); for(i=0;i<m;i+) if(a=emi.num) printf("职工号 姓名 基本工资 职务工资 津贴 医疗保险 公积金 总工资 n"); printf("n %-6d%-6s %-8d %-8d %-8d %-8d %-8d %-8d ",emi.num,,emi.jbgz,emi.zwgz,emi.jt,emi.yb,emi.gjj,emi.total); break; if(i=m) printf("n对不起,查无此人n"); printf("

15、;n"); printf("返回查询函数请按1,继续查询职工号请按2n"); scanf("%d",&t); switch(t) case 1:search();break; case 2: break; default:break; 按姓名查询:void search_name() char name30; int i,t; int m=load(); printf("请输入姓名:n"); scanf("%s",name); for(i=0;i<m;i+) if(strcmp(emi.na

16、me,name)=0) printf("n已找到,其记录为:n"); printf("职工号 姓名 基本工资 职务工资 津贴 医疗保险 公积金 总工资 n"); printf("n %-6d%-6s %-8d %-8d %-8d %-8d %-8d %-8d ",emi.num,,emi.jbgz,emi.zwgz,emi.jt,emi.yb,emi.gjj,emi.total); if(i=m) printf("nn"); printf("n"); printf("返

17、回查询菜单请按1,继续查询姓名请按2n"); scanf("%d",&t); switch(t) case 1:search();break; case 2:break; default :break; 4.8删除记录函数 void del()先将职工信息打印出来,然后输入要删除职工的姓名,若该姓名不存在,则显示“查无此人”,如果存在则显示职工信息并且询问是否确认删除,若确定则删除。void del() /*删除函数 */ int m=load(); int i,j,n,t,button; char name20; printf("n 原来的职工

18、信息:n"); display(); /显示删除前的员工信息 printf("n"); printf("按姓名删除:n"); scanf("%s",name); for(button=1,i=0;button&&i<m;i+)/主函数中确定button=1时各函数才可以被调用 if(strcmp(,name)=0)/按员工姓名查找到某员工 并调出其资料 printf("n此人原始记录为:n");/显示选定员工的信息 printf("职工号 姓名 基本工资 职

19、务工资 津贴 医疗保险 公积金 总工资 n"); printf("n %-6d%-6s %-8d %-8d %-8d %-8d %-8d %-8d ",emi.num,,emi.jbgz,emi.zwgz,emi.jt,emi.yb,emi.gjj,emi.total); printf("n确定删除 请按1,不删除请按0n"); scanf("%d",&n); if(n=1) for(j=i;j<m-1;j+)/从第i项开始 将后一项的各成员的值赋给前一项各对应的成员 完成对第i项的删除 str

20、cpy(,emj+1.name); emj.num=emj+1.num; emj.jbgz=emj+1.jbgz; emj.zwgz=emj+1.zwgz; emj.jt=emj+1.jt; emj.yb=emj+1.yb; emj.gjj=emj+1.gjj; emj.total=emj+1.total; button=0; if(!button)/button=0表明删除已完成 m=m-1;/总员工数减少一人 else printf("n查无此人!n"); printf("n 删除后的所有职工信息:n"); save(m); /调用保

21、存函数 display(); /调用浏览函数 printf("n继续删除请按1,不再删除请按0n"); scanf("%d",&t); switch(t) case 1:del();break; case 0:break; default :break; 删除后为4.9插入函数 void add()打印原有职工信息,询问要添加到职工人数并询问是否确定添加。逐个逐项输入职工信息,之后计算总工资。完成后显示“添加成功”,打印新的职工信息并自动保存。void add()/*添加函数*/ FILE*fp; int n; int count=0; int

22、i; int m=load(); printf("n 原来的职工信息:n"); display(); printf("n"); fp=fopen("emploee_list","a"); printf("请输入想增加的职工数:n");/确定要加入的职工数n scanf("%d",&n); for (i=m;i<(m+n);i+)/添加n名员工的信息 printf("n 请输入新增加职工的信息:n"); printf("请输入职工号:

23、 "); scanf("%d",&emi.num); printf("n"); printf("请输入姓名: "); scanf("%s",); getchar(); printf("请输入基本工资: "); scanf("t%d",&emi.jbgz); printf("请输入职务工资: "); scanf("%d",&emi.zwgz); printf("请输入津贴: &q

24、uot;); scanf("%d",&emi.jt); printf("请输入医疗保险: "); scanf("t%d",&emi.yb); printf("请输入公积金: "); scanf("%d",&emi.gjj); emi.total=( emi.jbgz+ emi.zwgz + emi.jt- emi.yb- emi.gjj);/计算该员工总工资 printf("n"); count=count+1; printf("已增加的人数

25、:n"); printf("%dn",count); printf("n添加成功n"); m=m+count;/将新添加员工的人数加到总员工人数中 printf("n增加后的所有职工信息:n"); printf("n"); save(m); display();/显示添加后的信息 fclose(fp);运行后结果为4.10排序函数 void sort()根据职工的工号来进行排序,此处采用冒泡法。如果前一个职工的工号大于后面一个职工的工号,则两人位置交换,依次类推,经过多次交换后可得到工号从小到大的排序。v

26、oid sort()int i,j;int m=load(); struct employee p;for(i=0;i<m-1;i+)for(j=0;j<m-1-i;j+)if(emj.num>=emj+1.num)p=emj;emj=emj+1;emj+1=p;printf("职工号 姓名 基本工资 职务工资 津贴 医疗保险 公积金 总工资 n");for(i=0;i<m;i+) /*m为输入部分的职工人数*/ printf("n %-6d%-6s %-8d %-8d %-8d %-8d %-8d %-8d ",emi.num,

27、,emi.jbgz,emi.zwgz,emi.jt,emi.yb,emi.gjj,emi.total); 4.11修改数据函数 void modify()打印职工信息并提示输入要修改信息的职工姓名。按照提示选择要修改的项目,输入要修改的结果并将该结果赋值给对应的成员,完成指定的修改。void modify() /*修改函数*/ int num; char name20; int jbgz; int zwgz; int jt; int yb; int gjj; int b,c,i,n,t,button; int m=load(); system("cls");

28、 printf("n 原来的职工信息:n"); display(); printf("n"); printf("请输入要修改的职工的姓名:n"); scanf("%s",name); for(button=1,i=0;button&&i<m;i+) if(strcmp(,name)=0) printf("n此人原始记录为:n"); printf("职工号 姓名 基本工资 职务工资 津贴 医疗保险 公积金 总工资 n"); printf(&

29、quot;n %-6d%-6s %-8d %-8d %-8d %-8d %-8d %-8d ",emi.num,,emi.jbgz,emi.zwgz,emi.jt,emi.yb,emi.gjj,emi.total); printf("n确定 按1 ; 不修改请按0n"); scanf("%d",&n); if(n=1) printf("n需要进行修改的选项n 1.职工号 2.姓名 3.基本工资 4.职务工资 5.津贴 6.医疗保险 7.公积金 8.返回上层n"); printf("请选择序号

30、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) /*因为当找到第i个职工时,for语句后i自加了1,所以下面的应该把改后的信息赋值给第i-1个人*/ case 1:printf("职工号改为: "); scanf("%d",&num); emi-1.num=num; break

31、; case 2:printf("姓名改为: "); scanf("%s",name); strcpy(,name); break; case 3:printf("基本工资改为: "); getchar(); scanf("%d",&jbgz); emi-1.jbgz=jbgz; emi-1.total=( emi-1.jbgz+ emi-1.zwgz + emi-1.jt- emi-1.yb- emi-1.gjj); break; case 4:printf("职务工资改为:

32、 "); scanf("%d",&zwgz); emi-1.zwgz=zwgz; emi-1.total=( emi-1.jbgz+ emi-1.zwgz + emi-1.jt- emi-1.yb- emi-1.gjj); break; case 5:printf("津贴改为: "); scanf("%d",&jt); emi-1.jt=jt; emi-1.total=( emi-1.jbgz+ emi-1.zwgz + emi-1.jt- emi-1.yb- emi-1.gjj); break; case

33、6:printf("医疗保险改为: "); scanf("%d",&yb); emi-1.yb=yb; emi-1.total=( emi-1.jbgz+ emi-1.zwgz + emi-1.jt- emi-1.yb- emi-1.gjj); break; case 7:printf("公积金改为: "); scanf("%d",&gjj); emi-1.gjj=gjj; emi-1.total=( emi-1.jbgz+ emi-1.zwgz + emi-1.jt- emi-1.yb- emi-

34、1.gjj); break; case 8:modify(); break; printf("n"); printf("nn 确定修改 请按1 ; 重新修改 请按2: n"); scanf("%d",&b); while(b=2); printf("n修改后的所有职工信息:n"); printf("n"); save(m); display(); printf("n按1 继续修改 ,不再修改请按0n"); scanf("%d",&t); s

35、witch(t) case 1:modify();break; case 0:break; default :break; 修改后为程序部分#include<stdio.h>#include<windows.h>#include<string.h>#include<conio.h>#define N 100struct employee int num; /ID号 char name20; /姓名 int jbgz; /基本工资 int zwgz; /职务工资 int jt; / 津贴 int yb; /医疗保险 int gjj; /公积金/ i

36、nt total; /总工资em100; void menu();void input();void save(int);void display();void del();void add();void search();void search_num();void search_name();void modify(); void help();void sort();void start(); /*定义各函数*/void start() /开始界面 system("cls");/清屏printf("nnnnnn");printf("*&q

37、uot;);printf("*欢迎使用工资管理系统*");printf("*nnnnn");printf("ttt *按任意键进入*n");void menu() /菜单界面system("cls");printf("*菜单*nn");printf("* 0 排序 *nn");printf("* 1 输入 *nn");printf("* 2 显示 *nn");printf("* 3 查找 *nn");printf(&

38、quot;* 4 删除 *nn");printf("* 5 添加 *nn");printf("* 6 修改 *nn");printf("* 7 帮助 *nn");printf("* 8 退出 *nn");void input() /*录入函数*/ int i,m; system("cls"); printf("职工人数(1-100):n"); scanf("%d",&m); for (i=0;i<m;i+) printf("

39、;请输入职工号: "); scanf("%d",&emi.num); printf("请输入姓名: "); scanf("%s",&); getchar(); printf("请输入基本工资: "); scanf("%d",&emi.jbgz); printf("请输入职务工资: "); scanf("%d",&emi.zwgz); printf("请输入津贴: "); scan

40、f("%d",&emi.jt); printf("请输入医疗保险: "); scanf("%d",&emi.yb); printf("请输入公积金: "); scanf("%d",&emi.gjj); emi.total=(emi.jbgz)+(emi.zwgz)+(emi.jt)-(emi.yb)-(emi.gjj);/计算总工资 printf("n");/计算总工资 printf("n创建完毕!n"); save(m);/保存职

41、工人数mvoid save(int m) /*保存文件函数*/ int i; FILE*fp; /声明fp是指针,用来指向FILE类型的对象 if (fp=fopen("employee_list","wb")=NULL) /打开职工列表文件为空 printf ("打开失败n"); exit(0); for (i=0;i<m;i+) /*将内存中职工的信息输出到磁盘文件中去*/ if (fwrite(&emi,sizeof(struct employee),1,fp)!=1)/写入数据块 &emi:是要输出数据的

42、地址 sizeof(struct employee):获取一个单体的长度 1:数据项的个数 fp:目标文件指针 printf("文件读写错误n"); fclose(fp);/ 缓冲区内最后剩余的数据输出到磁盘文件中,并释放文件指针和有关的缓冲区int load() /*导入函数 int型*/ FILE*fp; int i=0; if(fp=fopen("employee_list","rb")=NULL) printf ("cannot open filen"); exit(0); else do fread(&a

43、mp;emi,sizeof(struct employee),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+) /*m为输入部分的职工人数*/ printf("n %-6d%-6s %-8

44、d %-8d %-8d %-8d %-8d %-8d ",emi.num,,emi.jbgz,emi.zwgz,emi.jt,emi.yb,emi.gjj,emi.total); sum+=emi.total;/计算员工总工资之和 printf("nn职工平均工资为:%d n",sum/m);void del() /*删除函数 */ int m=load(); int i,j,n,t,button; char name20; printf("n 原来的职工信息:n"); display(); /显示删除前的员工信息 printf

45、("n"); printf("按姓名删除:n"); scanf("%s",name); for(button=1,i=0;button&&i<m;i+)/主函数中确定button=1时各函数才可以被调用 if(strcmp(,name)=0)/按员工姓名查找到某员工 并调出其资料 printf("n此人原始记录为:n");/显示选定员工的信息 printf("职工号 姓名 基本工资 职务工资 津贴 医疗保险 公积金 总工资 n"); printf("

46、;n %-6d%-6s %-8d %-8d %-8d %-8d %-8d %-8d ",emi.num,,emi.jbgz,emi.zwgz,emi.jt,emi.yb,emi.gjj,emi.total); printf("n确定删除 请按1,不删除请按0n"); scanf("%d",&n); if(n=1) for(j=i;j<m-1;j+)/从第i项开始 将后一项的各成员的值赋给前一项各对应的成员 完成对第i项的删除 strcpy(,emj+1.name); emj.num=emj+1.nu

47、m; emj.jbgz=emj+1.jbgz; emj.zwgz=emj+1.zwgz; emj.jt=emj+1.jt; emj.yb=emj+1.yb; emj.gjj=emj+1.gjj; emj.total=emj+1.total; button=0; if(!button)/button=0表明删除已完成 m=m-1;/总员工数减少一人 else printf("n查无此人!n"); printf("n 删除后的所有职工信息:n"); save(m); /调用保存函数 display(); /调用浏览函数 printf("n继续删除请

48、按1,不再删除请按0n"); scanf("%d",&t); switch(t) case 1:del();break; case 0:break; default :break; void add()/*添加函数*/ FILE*fp; int n; int count=0; int i; int m=load(); printf("n 原来的职工信息:n"); display(); printf("n"); fp=fopen("emploee_list","a"); printf("请输入想增加的职工数:n");/确定要加入的职工数n scanf("%d",&n); for (i=m;

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论