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