2员工管理系统.docx
《2员工管理系统.docx》由会员分享,可在线阅读,更多相关《2员工管理系统.docx(40页珍藏版)》请在冰豆网上搜索。
![2员工管理系统.docx](https://file1.bdocx.com/fileroot1/2023-2/3/20eab227-9ff9-4b08-9912-928435459160/20eab227-9ff9-4b08-9912-9284354591601.gif)
2员工管理系统
课程设计(论文)任务书
信息学院 学 院 16通信卓越专 业 1 班
一、课程设计(论文)题目 员工管理系统
二、课程设计(论文)工作自22017年06月19日起至2017年06月25日
三、课程设计(论文)地点:
信息机房205
四、课程设计(论文)内容要求:
1.本课程设计的目的
(1)熟练掌握C语言的基本知识与技能;
(2)掌握线性表的链式存储结构;
(3)掌握线性链表的创建算法;
(4)熟悉掌握多线性链表的增加、删除算法;
(5)培养分析、解决问题的能力;提高学生的科技论文写作能力。
2.课程设计的任务及要求
每个员工的信息包括:
编号、姓名、性别、出生年月、学历、职务、电话、住址等。
系统能够完成员工信息的查询、更新、插入、删除、排序等功能。
1)基本要求:
(1)排序:
按不同关键字,对所有员工的信息进行排序。
(2)查询:
按特定条件查找员工。
(3)更新:
按编号对某个员工的某项信息进行修改。
(4)插入:
加入新员工的信息。
(5)删除:
按编号删除已离职的员工的信息。
2)创新要求:
提高算法效率,降低时间复杂度与空间复杂度
3)课程设计论文编写要求
(1)要按照课程设计模板的规格书写课程设计论文
(2)论文包括目录、正文、心得体会、参考文献等
(3)课程设计论文用A4纸统一打印,装订按学校的统一要求完成
4)答辩与评分标准:
(1)完成原理分析:
20分;
(2)完成设计过程:
40分;
(3)完成调试:
20分;
(4)回答问题:
20分。
5)参考文献:
(1)严蔚敏,吴伟民、数据结构、北京:
清华大学出版社,2012、
(2)严蔚敏、吴伟民、米宁、数据结构题集、北京:
清华大学出版社,2009、
(3)谭浩强、C程序设计(第4版)北京:
清华大学出版社,2013、
(4)何钦铭、冯雁、陈越、数据结构课程设计、杭州:
浙江大学出版社,2013
6)课程设计进度安排
内容天数 地点
构思及收集资料2 图书馆
编程设计与调试5 实验室
撰写论文3 图书馆、实验室
学生签名:
2017年06月19日
课程设计(论文)评审意见
(1)完成原理分析(20分):
优( )、良( )、中( )、一般( )、差( );
(2)设计分析 (20分):
优( )、良( )、中( )、一般( )、差( );
(3)完成调试 (20分):
优( )、良( )、中( )、一般( )、差( );
(4)翻译能力 (20分):
优( )、良( )、中( )、一般( )、差( );
(5)回答问题 (20分):
优( )、良( )、中( )、一般( )、差( );
(6)格式规范性及考勤就是否降等级:
就是( )、否( )
评阅人:
职称:
副教授
2017年06月25日
目 录
一、问题描述
(描述要求编程解决的问题)
本次课程设计所制作的员工管理系统,选择用C++语言、利用链表、函数等知识对员工的信息、数据进行收集管理,具有手工管理所无法比拟的优点,例如:
检索迅速、查找方便、可靠性高、存储量大、成本低、充足的信息、快捷的查询手段等优点。
这些优点能够极大地提高员工管理的效率,也就是企业的科学化、正规化管理与与世界接轨的重要条件。
本次课程设计的就是一个基于员工数据信息的数据管理系统,通过这个员工管理系统,对员工的数据信息进行管理,企业的管理员就可以按照菜单选择相应的操作,快捷高效地对员工信息执行查询、更新、插入、删除、排序等基本功能。
本次课程设计建立的一个“员工管理系统”,如图1所示,该员工管理系统需要我们利用编程知识解决以下几点问题:
(1)该员工管理系统可以编写存放一定量的员工基本信息,存放的员工的人数应该在100人以内,每个员工的信息应该包括:
员工编号、员工姓名、员工性别、员工出生年月、员工学历、员工职务、员工电话、员工家庭住址、员工的工资等。
(2)该员工管理系统在保证能满足录入职工号不出现重复的情况下,录入的职工号信息可以按照要求以文件形式保存。
(3)该员工管理系统就是建立职工信息管理的文件的情况下,并且可以实现对其按照不同关键字,如出生年月、员工的编号、员工的工资、员工的电话号码等对所有员工的信息进行从大到小的排序。
(4)该员工管理系统还应该可以按照特定条件查找员工、按编号对某个员工的某项信息进行修改、加入新员工的信息、按编号删除已经离职的员工的信息,在满足这些基本功能的情况下,本程序尽可能地对其进行简化算法并提高算法效率,降低时间复杂度与空间复杂度。
图1:
员工管理系统系统功能结构图
二、内容简介
2、1基本要求:
(给出程序要达到的具体的要求。
)
该员工管理系统能够管理员工的编号、姓名、性别、出生年月、学历、职务、电话号码、住址、工资等这些基本信息,除此之外,系统还可以实现员工信息的查询、更新、插入、删除、排序等功能,该功能的具体要求如下所示。
(1)排序:
按不同关键字,如出生年月排序、员工工资排序、电话号码排序、员工编码这些关键字对所有员工的信息进行排序。
(2)查询:
从员工管理文件中查询符合某些条件的员工,可以通过关键字查询的信息有:
员工部门查询、出生年月查询、员工学历查询、员工职务查询、员工住址查询、电话号码查询、员工编码查询、员工性别查询。
(3)修改:
先按编号检索某个需要修改信息的员工对象,对其某些属性进行修改,这些属性包括:
员工的编号、姓名、性别、出生年月、学历、职务、电话号码、住址、工资等。
(4)插入:
新增一名员工,将新增员工信息加入员工管理文件当中。
(5)删除:
按编号删除已离职的员工的信息。
2、2、算法思想:
(描述解决相应问题算法的设计思想。
)
(1)排序算法
在排序算法中,员工管理系统提供了四种排序操作,实现了系统的基本排序操作。
这些排序操作分别为:
对员工出生年月进行排序,对员工电话号码进行排序,对员工工资进行排序,对员工编号进行排序。
在排序算法中,利用链表的指针的移动遍历整个职工信息表,利用if语句判断链表上两两之间排序数据的大小,再从大到小的排序。
(2)删除算法
在删除算法中,创新点事将删除算法拆分为查找要删除职工信息所在的节点位置为一个算法,删除节点为另一个算法,这样做不仅使算法更为简单清晰,还将一个函数可以被删除函数、修改函数两个函数调用,提高了算法的效率。
(3)链式存储算法
因为员工的编码就是不可重复的,所以锁定信息时,只需要从职工的编码确定职工的节点,节省了算法的时间复杂度与空间复杂度。
(4)查询算法:
在查询算法中,职工管理系统提供了其中多种查询操作,实现了系统的人性化查询操作,这些操作分别为:
对姓名进行查询、对性别进行查询、对出生年月进行查询、对工作年月进行查询、对学历进行查询、对职位进行查询、对住址进行查询、对电话进行查询等一系列操作。
在查找算法中,利用链表的指针的移动扫描整个员工信息表,利用if语句判断字符串就是否匹配,将匹配的员工信息全部输出,如图2所示。
图2:
查询算法程序流程
(5)排序算法
在排序算法中,员工管理系统提供了四种查询操作,实现了系统的基本排序操作,这些排序操作分别为:
对姓名进行排序,对性别进行排序,对出生年月进行排序,对工作年月进行排序。
排序算法中,利用链表的指针的移动扫描整个员工信息表,将需要比较的两个数据拆分成一个算法,其余数据为另一个算法,利用if语句判断同一链表相邻数据的大小,并在链表中从头结点开始,从大到小排列,如图3所示。
图3:
排序算法程序流程
2、3、模块划分:
(描述所设计程序的各个模块(即函数)功能。
)
根据员工管理系统问题的分析与设计需求,可以得到该员工管理系统可以分为五个模块分别为菜单选择模块、信息输入模块、信息游览模块、信息修改模块、信息删除模块。
其系统功能结构如下图所示
(1)菜单选择:
用于完成接受管理人员的命令,就是职工信息管理的入口,用户所进行的各种操作均需要在此模块中进行选择,并且进而调用其她模块,从而实现相应的功能。
(2)信息输入模块:
完成职工信息的输入功能,输入职工的信息,包括姓名、出生年月、职工号、性别、职务、工资、地址、电话、工资等。
(3)信息游览模块:
完成一件录入的员工信息的查询,查询方式有按编号查询、按姓名查按学历查询、按员工职务查询、按员工部门进行查询、按出生年月进行查询、按员工住址进行查询、按员工电话号码、按员工性别进行查询等八种查询方式。
(4)信息修改模块:
查询要修改员工数据所对应的节点,完成员工信息的修改功能。
(5)信息删除模块:
查询要删除员工数据所对应的节点,完成对员工信息的删除功能。
2、4、数据结构:
(给出所使用的基本抽象数据类型,所定义的具体问题的数据类型,以及新定义的抽象数据类型。
)
根据系统功能结构图的描述,可以构造出该系统的抽象数据类型与相对应的函数,其方法名与功能如下表1所示
模块
函数或数据结构
功能
链表数据类型
Typedefstructnode
定义链表节点
structEmployee
定义职工信息
LinkCreate(LinkHead)
初始化链表
系统处理模块
LinkAdd(LinkHead)
插入职工信息
LinkDel(LinkHead)
删除职工信息
LinkModify(LinkHead)
修改职工信息
VoidSave_ByHead,fstream&ofile)
保存职工信息
boolSearch(LinkHead)
LinkSearch_Unique_Front(LinkHead)
查询职工信息
LinkSort(LinkHead)
职工信息排序
输出模块
voidDisplay_List(LinkHead)
显示职工信息
表1:
系统功能结构表
2、5、源程序:
(给出所有源程序清单,要求程序有充分的注释语句,至少要注释每个函数参数的含义与函数返回值的含义。
)
/*员工管理系统*/
/*头文件*/
#include
#include//字符串头文件
#include//写入、读出操作文件的头文件
#include/*控制cin、cout之类的一些操纵运算子比如setfill,setw,setbase,setprecision等I/O流控制头文件*/
#include//将文件中的函数声明放到工程中头文件
#include/*调用getch()cprintf()cputs()kbhit()之类的函数的头文件*/
#include//malloc、free、exit等常用函数的头文件
usingnamespacestd;
structEmployee
//定义结构体类型Employee,声明职工的结构作为链表节点。
{
stringm_Code;//定义字符串m_Code为职工代码
stringm_Name;//定义字符串m_Name为职工姓名
stringm_Sex;//定义字符串m_Sex为职工性别
stringm_Post;//定义字符串m_Post为职工职称
stringm_Degree;//定义字符串m_Degree为职工的学历
stringm_Home;//定义字符串m_Home为职工住址
stringm_Department;//定义字符串m_Department为职工部门
unsignedintm_Wage;//定义无符号整型m_Wage为职工工资
unsignedshortintm_Year;//定义无符号短整型m_Year为职工出生年份
unsignedlongintm_Tel;//定义无符号长整型m_Tel为职工的电话号码
structEmployee*Next;//定义链表节点的指针*Next
};
//取别名
typedefstructEmployeeNode;//Node类型等同于structEmployee
typedefNode*Link;//定义typedefEmployee*为一种新类型,即指针类型
//函数声明
LinkCreate(LinkHead);//创建带有头结点的链表
voidRelease(LinkHead);//释放带有头结点的链表
LinkAdd(LinkHead);//添加员工信息到链表里
boolSearch(LinkHead);//查询满足姓名与部门条件的员工信息
LinkSearch_Unique(LinkHead);/*查询满足“员工代码“的职工信息(职工代码必需唯一)*/
voidDisplay_List(LinkHead);//打印职工信息
voidDisplay_Node(LinkpNode);//在标准输出设备上输出。
LinkModify(LinkHead);//修改员工信息
LinkDel(LinkHead);//删除员工信息
voidSave_ByHead,fstream&o保存员工信息
LinkSort(LinkHead);//员工信息排序
//函数实现
LinkCreate(LinkHead)
//创建一个带头节点的空链表。
{
Head=(Link)newNode;//每次动态分布给Node一个内存大小
if(!
Head)
{
cout<<"分配内存失败!
"<returnNULL;
}
//初始化头节点Head
Head->m_Code="";
Head->m_Name="";
Head->m_Year=0;
Head->m_Sex="";
Head->m_Post="";
Head->m_Department="";
Head->m_Wage=0;
Head->m_Home="";
Head->m_Degree="";
Head->m_Tel=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,home,degree;
unsignedshortintyear;
unsignedintwage;
unsignedlonginttel;
do
{
pNew=(Link)newNode;
cout<<"请输入职工代码:
";
cin>>code;
cout<<"请输入职工姓名:
";
cin>>name;
cout<<"请输入职工出生年份:
";
cin>>year;
cout<<"请输入职工性别:
";
cin>>sex;
cout<<"请输入职工职称:
";
cin>>post;
cout<<"请输入职工部门:
";
cin>>department;
cout<<"请输入职工工资:
";
cin>>wage;
cout<<"请输入职工学历:
";
cin>>degree;
cout<<"请输入职工住址:
";
cin>>home;
cout<<"请输入职工电话号码:
";
cin>>tel;
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->m_Degree=degree;
pNew->m_Home=home;
pNew->m_Tel=tel;
//指针域。
pNew->Next=Head->Next;
Head->Next=pNew;
cout<<"数据添加成功!
就是否继续添加?
(Y/N)"<cin>>again;
}while(again=='Y'||again=='y');//大小写均能运行
returnHead;
}
boolSearch(LinkHead)
//查询职工信息。
{
Linkptr;
stringdepartment,name,home,code,sex,degree;
inti,year,tel,j=0;
ptr=Head->Next;
cout<<"*******************************************************************"<cout<<"*=======================员工信息查询系统==========================*"<cout<<"*=================================================================*"<cout<<"**1、员工部门查询2、出生年月查询3、员工学历查询4、员工职务查询**"<cout<<"**5、员工住址查询6、电话号码查询7、员工编码查询8、员工性别查询**"<cout<<"*******************************************************************"<cout<<"请选择相应操作菜单项:
"<while
(1)
{
cout<<"根据菜单栏,输入您的选择:
";
cin>>i;
if(i==1)//对部门进行查询
{
cout<<"请输入部门:
";
cin>>department;
cout<while(ptr)
{
if(ptr->m_Department==department)
{
Display_Node(ptr);//打印满足条件的节点。
cout<<"查询成功,继续操作";
j++;
break;
}
ptr=ptr->Next;//查询下一节点。
}
if(j==0)
cout<<"无此职工的信息。
"<returnfalse;
}
if(i==2)//对出身年月进行查询
{
cout<<"请输入出身年月:
";
cin>>year;
cout<while(ptr)
{
if(ptr->m_Year==year)
{
Display_Node(ptr);//打印满足条件的节点。
cout<<"查询成功,继续操作";
j++;
}
ptr=ptr->Next;//查询下一节点。
}
if(j==0)
cout<<"无此职工的信息。
"<returnfalse;
}
if(i==3)//对学历进行查询
{
cout<<"请输入学历:
";
cin>>degree;
cout<while(ptr)
{
if(ptr->m_Degree==degree)
{
Display_Node(ptr);//打印满足条件的节点。
cout<<"查询成功,继续操作";
j++;
}
ptr=ptr->Next;//查询下一节点。
}
if(j==0)
cout<<"无此职工的信息。
"<returnfalse;
}
if(i==4)//对职务进行查询
{
cout<<"请输入员工职务:
";
cin>>department;
cout<while(ptr)
{
if(ptr->m_Department==department)
{
Display_Node(ptr);//打印满足条件的节点。
cout<<"查询成功,继续操作";
j++;
}
ptr=ptr->Next;//查询下一节点。
}
if(j==0)
cout<<"无此职工的信息。
"<returnfalse;
}
if(i==5)//对住址进行查询
{
cout<<"请输入员工住址:
";
cin>>home;
cout<