您好,欢迎访问三七文档
当前位置:首页 > 商业/管理/HR > 薪酬管理 > C职工工资管理系统报告
1.题目《职工工资管理系统》的设计与实现2.功能(1)每一条记录包括一个职工的工号、姓名、基本工资、职务工资、津贴、医疗保险、公积金和总工资。(2)输入功能:可以一次完成多条记录的输入。(3)显示功能:完成全部职工记录的显示。(4)查找功能:完成按工号和姓名查找职工记录,并显示。(5)排序功能:按职工的工号进行排序。(6)插入功能:可以插入多名职工信息记录。(7)保存功能:将职工记录保存在任何自定义的文件中。(8)读取功能:将保存在文件中的职工信息工资信息读取出来。(9)有一个清晰美观界面来调用各个功能3.要求(1)整个系统均用C语言实现;(2)利用指针、链表来实现学生成绩的数据结构设计;(3)系统具有输入、显示、查询、删除、排序、插入,保存、读取基本功能;(4)系统的各个功能模块都用函数的形式来实现;(5)可以将职工工资信息保存在文件中。(6)可以将职工工资信息从文件中读取出来。4.设计内容整个系统除了主函数外,另外还有14个函数,实现八大功能:输入功能、显示功能、查找功能、排序功能、插入功能、保存功能、读取功能。各个函数的详细设计说明分别如下:4.1主函数main()利用无限次循环for()和swithch()实现各函数的调用,系统根据输入的数字选项来调用相应的函数。4.2菜单选择函数voidmenu()这是一个无参函数,主要实现“功能选择”的界面,在这个界面里有显示系统的主要功能,根据每个功能前面的序号进行选择。等执行完每一个函数功能后,按任一键回到主界面也要通过这个函数来实现!voidmenu()//菜单界面{system(cls);printf(***菜单***\n\n);printf(**************0排序*****************\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);}4.3输入记录函数voidinput()通过结构体的数组来进行操作,先头定义数组em[],先输入需要输入的职工人数m,然后进入循环,每次循环将各项输入结构体数组对应项的对应成员中,当循环次数等于人数时,完成全部职工的信息输入,退出循环,同时将数据存储在employee_list文件中并自动保存到磁盘中。voidinput()/*录入函数*/{inti,m;system(cls);printf(职工人数(1--100):\n);scanf(%d,&m);for(i=0;im;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);//保存职工人数m}4.4保存数据到文件函数voidsave(intm)读取文件employee_list,若文件不存在,打印“打开失败”并退出。若存在,通过循环语句将输入到结构体数组的数据逐个输入磁盘。voidsave(intm)/*保存文件函数*/{inti;FILE*fp;//声明fp是指针,用来指向FILE类型的对象if((fp=fopen(employee_list,wb))==NULL)//打开职工列表文件为空{printf(打开失败\n);exit(0);}for(i=0;im;i++)/*将内存中职工的信息输出到磁盘文件中去*/if(fwrite(&em[i],sizeof(structemployee),1,fp)!=1)//写入数据块&em[i]:是要输出数据的地址sizeof(structemployee):获取一个单体的长度1:数据项的个数fp:目标文件指针printf(文件读写错误\n);fclose(fp);//缓冲区内最后剩余的数据输出到磁盘文件中,并释放文件指针和有关的缓冲区}4.5从文件读数据函数intload()打开文件employee_list,若文件不存在,打印“打开失败”并退出。若存在读取文件中的数据,并返回职工人数。intload()/*导入函数int型*/{FILE*fp;inti=0;if((fp=fopen(employee_list,rb))==NULL){printf(cannotopenfile\n);exit(0);}else{do{fread(&em[i],sizeof(structemployee),1,fp);//读取i++;}while(feof(fp)==0);//检测流上的文件结束符}fclose(fp);return(i-1);//返回人数}4.6显示记录函数voiddisplay()先通过读取函数的返回值确定职工人数m,再通过循环将员工工资信息逐个打印,当循环次数达到m时退出循环。voiddisplay()/*浏览函数*/{inti,sum=0;intm=load();system(cls);printf(职工号姓名基本工资职务工资津贴医疗保险公积金总工资\n);for(i=0;im;i++)/*m为输入部分的职工人数*/{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);}4.7查找记录函数voidsearch()根据提示输入要查询的工号或者姓名,程序通过循环语句将输入的数字与保存的结构体数组中的数据对比,如果相同,则打印该职工的信息,当循环数等于人数时结束循环,若等循环结束也没有找到相同的,则输出“查无此人”。voidsearch()/*查询函数*/{intt,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)//选择查询方式{case1:printf(按工号查询\n);search_num();break;case2:printf(按姓名查询\n);search_name();break;case3:main();break;default:break;}}}按照工号查询:voidsearch_num()//按职工号查询{inta;inti,t;intm=load();printf(请输入要查找的职工号:\n);scanf(%d,&a);for(i=0;im;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){case1:search();break;case2:break;default:break;}}按姓名查询:voidsearch_name(){charname[30];inti,t;intm=load();printf(请输入姓名:\n);scanf(%s,name);for(i=0;im;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){case1:search();break;case2:break;default:break;}}4.8删除记录函数voiddel()先将职工信息打印出来,然后输入要删除职工的姓名,若该姓名不存在,则显示“查无此人”,如果存在则显示职工信息并且询问是否确认删除,若确定则删除。voiddel()/*删除函数*/{intm=load();inti,j,n,t,button;charname[20];printf(\n原来的职工信息:\n);display();//显示删除前的员工信息printf(\n);printf(按姓名删除:\n);scanf(%s,name);for(button=1,i=0;button&&im;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;jm-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].jbg
本文标题:C职工工资管理系统报告
链接地址:https://www.777doc.com/doc-6088223 .html