工资管理系统.docx_第1页
工资管理系统.docx_第2页
工资管理系统.docx_第3页
工资管理系统.docx_第4页
工资管理系统.docx_第5页
免费预览已结束,剩余33页可下载查看

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

1、课程设计任务书学院信息学院专业计算机科学与技术学生姓名学号题目工资管理系统内容及要求:内容:(列出相应题目)工资管理:自己建立数据文件(提示可建立:职工、工资级别、职工工资)完成:数据录入查询(如:职工的平均工资查询、某一级别人员的平均工资查询)插入、删除、修改排序(将职工姓名按工资额度进行)等功能。要求:1.设计数据结构,存储结构;2.在 Turboc 或兼容环境完成上述题目的代码编写与调试;3.程序运行界面交互性好;4.给出两组测试数据。任务交付: 1.程序源代码;2 课程设计论文及电子文档。进度安排:本课程设计时间为16、 17 教学周。其中包含设计、代码调试、课程设计论文撰写几个阶段。

2、第 1 周 查找资料、完成初步设计、代码设计与初步调试;第 2 周 调试、测试、验收、课程设计论文撰写、答辩。指导教师(签字):学院院长(签字):年月日年月日目录1、功能需求分析及初步设计32、概要设计33、详细设计94、测试数据及结果分析235、课设总结25参考文献26附录261、功能需求分析及初步设计( 1)在该部分中叙述整体功能及每个模块的功能要求。( 2)所设计文件在 C盘下定义“”文件,将职工信息写入其中。2、概要设计( 1)程序中使用的存储结构设计说明struct Employee/ 声明职工的结构作为链表节点。int m_Code;/ 职工代码char m_Name20;/职工姓

3、名unsigned int m_Wage;/ 职工工资int m_level;/工资级别struct Employee* Next;/链表节点的指针域;( 2)每个部分的算法设计说明。1、整体算法流程图2、 Add(Head); 函数算法流程图3、 Modify(Head) 函数算法流程图;4、 Del(Head); 函数的算法流程图5、 Search(Head)函数算法流程图;6、 Sort(Head); 函数算法流程图7、 Display_List(Head); 函数算法流程图3、详细设计( 1)运行界面截图主界面(菜单选项)图 3-1-1职工注册界面(已经注册过两个,此界面为第三个职工注

4、册)图 3-1-2信息修改界面(修改代码为22222 的职工信息)图 3-1-3信息删除界面(删除代码为11111 的职工信息)图 3-1-4信息查询界面(查询姓名为ww 的职工信息)图 3-1-5排序界面 (按工资从高到低排序)图 3-1-6信息显示界面(显示所有职工信息)图 3-1-7退出系统界面图 3-1-8( 2)相应算法实现的源程序(有注解说明)1、职工注册void Add(Link Head)/前插法添加数据。Link pNew;/ 声明一个新节点。char again;char name20;int code,level;unsigned int wage;dosystem(cl

5、s);coutt*用户*nendl;pNew=(Link)new Node;/ 数据域。cout 请输入第 n+1 个人的信息 nendlendl;coutcode;Clear(code);coutendlname;coutendlwage;sum+=wage;n+;while(cin.fail()注册系统cout 请输入正确的工资数据。wage;coutendllevel;Clear(level);while(4=level|level=0)1,2,3 三个等级): ;cout 工资等级输入错误cout 请重新输入工资级别!level;switch(level)case 1:sum1+=wa

6、ge;n1+=1;break;case 2:sum2+=wage;n2+=1;break;case 3:sum3+=wage;n3+=1;break;coutm_Code=code;strcpy(pNew-m_Name,name);pNew-m_Wage=wage;pNew-m_level=level;/ 指针域。pNew-Next=Head-Next;Head-Next=pNew;cout 数据添加成功!是否继续添加?(Y/N)again;while(again=Y|again=y);system (pause);system(cls);2、信息修改void Modify(Link Head

7、)/ 修改单一个节点。system(cls);coutt*信息修改系统 *nNext;coutendlcode;Clear(code);while(ptr)if(ptr-m_Code=code)coutendlt=查询结果=endl;couttttsetw(10)left代码 setw(10)left 姓名 setw(10)left 工资 setw(10)left 级别 endl;coutt= =endl;Display_Node(ptr);/ 打印满足条件的节点。coutendlm_Wage;n-=1;switch(ptr-m_level)case 1:sum1-=ptr-m_Wage;n1

