简单的员工管理系统(共32页)

上传人:58****5 文档编号:48375858 上传时间:2022-01-04 格式:DOC 页数:32 大小:377KB
收藏 版权申诉 举报 下载
简单的员工管理系统(共32页)_第1页
第1页 / 共32页
简单的员工管理系统(共32页)_第2页
第2页 / 共32页
简单的员工管理系统(共32页)_第3页
第3页 / 共32页
资源描述:

《简单的员工管理系统(共32页)》由会员分享,可在线阅读,更多相关《简单的员工管理系统(共32页)(32页珍藏版)》请在装配图网上搜索。

1、精选优质文档-倾情为你奉上淮 海 工 学 院 计算机工程学院课程设计报告设计名称: 数据结构课程设计 选题名称: 简单的员工管理系统 姓 名: 徐峰 学 号: 专业班级: 网络工程132 系 (院): 计算机工程学院 设计时间: 2013.12.232013.1.3 设计地点: 软件工程实验室、教室105 成绩:指导教师评语: 签名: 年 月 日专心-专注-专业1课程设计目的1、训练学生灵活应用所学数据结构知识,独立完成问题分析,结合数据结构理论知识,编写程序求解指定问题。 2.初步掌握软件开发过程的问题分析、系统设计、程序编码、测试等基本方法和技能;3.提高综合运用所学的理论知识和方法独立分

2、析和解决问题的能力;4.训练用系统的观点和软件开发一般规范进行软件开发,巩固、深化学生的理论知识,提高编程水平,并在此过程中培养他们严谨的科学态度和良好的工作作风。2课程设计任务与要求:任务根据教材数据结构-C语言描述(耿国华主编)和参考书数据结构题集(C语言版)(严蔚敏、吴伟民主编)选择课程设计题目,要求通过设计,在数据结构的逻辑特性和物理表示、数据结构的选择应用、算法的设计及其实现等方面加深对课程基本内容的理解和综合运用。设计题目从任务书所列选题表中选取,每班每题不得超过2人。学生自选课题学生原则上可以结合个人爱好自选课题,要求课题有一定的深度与难度,有一定的算法复杂性,能够巩固数据结构课

3、程所学的知识。学生自选课题需在18周前报课程设计指导教师批准方可生效。要求:1、在处理每个题目时,要求从分析题目的需求入手,按设计抽象数据类型、构思算法、通过设计实现抽象数据类型、编制上机程序和上机调试等若干步骤完成题目,最终写出完整的分析报告。前期准备工作完备与否直接影响到后序上机调试工作的效率。在程序设计阶段应尽量利用已有的标准函数,加大代码的重用率。 2、.设计的题目要求达到一定工作量(300行以上代码),并具有一定的深度和难度。3、程序设计语言推荐使用C/C+,程序书写规范,源程序需加必要的注释;4、每位同学需提交可独立运行的程序;5 、每位同学需独立提交设计报告书(每人一份),要求编

4、排格式统一、规范、内容充实,不少于10页(代码不算);6、课程设计实践作为培养学生动手能力的一种手段,单独考核。 3课程设计说明书一 需求分析 职工管理系统是一个工作单位不可缺少的管理工具,它管理的数据对于公司的决策者和管理者来说都至关重要,所以职工管理系统应该能够为用户提供充足的信息和快捷的查询手段。但一直以来各个公司基本上都是靠传统的人工方式来管理职工信息,这种管理方式存在着许多缺点,如:效率低、保密性差,另外时间一长,将产生大量的文件和数据,这对于信息的查找、更新和维护都带来了不少的困难。职工管理系统作为一种管理软件正在各公司中得到越来越广泛的应用,且已达到了良好效果。简单的职工管理系统

