《职工工资管理系统设计实验报告41861.docx》由会员分享,可在线阅读,更多相关《职工工资管理系统设计实验报告41861.docx(40页珍藏版)》请在taowenge.com淘文阁网|工程机械CAD图纸|机械工程制图|CAD装配图下载|SolidWorks_CaTia_CAD_UG_PROE_设计图分享下载上搜索。
1、39信息工程学院计算机基础训练程序设计报告内蒙古工业业大学信息息工程学院院实 验 报报 告课程名称: c语言言 实验名称:实验类型: 验证性性 综合性性设计性实验室名称称:电西88楼班级:计112-2学学号:201222020010422姓名:孙亚亚赛 组组别:同组人:勾勾涛 付启启恒成绩:实验日期:20133-3-3339目录1 题目与与要求32 功能设设计52.1算法法设计52.2 模模块流程图图73 程序代代码设计884 C程序序设计总结结225 结束语语236 源程程序231 题目与与要求程序设计的的目的和要要求1.目的:1)复习、巩巩固程序设设计的基础础知识,进进一步加深深对程序设设
2、计语言的的理解和掌掌握;熟练练使用函数数、结构体体、文件、数数组、循环环与选择、链链表和指针针等知识点点,熟练应应用C语言言综合知识识。2)为学生生提供了一一个既动手手又动脑,独独立实践的的机会,将将课本上的的理论知识识和实际有有机的结合合起来,锻锻炼学生的的分析解决决实际问题题的能力。提提高学生适适应实际,实实践编程的的能力;3)培养学学生在项目目开发中团团队合作精精神、创新新意识及能能力。2.要求:1)对系统统进行功能能模块分析析、控制模模块分析正正确,符合合题目要求求,实现相相应功能;可以加以以其他功能能或修饰,使使程序更加加完善、合合理;2)系统设设计要实用用、编程简简练、功能能全面、
3、界界面美观、操操作使用便便捷、程序序运行稳定定;3)说明书书、流程图图要清晰;4)记录设设计情况(备备查,也为为编写设计计说明书作作好准备);5)要求采采用模块化化程序设计计方法,及及锯齿型书书写格式,要要求上机调调试通过,能能正确运行行;6)设计上上交内容:设计报告告一份(按按格式书写写);源程程序一份(电电子版,能能编译成可可执行文件件并能正常常运行。每每个班由班班长负责收收集并上交交)。题目:职工工工资管理理系统1)、应提提供一个界界面来调用用各个功能能,调用界界面和各个个功能的操操作界面应应尽可能清清晰美观。2)、输入入功能:职职工信息的的录入(包包括从文件件中导入职职工信息数数据),
4、可可以一次完完成若干条条记录的输输入。3)、浏览览功能:完完成对全部部职工信息息的显示。4)、查找找功能:完成按姓姓名查询职职工的相关关信息,并并显示。完成按IID号查询询职工的相相关信息,并并显示。5)、删除除功能:通通过输入IID号完成成对职工的的信息进行行删除。6)、添加加功能:完完成添加新新职工的信信息。7)、修改改功能:通通过输入IID号完成成对职工的的信息进行行修改。8)、计算算功能:计计算职工的的各项工资资,并得出出实发工资资。个人人收入所得得税按现行行税率计算算9)、统计计功能:统统计并输出出符合指定定条件的职职工人数及及其占总人人数和百分分比。如如实发工资资在50000元以上
5、上。10)、保保存功能:可以将职职工信息数数据保存至至指定的文文件中。11)、退退出职工工工资管理系系统。职工信息应应至少包括括以下数据据:ID号号、姓名、基基础工资、职职务工资、住住房公积金金、个人收收入所得税税,水电费费、实发工工资。1.1:我我实现的题题目中的问问题:主菜单页面面制作;职工数据输输入;职工全部数数据浏览;按姓名、学学号查找职职工数据;通过ID号号对职工数数据进行删删除;通过ID号号对职工数数据修改;职工数据统统计(将自自己题目做做完后完成成了其它功功能)。1.2本系系统涉及的的知识点:结构体、数组、循循环、选择择、函数调用、分支支、指针、全全局变量、文文件读取、保保存1.
6、3我实实现的题目目功能:主菜单页面面制作;职工数据输输入;职工全部数数据浏览;按姓名、学学号查找职职工数据;通过ID号号对职工数数据进行删删除;通过ID号号对职工数数据修改;职工数据统统计;2 功能设设计2.1算法法设计2.1.11进入主函函数后执行行newuu函数,利利用swiitch语语句设计如如图1所示示的主菜单单请输入要执执行的功能能对应选项项(1-110)1. 录入职工信信息2. 浏览职工信信息3. 添加职工信信息4. 查询职工信信息5. 删除职工信信息6. 修改职工信信息7. 员工实发工工资8. 职工工资排排序9. 职工工资统统计10. 返回菜单2.1.22选择1后后录入职工工信息
7、,执执行inpput函数数利用循环环录入职工工各项信息息,输入完完毕后将所所有数据存存入文件。2.1.33输入2后后浏览职工工信息,执执行vieew函数,读读取文件,利利用循环将将职工各项项信息显示示2.1.44输入3后后添加职工工信息,执执行tiaanjiaa函数,读读取文件,输输入添加人人数,然后后调用innput11函数,利利用全局变变量D自动动将新添加加的职工信信息补充到到已存职工工信息后面面(利用循循环),保保存至文件件2.1.55输入4后后查找职工工信息(利利用swiitch语语句,通过过ID号和和姓名查找找),利用用charrge函数数,读取存存入到文件件中的职工工信息,选选取相
8、应的的使用通过过ID号(cchargge1函数数)和姓名名查找(cchargge2)的的函数对职职工信息查查找2.1.66输入5后后通过IDD号删除职职工信息,调调用dellete函函数,读取取文件,利利用循环将将与输入IID号相同同的文件中中的职工信信息删除。2.1.77输入6后后通过输入入ID号修修改员工信信息,调用用xiuggai函数数,读取文文件通过循循环将所需需各项信息息修改2.1.88输入7后后统计员工工工资,调调取gonngzhii函数,将将员工实发发工资输出出,其中实实发工资在在输入函数数inpuut函数中中利用选择择和循环计计算得出2.1.99输入8后后进行职工工工资函数数,
9、调取ttongjji函数,读读取文件,利利用循环将将职工工资资比较,进进行排序2.1.110输入99后进行职职工工资统统计,调取取tonggji函数数,将职工工工资分为为50000以上、33000-40000、20000-30000、22000以以下四个档档次,其中中对数据的的统计在输输入函数iinputt函数中实实现。2.1.111输入110为返回回函数,即即调用neewu函数数返回主菜菜单2.1.112输入111为写入入对使用此此系统的意意见:2.2 模模块流程图图职工工资信息管理系统主菜单newu()输入模块input()添加模块input1()浏览模块view()排序模块paixu()
10、按姓名查询charge2()查询模块charge()按员工ID号查询charge1()按实发工资排序paixu()删除模块delete()修改模块员工工资统计3 程序代代码设计strucct Woorkerr iint nnum; /IDD号码 cchar namee20; /姓名名 iint salaary1; /基础础工资 iint salaary2; /职务务工资 iint salaary3; /住房房公积金 iint salaary4; /社保保金 ffloatt sallary55;stu100000; /定义一一个足够大大的结构体体数组函数功能说说明:结构构体数组,用用来存放题题目
11、所需信信息,定义义100000个结构构体是为了了构建足够够大的结构构体使所有有数据正常常存取。void inpuut(innt n)-输入函数数 vvoid savee(intt n); /声明一一个保存函函数 vvoid newuu(); /声明一一个菜单函函数 iint ii=0; ffor (i=0;i 35500) innt a; flloat b; a = sttui.sallary11 + sstuii.saalaryy2 - stui.ssalarry3 - stuui.salaary4 - 35500; iff (a15000&a90000&(aa45000|aa=45500)
12、 b = (flloat)(a * 0.11 - 5555); stuui.salaary5 = sttui.sallary11 + sstuii.saalaryy2 - b; sstuii.saalaryy5 = stui.ssalarry1 + stuui.salaary2 ; ssave(n); /对结结构体数据据进行储存存 nnewu(); /返回回菜单函数功能说说明:将职职工信息存存入文件,ssave函函数是保存存函数,将将录入的信信息(职工工的姓名、编编号、基础础工资、职职务工资、住住房公积金金、社保金金额)存入入指定文件件中,neewu函数数是主菜单单函数,执执行完输入入函数后转
13、转入主菜单单进行其他他功能的进进行。此函函数中通过过for循循环将多个个职工信息息录入。下下面的iff语句是用用来统计职职工工资的的,在此函函数录入职职工信息的的同时将其其信息统计计。void tiannjia()-添添加函数 vvoid inpuut1(iint nn); iint ii; pprinttf (请输入添添加的人数数;); sscanff (%d,&i); iinputt1(i);函数功能说说明:此函函数为添加加函数,通通过此函数数输入要添添加的人数数,再转入入inpuut1函数数,添加职职工信息。void inpuut1(iint nn)-添添加函数 vvoid savee(
14、intt n); vvoid newuu(); iint ii=0; ffor (i=D;i 35500) innt a; flloat b; a = sttui.sallary11 + sstuii.saalaryy2 - stui.ssalarry3 - stuui.salaary4 - 35500; iff (a15000&a90000&(aa45000|aa=45500) b = (ffloatt)(a * 0.1 - 555); sttui.sallary55 = sstuii.saalaryy1 + stui.ssalarry2 - bb; sstuii.saalaryy5 = s
15、tui.ssalarry1 + stuui.salaary2 ; ssave(n); nnewu();函数功能说说明:此函函数为添加加函数,在在原有职工工信息的基基础上再添添加新的职职工信息,定定义一个全全局变量DD是原先输输入的职工工个数,此此添加函数数直接从DD项开始录录入新的职职工信息,IIf下面的的语句是实实发工资的的计算,在在录入职工工信息的过过程中将实实发工资计计算出来,实实发工资的的函数见下下面的函数数。void savee(intt n)-保存存函数(将将结构体的的数据储存存到文件中中) FFILE *fp,*fp11; / iint ii; iif (fp=ffopenn(a
16、bbc.daat,wb)=NNULL) pprinttf (cannnot oopen fileen); rreturrn ; ffor (i=0;in+D;i+) iif (ffwritte(&sstuii,siizeoff(strruct Workker),1,fpp)!=11) pprinttf (filee wriite eerrorrn); DD = ii; iif (fp1=fopeen(aabcd.dat,wbb)=NULLL) pprinttf (cannnot oopen fileen); rreturrn ; ffwritte(&DD,2,11,fp11);/记录结构构体数
17、组的的个数并经经其储存到到文件中 ffclosse(fpp); ffclosse(fpp1);函数功能说说明:此函函数为保存存函数,将将输入或修修改后的职职工信息存存入文件,在在其中定义义两个指针针,各指向向一个文件件,一个文文件存各职职工信息,一一个文件存存职工个数数,函数内内容为文件件读取的固固定格式。void vieww(intt n)-浏览函函数 iint ii; FFILE *fp,*fp11; /定义义两个指针针文件 iif (fp=ffopenn(abbc.daat,rb)=NNULL) /以读读的方式打打开文件 pprinttf (cannnot oopen fileen);
18、eexit(0); iif (fp1=fopeen(aabcd.dat,rbb)=NULLL) /以读读的方式打打开文件 pprinttf (cannnot oopen fileen); eexit(0); ffreadd(&D,2,1,fp1); /读读出文件中中的D的值值 pprinttf (nIDD号码 姓名 基础础工作 职务工资资 住房房公积金 社保保金 实实发工资n); ffor (i=0;iD;i+) ffreadd(&sttui,sizzeof(struuct WWorkeer),11,fp); pprinttf (%5d %6s %5dd %44d %6d %55d %5.2f
19、fn,stui.nnum ,stui.nname ,stuui.salaary1 ,stuui.salaary2 ,stuui.salaary3,stui.ssalarry4,sstuii.saalaryy5 ); ffclosse(fpp); ffclosse(fpp1); nnewu();函数功能说说明:此函函数为浏览览函数,先先打开文件件读取数据据,再通过过循环将文文件中结构构体中的数数据依次输输出。void newuu()-菜单单函数(界界面函数) vvoid tiannjia(); /函数数声明 vvoid deleet(); /函数数声明 vvoid charrge(); /函数数
20、声明 vvoid paixxu(); /函数数声明 vvoid xiuggai(); /函数数声明 vvoid tonggji(); /函数数声明 vvoid gonggzhi(); /函数数声明 iint ii,n; /菜单(界界面) pprinttf (欢欢迎登入职职工管理系系统n); pprinttf ( 录入职工工信息 浏览职职工信息 n); pprinttf ( 添加员工工信息 查询员员工信息 n); pprinttf ( 删除员工工信息 员工信信息修改 n); pprinttf ( 员工实发发工资 员工工工资排序 n);printtf ( 员工工资资统计 返回回菜单 n);prin
21、ttf ( 意意见反馈 n); pprinttf (nnn); pprinttf (请您在(11-7)中中选择一个个数字进行行相应的操操作:); sscanff (%d,&n); iif (nn=1) pprinttf (请确定您您本次将要要录入职工工的数目:); sscanff (%d,&i); sswitcch (nn) ccase 1: inpput(ii); bbreakk; ccase 2: vieew(D); bbreakk; ccase 3: tiaanjiaa();bbreakk; ccase 4: chaarge(); bbreakk; ccase 5: dellet();
22、bbreakk; ccase 6: xiuugai(); bbreakk; ccase 7: gonngzhii();bbreakk; ccase 8: paiixu(); brreak; ccase 9: tonngji(); bbreakk;case 10: newwu(); breeak;case 11: yijjian();brreak; 函数功能说说明:此函函数为主菜菜单页面,通通过此菜单单运用swwitchh函数可以以实现系统统11个功功能的调用用,通过对对老师上传传的例系统统分析,我我设计了此此想主菜单单页面。void deleet()-删删除函数 iint nnum,ii,n,
23、mm; FFILE *fp,*fp11; iif (fp=ffopenn(abbc.daat,wb)=NNULL) /以写的方方式打开文文件 pprinttf (cannnot oopen fileen); eexit(0); iif (fp1=fopeen(aabcd.dat,wbb)=NULLL)/以写的方方式打开文文件 pprinttf (cannnot oopen fileen); eexit(0); ffreadd(&D,sizeeof(iint),1,fpp1); pprinttf (*请输入入您想删除除的员工IID号*:); /找到要删删除员工的的ID号码码 sscanff (%
24、d,&num); foor (ii=0;iiD;ii+) freaad(&sstuii,siizeoff(strruct Workker),1,fpp); if (stui.nnum=num&iDD) nn = ii; ffreadd(&sttui+1,ssizeoof(sttructt Worrker),1,ffp); sttun = sstuii+1; /将将后一个人人的数据赋赋予前一个个人,从而而实现对员员工信息的的有效删除除 ii+; nn+; foor (ii=0;iiD-11;i+) ffwritte(&sstuii,siizeoff(strruct Workker),1,fpp)
25、; / 删除一个个人的数据据后D就要要减一 D = D - 1; fwwritee(&D,sizeeof(iint),1,fpp1); fcclosee(fp); fcclosee(fp11); prrintff(是否否继续删除除员工信息息 1继续? 22返回菜单单); sccanf(%d,&m); iff (m=1) ddelett(); neewu();函数功能说说明:此函函数为删除除函数,主主要原理是是通过循环环将所输入入编号的职职工的信息息替换为其其编号的下下一个职工工的信息将将输入编号号的职工的的信息删除除。void charrge()-查找函数数 iint nnum; pprint
26、tf (按姓名查查找请按11 按按ID号查查找请按22:); sscanff (%d,&num); sswitcch (nnum) caase 11: chaarge11(); breaak; caase 22: chaarge22(); breaak; 函数功能说说明:此函函数为查找找函数的主主菜单,此此函数使用用swittch语句句可以调取取charrge1(按姓名查查找)、cchargge2(按按ID号查查找)两个个查找方式式。void charrge1()-查找函数数 FFILE *fp,*fp11; /利用IID号进行行查找信息息 iint ii; cchar namee20; pp
27、rinttf (请输入您您要查询的的员工姓名名:); sscanff (%s,nname); iif (fp=ffopenn(abbc.daat,rb)=NNULL) /打开文文件 pprinttf (cannnot oopen fileen); eexit(0); iif (fp1=fopeen(aabcd.dat,rbb)=NULLL) pprinttf (cannnot oopen fileen); eexit(0); ffreadd(&D,2,1,fp1); ffor (i=0;iD;i+) /利用循循环的方法法找到信息息 ffreadd(&sttui,sizzeof(struuct
28、WWorkeer),11,fp); iif (sstrcmmp(sttui.namme ,nname)=0) prrintff (%-5d %-6ss %dd %d %d n,sstuii.nuum ,sstuii.naame ,stui.ssalarry1 ,stui.ssalarry2 ,stui.ssalarry3 ); brreak; ffclosse(fpp); ffclosse(fpp1); nnewu();函数工呢说说明:此函函数为使用用姓名查找找方式将某某位职工的的信息查找找,使用sstrcmmp函数将将存入文件件的职工姓姓名与输入入的姓名比比较,将指指定的文件件中某个职职工信
29、息查查找出来。void charrge2()-利用用ID号进进行查找信信息 FFILE *fp,*fp11; iint nnum,ii; pprinttf (请输入您您要查询的的员工IDD号码:); sscanff (%d,&num); iif (fp=ffopenn(abbc.daat,rb)=NNULL) /打开文件件 pprinttf (cannnot oopen fileen); eexit(0); iif (fp1=fopeen(aabcd.dat,rbb)=NULLL) pprinttf (cannnot oopen fileen); eexit(0); ffreadd(&D,2,1,fp1); ffor (i=0;iD;i+) /利用循循环的方法法找到信息息 ffreadd(&sttu