8、-=1;break;case 2:sum2-=ptr-m_Wage;n2-=1;break;case 3:sum3-=ptr-m_Wage;n3-=1;break;int level;unsigned int wage;if(ptr)coutt= 了 !=endl;你现在可/ 数据域。以修改此职工的信息coutcode;coutendlname;coutendlwage;sum+=wage;n+;while(cin.fail()cout 请输入正确的工资数据。wage;coutendllevel;Clear(level);while(4=level|level=0)cout 工资等级输入错误!

9、endl;coutlevel;switch(level)case 1:sum1+=wage;n1+=1;break;case 2:sum2+=wage;n2+=1;break;case 3:sum3+=wage;n3+=1;break;coutm_Code=code;strcpy(ptr-m_Name,name);ptr-m_Wage=wage;ptr-m_level=level;cout 恭喜你 ,修改信息成功!Next;/ 查询下一节点。if(ptr=NULL)cout 没找到此职工的记录,无法修改。 endl;system (pause);system(cls);3、信息删除Link S

10、earch_Unique_Front(Link Head)/查询满足“职工代码“的职工信息(职工代码必需唯一) 。Link ptr;int code;ptr=Head;coutcode;Clear(code);coutendlt=查询结果=endl;couttttsetw(10)left代码 setw(10)left 姓名 setw(10)left 工资 setw(10)left 级别 endl;coutt=Next-m_Code=code)Display_Node(ptr-Next);/ 打印满足条件的节点。return ptr;/注意,是返回的查询到的节点的直接前趋节点。ptr=ptr-N

11、ext;/ 查询下一节点。return ptr;void Del(Link Head)system(cls);coutt*信息删除系统 *nNext-m_Wage;n-=1;switch(ptr_front-Next-m_level)case 1:sum1-=ptr_front-Next-m_Wage;n1-=1;break;case 2:sum2-=ptr_front-Next-m_Wage;n2-=1;break;case 3:sum3-=ptr_front-Next-m_Wage;n3-=1;break;ptr=ptr_front-Next;ptr_front-Next=ptr_fron

12、t-Next-Next;delete ptr;/ 删除此节点。cout 恭喜你,删除信息成功!。 endl;elsecout 没找到此职工的记录,无法删除。 endl;system (pause);system(cls);4、信息查询bool Search(Link Head)system(cls);coutt*用户查询系统 *nendl;cout 选择查询方式:1、查询职工信息2、按职工的平均工资查询n;cout3、按某一级别人员的平均工资查询i;if(i=1)Link ptr;char name20;ptr=Head-Next;coutendlname;coutendlt=查询结果=end

13、l;couttttsetw(10)left代码 setw(10)left 姓名 setw(10)left 工资 setw(10)left 级别 endl;coutt= =m_Name,name)=0)Display_Node(ptr);/ 打印满足条件的节点。coutendlNext;/ 查询下一节点。cout 无此职工的信息。endl;coutendlendl;system (pause);system(cls);return false;else if(i=2)double aver1;aver1=sum/n;cout 职工总数为: nendl;cout 所有职工的工资总数为:sumend

14、l;cout 所有职工的平均工资为: aver1endl;coutendlendl;system (pause);system(cls);return true;else if(i=3)double aver2;coutlevel;Clear(level);coutendl;switch(level)case 1:aver2=sum1/n1;cout 工资级别为level职工总数为: n1endl;cout 所有工资级别为level职工的工资总数为:sum1endl;break;case 2:aver2=sum2/n2;cout 工资级别为level职工总数为: n2endl;cout 所有工

