数据结构简单的职工管理系统完整版_第1页
数据结构简单的职工管理系统完整版_第2页
数据结构简单的职工管理系统完整版_第3页
数据结构简单的职工管理系统完整版_第4页
数据结构简单的职工管理系统完整版_第5页
已阅读5页,还剩41页未读 继续免费阅读

下载本文档

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

文档简介

..专业.整理.湖南涉外经济学院数据结构课程设计报告题目:简单的职工管理系统院系名称

专业名称题目:简单的职工管理系统院系名称

专业名称

班级计算机学院计算机科学与技术计科201001班学号:30设计起止时间:2011年11月20日~2011年12月30日完成于2011年12月29日星期四目录TOC\o"1-5"\h\z第一章序1第二章系统总体功能的设计和分析31、问题描述32、详细要求33、功能分析41、具体要求错.误!未定义书签。2、系统流程分析4..3、系统功能结构5..4、模块函数构造6第三章详细设计分析71、抽象数据类型定义72、主函数设计8

3、查找算法设计4、排序算法设计第四章源程序代码1129第六章课程设计总结31第五章系统实现1129第六章课程设计总结31第一章序电子信息时代由如洪水一样的凶猛,能在现实社会应用软件给我们的生活和工作带来方便和实用性就是软件存在的最大的价值。数据结构所能解决的就是这些复杂的问题简单化。《数据结构》是计算机专业学生学习的一门基础课程,但十分的重要。本课程系统地介绍了软件设计中常用的数据结构以及相应的存储结构和实现算法,介绍了常用的多种查找和排序技术。本课程将为整个专业的学习以及软件设计水平的提高打下良好的基础。为了学好《数据结构》,必须掌握编写一些在特定数据结构上的算法,并通过上机调试,更好地掌握各种数据结构及其特点。经过本次课程设计,我们对于数据结构基本理论和存储结构及算法设计将有更加深入的理解,并提高我们在实际设计操作中系统分析、结构确定、算法选择、数学建模和信息加工的能力,提高我们的C/C++语言程序设计能力,以及培养学我们编写程序设计文档的能力,为将来在实战工作中打下良好的基础。在经济发达的今天对于职工简单的管理都是有很大程度上的要求,一个工司能否较好较快的运行,与职工管理的好坏分不开关系,通过该系统,将一系列的问题系统化,能够更好的管理职工。简化管理,使管理更方便,准确性、直观性和实用性更强。本着以锻炼自己的能力为目的,通过设计与制作进一步学习和掌握简单的职工管理系统的原理和使用方法。虽然在一定程度上较为简单,但也能体现在出在人员管理上的方便快捷,也体现一个领导的管理水平是不是充满艺术。第二章系统总体功能的设计和分析1、问题描述根据课程设计题目的要求,由于职工信息是一定要存放在指定的文件中,所以应提供文件的输入、输出等操作;在程序中需要浏览职工的信息,应提供显示、查找、删除、插入、排序等一系列的操作;另外还应提供键盘式选择菜单实现功能选择对功能要求的实现是解决管理系统的关键问题。一个管理系统能将其划分为插入、删除、查找、排序等功能。对不同的功能模块进行代码的编写实现,最后通过一定的方式的进行连接测试和最终的调用,从而完成对各部分的操作。2、详细要求1.要求职工对象包括姓名、性别、出生年月、工作年月、学历、职务、住址、电话等信息。(1)新增一名职工:将新增职工对象按姓名以字典方式职工管理文件中。(2)删除一名职工:从职工管理文件中删除一名职工对象。(3)查询:从职工管理文件中查询符合某些条件的职工。(4)修改:检索某个职工对象,对其某些属性进行修改。(5)排序:按某种需要对职工对象文件进行排序。3功能分析1、实现提示职工对象数不必很多,便于一次读入内存,所有操作不经过内外存交换。(1)由键盘输入职工对象,以文件方式保存。程序执行时先将文件读入内存。(2)对职工对象中的"姓名"按字典顺序进行排序。(3)对排序后的职工对象进行增、删、查询、修改、排序等操作。2、系统流程分析(1)输入功能的实现:要想实现职工管理系统的输入,必须要建立一个职工信息系统的抽象数据类型,其中职工信息以链表的存储方式实现。由键盘输入职工对象,以文件方式保存。程序执行时先将文件读入内存。(2)系统处理功能的实现:系统管理员根据公司的人员流动情况,在提示信息的提示下,选择相应的服务进行操作。如对职工对象中的"姓名"按字典顺序进行排序;对排序后的职工对象进行增、删、查询、修改、排序等操作。(3)输出的实现:根据选择的操作,输出与之对应的信息。综上可以绘制出职工管理功能的系统流程图,如图1所示

