




已阅读5页,还剩23页未读, 继续免费阅读
版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
数据结构课程设计数据结构课程设计报告工资管理(数组存储)班 级: 姓 名: 指导教师: 成 绩: 2011年 06 月 24日摘要 首先建立职工相关的数据文件,然后通过一定的操作来实现以下功能:查询职工的平均工资查询某一级别人员的平均工资普调工资将职工姓名按工资额度进行排序。本文通过对数组的一定操作来实现职工信息的变更管理以及工资的管理,1.引言- 4 -2.需求分析- 4 -3.概要设计- 4 -抽象数据类型:- 4 -系统总体功能设计图- 5 -程序模块分析- 5 -4.详细设计- 5 -新建职工信息表- 6 -删除职工信息- 6 -工资排序- 7 -5.测试结果- 8 -三个菜单- 8 -职工信息录入- 9 -职工信息输出- 10 -6.调试分析- 10 -7.设计体会- 10 -8.结束语- 11 -参考文献- 11 -附录- 12 -1.引言C语言作为一门最通用的语言,从语言产生到现在,它已经成为最重要和最流行的编程语言之一。在各种流行编程语言中,都能看到C语言的影子。学习掌握C语言是每一个计算机技术人员的基本功之一。实际生活中工资管理的问题具有很大的意义。例如,本文所讨论的对职工表进行增加、删除、插入,工资调整等具有很强的现实意义,职工信息管理在公司管理之中占据一定重要的地位。2.需求分析需求一,录入职工信息并且具有一定的查询功能(包括查询所有在职职工的平均工资,查询某一级别所有职工的平均工资,查找某为职工的信息,同时将查询到的结果显示出来)需求二,还实现对职工信息修改的功能,主要包括对于职工信息的插入和删除,以及对于职工工资普调的修改;需求三,,将职工姓名按照工资额度进行排序并且将结果显现出来。3.概要设计抽象数据类型:xm 姓名数组 people 职工总人数worker 职工信息(包括姓名,工资和等级)系统总体功能设计图系统修改职工文档普调工资工资排序 查询某级 职工的均资 查询职工的平均工资 退 出 新 建 追 加 上 涨 下 调 返 回 删 除 返 回 程序模块分析职工信息录入核心算法:输入职工姓名判断是否为输入结束符后,再继续输入工资和等级,然后判断信息是否符合规定,继而循环执行,最后返回结果职工总人数删除职工信息:输入要删除的职工信息存入数组后,逐个与职工信息表进行核对判断是否存在,然后将这个职工的信息后面的职工信息前移如果存在的话。工资排序:从第一个职工开始进行扫描,然后按照工资等级逐个存入相应的数组内,最后按照等级输出各数组内容显示。工资调整:读取职工信息,逐个按照规则(上涨或下调)进行修改职工信息. 4.详细设计职工信息录入: 增加职工信息查询平均工资开始i=0, sum=0ini+sum+=straffi.pays结束增加职工信息 求取职工平均工资新建职工信息表void newfile(workers staff,people p)/输入职工信息并返回职工人数 system(cls); p.num=abc(staff,0,MAX); printf(成功输入%d位职工信息!,p.num); go_on();删除职工信息void del_worker(workers staff,people p)/通过姓名删除该职工信息 int i,j=0,k,x=0,n=p.num;/x用来记录要删除的职工的人数 xm st,z20; printf(输出要删除职工的姓名(结束); scanf(%s,st); while(strcmp(st,)!=0) strcpy(zj,st); +x; for(j=0; jx; +j) for(i=0; in; +i) if(strcmp(zj,) = 0) for(k=i; kn; +k) strcpy(,staffk+1.name); staffk.pays=staffk+1.pays; staffk.wages_rank=staffk+1.wages_rank; n-=1; else printf(职工不存在,请确认正确); exit(0); p.num=n;go_on();工资排序void drop(workers staff,people p) /将职工姓名按工资额度进行排序 system(cls); printf(职工工资降序排列为:); xm aMAX,bMAX,cMAX,dMAX; int i,j=0,k=0,m=0,n=0; for(i=0; ip.num; i+) if(staffi.wages_rank=1) strcpy(aj+,);/将职工姓名对应存入数组 if(staffi.wages_rank=2) strcpy(bk+,); if(staffi.wages_rank=3) strcpy(cm+,); if(staffi.wages_rank=4) strcpy(dn+,); printf(工资等级为一级的职工姓名为:n);display(a,j); printf(工资等级为二级的职工姓名为:n);display(b,k); printf(工资等级为三级的职工姓名为:n); display(c,m); printf(工资等级为四级的职工姓名为:n); display(d,n); go_on(); 5.测试结果三个菜单职工信息录入职工信息输出6.调试分析问题:1. 不能多次执行和分菜单返回主菜单异常;2.内存不能read等情况。3. 运行发现开关语句的default语句对于字符的输入将循环执行,不像数字那样正常的直接继续执行default语句,而是出现类似于死循环的情形,无休止的按任意键继续;分析解决:1.返回主菜单异常,是因为没有出现假死循环的条件,后来通过将语句块放入while(1)中,解决了继续执行的问题。至于分菜单返回主菜单的问题,仔细思考后发现将分菜单中的开关语句switch后面括号的表达式修改为变量,初始值设定为1,在返回主菜单那一个case 中将变量修改为0.2.仔细检查代码发现在函数命名时出现重名,修改后异常消失7.设计体会通过数据结构的课程设计使我们对所学知识有了更好的理解,也增强了大家的动手能力。同时也发现了自己的很多不足之处,对知识的应用能力很是欠缺,应用软件的能力及编程水平与课程要求更是存在很大的差距。程序的运行结果与理论推导结果完全吻合,即该算法与程序设计满足课程设计要求。该程序的主要优点是简单易懂,不存在理解上的障碍,也很自然地能想到这种解法。主要缺点是程序的变动性比较差初始化邻接矩阵后结果就固定了。如果能加入图行和图的修改、插入、删除等操作,我想应该会好很多。8.结束语转眼,数据结构课程设计的第一阶段即将结束了。在这次课程设计中我的c语言知识和数据结构知识得到了很好学习。编程能力也有了一定的提高。同时也学回了解决问题的方法。总结起来,自己主要有以下几点体会:必须牢固掌握基础知识。由于C语言是大一所学知识,没有好好的去体会掌握,同时也没有掌握好上学期学的数据结构这门课,所以在课程设计初期感到无从下手,但在后来的设计过程中自己通过看书和课外资料,并请教其他同学,慢慢地对C语言和数据结构知识有所了解和熟悉。这时才逐渐有了思路。所以,在这次课程设计以后,我下了决心:以后一定要好好学习好专业知识。必须培养严谨的科学态度。我在编写程序时经常因为一些类似于少写了分号,大括号不匹配等造成的程序调试失败,不够认真仔细,给自己带来了许多麻烦。这次课程设计也让我充分的认识到数据结构这门课的重要性。它给我们的一个思想和大纲,让我们再编程时更容易找到思路,不至于无章可循。同时它也有更广泛的实际应用价值。总之,在这次课程设计中,我的C语言以及数据结构知识得到了长足的进步,对编程有了更深层次的了解。参考文献谭浩强 C语言设计第三版 严蔚敏 数据结构C语言版附录源代:#includestdio.h#includestring.h#include#define MAX 100/职工人数最大值为MAX#define EXTRA 20typedef char xm10;/ 姓名最大字符数为10typedef struct int num; /职工人数people;typedef struct xm name; /职工姓名 int pays; /职工工资 int wages_rank;/职工工资等级 /工资等级分为1 2 3 4 等 /工资等级对应表(单位:元) 1:1000-3000;2:30005000;3:5000-10000:4:10000 worker,workersMAX; /职工总数限制为100人void go_on()/返回前一级菜单 system(pause); system(cls);int abc(workers staff,int i,int n)/后面多次运用,单独取出作为函数/i为职工信息数组开始的位置,n为职工人数最大值 printf( t 工资与工资等级对照表nn); printf( * 工资等级 | 工资范围 *n); printf( * 1t | 1000,3000) *n); printf( * 2t | 3000,5000) *n); printf( * 3t | 5000,10000) *n); printf( * 4t | 10000,unknow) *nn); printf(请依次输入职工信息:职工姓名(结束),工资,工资等级(1-4):n); scanf(%s,);/输入职工姓名 while(strcmp(,)!=0)&i=1000&staffi.pays=3000&staffi.pays=5000&staffi.pays10000)break;else printf(data error!n); exit(0); default: printf(data error!n);exit(0); +i; scanf(%s,);/输入职工姓名 return i;/返回现在职工总人数void newfile(workers staff,people p)/输入职工信息并返回职工人数 system(cls); p.num=abc(staff,0,MAX); printf(成功输入%d位职工信息!,p.num); go_on();void add_worker(workers staff,people p) int add,i,n=p.num; worker staffsMAX+EXTRA; printf(请输入要增加职工的人数:); scanf(%d,&add); if(n+addMAX) for(i=0;in;+i)/结构体数组staff的值赋给结构体数组staffs strcpy(,); staffsi.pays=staffi.pays; staffsi.wages_rank=staffi.wages_rank; printf(请输入要增加职工的信息:); p.num=abc(staffs,n,n+add); else p.num=abc(staff,n,MAX+EXTRA); printf(成功输入增加的%d位职工的信息!,add);go_on();void del_worker(workers staff,people p)/通过姓名删除该职工信息 int i,j=0,k,x=0,n=p.num;/x用来记录要删除的职工的人数 xm st,z20; printf(输出要删除职工的姓名(结束); scanf(%s,st); while(strcmp(st,)!=0) strcpy(zj,st); +x; for(j=0; jx; +j) for(i=0; in; +i) if(strcmp(zj,) = 0) for(k=i; kn; +k) strcpy(,staffk+1.name); staffk.pays=staffk+1.pays; staffk.wages_rank=staffk+1.wages_rank; n-=1; else printf(职工不存在,请确认正确); exit(0); p.num=n;go_on();void display(workers staff,people p)/显示职工信息 system(cls); int n=p.num; printf(职工信息如下:n); printf(*); printf( 姓名t 工资t 工资等级); for(int i=0; in; i+) printf(%st%dt%dn,,staffi.pays,staffi.wages_rank);printf(*);go_on();void all_average(workers staff,people p)/求所有职工的平均工资 int n=p.num,i; long sum=0; for(i=0; in; i+) sum+=staffi.pays; printf(所有职工共计%d人平均工资为:%d元,n,sum/n);go_on();void part_average(workers staff,people p) /查询某一级别人员的平均工资 system(cls); int wages_level,n=p.num; int sum=0,i=0,avg; printf(输入要查询的工资等级(1-4):); scanf(%d,wages_level); if(0wages_level5) while(in) if(staffi.wages_rank=wages_level) sum+=staffi+.pays; else printf(工资等级不存在!请重新输入!); exit(0); break; avg=sum/n; printf(平均工资为%d元,avg);go_on();void pays_up(workers staff,people p)/普调:上调工资 system(cls); int up,i,n=p.num; printf(请输入要上调的工资幅度值:); scanf(%d,&up); for(i=0; i=1000&staffi.pays=3000&staffi.pays=5000&staffi.pays10000) staffi.wages_rank=4; printf(完成对职工工资普调上涨%d元 !,up);go_on();void pays_down(workers staff,people p)/普调:降低工资 system(cls); int down,i,n=p.num; printf(请输入要下调的工资幅度值:); scanf(%d,&down); for(i=0; i=1000&staffi.pays=3000&staffi.pays=5000&staffi.pays10000)staffi.wages_rank=4; if(staffi.pays1000) staffi.pays=1000; staffi.wages_rank=1; printf(职工%s的工资低于1000元自动调整为1000元!,); printf(完成对职工工资普调下调%d元 !,down); go_on();void display(xm s,int r)/显示字符数组内容 for(int i=0; i=r; i+) printf(%sn,si);void drop(workers staff,people p) /将职工姓名按工资额度进行排序 system(cls); printf(职工工资降序排列为:); xm aMAX,bMAX,cMAX,dMAX; int i,j=0,k=0,m=0,n=0; for(i=0; ip.num; i+) if(staffi.wages_rank=1) strcpy(aj+,);/将职工姓名对应存入数组 if(staffi.wages_rank=2) strcpy(bk+,); if(staffi.wages_rank=3) strcpy(cm+,); if(staffi.wages_rank=4) strcpy(dn+,); printf(工资等级为一级的职工姓名为:n);display(a,j); printf(工资等级为二级的职工姓名为:n);display(b,k); printf(工资等级为三级的职工姓名为:n); display(c,m); printf(工资等级为四级的职工姓名为:n); display(d,n); go_on();int main() int xz,y,z; workers staff; people p; while(1) printf(n t*工 资 管 理*n); printf( t* 0 修改职工文档 *n); printf( t* 1 查询职工的平均工资 *n); printf( t* 2 查询某级职工的平均工资 *n); printf( t* 3 普调工资 *n); printf( t* 4 将职工姓名按工资额度进行排序 *n); printf( t* 5 退出 *n); printf( t*n); printf( 请输入操作序号(0-5):n); scanf(%d,&xz); switch(xz) case 0:y=1; while(y) system(cls); printf(tt*n); printf(tt* 0 新建职工信息表 *n); printf(tt* 1 增加职工信息 *
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
评论
0/150
提交评论