15、资级别为level职工的工资总数为:sum2endl;break;case 3:aver2=sum3/n3;cout 工资级别为level职工总数为: n2endl;cout 所有工资级别为level职工的工资总数为:sum2endl;break;coutn 工资级别为level的员工的平均工资为:aver2endl;coutendlendl;system (pause);system(cls);return true;elsecout 选择错误,将返回主菜单!;coutendlendl;system(pause);system(cls);return true;5、工资排序Link Sort

16、(Link Head)/创建带头节点的链表。用直接插入法。system(cls);coutt*工资排行系统 *nNext=NULL)|(Head-Next-Next=NULL)/ 此步条件判断非常有价值。cout 数据节点数少于2 个,不用排序! Next-Next;ptr_F=Head;Head-Next-Next=NULL;/ 到此,分成了两个链表。/第三步。while(ptr)ptr_N=ptr-Next;ptr_F=Head;/ptr_F 的归位。while(ptr_F-Next)if(ptr-m_Wageptr_F-Next-m_Wage)ptr-Next=ptr_F-Next;pt

17、r_F-Next=ptr;break; /if elseptr_F=ptr_F-Next; /while(ptr_F-Next) if(ptr_F-Next=NULL)ptr-Next=ptr_F-Next;ptr_F-Next=ptr;/ 表示插到有序链表的最后面了。ptr=ptr_N;/ 归位,准备下一次排序。/while(ptr)cout 从高到低,排序成功!endl;system (pause);system(cls);return Head;6、信息显示void Display_List(Link Head)system(cls);coutNext;coutt=所=endl;*nen

18、dl;有职工信息couttttsetw(10)left代码 setw(10)left 姓名 setw(10)left 工资 setw(10)left 级别 endl;coutt=Next;coutt=endl;system (pause);system(cls);4、测试数据及结果分析( 1)测试数据,测试输出的结果,时间复杂度分析输入如下的测试数据:图 4-1-1输出结果下图所示:图 4-1-2时间复杂度为O(n) ,即此例为 O( 2)。( 2)每个模块设计和调试时存在问题的思考1、在删除模块, 要删除某个节点,就要把此节点指向下一结点的地址赋给指向此节点的指针,可是如果,直接找到要删除的

19、节点,就得不到指向他打指针。所以我找到的是要删除的节点的前一个节点。这样就解决了问题。2、在文件操作模块,一开始文件只能保存,却读不出来。后来发现,文件读取过程中需要分配一个结构体大小的存储空间,用以存放读出的数据。然后,用了一个 Link pNode=new Node;解决了此问题。( 3)算法的改进设想。1、职工代码应该各不相同,所以可以改进当输入职工代码重复时,提示输入错误,并要求重新输入。2、职工代码有可能是0 开头,如09030501,这里的代码定义为int 型,使 09030501 等价于 9030501 。所以可以改进把代码定义为数组,这样就可以避免此类问题了。3、职工工资级别不

20、应该人工设定,而应根据职工工资自动设定。所以可以在此做改进。5、课设总结在本次课程设计当中,我的课题是设计“工资管理系统 ”的仿真软件。通过设计任务书中的要求以及介绍,大致确定了主要运用的知识要点是:线性表、查找表的逻辑结构、存储结构,掌握查找、排序等基本运算,以及课本中提及的其他相关算法。通过此次课设设计又将所学的C 语言知识巩固个一遍, 几乎所有的知识都用到了如:基本的变量,重要的语句,函数等最主要的是加深了对函数、指针、结构体以及文件的认识和理解,学会了更好的应用这些知识来写出一个预期的程序,收获很大。经过自己的一番努力以及指导老师的悉心指导,终于完成了此方针软件的设计,通过这次课程设计

21、,我基本了解并且学习了如何分析研究数据对象的特性、数据的组织方法、如何选取合适的数据逻辑结构和存储结构。这对以后的学习都有着很大的帮助。这次课设的题目不是很难,但是要做到功能的全面和严谨是非常不容易的一件事。虽然在老师的指导下完成了这次课设,但是自己还需做更多的类似的题目来提高自己。参考文献1.书名 数据结构( C 语言版)作者严蔚敏,吴伟民出版社清华大学出社2.书名面向对象程序设计( C+ 语言) 作者李爱华,程磊出版社清华大学出版社附录程序代码#include #include #include #include #include #include #include #include do