输出模块总控模块输出模块总控模块3、系统功能结构根据职工管理系统问题的分析和设计要求,可以得到该职工管理系统可以分为五个模块:职工信息添加模块、职工信息修改模块、职工信息删除模块、职工信息查询模块、职工信息排序模块。其系统功能结构如图2所示。职工管理系统排序职工信息修改职工信息删除职工信息一新增职工信息查询职工信息*对姓名进行排序对出生年月进行排崖对工作年月进行排車对性别进行排序对电话进行查询对住址进行查询对职务进行查询*对工作年月进行查<■排序职工信息修改职工信息删除职工信息一新增职工信息查询职工信息*对姓名进行排序对出生年月进行排崖对工作年月进行排車对性别进行排序对电话进行查询对住址进行查询对职务进行查询*对工作年月进行查<■对学历进行查询对出生年月进行查诲对姓名进行查询图2系统功能结构图4、模块函数构造根据系统功能结构图的描述,可以构造出该系统的抽象数据类型和相对应的函数,其方法名和功能如表1所示。表1函数功能表第三章详细设计分析1、抽象数据类型定义定义表结点(typedefstruetNode)typedefstruetNode{longintborn_time,work_time,tele_num;charsex,name[ALLMAX],degree[ALLMAX],job[ALLMAX],address[ALLMAX];struetNode*next;}SLNode;定义职工信息(typedefstruetDatatyp)typedefstruet{longintborn_time,work_time,tele_num;eharname[ALLMAX],sex,degree[ALLMAX],job[ALLMAX],address[ALLMAX];}DataType;初始化链表(ListInitiate(SLNode**he))voidListlnitiate(SLNode**head)//链表初始化{if((*head=(SLNode*)malloc(sizeof(SLNode)))==NULL)exit(l);动/态分配存储空间(*head)->next=NULL;}2、主函数设计(1)根据详细设计要求,可以得到主函数代码及其对应的程序流程图:在主函数中,实现了友好的界面设计。系统需要输入职工的基本信息:姓名、性别、出生年月、工作年月、学历、职务、住址、电话等。这个系统还利用键盘输入提供的主菜单服务,在主菜单中,有七种操作的调用:新增职工信息:SLNode*ListInsert(SLNode*head,DataTypex)查询职工信息:Listfind(SLNodehead)删除职工信息:ListDelete(SLNode*head)修改职工信息:ListModify(SLNode*head)职工信息排序:Listpaixu(SLNode*head)保存职工信息:put(SLNode*head,FILE*fp)显示职工信息:print(SLNode*head)2)主函数程序流程图如图3所示:图3主函数程序流程图3、查找算法设计在查询算法中,职工管理系统提供了七种查询操作,实现了系统的人性化查询操作。这些查询操作分别为:对姓名进行查询,对性别进行查询,对出生年月进行查询,对工作年月进行查询,对学历进行查询,对职位进行查询,对住址进行查询,对电话进行查询等一些列操作。查找算法中,利用链表的指针的移动扫描整个职工信息表,利用strcmp()函数判断字符串是否匹配。查询算法程序流程图如图4所示:

图4查询算法程序流程图4、排序算法设计在排序算法中,职工管理系统提供了四种查询操作,实现了系统的基本排序操作。这些排序操作分别为:对姓名进行排序,对性别进行排序,对出生年月进行排序,对工作年月进行排序,等一些列操作。排序算法中,利用链表的指针的移动扫描整个职工信息表,利用strcmp()函数判断字符串是否匹配。

