数据结构简单的职工管理系统完整版.docx
- 文档编号:9961569
- 上传时间:2023-02-07
- 格式:DOCX
- 页数:30
- 大小:435.91KB
数据结构简单的职工管理系统完整版.docx
《数据结构简单的职工管理系统完整版.docx》由会员分享,可在线阅读,更多相关《数据结构简单的职工管理系统完整版.docx(30页珍藏版)》请在冰豆网上搜索。
数据结构简单的职工管理系统完整版
湖南涉外经济学院
数据结构课程设计报告
题目:
简单的职工管理系统
院系名称:
计算机学院
专业名称:
计算机科学与技术
班级:
计科201001班
学生姓名:
刘兴斌
学号:
30
指导教师:
张建明
设计起止时间:
2011年11月20日~2011年12月30日
完成于2011年12月29日星期四
第四章源程序代码11
第一章序
电子信息时代由如洪水一样的凶猛,能在现实社会应用软件给我们的生活和工作带来方便和实用性就是软件存在的最大的价值。
数据结构所能解决的就是这些复杂的问题简单化。
《数据结构》是计算机专业学生学习的一门基础课程,但十分的重要。
本课程系统地介绍了软件设计中常用的数据结构以及相应的存储结构和实现算法,介绍了常用的多种查找和排序技术。
本课程将为整个专业的学习以及软件设计水平的提高打下良好的基础。
为了学好《数据结构》,必须掌握编写一些在特定数据结构上的算法,并通过上机调试,更好地掌握各种数据结构及其特点。
经过本次课程设计,我们对于数据结构基本理论和存储结构及算法设计将有更加深入的理解,并提高我们在实际设计操作中系统分析、结构确定、算法选择、数学建模和信息加工的能力,提高我们的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函数功能表
模块
函数或数据结构
功能
链表数据类型
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主函数程序流程图
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->next;
p=head;
}
else
{
p->next=q->next;
q->next=p;
s->next=q;
p=q;
q=p->next;
}
flag=1;
}
}
排序算法流程图如图5所示:
图5排序算法程序流程图
第四章源程序代码
#include
#include
#include
#include
#include
#include
#include
#include
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<<"分配内存失败!
"< 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< "; 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<<"请输入正确的工资数据。 "< 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) {//查询同时满足“姓名”和“部门”的职工信息。 Linkptr; stringdepartment; stringname; ptr=Head->Next; cout<<"请输入部门: "; cin>>department; cout< "; cin>>name; cout< cout< while(ptr) { if((ptr->m_Name==name)&&(ptr->m_Department==department)) { Display_Node(ptr);//打印满足条件的节点。 returntrue; } ptr=ptr->Next;//查询下一节点。 } cout<<"无此职工的信息。 "< returnfalse; } LinkSearch_Unique_Front(LinkHead) {//查询满足“职工代码“的职工信息(职工代码必需唯一)。 Linkptr; stringcode; ptr=Head; cout<<"请输入职工代码: "; cin>>code; cout< cout< 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<<"==================所有职工信息=================="< cout< while(ptr) { Display_Node(ptr); ptr=ptr->Next; } } voidDisplay_Node(LinkpNode) {//在标准输出设备上输出。 cout< < < < < < < } LinkModify(LinkHead) {//修改单一个节点。 Linkptr; ptr=Search_Unique_Front(Head); stringcode,name,sex,post,department; unsignedshortintyear; unsignedintwage; if(ptr->Next) { cout<<"-------你现在可以修改此职工的信息了-------"< cout< //数据域。 cout<<"请输入职工代码: "; cin>>code; 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<<"请输入正确的工资数据。 "< cin.clear(); fflush(stdin); cin>>wage; } cout< 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<<"没找到此职工的记录,无法修改。 "< 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<<"没找到此职工的记录,无法删除。 "< returnHead; } voidSave_ByFile(LinkHead,fstream&ofile) { LinkpNode; pNode=Head->Next; ofile.clear();//清除文件结束状态。 while(pNode) { ofile< < < < < < < pNode=pNode->Next; } cout<<"数据文件保存成功! "< } LinkSort(LinkHead) {//我创建的是带头节点的链表。 用直接插入法。 if((Head->Next==NULL)||(Head->Next->Next==NULL))//此步条件判断非常有价值。 { cout<<"数据节点数少于2个,不用排序! "< returnHead; } //----------
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 数据结构 简单 职工 管理 系统 完整版