5、:1、问题描述对单位的职工进行管理,包括插入、删除、查找、排序等功能。2、要求职工对象包括代码(字符串)、姓名(字符串)、性别(字符)、出生年月(字符串)、学历(字符串)、职务(字符串)、工资(数字)等信息。(1) 新增一名职工:将新增职工对象按姓名以字典方式职工管理文件中。(2) 删除一名职工:从职工管理文件中删除一名职工对象。(3) 查询:从职工管理文件中查询符合某些条件的职工。(4) 修改:检索某个职工对象,对其某些属性进行修改。(5) 排序:按某种需要对职工对象文件进行排序。 3、实现功能(1)由键盘输入职工对象,以文件方式保存。程序执行时先将文件读入内存。(2)对职工对象中的“工资”

6、按字典顺序进行排序。(3)对排序后的职工对象进行增、删、查询、修改、排序等操作。二 概要设计 1、输入功能的实现:要想实现职工管理系统的输入,必须要建立一个职工信息系统的抽象数据类型,其中职工信息以链表的存储方式实现。由键盘输入职工对象,以文件方式保存。程序执行时先将文件读入内存。 2、系统处理功能的实现:系统管理员根据公司的人员流动情况,在提示信息的提示下,选择相应的服务进行操作。如对职工对象中的工资按字典顺序进行排序;对排序后的职工对象进行增、删、查询、修改、排序等操作。 3、输出的实现:根据选择的操作,输出与之对应的信息。综上可以绘制出职工管理功能的系统流程图,如图1所示 总控模块 输出

7、模块 系统处理模块 输入模块 测试模块4. 系统功能结构根据职工管理系统问题的分析和设计要求,可以得到该职工管理系统可以分为五个模块:职工信息添加模块、职工信息修改模块、职工信息删除模块、职工信息查询模块、职工信息排序模块。其系统功能结构如图2所示。职工管理系统 信息处理退出系统排序功能查询信息注册职工工资排序保存文件职务查询姓名查询代码查询工资查询修改信息删除信息信息显示 图2 系统功能结构图5.模块函数构造根据系统功能结构图的描述,可以构造出该系统的抽象数据类型和相对应的函数,其方法名和功能如表1所示。 1. 函数功能表模块 函数或数据结构 功能 链表数据模块typedef struct

8、Employee Node; typedef Node* Link; 定义链表结点系统处理模块Link Create(Link Head)创建带头节点的空链表void Release(Link Head) 释放链表Link Add(Link Head) 前插法添加数据bool Search(Link Head) 查询职工信息void Display_List(Link Head) 显示职工信息Link Modify(Link Head) 修改职工信Link Del(Link Head) 删除职工信息Link Sort(Link Head) 职工信息排序VoidSave_ByFile(LinkH

9、ead,fstream& ofile) 保存职工信息输出模块void Display_Node(Link pNode)输出职工信息三 详细设计1、抽象数据类型定义1)定义表结点(typedef struct Node)struct Employee* Next; typedef struct Employee Node; typedef Node* Link;2)初始化链表Link Create(Link Head) /创建一个带头节点的空链表。 Head=(Link)new Node; if(!Head) cout分配内存失败!m_Code=; Head-m_Name=; Head-m_Ye

