分享
分销 收藏 举报 申诉 / 61
播放页_导航下方通栏广告

类型职工工资管理系统设计实验报告.doc

  • 上传人:w****g
  • 文档编号:3659005
  • 上传时间:2024-07-12
  • 格式:DOC
  • 页数:61
  • 大小:223.04KB
  • 下载积分:14 金币
  • 播放页_非在线预览资源立即下载上方广告
    配套讲稿:

    如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。

    特殊限制:

    部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。

    关 键  词:
    职工工资 管理 系统 设计 实验 报告
    资源描述:
    内蒙古工业大学信息工程学院 实 验 报 告 课程名称: c语言 实验名称: 实验类型: 验证性□ 综合性√ 设计性□ 实验室名称: 电西8楼 班级: 计12-2 学号: 姓名: 孙亚赛 组别: 同组人: 勾涛 付启恒 成绩: 实验日期: 2023-3-3 目录 1 题目与规定 3 2 功能设计 5 2.1算法设计 5 2.2 模块流程图 7 3 程序代码设计 8 4 C程序设计总结 22 5 结束语 23 6 源程序 23 1 题目与规定 程序设计的目的和规定 1.目的: 1)复习、巩固程序设计的基础知识,进一步加深对程序设计语言的理解和掌握;纯熟使用函数、结构体、文献、数组、循环与选择、链表和指针等知识点,纯熟应用C语言综合知识。 2)为学生提供了一个既动手又动脑,独立实践的机会,将课本上的理论知识和实际有机的结合起来,锻炼学生的分析解决实际问题的能力。提高学生适应实际,实践编程的能力; 3)培养学生在项目开发中团队合作精神、创新意识及能力。 2.规定: 1)对系统进行功能模块分析、控制模块分析对的,符合题目规定,实现相应功能;可以加以其他功能或修饰,使程序更加完善、合理; 2)系统设计要实用、编程简练、功能全面、界面美观、操作使用便捷、程序运营稳定; 3)说明书、流程图要清楚; 4)记录设计情况(备查,也为编写设计说明书作好准备); 5)规定采用模块化程序设计方法,及锯齿型书写格式,规定上机调试通过,能对的运营; 6)设计上交内容:设计报告一份(按格式书写);源程序一份(电子版,能编译成可执行文献并能正常运营。每个班由班长负责收集并上交)。 题目:职工工资管理系统 1)、应提供一个界面来调用各个功能,调用界面和各个功能的操作界面应尽也许清楚美观。 2)、输入功能:职工信息的录入(涉及从文献中导入职工信息数据),可以一次完毕若干条记录的输入。 3)、浏览功能:完毕对所有职工信息的显示。 4)、查找功能: ①完毕按姓名查询职工的相关信息,并显示。 ②完毕按ID号查询职工的相关信息,并显示。 5)、删除功能:通过输入ID号完毕对职工的信息进行删除。 6)、添加功能:完毕添加新职工的信息。 7)、修改功能:通过输入ID号完毕对职工的信息进行修改。 8)、计算功能:计算职工的各项工资,并得出实发工资。[个人收入所得税按现行税率计算] 9)、记录功能:记录并输出符合指定条件的职工人数及其占总人数和比例。[如实发工资在5000元以上。 10)、保存功能:可以将职工信息数据保存至指定的文献中。 11)、退出职工工资管理系统。 职工信息应至少涉及以下数据:ID号、姓名、基础工资、职务工资、住房公积金、个人收入所得税,水电费、实发工资。 1.1:我实现的题目中的问题: 主菜单页面制作; 职工数据输入; 职工所有数据浏览; 按姓名、学号查找职工数据; 通过ID号对职工数据进行删除; 通过ID号对职工数据修改; 职工数据记录(将自己题目做完后完毕了其它功能)。 1.2本系统涉及的知识点:结构体、数组、循环、选择、函数调用、分支、指针、全局变量、文献读取、保存 1.3我实现的题目功能: 主菜单页面制作; 职工数据输入; 职工所有数据浏览; 按姓名、学号查找职工数据; 通过ID号对职工数据进行删除; 通过ID号对职工数据修改; 职工数据记录; 2 功能设计 2.1算法设计 2.1.1进入主函数后执行newu函数,运用switch语句设计如图1所示的主菜单 请输入要执行的功能相应选项(1-10) 1. 录入职工信息 2. 浏览职工信息 3. 添加职工信息 4. 查询职工信息 5. 删除职工信息 6. 修改职工信息 7. 员工实发工资 8. 职工工资排序 9. 职工工资记录 10. 返回菜单 2.1.2选择1后录入职工信息,执行input函数运用循环录入职工各项信息,输入完毕后将所有数据存入文献。 2.1.3输入2后浏览职工信息,执行view函数,读取文献,运用循环将职工各项信息显示 2.1.4输入3后添加职工信息,执行tianjia函数,读取文献,输入添加人数,然后调用input1函数,运用全局变量D自动将新添加的职工信息补充到已存职工信息后面(运用循环),保存至文献 2.1.5输入4后查找职工信息(运用switch语句,通过ID号和姓名查找),运用charge函数,读取存入到文献中的职工信息,选取相应的使用通过ID号(charge1函数)和姓名查找(charge2)的函数对职工信息查找 2.1.6输入5后通过ID号删除职工信息,调用delete函数,读取文献,运用循环将与输入ID号相同的文献中的职工信息删除。 2.1.7输入6后通过输入ID号修改员工信息,调用xiugai函数,读取文献通过循环将所需各项信息修改 2.1.8输入7后记录员工工资,调取gongzhi函数,将员工实发工资输出,其中实发工资在输入函数input函数中运用选择和循环计算得出 2.1.9输入8后进行职工工资函数,调取tongji函数,读取文献,运用循环将职工工资比较,进行排序 2.1.10输入9后进行职工工资记录,调取tongji函数,将职工工资分为5000以上、3000-4000、2023-3000、2023以下四个档次,其中对数据的记录在输入函数input函数中实现。 2.1.11输入10为返回函数,即调用newu函数返回主菜单 2.1.12输入11为写入对使用此系统的意见: 2.2 模块流程图 职工工资信息管理系统 主菜单newu() 输入模块input() 添加模块input1() 浏览模块view() 排序模块paixu() 按姓名查询 charge2() 查询模块 charge() 按员工ID号查询 charge1() 按实发工资排序 paixu() 删除模块 delete() 修改模块 员工工资记录 3 程序代码设计 struct Worker { int num; //ID号码 char name[20]; //姓名 int salary1; //基础工资 int salary2; //职务工资 int salary3; //住房公积金 int salary4; //社保金 float salary5; }stu[10000]; //定义一个足够大的结构体数组 函数功能说明:结构体数组,用来存放题目所需信息,定义10000个结构体是为了构建足够大的结构体使所有数据正常存取。 void input(int n)----------------------------输入函数 { void save(int n); //声明一个保存函数 void newu(); //声明一个菜单函数 int i=0; for (i=0;i<n;i++) { printf ("\n请输入职工号:"); scanf ("%d",&stu[i].num ); printf ("\n请输入姓名:"); scanf ("%s",&stu[i].name); printf ("\n请输入基础工资:"); scanf ("%d",&stu[i].salary1); printf ("\n请输入职务工资:"); scanf ("%d",&stu[i].salary2 ); printf ("\n请输入住房公积金:"); scanf ("%d",&stu[i].salary3 ); printf ("\n请输入社保金额:"); scanf ("%d",&stu[i].salary4 ); if(stu[i].salary1 + stu[i].salary2 - stu[i].salary3 - stu[i].salary4 > 3500) { int a; float b; a = stu[i].salary1 + stu[i].salary2 - stu[i].salary3 - stu[i].salary4 - 3500; if (a>1500&&a<4500) { b = (float)(a * 0.1 - 105); stu[i].salary5 = stu[i].salary1 + stu[i].salary2 - b; } if (a>9000&&(a<4500||a==4500)) { b = (float)(a * 0.1 - 555); stu[i].salary5 = stu[i].salary1 + stu[i].salary2 - b; } } stu[i].salary5 = stu[i].salary1 + stu[i].salary2 ; } save(n); //对结构体数据进行储存 newu(); //返回菜单 } 函数功能说明:将职工信息存入文献,save函数是保存函数,将录入的信息(职工的姓名、编号、基础工资、职务工资、住房公积金、社保金额)存入指定文献中,newu函数是主菜单函数,执行完输入函数后转入主菜单进行其他功能的进行。此函数中通过for循环将多个职工信息录入。下面的if语句是用来记录职工工资的,在此函数录入职工信息的同时将其信息记录。 void tianjia()----------------------------------------------添加函数 { void input1(int n); int i; printf ("←请输入添加的人数→;"); scanf ("%d",&i); input1(i); } 函数功能说明:此函数为添加函数,通过此函数输入要添加的人数,再转入input1函数,添加职工信息。 void input1(int n)--------------------------添加函数 { void save(int n); void newu(); int i=0; for (i=D;i<n+D;i++) { printf ("\n请输入职工号:"); scanf ("%d",&stu[i].num ); printf ("\n请输入姓名:"); scanf ("%s",&stu[i].name); printf ("\n请输入基础工资:"); scanf ("%d",&stu[i].salary1); printf ("\n请输入职务工资:"); scanf ("%d",&stu[i].salary2 ); printf ("\n请输入住房公积金:"); scanf ("%d",&stu[i].salary3 ); printf ("\n请输入员工社保金额:"); scanf ("%d",&stu[i].salary4 ); if(stu[i].salary1 + stu[i].salary2 - stu[i].salary3 - stu[i].salary4 > 3500) { int a; float b; a = stu[i].salary1 + stu[i].salary2 - stu[i].salary3 - stu[i].salary4 - 3500; if (a>1500&&a<4500) { b = (float)(a * 0.1 - 105); stu[i].salary5 = stu[i].salary1 + stu[i].salary2 - b; } if (a>9000&&(a<4500||a==4500)) { b = (float)(a * 0.1 - 555); stu[i].salary5 = stu[i].salary1 + stu[i].salary2 - b; } } stu[i].salary5 = stu[i].salary1 + stu[i].salary2 ; } save(n); newu(); } 函数功能说明:此函数为添加函数,在原有职工信息的基础上再添加新的职工信息,定义一个全局变量D是原先输入的职工个数,此添加函数直接从D项开始录入新的职工信息,If下面的语句是实发工资的计算,在录入职工信息的过程中将实发工资计算出来,实发工资的函数见下面的函数。 void save(int n)-----------------------保存函数(将结构体的数据储存到文献中) { FILE *fp,*fp1; // int i; if ((fp=fopen("abc.dat","wb"))==NULL) { printf ("cannot open file\n"); return ; } for (i=0;i<n+D;i++) if (fwrite(&stu[i],sizeof(struct Worker),1,fp)!=1) printf ("file write error\n"); D = i; if ((fp1=fopen("abcd.dat","wb"))==NULL) { printf ("cannot open file\n"); return ; } fwrite(&D,2,1,fp1);//记录结构体数组的个数并经其储存到文献中 fclose(fp); fclose(fp1); } 函数功能说明:此函数为保存函数,将输入或修改后的职工信息存入文献,在其中定义两个指针,各指向一个文献,一个文献存各职工信息,一个文献存职工个数,函数内容为文献读取的固定格式。 void view(int n)----------------------------------------------浏览函数 { int i; FILE *fp,*fp1; //定义两个指针文献 if ((fp=fopen("abc.dat","rb"))==NULL) //以读的方式打开文献 { printf ("cannot open file\n"); exit(0); } if ((fp1=fopen("abcd.dat","rb"))==NULL) //以读的方式打开文献 { printf ("cannot open file\n"); exit(0); } fread(&D,2,1,fp1); //读出文献中的D的值 printf ("\nID号码 姓名 基础工作 职务工资 住房公积金 社保金 实发工资\n"); for (i=0;i<D;i++) { fread(&stu[i],sizeof(struct Worker),1,fp); printf ("%5d %6s %5d %4d %6d %5d %5.2f\n",stu[i].num ,stu[i].name ,stu[i].salary1 ,stu[i].salary2 ,stu[i].salary3,stu[i].salary4,stu[i].salary5 ); } fclose(fp); fclose(fp1); newu(); } 函数功能说明:此函数为浏览函数,先打开文献读取数据,再通过循环将文献中结构体中的数据依次输出。 void newu()----------------------------------------------------菜单函数(界面函数) { void tianjia(); //函数声明 void delet(); //函数声明 void charge(); //函数声明 void paixu(); //函数声明 void xiugai(); //函数声明 void tongji(); //函数声明 void gongzhi(); //函数声明 int i,n; //菜单(界面) printf ("☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆欢迎登入职工管理系统☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆\n"); printf (" <1>录入职工信息 <2>浏览职工信息 \n"); printf (" <3>添加员工信息 <4>查询员工信息 \n"); printf (" <5>删除员工信息 <6>员工信息修改 \n"); printf (" <7>员工实发工资 <8>员工工资排序 \n"); printf (" <9>员工工资记录 <10>返回菜单 \n"); printf (" <9>意见反馈 \n"); printf ("\n☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆\n"); printf ("★请您在(1-7)中选择一个数字进行相应的操作★:"); scanf ("%d",&n); if (n==1) { printf ("★请拟定您本次将要录入职工的数目★:"); scanf ("%d",&i); } switch (n) { case 1: input(i); break; case 2: view(D); break; case 3: tianjia();break; case 4: charge(); break; case 5: delet(); break; case 6: xiugai(); break; case 7: gongzhi();break; case 8: paixu(); break; case 9: tongji(); break; case 10: newu(); break; case 11: yijian();break; } } 函数功能说明:此函数为主菜单页面,通过此菜单运用switch函数可以实现系统11个功能的调用,通过对老师上传的例系统分析,我设计了此想主菜单页面。 void delet()----------------------------------------------------删除函数 { int num,i,n,m; FILE *fp,*fp1; if ((fp=fopen("abc.dat","wb"))==NULL) //以写的方式打开文献 { printf ("cannot open file\n"); exit(0); } if ((fp1=fopen("abcd.dat","wb"))==NULL)//以写的方式打开文献 { printf ("cannot open file\n"); exit(0); } fread(&D,sizeof(int),1,fp1); printf ("*请输入您想删除的员工ID号*:"); //找到要删除员工的ID号码 scanf ("%d",&num); for (i=0;i<D;i++) { fread(&stu[i],sizeof(struct Worker),1,fp); if (stu[i].num==num&&i<D) { n = i; fread(&stu[i+1],sizeof(struct Worker),1,fp); stu[n] = stu[i+1]; //将后一个人的数据赋予前一个人,从而实现对员工信息的有效删除 i++; n++; } } for (i=0;i<D-1;i++) { fwrite(&stu[i],sizeof(struct Worker),1,fp); // 删除一个人的数据后D就要减一 } D = D - 1; fwrite(&D,sizeof(int),1,fp1); fclose(fp); fclose(fp1); printf("是否继续删除员工信息 1继续? 2返回菜单"); scanf("%d",&m); if (m==1) delet(); newu(); } 函数功能说明:此函数为删除函数,重要原理是通过循环将所输入编号的职工的信息替换为其编号的下一个职工的信息将输入编号的职工的信息删除。 void charge()------------------------------------------------查找函数 { int num; printf ("按姓名查找请按1 按ID号查找请按2:"); scanf ("%d",&num); switch (num) { case 1: charge1(); break; case 2: charge2(); break; } } 函数功能说明:此函数为查找函数的主菜单,此函数使用switch语句可以调取charge1(按姓名查找)、charge2(按ID号查找)两个查找方式。 void charge1()-----------------------------------------------------------查找函数 { FILE *fp,*fp1; //运用ID号进行查找信息 int i; char name[20]; printf ("请输入您要查询的员工姓名:"); scanf ("%s",name); if ((fp=fopen("abc.dat","rb"))==NULL) //打开文献 { printf ("cannot open file\n"); exit(0); } if ((fp1=fopen("abcd.dat","rb"))==NULL) { printf ("cannot open file\n"); exit(0); } fread(&D,2,1,fp1); for (i=0;i<D;i++) //运用循环的方法找到信息 { fread(&stu[i],sizeof(struct Worker),1,fp); if (strcmp(stu[i].name ,name)==0) { printf ("%-5d %-6s %d %d %d \n",stu[i].num ,stu[i].name ,stu[i].salary1 ,stu[i].salary2 ,stu[i].salary3 ); break; } } fclose(fp); fclose(fp1); newu(); } 函数工呢说明:此函数为使用姓名查找方式将某位职工的信息查找,使用strcmp函数将存入文献的职工姓名与输入的姓名比较,将指定的文献中某个职工信息查找出来。 void charge2()-------------------------------------------------------------运用ID号进行查找信息 { FILE *fp,*fp1; int num,i; printf ("请输入您要查询的员工ID号码:"); scanf ("%d",&num); if ((fp=fopen("abc.dat","rb"))==NULL) //打开文献 { printf ("cannot open file\n"); exit(0); } if ((fp1=fopen("abcd.dat","rb"))==NULL) { printf ("cannot open file\n"); exit(0); } fread(&D,2,1,fp1); for (i=0;i<D;i++) //运用循环的方法找到信息 { fread(&stu[i],sizeof(struct Worker),1,fp); if (stu[i].num == num) { printf ("%-5d %-6s %d %d %d \n",stu[i].num ,stu[i].name ,stu[i].salary1 ,stu[i].salary2 ,stu[i].salary3 ); break; } } newu(); fclose (fp); fclose (fp1); } 函数功能说明:此函数为运用ID号查找职工信息,原理与使用姓名查找特定职工信息相似,使用for循环将文献中与输入特定ID号相同的职工信息查找到并且输出。 void paixu()--------------------------------------------------------------------排序函数 { FILE *fp,*fp1; int n,i,j,k; struct Worker temp; if ((fp=fopen("abc.dat","rb"))==NULL) { printf ("cannot open file\n"); exit(0); } if ((fp1=fopen("abcd.dat","rb"))==NULL) { printf ("cannot open file\n"); exit(0); } fread(&D,2,1,fp1); for (n=0;n<D;n++) //运用冒泡法排序 { fread(&stu[n],sizeof(struct Worker),1,fp); } for (i=0;i<D-1;i++) { k = i; for (j=i+1;j<D;j++) { if (stu[j].salary5 > stu[k].salary5 ) k = j; } temp=stu[k];stu[k]=stu[i];stu[i]=temp; } printf ("\n\nID号码 姓名 基础工作 职务工资 住房公积金 社保金 实发工资\n"); for (i=0;i<D;i++) { printf ("%5d %6s %5d %4d %6d %5d %5.2f\n\n\n\n",stu[i].num ,stu[i].name ,stu[i].salary1 ,stu[i].salary2 ,stu[i].salary3,stu[i].salary4,stu[i].salary5 ); } fclose(fp); fclose(fp1); newu(); } 函数功能说明:此函数为排序函数,运用职工工资排序,使用的原理是冒泡法(for语句嵌套)。 void xiugai()---------------------------------------------------------------------修改函数 { FILE *fp,*fp1; //fp1记录一共有fp多少组数据,fp中用来存储机体数据; int num,i,a,b; if ((fp=fopen("abc.dat","wb"))==NULL)//以写的方式打开文献(即对文献进行初始化) { printf ("cannot open file\n");//以读的方式打开文献 exit(0); } if ((fp1=fopen("abcd.dat","rb"))==NULL) { printf ("cannot open file\n"); exit(0); } fread(&D,sizeof(int),1,fp1); //读出fp1中的D即是fp中的数据个数 for (i=0;i<D;i++) { fread(&stu[i],sizeof(struct Worker),1,fp); } printf ("请输入您想修改员工的ID号码:"); scanf ("%d",&num); for (i=0;i<D;i++) { if (stu[i].num==num) //开始修改信息 { printf ("ID号码是否修改(1为修改n为不修改) "); scanf("%d",&a); if (a==1) { printf ("ID号码改为:"); scanf ("%d",&stu[i].num ); } printf ("姓名是否修改(1为修改n为不修改) "); scanf("%d",&a); if (a==1) { printf ("姓名改为:"); sc
    展开阅读全文
    提示  咨信网温馨提示:
    1、咨信平台为文档C2C交易模式,即用户上传的文档直接被用户下载,收益归上传人(含作者)所有;本站仅是提供信息存储空间和展示预览,仅对用户上传内容的表现方式做保护处理,对上载内容不做任何修改或编辑。所展示的作品文档包括内容和图片全部来源于网络用户和作者上传投稿,我们不确定上传用户享有完全著作权,根据《信息网络传播权保护条例》,如果侵犯了您的版权、权益或隐私,请联系我们,核实后会尽快下架及时删除,并可随时和客服了解处理情况,尊重保护知识产权我们共同努力。
    2、文档的总页数、文档格式和文档大小以系统显示为准(内容中显示的页数不一定正确),网站客服只以系统显示的页数、文件格式、文档大小作为仲裁依据,个别因单元格分列造成显示页码不一将协商解决,平台无法对文档的真实性、完整性、权威性、准确性、专业性及其观点立场做任何保证或承诺,下载前须认真查看,确认无误后再购买,务必慎重购买;若有违法违纪将进行移交司法处理,若涉侵权平台将进行基本处罚并下架。
    3、本站所有内容均由用户上传,付费前请自行鉴别,如您付费,意味着您已接受本站规则且自行承担风险,本站不进行额外附加服务,虚拟产品一经售出概不退款(未进行购买下载可退充值款),文档一经付费(服务费)、不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
    4、如你看到网页展示的文档有www.zixin.com.cn水印,是因预览和防盗链等技术需要对页面进行转换压缩成图而已,我们并不对上传的文档进行任何编辑或修改,文档下载后都不会有水印标识(原文档上传前个别存留的除外),下载后原文更清晰;试题试卷类文档,如果标题没有明确说明有答案则都视为没有答案,请知晓;PPT和DOC文档可被视为“模板”,允许上传人保留章节、目录结构的情况下删减部份的内容;PDF文档不管是原文档转换或图片扫描而得,本站不作要求视为允许,下载前可先查看【教您几个在下载文档中可以更好的避免被坑】。
    5、本文档所展示的图片、画像、字体、音乐的版权可能需版权方额外授权,请谨慎使用;网站提供的党政主题相关内容(国旗、国徽、党徽--等)目的在于配合国家政策宣传,仅限个人学习分享使用,禁止用于任何广告和商用目的。
    6、文档遇到问题,请及时联系平台进行协调解决,联系【微信客服】、【QQ客服】,若有其他问题请点击或扫码反馈【服务填表】;文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“【版权申诉】”,意见反馈和侵权处理邮箱:1219186828@qq.com;也可以拔打客服电话:0574-28810668;投诉电话:18658249818。

    开通VIP折扣优惠下载文档

    自信AI创作助手
    关于本文
    本文标题:职工工资管理系统设计实验报告.doc
    链接地址:https://www.zixin.com.cn/doc/3659005.html
    页脚通栏广告

    Copyright ©2010-2026   All Rights Reserved  宁波自信网络信息技术有限公司 版权所有   |  客服电话:0574-28810668    微信客服:咨信网客服    投诉电话:18658249818   

    违法和不良信息举报邮箱:help@zixin.com.cn    文档合作和网站合作邮箱:fuwu@zixin.com.cn    意见反馈和侵权处理邮箱:1219186828@qq.com   | 证照中心

    12321jubao.png12321网络举报中心 电话:010-12321  jubao.png中国互联网举报中心 电话:12377   gongan.png浙公网安备33021202000488号  icp.png浙ICP备2021020529号-1 浙B2-20240490   


    关注我们 :微信公众号  抖音  微博  LOFTER               

    自信网络  |  ZixinNetwork