数据结构简单的职工管理系统完整版.docx
《数据结构简单的职工管理系统完整版.docx》由会员分享,可在线阅读,更多相关《数据结构简单的职工管理系统完整版.docx(62页珍藏版)》请在冰点文库上搜索。
数据结构简单的职工管理系统完整版
湖南涉外经济学院
数据结构课程设计报告
题目:
简单的职工管理系统
院系名称:
计算机学院
专业名称:
计算机科学与技术
班级:
计科201001班
学生姓名:
刘兴斌
学号:
30
指导教师:
张建明
设计起止时间:
2011年11月20日~2011年12月30日
完成于2011年12月29日星期四
i
第一章序1
第二章系统总体功能的设计和分析
......................................................2
1、问题描述.........................................................................................
2
2、详细要求...........................................................................................
2
3、功能分析.........................................................................................
3
1
、具体要求
错误!
未定义书签。
........................................................
2、系统流程分析..................................................................................
3
3、系统功能结构....................................................................................
3
4、模块函数构造.................................................................................
4
第三章详细设计分析..............................................................................
5
1、抽象数据类型定义...........................................................................
5
2、主函数设计.......................................................................................
5
3、查找算法设计...................................................................................
6
4、排序算法设计...................................................................................
8
第四章源程序代码.......................................................................
11
第五章系统实现⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯29
第六章课程设计总结31
i
第一章序
电子信息时代由如洪水一样的凶猛,能在现实社会应用软件给我
们的生活和工作带来方便和实用性就是软件存在的最大的价值。
数据
结构所能解决的就是这些复杂的问题简单化。
《数据结构》是计算机专业学生学习的一门基础课程,但十分的
重要。
本课程系统地介绍了软件设计中常用的数据结构以及相应的存
储结构和实现算法,介绍了常用的多种查找和排序技术。
本课程将为
整个专业的学习以及软件设计水平的提高打下良好的基础。
为了学好
《数据结构》,必须掌握编写一些在特定数据结构上的算法,并通过
上机调试,更好地掌握各种数据结构及其特点。
经过本次课程设计,我们对于数据结构基本理论和存储结构及算法设计将有更加深入的理解,并提高我们在实际设计操作中系统分析、结构确定、算法选择、数学建模和信息加工的能力,提高我们的C/C++语言程序设计能力,以及培养学我们编写程序设计文档的能
力,为将来在实战工作中打下良好的基础。
在经济发达的今天对于职工简单的管理都是有很大程度上的要
求,一个工司能否较好较快的运行,与职工管理的好坏分不开关系,
通过该系统,将一系列的问题系统化,能够更好的管理职工。
简化管
理,使管理更方便,准确性、直观性和实用性更强。
本着以锻炼自己
的能力为目的,通过设计与制作进一步学习和掌握简单的职工管理系
统的原理和使用方法。
虽然在一定程度上较为简单,但也能体现在出
在人员管理上的方便快捷,也体现一个领导的管理水平是不是充满艺
术。
1
第二章系统总体功能的设计和分析
1、问题描述
根据课程设计题目的要求,由于职工信息是一定要存放在指定的文件中,所以应提供文件的输入、输出等操作;在程序中需要浏览职工的信息,应提供显示、查找、删除、插入、排序等一系列的操作;另外还应提供键盘式选择菜单实现功能选择
对功能要求的实现是解决管理系统的关键问题。
一个管理系统能将其划分为插入、删除、查找、排序等功能。
对不同的功能模块进行代码的编写实现,最后通过一定的方式的进行连接测试和最终的调用,从而完成对各部分的操作。
2、详细要求
1.要求
职工对象包括姓名、性别、出生年月、工作年月、学历、职务、住址、电话等信息。
(1)新增一名职工:
将新增职工对象按姓名以字典方式职工管理文件中。
(2)删除一名职工:
从职工管理文件中删除一名职工对象。
(3)查询:
从职工管理文件中查询符合某些条件的职工。
(4)修改:
检索某个职工对象,对其某些属性进行修改。
(5)排序:
按某种需要对职工对象文件进行排序。
2
3功能分析
1、实现提示
职工对象数不必很多,便于一次读入内存,所有操作不经过内外存交换。
(1)由键盘输入职工对象,以文件方式保存。
程序执行时先将文件读入内存。
(2)对职工对象中的"姓名"按字典顺序进行排序。
(3)对排序后的职工对象进行增、删、查询、修改、排序等操作。
2、系统流程分析
(1)输入功能的实现:
要想实现职工管理系统的输入,必须要建立一个职
工信息系统的抽象数据类型,其中职工信息以链表的存储方式实现。
由键盘输入
职工对象,以文件方式保存。
程序执行时先将文件读入内存。
(2)系统处理功能的实现:
系统管理员根据公司的人员流动情况,在提示
信息的提示下,选择相应的服务进行操作。
如对职工对象中的"姓名"按字典顺序
进行排序;对排序后的职工对象进行增、删、查询、修改、排序等操作。
(3)输出的实现:
根据选择的操作,输出与之对应的信息。
综上可以绘制出职工管理功能的系统流程图,如图1所示
总控模块
输入模块
系统处理
输出模块
模块
测试模块
图1系统流程图
3、系统功能结构
根据职工管理系统问题的分析和设计要求,可以得到该职工管理系统可以分
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)
显示职工信息
4
第三章详细设计分析
1、抽象数据类型定义
(1)定义表结点(typedefstructNode)
typedefstructNode{
longintborn_time,work_time,tele_num;
char
sex,name[ALLMAX],degree[ALLMAX],job[ALLMAX],address[ALLMAX];structNode*next;
}SLNode;
(2)定义职工信息(typedefstructDatatype)
typedefstruct{
longintborn_time,work_time,tele_num;
char
name[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)
5
修改职工信息:
ListModify(SLNode*head)
职工信息排序:
Listpaixu(SLNode*head)
保存职工信息:
put(SLNode*head,FILE*fp)
显示职工信息:
print(SLNode*head)
(2)主函数程序流程图如图3所示:
开始
输入职工人数
和对应的信息
新增职
显示主菜单提
选3
查询职
工信息
示
工信息
选1
结束系统
选0
选择操作
选5
职工信
息排序
删除职
选除
修改职
上述
选
工信息
选
数字
工信息
4
2
之外
的操
作
图3
主函数程序流程图
3、查找算法设计
在查询算法中,职工管理系统提供了七种查询操作,实现了系统的人性化查
询操作。
这些查询操作分别为:
对姓名进行查询,对性别进行查询,对出生年月进行查询,对工作年月进行
查询,对学历进行查询,对职位进行查询,对住址进行查询,对电话进行查询等
一些列操作。
查找算法中,利用链表的指针的移动扫描整个职工信息表,利用
strcmp()函数判断字符串是否匹配。
6
查询算法程序流程图如图4所示:
显示查询
主菜单
是无职工
信息
链表是否为空
对姓名
查询
退出查
询
对学历
查询
对工作年
月查询
选1
选6
对住址
否
查询
选0
选2
对年龄
查询
选择执行的
操作
选3
对职务
选5
查询
对出生年
选4
选7
月查询
选择除上述数字之外的操作
图4查询算法程序流程图
4、排序算法设计
在排序算法中,职工管理系统提供了四种查询操作,实现了系统的基本排序
操作。
这些排序操作分别为:
对姓名进行排序,对性别进行排序,对出生年月进行排序,对工作年月进行
排序,等一些列操作。
排序算法中,利用链表的指针的移动扫描整个职工信息表,
利用strcmp()函数判断字符串是否匹配。
7
排序的核心代码:
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排序算法程序流程图
8
第四章源程序代码
#include
#include
#include
#include
#include
#include
#include
#include
usingnamespacestd;
structEmployee
{//声明职工的结构作为链表节点。
//-----数据域-----
stringm_Code;
stringm_Name;
unsignedshortintm_Year;
stringm_Sex;
stringm_Post;
stringm_Department;
9
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);
//-------函数实现--------------------------
10
LinkCreate(LinkHead)
{//创建一个带头节点的空链表。
Head=(Link)newNode;
if(!
Head)
{
cout<<"分配内存失败!
"<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)
{//释放链表。
11
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;
12
cout<";cin>>name;
cout<";
cin>>year;
while(cin.fail())
{
cout<<"请输入正确的年份格式。
"<cin.clear();
fflush(stdin);
cin>>year;
}
cout<";cin>>sex;
cout<";cin>>post;
cout<";cin>>department;
cout<";
cin>>wage;
while(cin.fail())
{
cout<<"请输入正确的工资数据。
"<
13
cin.clear();
fflush(stdin);
cin>>wage;
}
cout<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)"<cin>>again;
}while(again=='Y'||again=='y');
returnHead;
}
boolSearch(LinkHead)
14
{//查询同时满足“姓名”和“部门”的职工信息。
Linkptr;
stringdepartment;
stringname;
ptr=Head->Next;
cout<<"请输入部门:
";
cin>>department;
cout<";
cin>>name;
cout<------------------"<
cout<while(ptr)
{
if((ptr->m_Name==name)&&(ptr->m_Department==depa
rtment))
{
Display_Node(ptr);//打印满足条件的节点。
returntrue;
}
ptr=ptr->Next;//查询下一节点。
15
}
cout<<"无此职工的信息。
"<returnfalse;
}
LinkSearch_Unique_Front(LinkHead)
{//查询满足“职工代码“的职工信息(职工代码必需唯一)。
Linkptr;
stringcode;
ptr=Head;
cout<<"请输入职工代码: