数据结构简单的职工管理系统完整版Word文档格式.docx
- 文档编号:5771062
- 上传时间:2023-05-05
- 格式:DOCX
- 页数:30
- 大小:435.91KB
数据结构简单的职工管理系统完整版Word文档格式.docx
《数据结构简单的职工管理系统完整版Word文档格式.docx》由会员分享,可在线阅读,更多相关《数据结构简单的职工管理系统完整版Word文档格式.docx(30页珍藏版)》请在冰点文库上搜索。
对功能要求的实现是解决管理系统的关键问题。
一个管理系统能将其划分为插入、删除、查找、排序等功能。
对不同的功能模块进行代码的编写实现,最后通过一定的方式的进行连接测试和最终的调用,从而完成对各部分的操作。
2、详细要求
1.要求
职工对象包括姓名、性别、出生年月、工作年月、学历、职务、住址、电话等信息。
(1)新增一名职工:
将新增职工对象按姓名以字典方式职工管理文件中。
(2)删除一名职工:
从职工管理文件中删除一名职工对象。
(3)查询:
从职工管理文件中查询符合某些条件的职工。
(4)修改:
检索某个职工对象,对其某些属性进行修改。
(5)排序:
按某种需要对职工对象文件进行排序。
3功能分析
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{
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)根据详细设计要求,可以得到主函数代码及其对应的程序流程图:
在主函数中,实现了友好的界面设计。
系统需要输入职工的基本信息:
姓名、性别、出生年月、工作年月、学历、职务、住址、电话等。
这个系统还利用键盘输入提供的主菜单服务,在主菜单中,有七种操作的调用:
新增职工信息:
查询职工信息:
删除职工信息:
修改职工信息:
职工信息排序:
保存职工信息:
显示职工信息:
(2)主函数程序流程图如图3所示:
图3主函数程序流程图
3、查找算法设计
在查询算法中,职工管理系统提供了七种查询操作,实现了系统的人性化查询操作。
这些查询操作分别为:
对姓名进行查询,对性别进行查询,对出生年月进行查询,对工作年月进行查询,对学历进行查询,对职位进行查询,对住址进行查询,对电话进行查询等一些列操作。
查找算法中,利用链表的指针的移动扫描整个职工信息表,利用strcmp()函数判断字符串是否匹配。
查询算法程序流程图如图4所示:
图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->
p=head;
}
else
{
p->
s->
next=q;
p=q;
q=p->
flag=1;
}
}
排序算法流程图如图5所示:
图5排序算法程序流程图
第四章源程序代码
#include<
string>
iostream>
fstream>
iomanip>
memory.h>
stdio.h>
conio.h>
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="
;
m_Name="
m_Year=0;
m_Sex="
m_Post="
m_Department="
m_Wage=0;
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;
//数据域。
请输入职工代码:
cin>
>
code;
endl<
请输入职工姓名:
name;
请输入职工出生年份:
year;
while(cin.fail())
请输入正确的年份格式。
cin.clear();
fflush(stdin);
请输入职工性别:
sex;
请输入职工职称:
post;
请输入职工部门:
department;
请输入职工工资:
wage;
请输入正确的工资数据。
pNew->
m_Code=code;
m_Name=name;
m_Year=year;
m_Sex=sex;
m_Post=post;
m_Department=department;
m_Wage=wage;
//指针域。
Next=Head->
Next=pNew;
数据添加成功!
是否继续添加?
(Y/N)"
again;
}while(again=='
Y'
||again=='
y'
);
boolSearch(LinkHead)
{//查询同时满足“姓名”和“部门”的职工信息。
stringdepartment;
stringname;
ptr=Head->
请输入部门:
请输入姓名:
----------------查询结果------------------"
职工代码、姓名、出生年份、性别、职称、部门、工资"
while(ptr)
if((ptr->
m_Name==name)&
&
(ptr->
m_Department==department))
Display_Node(ptr);
//打印满足条件的节点。
returntrue;
ptr=ptr->
//查询下一节点。
无此职工的信息。
returnfalse;
LinkSearch_Unique_Front(LinkHead)
{//查询满足“职工代码“的职工信息(职工代码必需唯一)。
stringcode;
while(ptr->
Next)
if(ptr->
Next->
m_Code==code)
//Display_Node(ptr);
returnptr;
//注意,是返回的查询到的节点的直接前趋节点。
ptr->
Next=ptr->
voidDisplay_List(LinkHead)
==================所有职工信息=================="
voidDisplay_Node(LinkpNode)
{//在标准输出设备上输出。
setw(10)<
left<
pNode->
m_Code
m_Name
m_Year
m_Sex
m_Post
m_Department
m_Wage<
//setw(10)表示占10个字符位置。
LinkModify(LinkHead)
{//修改单一个节点。
ptr=Search_Unique_Front(Head);
-------你现在可以修改此职工的信息了-------"
//因ptr是前趋节点,所以要用ptr->
没找到此职工的记录,无法修改。
LinkDel(LinkHead)
Linkptr_front;
ptr_front=Search_Unique_Front(Head);
ptr=ptr_front->
if(ptr)
ptr_front->
//删除此节点。
没找到此职工的记录,无法删除。
ofile)
LinkpNode;
pNode=Head->
ofile.clear();
//清除文件结束状态。
while(pNode)
ofile<
pNode=pNode->
数据文件保存成功!
LinkSort(LinkHead)
{//我创建的是带头节点的链表。
用直接插入法。
if((Head->
Next==NULL)||(Head->
Next==NULL))//此步条件判断非常有价值。
数据节点数少于2个,不用排序!
//----------
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 数据结构 简单 职工 管理 系统 完整版
![提示](https://static.bingdoc.com/images/bang_tan.gif)