排序算法流程图如图5所示:图5排序算法程序流程图第四章源程序代码#include<string>#include<iostream>#include<fstream>#include<iomanip>#include<memory.h>#include<stdio.h>#include<conio.h>#include<stdlib.h>usingnamespacestd;structEmployee{//声明职工的结构作为链表节点//数据域stringm_Code;stringm_Name;unsignedshortintm_Year;stringm_Sex;stringm_Post;stringm_Department;unsignedintm_Wage;//链表节点的指针域---structEmployee*Next;};//个人习惯:取别名typedefstructEmployeeNode;typedefNode*Link;//函数声明LinkCreate(LinkHead);voidRelease(LinkHead);LinkAdd(LinkHead);boolSearch(LinkHead);LinkSearch_Unique(LinkHead);voidDisplay_List(LinkHead);voidDisplay_Node(LinkpNode);LinkModify(LinkHead);LinkDel(LinkHead);voidSave_ByFile(LinkHead,fstream&ofile);LinkSort(LinkHead);//函数实现LinkCreate(LinkHead){//创建一个带头节点的空链表。Head=(Link)newNode;if(!Head){cout<<"分配内存失败!"<<endl;returnNULL;}Head->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;returnHead;}voidRelease(LinkHead){//释放链表。Linkptr;〃声明一个操作用的指针。while(Head!=NULL){ptr=Head;Head=Head->Next;deleteptr;〃释放节点资源。}}LinkAdd(LinkHead){//前插法添加数据。LinkpNew;//声明一个新节点。charagain;stringcode,name,sex,post,department;unsignedshortintyear;unsignedintwage;do{pNew=(Link)newNode;//数据域。cout<<"请输入职工代码:";cin>>code;cout<<endl<<"请输入职工姓名:";cin>>name;cout<<endl<<"请输入职工出生年份:";cin>>year;while(cin.fail()){cout<<"请输入正确的年份格式°"<<endl;cin.clear();fflush(stdin);cin>>year;}cout<<endl<<"请输入职工性别:";cin>>sex;cout<<endl<<"请输入职工职称:";cin>>post;cout<<endl<<"请输入职工部门:";cin>>department;cout<<endl<<"请输入职工工资:";cin>>wage;while(cin.fail()){cout<<"请输入正确的工资数据。"<<endl;cin.clear();fflush(stdin);cin>>wage;}cout<<endl;pNew->m_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)"<<endl;cin>>again;}while(again=='Y'||again=='y');returnHead;}boolSearch(LinkHead){//查询同时满足“姓名”和“部门”的职工信息。Linkptr;stringdepartment;stringname;ptr=Head->Next;cout<<"请输入部门:";cin>>department;cout<<endl<<"请输入姓名:";cin>>name;cout<<endl<<"查询结果"<<endl;cout<<endl<<"职工代码、姓名、出生年份、性别、职称、部门、工资"<<endl;while(ptr){if((ptr->m_Name==name)&&(ptr->m_Department==department)){Display_Node(ptr);〃打印满足条件的节点。returntrue;}ptr二ptr->Next;//查询下一节点。}cout<<"无此职工的信息。"<<endl;returnfalse;}LinkSearch_Unique_Front(LinkHead){//查询满足“职工代码“的职工信息(职工代码必需唯一)。Linkptr;stringcode;ptr=Head;cout<<"请输入职工代码:";cin>>code;cout<<endl<<"查询结果"<<endl;cout<<endl<<"职工代码、姓名、出生年份、性别、职称、部门、工资"<<endl;while(ptr->Next){if(ptr->Next->m_Code==code)〃Display_Node(ptr);〃打印满足条件的节点。returnptr;//注意,是返回的查询至啲节点的直接前趋节点。ptr->Next=ptr->Next->Next;//查询下一节点。}returnptr;}voidDisplay_List(LinkHead){Linkptr;ptr=Head->Next;cout<<"==================所有职工信息=================="<<endl;cout<<endl<<"职工代码、姓名、出生年份、性别、职称、部门、工资"<<endl;while(ptr){Display_Node(ptr);ptr=ptr->Next;}}voidDisplay_Node(LinkpNode){//在标准输出设备上输出。cout<<setw(10)<<left<<pNode->m_Code<<setw(10)<<left<<pNode->m_Name<<setw(10)<<left<<pNode->m_Year<<setw(10)<<left<<pNode->m_Sex<<setw(10)<<left<<pNode->m_Post<<setw(10)<<left<<pNode->m_Department<<setw(10)<<left<<pNode->m_Wage<<endl;//setw(10)表示占10个字符位置。}LinkModify(LinkHead){//修改单一个节点。Linkptr;ptr=Search_Unique_Front(Head);stringcode,name,sex,post,department;unsignedshortintyear;unsignedintwage;if(ptr->Next){cout<<"你现在可以修改此职工的信息了"<<endl;cout<<endl<<"职工代码、姓名、出生年份、性别、职称、部门、工资"<<endl;//数据域。cout<<"请输入职工代码:";cin>>code;cout<<endl<<"请输入职工姓名:";cin>>name;cout<<endl<<"请输入职工出生年份:";cin>>year;while(cin.fail()){cout<<"请输入正确的年份格式°"<<endl;cin.clear();fflush(stdin);cin>>year;}cout<<endl<<"请输入职工性别:";cin>>sex;cout<<endl<<"请输入职工职称:";cin>>post;cout<<endl<<"请输入职工部门:";cin>>department;cout<<endl<<"请输入职工工资:";cin>>wage;while(cin.fail()){cout<<"请输入正确的工资数据。"<<endl;cin.clear();fflush(stdin);cin>>wage;}cout<<endl;ptr->Next->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<<"没找到此职工的记录,无法修改°"<<endl;returnHead;}LinkDel(LinkHead){Linkptr;Linkptr_front;ptr_front=Search_Unique_Front(Head);ptr=ptr_front->Next;if(ptr){ptr_front->Next=ptr->Next;deleteptr;〃删除此节点。}cout<<"没找到此职工的记录,无法删除°"<<endl;returnHead;}voidSave_ByFile(LinkHead,fstream&ofile){LinkpNode;pNode=Head->Next;ofile・clear();〃清除文件结束状态。while(pNode){ofile<<setw(10)<<left<<pNode->m_Code<<setw(10)<<left<<pNode->m_Name<<setw(10)<<left<<pNode->m_Year<<setw(10)<<left<<pNode->m_Sex<<setw(10)<<left<<pNode->m_Post<<setw(10)<<left<<pNode->m_Department<<setw(10)<<left<<pNode->m_Wage<<endl;//setw(10)表示占10个字符位置。pNode=pNode->Next;}cout<<"数据文件保存成功!"<<endl;}LinkSort(LinkHead){//我创建的是带头节点的链表。用直接插入法。if((Head->Next==NULL)||(Head->Next->Next==NULL))〃此步条件判断非常有价值。{cout<<"数据节点数少于2个,不用排序!"<<endl;returnHead;}//第二步;Linkptr;Linkptr_F;Linkptr_N;ptr=Head->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_Wage>ptr_F->Next->m_Wage){ptr->Next=ptr_F->Next;ptr_F->Next=ptr;break;}//ifelse{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<<"从高到低,排序成功!"<<endl;returnHead;}

