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

下载本文档

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

文档简介

下载可编辑湖南涉外经济学院数据结构课程设计报告题目: 简单的职工管理系统院系名称:计算机学院专业名称:计算机科学与技术班级:计科201001班学生姓名:刘兴斌学号:30指导教师:张建明设计起止时间:2011年11月20日~2011年12月30日.专业.整理.下载可编辑完成于2011年12月29日 星期四目 录第一章 序 1第二章 系统总体功能的设计和分析 31、 问题描述 32、详细要求 33、功能分析 41、具体要求 错误!未定义书签。2、系统流程分析 43、系统功能结构 54、 模块函数构造 6第三章 详细设计分析 71、抽象数据类型定义 72、主函数设计 8.专业.整理.下载可编辑3、查找算法设计 94、排序算法设计 8第四章 源程序代码 11第五章 系统实现⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯29第六章 课程设计总结 31.专业.整理.下载可编辑第一章 序电子信息时代由如洪水一样的凶猛 ,能在现实社会应用软件给我们的生活和工作带来方便和实用性就是软件存在的最大的价值 。数据结构所能解决的就是这些复杂的问题简单化 。《数据结构》是计算机专业学生学习的一门基础课程 ,但十分的重要。本课程系统地介绍了软件设计中常用的数据结构以及相应的存储结构和实现算法 ,介绍了常用的多种查找和排序技术 。本课程将为整个专业的学习以及软件设计水平的提高打下良好的基础 。为了学好《数据结构》,必须掌握编写一些在特定数据结构上的算法 ,并通过上机调试,更好地掌握各种数据结构及其特点 。经过本次课程设计 ,我们对于数据结构基本理论和存储结构及算法设计将有更加深入的理解 ,并提高我们在实际设计操作中系统分析、结构确定、算法选择、数学建模和信息加工的能力 ,提高我们的C/C++语言程序设计能力,以及培养学我们编写程序设计文档的能力,为将来在实战工作中打下良好的基础 。在经济发达的今天对于职工简单的管理都是有很大程度上的要求,一个工司能否较好较快的运行 ,与职工管理的好坏分不开关系,通过该系统,将一系列的问题系统化 ,能够更好的管理职工 。简化管理,使管理更方便,准确性、直观性和实用性更强 。本着以锻炼自己的能力为目的 ,通过设计与制作进一步学习和掌握简单的职工管理系统的原理和使用方法 。虽然在一定程度上较为简单 ,但也能体现在出在人员管理上的方便快捷 ,也体现一个领导的管理水平是不是充满艺术。.专业.整理.下载可编辑.专业.整理.下载可编辑第二章 系统总体功能的设计和分析1、问题描述根据课程设计题目的要求 ,由于职工信息是一定要存放在指定的文件中 ,所以应提供文件的输入 、输出等操作 ;在程序中需要浏览职工的信息 ,应提供显示 、查找、删除、插入、排序等一系列的操作;另外还应提供键盘式选择菜单实现功能选择对功能要求的实现是解决管理系统的关键问题 。一个管理系统能将其划分为插入 、删除、查找、排序等功能 。对不同的功能模块进行代码的编写实现 ,最后通过一定的方式的进行连接测试和最终的调用 ,从而完成对各部分的操作。、详细要求1.要求职工对象包括姓名、性别、出生年月、工作年月、学历、职务、住址、电话等信息。1)新增一名职工:将新增职工对象按姓名以字典方式职工管理文件中。2)删除一名职工:从职工管理文件中删除一名职工对象。3)查询:从职工管理文件中查询符合某些条件的职工。4)修改:检索某个职工对象,对其某些属性进行修改。5)排序:按某种需要对职工对象文件进行排序。.专业.整理.下载可编辑功能分析1、实现提示职工对象数不必很多,便于一次读入内存,所有操作不经过内外存交换 。1)由键盘输入职工对象,以文件方式保存。程序执行时先将文件读入内存。2)对职工对象中的"姓名"按字典顺序进行排序。3)对排序后的职工对象进行增、删、查询、修改、排序等操作。2、系统流程分析(1)输入功能的实现:要想实现职工管理系统的输入,必须要建立一个职工信息系统的抽象数据类型,其中职工信息以链表的存储方式实现。由键盘输入职工对象,以文件方式保存。程序执行时先将文件读入内存。(2)系统处理功能的实现:系统管理员根据公司的人员流动情况,在提示信息的提示下,选择相应的服务进行操作。如对职工对象中的"姓名"按字典顺序进行排序;对排序后的职工对象进行增、删、查询、修改、排序等操作。(3)输出的实现:根据选择的操作,输出与之对应的信息。综上可以绘制出职工管理功能的系统流程图 ,如图1所示.专业.整理.下载可编辑总控模块系统处理输入模块 输出模块模块测试模块图1 系统流程图3、系统功能结构根据职工管理系统问题的分析和设计要求 ,可以得到该职工管理系统可以分为五个模块:职工信息添加模块、职工信息修改模块、职工信息删除模块、职工信息查询模块、职工信息排序模块。其系统功能结构如图 2所示。职工管理系统查新删修排询增除改序职职职职职工工工工工信信信信信息息息息息对对对对对出对工对对对对工出对姓生学作职住电性作生姓名年历年务址话别年年名进月进月进进进进月月进行进行进行行行行进进行查行查行查查查排行行排询查询查询询询序排排序询询序序图2 系统功能结构图.专业.整理.下载可编辑4、 模块函数构造根据系统功能结构图的描述 ,可以构造出该系统的抽象数据类型和相对应的函数,其方法名和功能如表 1所示。表1函数功能表模块函数或数据结构功能typedefstructNode定义链表结点链表数据类型typedefstructDatatype定义职工信息ListInitiate(SLNode*head)初始化链表SLNode*ListInsert(SLNode*head,DataTypex)插入职工信息ListDelete(SLNode*head)删除职工信息ListModify(SLNode*head)修改职工信息系统处理模块put(SLNode*head,FILE*fp)保存职工信息Listfind(SLNodehead)查询职工信息Listpaixu(SLNode*head)职工信息排序输出模块print(SLNode*head)显示职工信息.专业.整理.下载可编辑第三章 详细设计分析1、 抽象数据类型定义(1)定义表结点(typedefstructNode )typedefstructNode{longintborn_time,work_time,tele_num;charsex,name[ALLMAX],degree[ALLMAX],job[ALLMAX],address[ALLMAX];structNode*next;}SLNode;(2)定义职工信息(typedefstructDatatype )typedefstruct{longintborn_time,work_time,tele_num;charname[ALLMAX],sex,degree[ALLMAX],job[ALLMAX],address[ALLMAX];}DataType;(3)初始化链表(ListInitiate(SLNode**head) )voidListInitiate(SLNode**head)//--------------------------------- 链表初始化{if((*head=(SLNode *)malloc(sizeof(SLNode)))==NULL) exit(1);//动态分配存储空间(*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查询职工信息示工信息选1结束系统选0选择操作选5职工信息排序删除职选除修改职上述选工信息选数字工信息42之外的操作.专业.整理.下载可编辑图3 主函数程序流程图3、 查找算法设计在查询算法中,职工管理系统提供了七种查询操作,实现了系统的人性化查询操作。这些查询操作分别为:对姓名进行查询,对性别进行查询,对出生年月进行查询,对工作年月进行查询,对学历进行查询,对职位进行查询,对住址进行查询,对电话进行查询等一些列操作。查找算法中,利用链表的指针的移动扫描整个职工信息表,利用strcmp()函数判断字符串是否匹配。查询算法程序流程图如图 4所示:.专业.整理.对姓名查询退出查询对学历查询对工作年月查询