10、ar=0; Head-m_Sex=; Head-m_Post=; Head-m_Department=; Head-m_Wage=0; Head-Next=NULL; return Head; 2. 主函数设计根据详细设计要求,可以得到主函数代码及其对应的程序流程图:在主函数中,实现了友好的界面设计。系统需要输入职工的基本信息:姓名、性别、出生年月、工作年月、学历、职务、工资等。这个系统还利用键盘输入提供的主菜单服务,在主菜单中,有八种操作的调用:Link Create(Link Head)创建带头节点的空链表void Release(Link Head) 释放链表Link Add(Link

11、Head) 前插法添加数据bool Search(Link Head) 查询职工信息void Display_List(Link Head) 显示职工信息Link Modify(Link Head) 修改职工信息Link Del(Link Head) 删除职工信息Link Sort(Link Head) 职工信息排序VoidSave_ByFile(LinkHead,fstream& ofile) 保存职工信息void Display_Node(Link pNode)输出职工信息主函数代码见附录1主函数程序流程图如图4所示:图 4 主函数程序流程图3添加职工信息Link Add(Link Hea

12、d) /前插法添加数据。 Link pNew;/ 声明一个新节点。 char again; string code,name,sex,post,department; unsigned short int year; unsigned int wage; do pNew=(Link)new Node; /数据域。 coutcode; coutendlname; coutendlyear; coutendlsex; coutendlpost; coutendldepartment; coutendlwage; while(cin.fail() cout请输入正确的工资数据。wage; coutm

13、_Code=code; pNew-m_Name=name; pNew-m_Year=year; pNew-m_Sex=sex; pNew-m_Post=post; pNew-m_Department=department; pNew-m_Wage=wage; /指针域。 pNew-Next=Head-Next; Head-Next=pNew; cout数据添加成功!是否继续添加?(Y/N)again; while(again=Y|again=y); return Head; cindepartment; coutendlwage; while(cin.fail() cout请输入正确的工资数据

14、。wage; coutm_Code=code; pNew-m_Name=name; pNew-m_Year=year; pNew-m_Sex=sex; pNew-m_Post=post; pNew-m_Department=department; pNew-m_Wage=wage; /指针域。 pNew-Next=Head-Next; Head-Next=pNew; cout数据添加成功!是否继续添加?(Y/N)again; while(again=Y|again=y); return Head; 4信息查询模块在查询算法中,职工管理系统提供了七种查询操作,实现了系统的人性化查询操作。这些查询

15、操作分别为:对姓名进行查询,对性别进行查询,对出生年月进行查询,对学历进行查询,对职位进行查询,对工资进行查询等一些列操作。查找算法中,利用链表的指针的移动扫描整个职工信息表,利用strcmp()函数判断字符串是否匹配。bool Search(Link Head) /查询同时满足姓名和部门的职工信息。 Link ptr; string department; string name; ptr=Head-Next; coutdepartment; coutendlname; coutendl-查询结果-endl;coutendl职工代码 姓名 出生年份 性别 职称 部门 工资m_Name=nam

16、e)&(ptr-m_Department=department) Display_Node(ptr);/打印满足条件的节点。 return true; ptr=ptr-Next;/查询下一节点。 cout无此职工的信息。Next=NULL)|(Head-Next-Next=NULL)/此步条件判断非常有价值。 cout数据节点数少于2个,不用排序!Next-Next;Head-Next-Next=NULL;/到此,分成了两个链表。 /第三步。 while(ptr) ptr_N=ptr-Next; ptr_F=Head;/ptr_F的归位。 while(ptr_F-Next) if(ptr-m_

17、Wageptr_F-Next-m_Wage) ptr-Next=ptr_F-Next; ptr_F-Next=ptr; break; /if else ptr_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从高到低,排序成功!Next; if(ptr) ptr_front-Next=ptr-Next; delete ptr;/删除此节点。 cout没找到此

18、职工的记录,无法删除。endl; return Head; 四 设计与调试分析测试是使用人工或者自动手段来运行或测试某个系统的过程,其目的在于检验是否满足规定的需求或弄清预期结果与实际结果之间的差别。在调试查询修改功能过程中,查询的总是不正确,查询的结果显示,没有找到职工信息,最后发现查找的结点不正确,查询应该与输入的值和头结点next比较,而不是头结点。还有就是查询结点不知道如何循环,最后又看看了记得笔记和书,才知道如何继续查找而不出错误。修改时总是不能正确的修改,最初时修改总是修改最后输入的数据。最后终于找到了,又是结点写错了。排序时注意交换的先后顺序就可以了,删除时注意交换结点的顺序。经

