课程设计工资管理系统设计.doc
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 课程设计 工资管理 系统 设计
- 资源描述:
-
《高级语言程序设计》课程设计 设计题目:工资管理系统设计 目录 1设计任务……………………………………………………1 2正文 需求分析…………………………………………………1 系统模块图………………………………………………1 模块说明…………………………………………………1 用户使用说明……………………………………………2 测试结果…………………………………………………3 3设计小结……………………………………………………4 4参考文献……………………………………………………5 5附录(源程序)……………………………………………6 设计任务 做一个工资管理系统,要能按照姓名和卡号查找员工的工资信息,以及员工工资信息的插入,删除。同时这些信息要存储在TXT文件中…还要可以按照一定顺序输出所有员工工资的信息 分析 工资信息存放在文件中,提供文件的输入、输出等操作;要实现浏览功能,提供显示、排序操作;而查询功能要求实现查找操作;另外还应该提供键盘式选择菜单以实现功能选择。 系统模块图 2、总体设计:整个系统可以分为信息输入、信息添加、信息浏览、信息排序、信息查询和信息统计模块。 3、详细设计 工资信息采用结构体数组: struct mygz /*m每月工资*/ { int yuefen; float yfgz; float sf; float df; float sj; float sfgz; }; struct worker /*工人信息*/ { int kahao; char xingming[20]; struct mygz m[12]; float zsfgz; }; 模块说明 (1)主函数提供输入、处理和输出部分的函数调用,各功能模块采用菜单方式选择。 (2)输入模块 按照工资卡号、姓名、月份、应发工资、水费、电费的顺序输入信息。 (3)添加模块 增加新的职工工资信息, 从键盘输入并逐条写到原来的输入文件中, 采用追加而不是覆 盖的方式。 (4)浏览模块 通过菜单选择按照工资卡号还是姓名浏览。 如果按照卡号浏览, 则显示的 记录按照卡号 升序输出;按照姓名浏览则按照字典序输出(调用排序模块的排序功能)。 (5)排序模块 排序模块提供菜单选择,实现按照工资卡号升序、实发工资降序以及姓名字典序排序。排序方法可以选择冒泡排序、插入排序、选择排序等。 (6)查询模块 实现按照工资卡号和姓名的查询,采用基本的查找方法即可。 职工工资管理系统 查询个人工资情况 录入工资信息 删除职工记录 浏览员工工资信息 个人工资排序情况\ 退出系统 用户使用说明 启动后屏幕上显示下面菜单 1查询个人工资情况 2录入工资信息 3删除个人工资情况 4浏览员工工资信息 5个人工资排序情况 6退出系统 如果你要执行某一功能,就按下该功能所对应的数字即可。 查询个人工资情况:在主菜单中输入1 则进入查询子菜单界面,。。系统会提示你选择菜单。输入1后则进入按姓名查询职工信息,此时系统会自动提示你输入要查询的职工姓名。输入职工号后会出现该职工的信息。输入错误职工号,要求重新输入;输入2后则进入按卡号查询职工信息,此时系统会自动提示你输入要查询的职工卡号。输入0则返回主菜单 录入工资信息:在主菜单中输入2则系统会进入新界面并自动提示你输入建立的月份,输入完成后按回车键系统会逐一提示输入 卡号,如没有记录,根据提示按1 新建,系统会逐一提示出入 姓名,工资,水费,电费,输入完成后会继续提示输入下一个职工的职工号。 。 删除个人工资情况:在主菜单中输入3系统界面是删除菜单。系统会提示你选择(0-1)。输入1则按职工号删除记录,系统会自动提示你输入要删除的职工信息,进入新界面后系统会提示你删除前该职工的卡号。输入错误职工号,显示没有该职工号的职工一个记录已经删除了时系统会提示删除后的职工信息。根据菜单提示,输入1继续删除,输入2则返回主菜单。 浏览员工工资信息:在主菜单中输入4系统界面是输出菜单界面,按照输入格式:职工号、 姓名 、性别 、年龄、 工资,逐个的输出职工的信息,输出所有职工信息后系统自动退出。 个人工资排序情况:在主菜单中输入5系统界面是统计菜单界面,输入工资数,显示大于该工资的职工的所有信息。关闭文件。 退出系统:在使用各个功能后输入6则返回主菜单。在主菜单中输入6则退出系统。 测试结果 浏览界面 排序界面 设计小结 通过这段时间的实习, 我收获颇多。这次实习是真正意义上的将所学知识运用到实际中去。我进一步理解和运用了结构化程序的思想和方法,初步掌握了开发一个小型实用系统的基本方法,学会了调试一个较长程序的基本方法,学会利用流程图表示算法,进一步掌握和提高了利用C语言进行程序设计的能力.具备了一定的编程能力. 接到C语言课程设计的作业我十分高兴,终于学到的东西可以运用了。在老师的指导和大家的共同努力下,我们终于完成了程序的大体编制。程序中包括主函数、输入模块、查询模块、修改模块、删除模块、统计模块、输出模块、追加模块。其中在输入模块中指针文件运用的比较好,因为指针是C的一个特色,它能有效的表示复杂的数据结构,动态的分配内存,方便的使用字符串、数组,可谓是C的精华。在程序设计中我们最大的收获就是:我们真正从实践的角度体会到了C语言在实际生活中的作用,也深刻体会到了它带来的方便快捷。不但使我们对C语言有更进一步的巩固和认识还使我们懂得了团队协作的重要!让我们将一年所学的C语言知识学为所用,让我们感觉到了它的神奇魅力。 美中不足的就是:由于我们知识的不足以及条件的限制,本系统还有许多漏洞与不足,希望老师给以批评与帮助,我们会积极改正。而且本程序还处于初级阶段的职工工资管理功能中,只实现了对职工工资的录入、删除、修改、查询、统计、显示等简单功能,功能较简单,不一定在实际中有大的用途,程序编排中可能有烦琐之处有待进一步简化。 参考文献 姜灵芝 著.C语言课程设计案例精编.清华大学出版社,2008 《C语言程序设计教程》第3版 谭浩强 百度文库 百度贴吧:C语言吧 附录(源程序) 显示一系列功能选项 输入n,判断n是否是0-6 根据n的值调用各功能模块函数 #include<stdio.h> #include<string.h> #include<stdlib.h> #define N 100 struct mygz /*m每月工资*/ { int yuefen; float yfgz; float sf; float df; float sj; float sfgz; }; struct worker /*工人信息*/ { int kahao; char xingming[20]; struct mygz m[12]; float zsfgz; }; int sm; struct worker a[N]; float shuijin(float m) //___________个人所得税____________________________________*/ { float shui1,shui2; float tmp; shui1=0;shui2=0; if(m>=4500) { shui1=(m-4500)*0.1; shui2=50; } else { if(m>=3500 && m<4500) { shui2=(m-3500)*0.05; } } tmp=shui1+shui2; return(tmp); }float shifazsfgz(float a,float b,float c,float d) { float e=a-b-c-d; return(e); } /*______________读取模块_______________________________*/ void duqu() { FILE *fp; if((fp=fopen("D:工资信息.txt","r"))==NULL) { printf("无法读取文件"); ;return; } while(!feof(fp)) { fread(&a[sm],sizeof(struct worker),1,fp); sm++; } } /*_______________排序模块_________________________________*/ 排序 按照卡号或姓名升序排列 按照实发工资降序排列 快速排序法 选择其他排序或返回 冒泡排序法 选择其他排序或返回 typedef struct worker stu; sortbykahao(const void *,const void *); sortbyxingming(const void *,const void *); void paixu() { int i; int choice; int (*p)(const void * ,const void *); printf("choice_1: 按卡号排序\n"); printf("choice_2: 按姓名排序\n"); printf("choice_3: 按工资排序\n"); printf("choice_4: 返回主菜单\n"); scanf("%d",&choice); while(choice!=0) { if(choice==1) p=sortbykahao; if(choice==2) p=sortbyxingming; if(choice==3) { int j; float temp; for(j=0;j<sm-2;j++) { for(i=0;i<=sm-j-i;i++) if(a[i].zsfgz>a[i+1].zsfgz) {temp=a[i].zsfgz;a[i].zsfgz=a[i+1].zsfgz;a[i+1].zsfgz=temp;} } for(i=0;i<=sm-1;i++) printf("%10f %-10d %-20s \n",a[i].zsfgz,a[i].kahao,a[i].xingming); } if(choice==4) return; qsort(a,sm,sizeof(stu),p); if(choice==1) for(i=0;i<sm;i++) printf("\n%d\t%s\t%d",a[i].kahao,a[i].xingming,a[i].zsfgz); if(choice==2) for(i=0;i<sm;i++) printf("\n%s\t%d\t%d",a[i].xingming,a[i].kahao,a[i].zsfgz); printf("\n"); scanf("%d",&choice); } } sortbykahao(const void *p,const void *q) { stu *x,*y; x=(stu*)p; y=(stu*)q; return ((*x).kahao-(*y).kahao); } sortbyxingming(const void *p,const void *q) { stu *x,*y; x=(stu*)p; y=(stu*)q; return strcmp((*x).xingming,(*y).xingming); } /*_______________查询模块__________________________________*/ 查找模块 卡号查找 姓名查找 void chaxun() { int b,i,j; 输出 按姓名查询 · 输入b 结束 判断b是否是1到2 按卡号查询 开始 system("cls"); label_3: b=0; while(b!=1&&b!=2) { printf("1,选择姓名查询.\n2,选择卡号查询.\n"); scanf("%d",&b); } if(b==1) { char c[20]; printf("请输入您的姓名:\n"); scanf("%s",c); i=0; while(!(strcmp(a[i].xingming,c)==0)&&i<sm) { i++; } if(i==sm) { printf("您查找的名字不存在,请正确输入您的名字或用卡号查询\n"); return; } printf("%-10d %-20s \n",a[i].kahao,a[i].xingming); for(j=0;a[i].m[j].yuefen!=NULL;j++) { printf("月份:%5d,应发工资:%10.2f,水费:%7.2f,电费:%7.2f,税金:%7.2f,实发工资:%10.2f.\n", a[i].m[j].yuefen,a[i].m[j].yfgz,a[i].m[j].sf,a[i].m[j].df,a[i].m[j].sj,a[i].m[j].sfgz); } printf("总实发工资:%10f\n",a[i].zsfgz); b=0; while(b!=1&&b!=2) { printf("1,继续查询.\n2,返回主菜单.\n"); scanf("%d",&b); } if(b==1) { goto label_3; } else { ;return; } } else { int d=0; while(!(d>=10001&&d<=32767)) { printf("请输入您的卡号(五位数字),例如:10001\n"); scanf("%d",&d); } i=0; while(a[i].kahao!=d&&i<sm) { i++; } if(i==sm) { printf("您查找的名字不存在,请正确输入您的名字或用卡号查询\n"); return; } printf("%-10d %-20s \n",d,a[i].xingming); for(j=0;a[i].m[j].yuefen!=NULL;j++) { printf("月份:%5d,应发工资:%10.2f,水费:%7.2f,电费:%7.2f,税金:%7.2f,实发工资:%10.2f.\n", a[i].m[j].yuefen,a[i].m[j].yfgz,a[i].m[j].sf,a[i].m[j].df,a[i].m[j].sj,a[i].m[j].sfgz); } printf("总实发工资:%10f\n",a[i].zsfgz); b=0; while(b!=1&&b!=2) { printf("1,继续查询.\n2,返回主菜单.\n"); scanf("%d",&b); } if(b==1) { goto label_3; } else { ;return; } } } /*______________浏览模块___________________________________*/ void liulan() { struct worker x; int c; float d; int i,j,k; system("cls"); for(i=0;i<sm;i++) { c=a[i].kahao; k=i; for(j=i+1;j<sm;j++) { if(c>a[j].kahao) { c=a[j].kahao; k=j; } } x=a[i]; a[i]=a[k]; a[k]=x; } for(i=0;i<sm;i++) { printf("%-10d %-20s \n",a[i].kahao,a[i].xingming); for(j=0;a[i].m[j].yuefen!=NULL;j++) { printf("月份:%5d,应发工资:%10.2f,水费:%7.2f,电费:%7.2f,税金:%7.2f,实发工资:%10.2f.\n", a[i].m[j].yuefen,a[i].m[j].yfgz,a[i].m[j].sf,a[i].m[j].df,a[i].m[j].sj,a[i].m[j].sfgz); } printf("总实发工资:%10f\n",a[i].zsfgz); } for(i=0;i<40;i++) { printf("\n"); } for(i=0;i<sm;i++) { d=a[i].zsfgz; k=i; for(j=i+1;j<sm;j++) { if(d<a[j].zsfgz) { d=a[j].zsfgz; k=j; } } x=a[i]; a[i]=a[k]; a[k]=x; } for(i=0;i<sm;i++) { printf("%-20s %-10d \n",a[i].xingming,a[i].kahao); for(j=0;a[i].m[j].yuefen!=NULL;j++) { printf("月份:%5d,应发工资:%10.2f,水费:%7.2f,电费:%7.2f,税金:%7.2f,实发工资:%10.2f.\n", a[i].m[j].yuefen,a[i].m[j].yfgz,a[i].m[j].sf,a[i].m[j].df,a[i].m[j].sj,a[i].m[j].sfgz); } printf("总实发工资:%10f\n",a[i].zsfgz); } } /*__________________删除模块_______________________________*/ void shanchu() { FILE *fp; int b,c,i,j; system("cls"); label_4: printf("请输入要删除信息的卡号:\n"); scanf("%d",&b); for(i=0;i<sm;i++) { if(a[i].kahao==b) { j=i; } } for(i=j+1;i<sm;i++) { a[i-1]=a[i]; } sm--; fp=fopen("D:工资信息.txt","w"); for(i=0;i<sm;i++) { fwrite(&a[i],sizeof(struct worker),1,fp); } fclose(fp); c=0; while(c!=1&&c!=2) { printf("1.继续删除\n2 返回主菜单\n"); scanf("%d",&c); } if(c==1) { goto label_4; } else {return; } } /*__________________录入模块_______________________________*/ void luru() { FILE *fp; int k,i,j,b,c,d; system("cls"); if((fp=fopen("D:工资信息.txt","w"))==NULL) { printf("无法找到目标文件\n"); return; } label_1: b=0; while(!(b>=1&&b<=12)) { printf("请您输入您要建立的月份\n"); scanf("%d",&b); } b=b-1; d=0; while(!(d>=10001&&d<=32767)) {printf("请输入您要录入工资的卡号(五位数字),例如:10001\n"); scanf("%d",&d); } for(i=0;i<sm&&a[i].kahao!=d;i++); if(a[i].kahao!=d) { c=0; while(c!=1&&c!=2) { printf("没有该卡号记录.\n1 新建\n2 返回上一级\n"); scanf("%d",&c); } if(c==2) { goto label_1; } if(c==1) { a[i].kahao=d; printf("请输入姓名:\n"); scanf("%s",a[i].xingming); printf("请输入此人该月的应发工资,水费,电费(空格分开):\n"); scanf("%f%f%f",&a[i].m[b].yfgz,&a[i].m[b].sf,&a[i].m[b].df); a[i].m[b].yuefen=b+1; a[i].m[b].sj=shuijin(a[i].m[b].yfgz); a[i].m[b].sfgz=shifazsfgz(a[i].m[b].yfgz,a[i].m[b].sf,a[i].m[b].df,a[i].m[b].sj); a[i].zsfgz=0; for(k=0;k<12;k++) { a[i].zsfgz+=a[i].m[k].sfgz; } sm++; c=0; while(c!=1 && c!=2) { printf("1 继续\n2 返回主菜单\n"); scanf("%d",&c); } if(c==1) { goto label_1; } if(c==2) { goto label_2; } } } else { if(a[i].m[b].yuefen==b+1) { c=0; while(c!=1 && c!=2) { printf("已有该月记录\n1 覆盖原有记录\n2 返回上级\n"); scanf("%d",&c); } if(c==1) { printf("请输入此人该月的应发工资,水费,电费:\n"); scanf("%d%d%d",&a[i].m[b].yfgz,&a[i].m[b].sf,&a[i].m[b].df); a[i].m[b].sj=shuijin(a[i].m[b].yfgz); a[i].m[b].sfgz=shifazsfgz(a[i].m[b].yfgz,a[i].m[b].sf,a[i].m[b].df,a[i].m[b].sj); a[i].zsfgz=0; for(k=0;k<12;k++) { a[i].zsfgz+=a[i].m[k].sfgz; } while(c!=1 && c!=2) { printf("1 继续\n2 返回主菜单\n"); scanf("%d",&c); } if(c==1) { goto label_1; } if(c==2) { goto label_2; } } else { goto label_1; } } if(a[i].m[b].yuefen==NULL) { a[i].m[b].yuefen=b+1; printf("请输入此人该月的应发工资:\n"); scanf("%f",&a[i].m[b].yfgz); printf("请输入此人该月所用水费:\n"); scanf("%f",&a[i].m[b].sf); printf("请输入此人该月所用电费\n"); scanf("%f",&a[i].m[b].df); a[i].m[b].sj=shuijin(a[i].m[b].yfgz); a[i].m[b].sfgz=shifazsfgz(a[i].m[b].yfgz,a[i].m[b].sf,a[i].m[b].df,a[i].m[b].sj); a[i].zsfgz=0; for(k=0;k<12;k++) { a[i].zsfgz+=a[i].m[k].sfgz; } c=0; while(c!=1 && c!=2) { printf("1 继续\n2 返主主菜单\n"); scanf("%d",&c); } if(c==1) { goto label_1; } if(c==2) {goto label_2; } } c=0; while(c!=1 && c!=2) { printf("1 继续\n2返回主菜单\n"); scanf("%d",&c); } if(c==1) {goto label_1; } if(c==2) {goto label_2; } } label_2: fp=fopen("D:工资信息.txt","r+"); for(j=0;j<sm;j++); { fwrite(&a[i],sizeof(struct worker),1,fp); } fclose(fp); } /*__________________主函数_______________________________*/ void main() { int a=0; duqu(); while(a!=6) { printf("/*******************欢迎使用*********************/\n"); printf("/************* 请按菜单选项进行选择 *************/\n"); printf("/************* 1.查询个人工资情况 *************/\n"); printf("/************* 2.录入工资信息 *************/\n"); printf("/************* 3.删除个人工资信息 *************/\n"); printf("/************* 4.浏览员工工资信息 *************/\n"); printf("/************* 5.个人工资排序信息 *************/\n"); printf("/************* 6.退出工资管理系统 *************/\n"); printf("/******************^_^ ^_^ ^_^*******************/\n"); scanf("%d",&a); switch(a) { case 1:chaxun();break; case 2:luru();break; case 3:shanchu();break; case 4:liulan();break; case 5:paixu();break; default :break; } } } 19 / 19展开阅读全文
咨信网温馨提示:1、咨信平台为文档C2C交易模式,即用户上传的文档直接被用户下载,收益归上传人(含作者)所有;本站仅是提供信息存储空间和展示预览,仅对用户上传内容的表现方式做保护处理,对上载内容不做任何修改或编辑。所展示的作品文档包括内容和图片全部来源于网络用户和作者上传投稿,我们不确定上传用户享有完全著作权,根据《信息网络传播权保护条例》,如果侵犯了您的版权、权益或隐私,请联系我们,核实后会尽快下架及时删除,并可随时和客服了解处理情况,尊重保护知识产权我们共同努力。
2、文档的总页数、文档格式和文档大小以系统显示为准(内容中显示的页数不一定正确),网站客服只以系统显示的页数、文件格式、文档大小作为仲裁依据,个别因单元格分列造成显示页码不一将协商解决,平台无法对文档的真实性、完整性、权威性、准确性、专业性及其观点立场做任何保证或承诺,下载前须认真查看,确认无误后再购买,务必慎重购买;若有违法违纪将进行移交司法处理,若涉侵权平台将进行基本处罚并下架。
3、本站所有内容均由用户上传,付费前请自行鉴别,如您付费,意味着您已接受本站规则且自行承担风险,本站不进行额外附加服务,虚拟产品一经售出概不退款(未进行购买下载可退充值款),文档一经付费(服务费)、不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
4、如你看到网页展示的文档有www.zixin.com.cn水印,是因预览和防盗链等技术需要对页面进行转换压缩成图而已,我们并不对上传的文档进行任何编辑或修改,文档下载后都不会有水印标识(原文档上传前个别存留的除外),下载后原文更清晰;试题试卷类文档,如果标题没有明确说明有答案则都视为没有答案,请知晓;PPT和DOC文档可被视为“模板”,允许上传人保留章节、目录结构的情况下删减部份的内容;PDF文档不管是原文档转换或图片扫描而得,本站不作要求视为允许,下载前可先查看【教您几个在下载文档中可以更好的避免被坑】。
5、本文档所展示的图片、画像、字体、音乐的版权可能需版权方额外授权,请谨慎使用;网站提供的党政主题相关内容(国旗、国徽、党徽--等)目的在于配合国家政策宣传,仅限个人学习分享使用,禁止用于任何广告和商用目的。
6、文档遇到问题,请及时联系平台进行协调解决,联系【微信客服】、【QQ客服】,若有其他问题请点击或扫码反馈【服务填表】;文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“【版权申诉】”,意见反馈和侵权处理邮箱:1219186828@qq.com;也可以拔打客服电话:0574-28810668;投诉电话:18658249818。




课程设计工资管理系统设计.doc



实名认证













自信AI助手
















微信客服
客服QQ
发送邮件
意见反馈



链接地址:https://www.zixin.com.cn/doc/9770251.html