资源描述
淮阴工学院算法设计技能训练实习报告题目:简单的职工管理系统系(院): 计算机工程学院业:计算机科学与技术(微软合作)级:计算机1137姓 名扌旨导教师:周海岩学年学期:20142015学年第1学期2014 年 12 月 31 日算法设计技能训练任务书课题 名称简单的职工管理系统设计 目的1、通过算法设计技能训练,深入理解算法设计的意义和重要性,更好地 掌握算法设计的知识。2、能够针对某一具体问题,设计算法进行解决。3、锻炼实践动手能力,提高解决问题的能力。实验 环境硬件:1、PC机,奔腾W以上CPU, 512MB以上内存,80G以上硬盘; 软件:Visual C+编程工具1。对单位的职工进行管理,包括插入、删除、查找、排序等功能。2职工对象包括姓名、性别、出生年月、工作年月、学历、职务、住址、 电话等信息。(1)新增 名职工:将新增职工对象按姓名以字典方式职工管理文件 中。(2)删除一名职工:从职工管理文件中删除一名职工对象。(3) 查询:从职工管理文件中查询符合某些条件的职工。(4) 修改:检索某个职工对象,对其某些属性进行修改。(5) 排序:按某种需要对职工对象文件进行排序.3。实现功能职工对象数不必很多,便于 次读入内容,所有操作不经过内外存交换。(1)由键盘输入职工对象,以文件方式保存。程序执行时先将文件读入内 存。(2)对职工对象中的“姓名”按字典顺序进行排序.(3)对排序后的职工对象进行增、删、查询、修改、排序等操作。任务 要求工作进度计划序号起止日期工作内容12014。 12。 28任务下达,查阅文献资料22013。12。292013.12。31总体设计、素材搜集、课题详细设计、调试32015.1。1 2015.1。3完善设计、撰写报告42015.1。4答辩指导教师(签章):年月日摘要在当今社会,互联网的发展,给人的工作和生活带来了极大的便利和高效,信息 化、电子化已经成为节约运营成本提高工作效率的首选。随着各个公司的规模增大, 有关信息管理工作所涉及的数据量越来越大,职工信息量也大大增加,利用传统的手 工查询、登记、修改等方法的处理速度已经远远跟不上公司的需求。而且,人工方式 来管理职工信息,存在着许多缺点,如:效率低、保密性差,对信息的查找、更新和维 护不便。计算机作为知识经济时代的产物,其强大的功能已为人们深刻认识。本文对职工 管理系统进行设计,主要为了企业职工的信息进行集中管理和快捷查询。本职工信息 管理系统包括新增、删除、查询、修改、排序等常用功能整个系统用C+语言设计, 用户可轻松管理企业员工信息.关键词 职工管理系统 职工信息管理 C+ 数据结构目录1 引言 51。1 设计目的 51.2 设计意义 52 需求分析 62。1 设计题目描述 62。2 设计要求 62.3 实现提示 6 2。4 选做内容 6 2。5 软硬件运行环境及开发工具 63 课程设计报告内容 63.1 系统设计思想 73.2 系统概要设计 73.3 系统详细设计 93.3。1 结构体设计 93.3。2 主函数设计 93.3。3 查找算法设计 113。3。4 排序算法设计 113.4 运行与测试 13 总结 16 致谢 17 参考文献 18 附录 程序代码 19 指导教师评语 32 图 1 系统流程图 7 图 2 系统功能结构图 8 表 1 函数功能表 8 图 3 模块调用关系图 9 图 4 主函数程序流程图 10 图 5 排序算法程序流程图 13 图 6 主菜单选择界面 13 图 7 新增并查询职工信息界面 14 图 8 修改职工信息界面 14 图 9 按工资排序职工信息显示图 15 图 10 退出职工管理系统 151 引言通过大一一学年对C+语言的学习,了解到了很多C+语言的相关知识。 它简洁紧凑、使用灵活方便、运算符丰富、适用范围大、可移植性好。它既具有 高级语言的特点,又具有汇编语言的特点此职工管理系统利用C+语言的优点, 进行了设计。睡着社会经济的飞速发展,信息化程度的不断深入,传统方式的职 工信息管理已愈来愈不能满足各大公司的需求。企业间的竞争愈加激烈时 ,如何 高效地管理大量的职工信息,如何进行快速地查询,如何利用计算机技术加强企 业职工信息管理,是摆在各家企业面前的一个迫切需要解决的问题。信息化的职工管理系统为用户提供充足的信息和快捷的查询手段 ,具有手 工管理所无法比拟的优点。例如:检索迅速、查找方便、可靠性高、存储量大、 保密性好、寿命长、成本低等。这些优点能够极大地提高职工管理的效率,也是 公司的科学化、正规化管理和与世界接轨的重要条件.职工管理系统作为一种管 理软件正在各公司中得到越来越广泛的应用,且已达到了良好效果。11 设计目的本程序旨在训练基于C+语言的编程思想,进一步加深、巩固所学专业课程 的基本理论知识,理论联系实际,了解管理信息系统的开发流程,熟悉C+语言 的文件和结构数组的各种基本操作。能够利用所学的基本知识好技能,解决简单 的程序设计问题,增强独立完成工作的能力.通过本程序的训练,提高逻辑思维能 力,熟练掌握一些排序算法,熟练掌握利用数组存储结构实现职工信息管理的原 理,为进一步开发出高质量的管理系统打下坚实的基础。12 设计意义做一个企业员工信息管理系统,就是需求所定制的 ,所以他首先要做的是满 足最基本得员工信息的增删改查及排序基础上进行功能的扩展,其次是部门管理, 工资管理等等。 一个正规性企业都希望自己的员工管理非常合理,如此复杂性 的操作如果通过人手动的写,会非常的麻烦。基于这一点考虑到设计管理类型的 软件,来解决这个繁琐的问题,方便与企业的工作管理以及一些制度的规定。 在 企业中,员工信息管理工作是非常重要的一项工作 ,它负责整个企业的日常人事 安排,员工的人事管理等。高效的人事管理可以提高企业的市场竞争力,使企业 具有更强的凝聚力和活力。为此,提高员工管理工作的效率,设计 一套员工信 息管理系统具有实际应用意义.2 设计题目描述和设计要求21 设计题目描述对单位的职工进行管理,包括插入、删除、查找、排序等功能。22 设计要求职工对象包括姓名(字符串)、性别(字符)、出生年月(数字)、工作年月 (数字)、学历(字符串)、职务(字符串)、住址(字符串)、电话(字符串)等 信息。(1)新增一名职工:将新增职工对象按姓名以字典方式职工管理文件中。(2)删除一名职工:从职工管理文件中删除一名职工对象。(3)查询:从职工管理文件中查询符合某些条件的职工。(4)修改:检索某个职工对象,对其某些属性进行修改。(5)排序:按某种需要对职工对象文件进行排序.2.3 实现提示职工对象数不必很多,便于一次读入内容,所有操作不经过内外存交换.(1)由键盘输入职工对象,以文件方式保存.程序执行时先将文件读入内存.(2)对职工对象中的“姓名按字典顺序进行排序.(3)对排序后的职工对象进行增、删、查询、修改、排序等操作。2。4 选做内容将职工对象按散列法存储,并设计解决冲突的方法.在此基础上实现增、删、 查询、修改、排序等操作.2。5 软硬件运行环境及开发工具Windows7操作系统Visual C+ 6。0 运行环境3 课程设计报告内容3。1系统设计思想(1) 系统数据需求通过对企业员工的信息管理业务流程的调查,总结系统对其数据的需求,主 要有:员工档案信息,员工工资信息,部门、职务、工资类型等基础 信息。(2) 系统功能需求系统的主要需求,即所设计的系统在功能上应做什么。本系统主要的功能有: 员工管理:完成员工档案的新增、修改、删除、查询及打印等功能;主要 实现对所有员工的姓名、性别、出生年月、工作年月、学历、职务(字符串)、 住址、电话等信息的管理. 工资管理:完成员工工资的录入、查询、分析及相关打印等功能;主要实 现对员工的姓名、工资类别及工资金额等信息的管理。 系统帮助:帮助用户解决问题,沟通与软件开发者的联系。(3) 系统性能需求系统的性能指标包括存储容量限制、运行时间限制、传输速度要求、安全保 密性等几个方面。(4) 系统运行环境需求 硬件方面:采用的设备机型以及外部设备等; 软件方面:支持系统运行的系统软件,如操作系统、数据库系统等。(5) 系统可靠性及安全保密需求对系统、重要子系统在运行中的安全、可靠、保密方面提出要求。3。2系统总体设计1、输入功能的实现:要想实现职工管理系统的输入必须要建立一个职工信 息系统的抽象数据类型,其中职工信息以链表的存储方式实现.由键盘输入职工 对象,以文件方式保存。程序执行时先将文件读入内存。2、系统处理功能的实现:系统管理员根据公司的人员流动情况,在提示信息 的提示下,选择相应的服务进行操作如对职工对象中的姓名按字典顺序进行 排序;对排序后的职工对象进行增、删、查询、修改、排序等操作。3、输出的实现:根据选择的操作,输出与之对应的信息。综上可以绘制出 职工管理功能的系统流程图,如图1所示.图1系统流程图4、功能结构根据职工管理系统问题的分析和设计要求,可以得到该职工管理系统可以分 为五个模块:职工信息添加模块、职工信息修改模块、职工信息删除模块、职工 信息查询模块、职工信息排序模块。其系统功能结构如图2所示。职工信息管理系统图2系统功能结构图5、模块函数构造根据系统功能结构图的描述,可以构造出该系统的抽象数据类型和相对应的 函数,其方法名和功能如表1所示。模映函数或数据结构功能链表数据类 型typede f struct N ode定义链表结点typedef struct D alatype定文职工召息T.istInitiate(SLNocle 41 head)初始化链表系统处理模 块SLNode ListlnsertfSLNode *liead.D ataType x)插入职工信息T.istDelete(SLNode liead)删除职工信息ListModify(SLNode head)修改职工信息pu(SLNode +headfFILF *巾保存职工信息Li stfhid(SLXode head查询职工信息T.istpaiKU(SLNode 4head)职T信息排宇输出模块print(SLNode *head)显示职工信息表1函数功能表6、系统模块的调用关系图框架根据系统功能结构图的描述,可以构造出该系统的抽象数据类型和相对应的 函数,函数之间通过调用来实现系统的功能.职工管理系统问题的系统模块类 图如图3所示:void Save_ByF i I u(L i nk:LaJLink DelL fL i nk, H亡口占)jLink Modi fy (L i nk Head)图3模块调用关系图3。3系统详细设计3。3.1结构体设计本课程设计的是职工管理系统,对于职工的基本信息通过构造结构体链表实 现:struct Employeestring m_Code; 编号string m_Name;姓名string m_Year; 出生年月string m_Sex;性别string m_Post;/职务string m_Department ;部门unsigned int m_Wage;工资struct Employee* Next;;3, 3.2主函数设计本程序主要是使用链表来实现操作使用链表这样做的好处是,可以随时增加内容,也容易将职工信息从文件中删除。为职工设计一个类,单独设计完成这 个文件读写的成员函数。使用结构数组作为职工信息的存储器,由它们和文件建立读写关系需要显示它 们时,先将文件读入内存,然后再显示需要显示输出职工信息时,则直接从内存 链表中筛选。当然,需要显示原始信息时,也通过直接显示链表信息的方法实现。 这四种数据的显示问题均通过一个成员函数来完成.(1) 根据详细设计要求,可以得到主函数代码及其对应的程序流程图:在主 函数中,实现了友好的界面设计。系统需要输入职工的基本信息:姓名、性别、 出生年月、工作年月、学历、职务、住址、电话等。这个系统还利用键盘输入提 供的主菜单服务,在主菜单中,有七种操作的调用:1) 新建函数Link Crea te (Link Head);/创建一个带头节点的空链表2) 修改函数Link Modify (Link Head); /修改单个节点3) 删除函数 Link Del (Link & Head);4) 查询函数:bool Search (Link Head) /查询同时满足“姓名和“部门的职工信 息Link Search_Unique_Front (Link Head) / 查询满足“职工代码“的职工 信息(职工代码必需唯一)5) 保存函数 void Save_ByFile(Link Head)6) 排序函数(包括按工资排序和按姓名进行字典排序)Link Sort(Link Head)Link Sort_byname (Link Head)7) 显示函数 void Display_List (Link Head)(2) 主函数程序流程图如图4所示:图 4 主函数程序流程图3。3.3 查找算法设计 在查询算法中,职工管理系统提供了七种查询操作,实现了系统的人性化查 询操作。这些查询操作分别为: 对姓名进行查询,对性别进行查询,对出生年月进行查询,对工作年月进行查询, 对学历进行查询,对职位进行查询,对住址进行查询,对电话进行查询等一些列 操作查找算法中,利用链表的指针的移动扫描整个职工信息表,利用St rcmp() 函数判断字符串是否匹配。查找算法主要代码如下:Link Search_Unique_Front(Link Head) /查询满足“职工代码“的职工信息 Link ptr;string code; ptr=Head-Next;cout请输入职工代码:”; cincode;cout endl -查询结果- -” m_Code=code) Display_Node(ptr) ;/打印满足条件的节点。return ptr;ptr=ptr-Next; /查询下一节点。return ptr;void Display_List(Link Head) /显示职工信息函数Link ptr;ptr=Head-Next;cout” =所有职工信=” endl; while(ptr) Display_Node(ptr); ptr=ptr-Next;3.3。4 排序算法设计 在排序算法中,职工管理系统提供了四种查询操作,实现了系统的基本排序操作.这些排序操作分别为: 对姓名进行排序,对性别进行排序,对出生年月进行排序,对工作年月进行排序, 等一些列操作。排序算法中,利用链表的指针的移动扫描整个职工信息表,利用 strcmp()函数判断字符串是否匹配。排序的核心代码:Link Sort(Link Head)/创建的是带头节点的链表(用直接插入法)if (Head-Next=NULL) II (Head-Next-Next=NULL) 条件判断 coutNextNext; ptr_F=Head;Head一Next-Next=NULL;到此,分成了两个链表 while( ptr)ptr_N=ptrNext;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; else ptr_F=ptr_FNext; if(ptr_F- Next=NULL) ptr-Next=ptr_F一Next;ptr_F-Next=ptr; 表示插到有序链表的最后面了 ptr=ptr_N; 归位,准备下一次排序coutinclude iostreaminclude fstreaminclude iomanipinclude memory.h#include stdio.hinclude using namespace std;struct Employee/声明职工的结构作为链表节点string m_Code; /数据域string m_Name;unsigned short int m_Year;string m_Sex;string m_Post;string m_Department;unsigned int m_Wage;struct Employee Next; /链表节点的指针域;typedef struct Employee Node; /取别名 为现有数据类型定义同义词 typedef Node* Link; 取别名 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,fstream& ofile);Link Sort(Link Head);/函数实现Link Create(Link Head) /创建一个带头节点的空链表 Head=(Link)new Node; if(!Head)coutm_Sex=”;Headm_Post=”; Headm_Department=” ;Headm_Wage=0;Head-Next=NULL;return Head;void Release(Link Head) /释放链表Link ptr;/声明一个操作用的指针while(Head!=NULL)ptr=Head;Head=HeadNext;delete ptr;/释放节点资源Link Add(Link Head) /前插法添加数据Link pNew;/ 声明一个新节点。char again;string code,name,sex,post,department;unsigned short int year;unsigned int wage;dopNew=(Link)new Node;cout请输入职工代码:;cincode;coutendl请输入职工姓名:;cinname;coutendl请输入职工出生年份:;cinyear;while(cin。fail()cout请输入正确的年份格式。endl; cin。clear();fflush(stdin); cinyear;coutendl请输入职工性别:; cinsex;coutendl请输入职工职称:; cinpost;coutendl”请输入职工部门:; cindepartment;coutendl请输入职工工资:; cinwage; while(cin.fail() )cout请输入正确的工资数据。endl; cin。 clear(); fflush(stdin); cinwage;cout endl; pNew-m_Code=code; pNew-m_Name=name;pNew-m_Year=year; pNewm_Sex=sex; pNew-m_Post=post;pNewm_Department=department; pNewm_Wage=wage; pNewNext=HeadNext;HeadNext=pNew;cout数据添加成功!是否继续添加?(Y/N)endl; cinagain;while(again=Y|again=y);return Head;bool Search(Link Head) /查询同时满足“姓名”和“部门”的职工信息Link ptr;string department;string name; ptr=HeadNext;cout请输入部门:”;cindepartment;coutendl请输入姓名:;cinname;coutendl” -查询结果 - -endl;while(ptr)i(f (ptrm_Name=name)&(ptrm_Department=department) Display_Node (ptr);打印满足条件的节点。return true;ptr=ptr-Next ; 查询下一节点。cout未找到满足的员工endl;return false;Link Search_Unique_Front(Link Head) /查询满足“职工代码“的职工信息 (职工代码必需唯一)Link ptr;string code; ptr=Head-Next;cout”请输入职工代码:;cincode;cout endl”-查询结果 -” Next; /查询下一节点.return ptr;void Display_List( Link Head) /显示职工信息函数Link ptr; ptr=Head-Next;cout ”=所有职工信息= endl;while( ptr)Display_Node(ptr); ptr=ptrNext;void Display_Node(Link pNode) /在标准输出设备上输出coutendlsetw (10)leftpNode-m_Code /setw (10)表 示占 10 个字符位置 setw(10) left pNode m_Name setw( 10) left pNode m_Year setw( 10)left pNode m_Sex m_Post m_Department setw(10) m_Wageendl;Link Modify(Link Head)/ 修改单一个节点Link ptr;ptr=Search_Unique_Front( Head);string code,name,sex,post,department;unsigned short int year;unsigned int wage;if( ptr)cout -你现在可以修改此职工的信息了- -endl;cout code;cout endl m_Post=post;ptrm_Department=department; ptr-m_Wage=wage;elsecout没找到此职工的记录,无法修改.endl;return 0;Link Del(Link Head) 删除信息Link ptr;Link ptr_front;ptr_front=Search_Unique_Front(Head);ptr=ptr_frontNext;if(ptr)/p=currentlink;*/current-link=p-link;/单链表的删除ptr_front-Next=ptr-Next;/* delete p;*/delete ptr;cout删除成功endl;1Jcout”没找到此职工的记录无法删除。 endl;return Head;1/void Save_ByFile(Link Head, fstream& ofile)/保存函数Link pNode; pNode=HeadNext;ofile.clear (); /清除文件结束状态.while( pNode)ofilesetw (10)leftpNodem_Code /setw (10)表示 占10个字符位置setw( 10) left pNode m_Name setw(10) left m_Year setw(10)left pNode m_Sex setw( 10) m_Post setw( 10) left pNode m_Department setw(10) left pNode m_Wage Next;cout ”数据文件保存成功!” endl;Link Sort(Link Head)/创建的是带头节点的链表(用直接插入法)if (Head-Next=NULL) | 1(HeadNextNext=NULL) / 条件判断cout”数据节点数少于2个,不用排序!” Next- Next;ptr_F=Head;Head一NextNext=NULL; 到此,分成了两个链表/第三步while(ptr)ptr_N=ptr- Next;ptr_F=Head;/ptr_F 的归位。while(ptr_F Next)if(ptr m_Wage ptr_F- Nextm_Wage)ptr Next=ptr_F Next;ptr_F- Next=ptr;break;else ptr_F=ptr_F- Next;if(ptr_F Next=NULL)ptr-Next=ptr_F Next;ptr_F Next=ptr; /表示插到有序链表的最后面了 ptr=ptr_N; /归位,准备下一次排序cout从高到低,排序成功! endl;return Head;int main()Link Head=0;Head=Create(Head);fstream iofile;iofile。open(d: iofile.txt, ios_base: : in I ios_base: : out I ios_base:app); /文件以三种方式打开if(!iofile)cout打开文件失败! endl;return -1;int menu;while(1)cout” endl;cout = 菜 单 选 顶=”endl;cout”= endl;cout*1。注册职工2。修改信息3。删除信息4.信息查询 endl;cout”*5.保存文件6。工资排行7。信息显示0.退出系统” endl;cout endl;coutendl 请选择相应操作菜单项:;cinmenu;while(cin.fail()cout”请选择正确的菜单选项。menu;switch(menu)case 0:cout ”成功退出系统!” endl;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。 close();return 0;指导教师评语学号姓名班级计算机1137选题 名称简单的职工信息管理系统序号评价内容权重()得分1考勤记录、学习态度、工作作风与表现.52自学情况:上网检索机时数、文献阅读情况(笔记)103论文选题是否先进,是否具有前沿性或前瞻性.54成果验收:是否完成设计任务;能否运行、可操作性 如何等。205报告的格式规范程度、是否图文并茂、语言规 范及流畅程度;主题是否鲜明、重心是否突出、 论述是否充分、结论是否正确;是否提出了自30己的独到见解。6文献引用是否合理、充分、真实。57答辩情况:自我陈述、回答问题的正确性、用语准确性、逻辑思维、是否具有独到见解等。25合计指导教师(签章):年月日
展开阅读全文