19、验与体会:本次课程设计是围绕数据结构进行。根据问题描述可知,需要解决问题并不复杂,整个问题只需要实现一个职工管理系统功能,那就是在这个系统中实现对职工信息的插入、删除、查询、排序、修改以及保存。但是,为了实现该功能,却需要优秀的算法和数据结构以保证实现的时间和空间效率。把职工信息存储在一个单链表中,利用指针实现对职工信息的各项基本操作。虽然设计的程序完成了题目描述所需要实现的功能,但是仍然存在不如人意的地方。那就是可以排序上面多设计几个算法。实现多角度排序。在这个系统中没有职工序号的信息,所以允许职工姓名相同,在很大程度上面,可能是的职工信息重复。经过这次数据结构课程设计,我们不仅及时巩固的了

20、数据结构、算法、以及软件工程的知识,并明白数据结构和算法对于程序时间和空间性能的影响,及软件工程提供的开发流程和工具对于实现特定功能程序的重要意义。当我们面对一个实际问题,应该迅速根据问题性质和特点抽象成特定的数据结构,当然每个问题都有可能能够抽象成多种数据结构,每种数据结构适应于不同的算法。因此应该综合考虑这样的数据结构、算法以及它们的空间和时间效率,然后从中选择一个作为实现程序的基础。此外,对程序的测试应该要仔细,根据模块的特点和测试阶段,采用各种软件测试方法对程序进行测试,确保各个模块的正确性和完整性,最后集成起来测试其是否正确和完整地实现了问题描述中要求的功能。五 用户手册进入职工管理

21、系统,首先看到的就是欢迎界面:输入相应操作的数字,1.新增职工信息2.修改信息3.删除信息4.信息查询5.保存文件6.工资排行7.信息显示0.退出系统输入相应操作的数字,选择1、请输入注册职工:按次序依次输入职工的姓名、性别、出生年月、学历、职务、工资的信息(注意是依次输入,中间可以用空格,tab,回车做切换输入),输完信息后自动回到主界面。选择2,提示修改信息的代码、姓名,成功正确返回,错误有提示无此员工信息;选择3,提示删除信息方式:成功正确返回,错误有提示无此员工信息;选择4,信息查询,显示统计的数据;选择5,保存文件;选择6. 按工资进行排序,进行输出排序后的数据;选择7.信息显示;选

22、择0.退出系统.六 测试成果(1)进入职工管理系统(2) 注册职工信息(3) 修改信息(4) 删除信息(5) 信息查询(6) 保存文件(7)工资排行(8)信息显示七 附录(源程序清单)参考文献:1李云清,杨庆红,揭安全.数据结构(C语言版)M.北京:人民邮电大学出版社,2004.62潘彦.算法设计与分析基础M.北京:清华大学出版社,2007.13肖梦强,曲秀清.软件工程原理、方法与应用M.北京:中国水利水电出版社,2005.104吕凤翥.C+语言程序设计(第2版)M.北京:电子工业出版社,2007.25严蔚敏,吴伟民.数据结构(C语言版)M.北京:清华大学出版社,2002.9#include

23、#include #include #include #include #include #include #include using namespace std; struct Employee /声明职工的结构作为链表节点。 /-数据域- string m_Code; string m_Name; unsigned int m_Year; string m_Sex; string m_Post; string m_Department; unsigned int m_Wage; /链表节点的指针域- struct Employee* Next; ; typedef struct Empl

24、oyee Node; typedef Node* Link; /-函数声明- Link Create(Link Head); void Release(Link Head); Link Add(Link Head); bool Search(Link Head); Link Search_Unique(Link Head); void Display_List(Link Head); void Display_Node(Link pNode); Link Modify(Link Head); Link Del(Link Head); void Save_ByFile(Link Head,fst

25、ream& ofile); Link Sort(Link Head); /-函数实现- Link Create(Link Head) /创建一个带头节点的空链表。 Head=(Link)new Node; if(!Head) cout分配内存失败!m_Code=; Head-m_Name=; Head-m_Year=0; Head-m_Sex=; Head-m_Post=; Head-m_Department=; Head-m_Wage=0; Head-Next=NULL; return Head; void Release(Link Head) /释放链表。 Link ptr;/声明一个操作

