工资管理系统_第1页
工资管理系统_第2页
工资管理系统_第3页
工资管理系统_第4页
工资管理系统_第5页
已阅读5页,还剩39页未读 继续免费阅读

下载本文档

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

文档简介

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

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

3、m_Code;char m_Name20;un sig ned int m_Wage;int m_level;struct Employee* Next;(2)每个部分的算法设计说明。1、整体算法流程图6. 信星、 显示调用Add (Head) 函数调用 Modify (Head) 函数调疾Del (Head) 函数谓用Search (Head) 函数调用 Sort (Head) 函数调用 Displa y.List (Head)函数图2212、Add(Head);函数算法流程图E2-Z-23、Modify(Head)函数算法流程图把数据赋 给此节点要咸据 人改数 输修的没找到此 职工的记 棗

4、无法修改。返回主菜单S2-2-34、Del(Head);函数的算法流程图5、Search(Head)函数算法流程图1咗垢柜司轿入要鱼询 职二的姓名/辅岀7职浙有职工工资之和/总人数输岀 結畢输入呼擴别所有此级SiJIR工工贸之和川t级剧总人数/输出=无此駅 工的信 扈稱出隹回王秦单6、Sort(Head);函数算法流程图5表结点个图 2-2Y7、Display_List(Head);函数算法流程图3、详细设计(1)运行界面截图主界面(菜单选项)图 3-1-1职工注册界面(已经注册过两个,此界面为第三个职工注册)图 3-1-2信息修改界面(修改代码为 22222的职工信息)图 3-1-3信息删除

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

6、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)cout 工资等级输入错误 !endl;coutlevel;switch(level)case 1:sum1+=wage;n1+=1;break;case 2:sum2+=wage;n2+=1;break;case 3:sum3+=wage

7、;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)system(cls);coutt*信息修改系统*nNext;coutendlcode;

8、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-=1;break;case 2: sum2-=ptr-m_Wage; n2-=1;break;case 3:

9、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 工资等级输入错误 !endl; coutlevel;switch(level)case

10、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 没找到此职工的记录 ,无法修改。system (pause);system(cls);3、信息删除Link Search_Unique_Front(Link Head)

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

12、r;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_front-Next-Next;delete

13、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=endl; couttttsetw(

14、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 所有职工的工资总数为: sumendl;cout 所

15、有职工的平均工资为 : 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

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

17、e;5、工资排序Link Sort(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-Nex

18、t;ptr_F-Next=ptr;break; /ifelseptr_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);coutt*信息显示系统*nNext;

19、 coutt= 所 有 职 工 信 息 =endl; couttttsetw(10)left 代码 setw(10)left 姓名 setw(10)left 工资 setw(10)left 级别 endl; coutt=Next;coutt=endl; system (pause); system(cls);4、测试数据及结果分析( 1)测试数据,测试输出的结果,时间复杂度分析 输入如下的测试数据:工资级别4444请输入职工代码请输入职工姓名:请输入职工工资请输入工资级别;言息成功= = =35LlBln 代码 艮请输入代码;22222你现在可以修改此职工的信息了22222JCXKMjBJCJ

20、CMiHJtM: Jt JCt JCXKJKX iMW HKKk/吕息修己?务-电奇:共耳耳10真:比界耳擡蠶界疑耳酬界拥:风界連图 4-1-1输出结果下图所示:KXJiE aOtHKiM 梵风汪耳:弭宝风梵其梵蕈算梵算址宜弭1吕息显不系统W aKXXHrait HXaOtaitIKiMMIXMiXKJCXNX瓮:M2M鸞工信聲级别33333ee3333332222222222 2代码图 4-1-2时间复杂度为 0 (n),即此例为0( 2)。(2) 每个模块设计和调试时存在问题的思考1、在删除模块,要删除某个节点,就要把此节点指向下一结点的地址赋给指向此节点的指针,可是如果,直接找到要删除的

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

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

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

24、nclude double 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) c

25、out 分配内存失败! 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_level

26、endl;void 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+

27、;while(cin.fail()cout 请输入正确的工资数据。 wage;coutendllevel;Clear(level);while(4=level|level=0)cout 工资等级输入错误 !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(pNew-m_Name,name);pNew-m_Wage=wage;pNew-m_level=level;pN

28、ew-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;coute

29、ndlt= 查询结果=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

30、 所有职工的工资总数为: 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 工

31、资级别为 level 职工总数为 : 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;else coutendlendl; system(pause); syste

32、m(cls); return true;/查询满足“职工代码“的职工信息(职工Link Search_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-Next

33、;/ 查询下一节点。return ptr;void Display_List(Link Head)system(cls);coutt*信息显示系统*nendl;coutNext; coutt= =endl; couttttsetw(10)left 代码 setw(10)left 姓名 setw(10)left 工资 setw(10)left 级别 endl;Next;coutt=endl;system (pause); system(cls);/ 修改单一个节点。void Modify(Link Head)system(cls);coutt*信息修改系统*nNext; coutendlcode

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

温馨提示

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

评论

0/150

提交评论