下载可编辑显示查询主菜单是无职工信息链表是否为空选1选6对住址查询否选0选2对年龄查询选择执行的操作选3对职务选5查询对出生年选4选7月查询选择除上述数字之外的操作图4 查询算法程序流程图4、 排序算法设计在排序算法中,职工管理系统提供了四种查询操作,实现了系统的基本排序操作。这些排序操作分别为:对姓名进行排序,对性别进行排序,对出生年月进行排序,对工作年月进行排序,等一些列操作。排序算法中,利用链表的指针的移动扫描整个职工信息表,利用strcmp()函数判断字符串是否匹配。.专业.整理.下载可编辑排序的核心代码:for(q=head->next,p=head,s=p;q;s=p,p=q,q=q->next){if(p->born_time>q->born_time)// 对出生年月进行排序{if(head==p){head->next=q->next;head=q;q->next=p;q=head->next;p=head;}else{p->next=q->next;q->next=p;s->next=q;p=q;q=p->next;}flag=1;.专业.整理.下载可编辑}}排序算法流程图如图 5所示:显示排序菜单是无职工链表是否为信息空退出排选0否对工作日选3序系统期排序选择操作选2对出生日期排序对性别选1排序选除上述操作的任意操作图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<<"************ 欢迎进入职工管理系统 **********************"<<endl;cout<<"*****************************************************"<<endl;cout<<endl;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;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);brea

温馨提示

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

评论

0/150

提交评论