26、用的指针。 while(Head!=NULL) ptr=Head; Head=Head-Next; delete ptr;/释放节点资源。 Link Add(Link Head) /前插法添加数据。 Link pNew;/ 声明一个新节点。 char again; string code,name,sex,post,department; unsigned short int year; unsigned int wage; do pNew=(Link)new Node; /数据域。 coutcode; coutendlname; coutendlyear; while(cin.fail()

27、cout请输入正确的年份格式。year; coutendlsex; coutendlpost; coutendldepartment; coutendlwage; while(cin.fail() cout请输入正确的工资数据。wage; coutm_Code=code; pNew-m_Name=name; pNew-m_Year=year; pNew-m_Sex=sex; pNew-m_Post=post; pNew-m_Department=department; pNew-m_Wage=wage; /指针域。 pNew-Next=Head-Next; Head-Next=pNew; co

28、ut数据添加成功!是否继续添加?(Y/N)again; while(again=Y|again=y); return Head; bool Search(Link Head) /查询同时满足姓名和部门的职工信息。 Link ptr; string department; string name; ptr=Head-Next; coutdepartment; coutendlname; coutendl-查询结果-endl;coutendl职工代码 姓名 出生年份 性别 职称 部门 工资m_Name=name)&(ptr-m_Department=department) Display_Node

29、(ptr);/打印满足条件的节点。 return true; ptr=ptr-Next;/查询下一节点。 cout无此职工的信息。endl; return false; Link Search_Unique_Front(Link Head) /查询满足职工代码的职工信息(职工代码必需唯一)。 Link ptr; string code; ptr=Head; coutcode; coutendl-查询结果-endl; coutendl职工代码 姓名 出生年份 性别 职称 部门 工资Next) if(ptr-Next-m_Code=code) /Display_Node(ptr);/打印满足条件的