22、uble sum,sum1,sum2,sum3;int n,n1,n2,n3;using namespace std;struct Employee/声明职工的结构作为链表节点。/- 数据域 -int m_Code;char m_Name20;unsigned int m_Wage;int m_level;/ 链表节点的指针域 -struct Employee* Next;typedef struct Employee Node;typedef Node* Link; Link Create() /创建空链表。Link Head;Head=new Node;if(!Head)cout 分配内存

23、失败!m_Code=0;strcpy(Head-m_Name,0);Head-m_Wage=0;Head-m_level=0;Head-Next=NULL;return Head;void Release(Link Head)/ 释放链表。Link ptr;while(Head!=NULL)ptr=Head;Head=Head-Next;delete ptr;void Display_Node(Link pNode)couttttsetw(10)leftm_Codesetw(10)leftm_Namesetw(10)leftm_Wagesetw(10)leftm_levelendl;void

24、Clear(int &f1)/输入错误是清空输入流while(cin.fail()coutf1;void Add(Link Head)/前插法添加数据。Link pNew; char again; char name20; int code,level;/ 声明一个新节点。unsigned int wage;dosystem(cls);coutt*用户注册系统*nendl;pNew=(Link)new Node;/ 数据域。cout 请输入第 n+1 个人的信息 nendlendl;coutcode;coutendlname;coutendlwage;sum+=wage;n+;while(ci

25、n.fail()cout 请输入正确的工资数据。wage;coutendllevel;Clear(level);while(4=level|level=0)1,2,3 三个等级): ;cout 工资等级输入错误cout 请重新输入工资级别!level;switch(level)case 1:sum1+=wage;n1+=1;break;case 2:sum2+=wage;n2+=1;break;case 3:sum3+=wage;n3+=1;break;coutm_Code=code;strcpy(pNew-m_Name,name);pNew-m_Wage=wage;pNew-m_level=

26、level;pNew-Next=Head-Next;Head-Next=pNew;cout 数据添加成功!是否继续添加?(Y/N)again;while(again=Y|again=y);system (pause);system(cls);bool Search(Link Head)/ 查询满足姓名的职工信息。system(cls);coutt*用户查询系统 *nendl;cout 选择查询方式:1、查询职工信息2、按职工的平均工资查询n;cout3、按某一级别人员的平均工资查询i;if(i=1)Link ptr;char name20;ptr=Head-Next;coutendlname;

27、coutendlt=查询结果=endl;couttttsetw(10)left代码 setw(10)left 姓名 setw(10)left 工资 setw(10)left 级别 endl;coutt=m_Name,name)=0)Display_Node(ptr);/ 打印满足条件的节点。coutendlNext;/ 查询下一节点。cout 无此职工的信息。endl;coutendlendl;system (pause);system(cls);return false;else if(i=2)double aver1;aver1=sum/n;cout 职工总数为: nendl;cout 所

28、有职工的工资总数为:sumendl;cout 所有职工的平均工资为: aver1endl;coutendlendl;system (pause);system(cls);return true;else if(i=3)double aver2;coutlevel;Clear(level);coutendl;switch(level)case 1:aver2=sum1/n1;cout 工资级别为level职工总数为: n1endl;cout 所有工资级别为level职工的工资总数为:sum1endl;break;case 2:aver2=sum2/n2;cout 工资级别为level职工总数为:

29、 n2endl;cout 所有工资级别为level职工的工资总数为:sum2endl;break;case 3:aver2=sum3/n3;cout 工资级别为level职工总数为: n2endl;cout 所有工资级别为level职工的工资总数为:sum2endl;break;coutn 工资级别为 level 的员工的平均工资为 :aver2endl; coutendlendl;system (pause);system(cls);return true;elsecout 选择错误,将返回主菜单!;coutendlendl;system(pause);system(cls);return true;Lin

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论