intmain(){LinkHead=0;Head=Create(Head);fstreamiofile;iofile.open("d:\\iofile.txt",ios_base::in|ios_base::out|ios_base::app);〃文件以三种方式打开。if(!iofile){cout<<"打开文件失败!"<<endl;return-1;}intmenu;while(1){cout<<“*****************************************************“<<endl;cout<<H************欢迎进入职工管理系统**********************<<endl;cout<<"*****************************************************"cout<<“*****************************************************“<<endl;cout<<H************欢迎进入职工管理系统**********************<<endl;cout<<"*****************************************************"<<endl;cout<<endl;cout<<"★☆☆★☆☆★☆☆★☆☆★☆☆★☆☆★☆☆★☆☆☆★"<<endl;cout<<"☆f主菜单J☆"<<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;cout<<endl<<"请选择相应操作菜单项:";cin>>menu;while(cin.fail()){cout<<"请选择正确的菜单选项°"<<endl;cin.clear();fflush(stdin);cin>>menu;}switch(menu){case0:cout<<"成功退出系统!"<<endl;return0;case1:Head=Add(Head);break;case2:Head=Modify(Head);break;case3:Head=Del(Head);break;case4:Search(Head);break;case5:Save_ByFile(Head,iofile);break;case6:Sort(Head);break;case7:Display_List(Head);break;default:cout<<"请选择正确的菜单项进行操作。多谢合作!"<<endl;}}Release(Head);iofile.close();return0;}第五章系统实现测试是使用人工或者自动手段来运行或测试某个系统的过程,其目的在于检验是否满足规定的需求或弄清预期结果与实际结果之间的差别.系统运行结果:(1)进入职工管理系统,如图6所示:************欢迎进入职工営理系统[刘兴斌】“mm)C)C)C)C)C)(RKXRKXRKXRKJ<3<J<J<3<JC)C)C)C)C)O<RRNRRNRRNRXJ<3<J<J<3<)C)C)C)C)CXKX☆一☆食☆☆☆☆1.3-显乎羅修改信息4•信息查询6・请选择相应操作菜单项^■图6主菜单选择界面(2)新增一职工信息并查询全部职工信息,如图7、8所示:"*1:\Del-o.g\Cppleze-卅^^-息£刪保信■■■■1357署文竝工息件示卅^^-息£刪保信■■■■1357署文竝工息件示息诃£-信章柱糸改息资出>信工ii☆F—R☆☆☆知倍蜜菜警’请輸入职工职擁12图7新增职工信息界面TT-]$TT-]$:\Bdug\Cppl.exe请选择相应操作菜单项’?有职工信息===df1585nan12dfsdf讣“““

温馨提示

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

评论

0/150

提交评论