30、节点。 return ptr;/注意,是返回的查询到的节点的直接前趋节点。 ptr-Next=ptr-Next-Next;/查询下一节点。 return ptr; void Display_List(Link Head) Link ptr; ptr=Head-Next; cout=所有职工信息=endl;coutendl职工代码 姓名 出生年份 性别 职称 部门 工资Next; void Display_Node(Link pNode) /在标准输出设备上输出。 coutsetw(10)leftm_Code setw(10)leftm_Name setw(10)leftm_Year setw(

31、10)leftm_Sex setw(10)leftm_Post setw(10)leftm_Department setw(10)leftm_WageNext) cout-你现在可以修改此职工的信息了-endl;coutendl职工代码 姓名 出生年份 性别 职称 部门 工资endl; /数据域。 coutcode; coutendlname; coutendlyear; while(cin.fail() cout请输入正确的年份格式。year; coutendlsex; coutendlpost; coutendldepartment; coutendlwage; while(cin.fai

32、l() cout请输入正确的工资数据。wage; coutNext-m_Code=code;/因ptr是前趋节点,所以要用ptr-Next; ptr-Next-m_Name=name; ptr-Next-m_Year=year; ptr-Next-m_Sex=sex; ptr-Next-m_Post=post; ptr-Next-m_Department=department; ptr-Next-m_Wage=wage; cout没找到此职工的记录,无法修改。Next; if(ptr) ptr_front-Next=ptr-Next; delete ptr;/删除此节点。 cout没找到此职工

33、的记录,无法删除。Next; ofile.clear();/清除文件结束状态。 while(pNode) ofilesetw(10)leftm_Code setw(10)leftm_Name setw(10)leftm_Year setw(10)leftm_Sex setw(10)leftm_Post setw(10)leftm_Department setw(10)leftm_WageNext; cout数据文件保存成功!Next=NULL)|(Head-Next-Next=NULL)/此步条件判断非常有价值。 cout数据节点数少于2个,不用排序!Next-Next; ptr_F=Head

34、; 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; ptr_F-Next=ptr; break; /if else ptr_F=ptr_F-Next; /while(ptr_F-Next) if(ptr_F-Next=NULL) ptr-Next=ptr_F-Next; ptr_F-Next=ptr;/表示插到有序链表的最后面了

35、。 ptr=ptr_N;/归位,准备下一次排序。 /while(ptr) cout从高到低,排序成功!endl; return Head; int main() Link Head=0; Head=Create(Head); fstream iofile; iofile.open(d:iofile.txt,ios_base:in|ios_base:out|ios_base:app);/文件以三种方式打开。 if(!iofile) cout打开文件失败!endl; return -1; int menu; while(1) cout*endl;cout*欢迎进入职工管理系统*endl;cout*

36、endl;coutendl;cout endl;cout 主菜单 endl; cout = endl;cout endl;cout endl; cout 1.注册职工 2.修改信息 endl; cout 3.删除信息 4.信息查询 endl;cout 5.保存文件 6.工资排行 endl;cout 7.信息显示 0.退出系统 endl;cout endl;cout endl;cout endl;cout endl; coutendlmenu; while(cin.fail() cout请选择正确的菜单选项。menu; switch(menu) case 0: cout成功退出系统!endl;

37、return 0; case 1: Head=Add(Head); break; case 2: Head=Modify(Head); break; case 3: Head=Del(Head); break; case 4: Search(Head); break; case 5: Save_ByFile(Head,iofile); break; case 6: Sort(Head); break; case 7: Display_List(Head); break; default: cout请选择正确的菜单项进行操作。多谢合作!endl; Release(Head); iofile.cl

38、ose(); return 0; 4. 课程设计心得本次课程设计的一切实现和代码都是围绕数据结构进行设计的操作的。根据问题的描述可知,需要解决问题并不是很复杂,整个问题只需要实现简单的职工管理系统功能,那就是在这个系统中实现对职工信息的插入、删除、查询、排序、修改以及保存。但是,为了实现该功能,却需要优秀的算法和以数据结构为核心思想作为框架,以保证实现的时间最优化和空间的最大利用化。把职工信息存储在一个单链表中,利用指针实现对职工信息的各项简单的操作。程序在长久的修改和上网查询借鉴的情况下最终完成了题目描述所需要实现的功能,但仍有我认为不足的问题,还有需要改进的地方,就是还可以在排序上面多设计

39、几个算法,实现多方位的排序。我发现在这个系统中没有职工序号或者是工作序号之类的信息,所以允许职工姓名相同,在很大程度上面,可能会出现职工信息有所重复,值得思考和改进并且实现最佳功能。经过这次数据结构课程设计,我们不仅再一次的巩固了我对数据结构、算法、以及软件工程的知识的了解,并更加的明白了数据结构和算法对于程序时间和空间性能的极大影响,及软件工程提供的开发流程和工具对于实现特定功能程序的深远而重大的意义。我们面对一个最现实的问题的时候,应该迅速根据问题性质和特点抽象构成特定的数据结构,用计算机的思维方式来看待,每个问题都有可能能够抽象成多种数据结构,每种数据结构也有可能适应不同的算法。应该全面的考虑这些的数据结构、算法以及它们的空间和时间效率是不是达到最大化的应用和实现,然后从中选择一个最优的作为实现程序的基本框架进行操作和实现。此外,我认为对程序的测试要做到十分的仔细,依据模块的特点和功能,可以进行阶段性的测试和全面性的测试,采用各种软件测试方法对程序进行全方位的进行测试,确保各个模块的正确性和完整性。最终的目的是完整的实现了问题描述中要求的功能和使我们要解决的问题达到最优化解决。

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

copyright@ 2023-2025  zhuangpeitu.com 装配图网版权所有   联系电话:18123376007

备案号:ICP2024067431-1 川公网安备51140202000466号


本站为文档C2C交易模式,即用户上传的文档直接被用户下载,本站只是中间服务平台,本站所有文档下载所得的收益归上传人(含作者)所有。装配图网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。若文档所含内容侵犯了您的版权或隐私,请立即通知装配图网,我们立即给予删除!