数据结构课程设计员工管理系统.docx
《数据结构课程设计员工管理系统.docx》由会员分享,可在线阅读,更多相关《数据结构课程设计员工管理系统.docx(8页珍藏版)》请在冰豆网上搜索。
数据结构课程设计员工管理系统
一、问题描述 1
二、测试数据 1
三、算法思想 1
四、模块划分 1
五、数据结构 2
六、源程序 2
七、测试情况 7
八、设计体会 8
参考文献 9
一、问题描述
(1)自定义一个类型表示员工各信息,定义一个顺序表存储员工信息,包括员工编号、姓名、性别、职务、出生年月、学历、电话、地址等。
(2)系统能够完成员工信息的输入、输出、查询、更新、插入、删除、排序等功能,并且数据能由文件导入和导出到文件。
(3)通过菜单选择进行哪一项操作,并输出每一项操作结果。
二、测试数据
1李一女1989.10.2 本科职员188********广西南宁
2苏三女1986.3.18本科职员180********广西北海
3孙大云女1987.12.1本科秘书180********广西柳州
5陈二男1986.7.12硕士经理150********广西梧州
三、算法思想
线性表是最常用且最简单的一种线性结构,由数据元素组成,而数据元素又可以包含若干个数据项。
线性表的顺序表示指的是用一组地址连续的存储单元依次存储线性表的数据元素,通常用数组表示。
对顺序表的操作可借鉴数组的算法。
在本次课程设计中的员工管理信息系统,每个员工为一个数据元素,包括编号、姓名、性别、学历等数据项。
用一个数组来存储员工信息,对其进行的输入、删除、输出等操作可由一般数组的算法变换而得。
四、模块划分
(1)自定义一个数据类型ElemType,表示员工信息,定义一个顺序表List,将员工信息存放于顺序表中,包括员工的编号、姓名、性别、职务、出生年月、学历、电话、地址等,并完成顺序表的初始化;
(2)voidListInput(List&L,intn),函数作用是输入员工信息,需要一个循环完成每个员工信息的输入,最后要修改表长;
(3)intLocateElem(ListL,intnum),函数作用是在顺序表里查找某编号员工的信息,从第一个员工开始找,通过编号的两两比较,若找到与要查找员工的编号一致的员工,则返回员工的位置,并在主函数中输出此与员工的信息;
(4)voidListInsert(List&L,ElemTypee)函数功能是新员工信息的插入,先判断表是否满或此员工的信息是否已存在,若是则不进行插入操作;否则,保持员工编号顺序不变,找到插入点的位置,把从插入点后一位的数据都往后移一个位置,把新信息插入,最后使表长增1;
(5)voidListDelete(List&L,intbh)函数作用是员工信息的删除,若表空或所要删除的员工信息不存在,则不进行下一步操作;否则,把删除点后的数据都往前移覆盖其前一个元素,最后使表长减1;
(6)voidBubbleSort(List&L)函数功能是通过冒泡法试员工信息按编号从小到大排序,进行n-1趟,每趟使小编号的员工信息往上放在表的前端,把编号大的员工信息往下沉到表的末端;
(7)ChangeM(List&L),更新员工信息,由菜单选择需要修改的信息项进行修改,并保存新的信息;
(8)voidnewFile(List&L),生成一个新的txt文件,存放员工信息,存入计算机内存;
(9)voidreadFile(List&L),把员工信息从文件中导出;
(10)voidmain()主函数,通过菜单和各函数的调用实现各部分的操作。
五、数据结构
(1)包含自定义数据类型ElemType和表长信息length的顺序表List
(2)顺序表List的结构定义如下:
typedefstruct
{
ElemType*elem;
intlength;
}List;
六、源程序
#include
#include
#include
#include
usingnamespacestd;
#defineOK1
#defineERROR0
#defineOVERFLOW-2
typedefintStatus; //Status是函数返回值类型,其值是函数结果状态代码。
#defineMAXSIZE100 //顺序表可能达到的最大长度
typedefstruct{ //ElemType为自定义的数据类型,要根据实际情况定义,本例为学生信息:
(学号,成绩)
intnum;
stringname;
stringsex;
stringbirth;
stringedu;
stringjob;
stringphone;
stringadd;
}ElemType;
typedefstruct{ //定义顺序表类型为List
ElemType*elem;
intlength;
}List;
voidInitList(List&L) //创建空顺序表
{
L.elem=newElemType[MAXSIZE]; //动态分配空间
L.length=0;
}
voidListInput(List&L,intn) //输入顺序表数据
{
inti;
cout<<"请输入员工信息"<for(i=0;i{cout<<"请输入员工编号:
"<cin>>L.elem[i].num; //输入员工编号
cout<<"请输入员工姓名"<cin>>L.elem[i].name; //输入姓名
cout<<"请输入员工性别:
"<cin>>L.elem[i].sex; //输入员工编号
cout<<"请输入员工出生年月"<cin>>L.elem[i].birth;
cout<<"请输入员工职务"<cin>>L.elem[i].job;
cout<<"请输入员工学历"<cin>>L.elem[i].edu;
cout<<"请输入员工电话号码"<cin>>L.elem[i].phone;
cout<<"请输入员工住址"<cin>>L.elem[i].add;
}
L.length=n;
}
voidListOutput(ListL) //输出顺序表数据
{
inti=0;
if(L.length==0)cout<<"空表,无数据输出!
";
for(i=0;icout<<"("<cout<}
intLocateElem(ListL,intnum) //在顺序表里查找某编号员工的信息
{
inti;
for(i=0;iif(num==L.elem[i].num)
returni+1;
elsereturn0;
}
voidListInsert(List&L,ElemTypee) //顺序表的插入
{
inti;
if(L.length==MAXSIZE) cout<<"存储空间已满"; //当前存储空间已满
if(LocateElem(L,e.num)!
=0)
cout<<"数据已存在,请重新输入";
else
{ for(i=L.length-1;i>=0;i--)
if(e.numL.elem[i+1]=L.elem[i]; //在查找位置的同时元素后移
else
break;
L.elem[i+1]=e; //将新元素e放入合适的位置
++L.length; //表长增1
}
}
voidListDelete(List&L,intbh) //顺序表的删除
{
inti,j;
i=LocateElem(L,bh); //查找删除位置
if(i==0)
cout<<"找不到此员工相关信息";
else
{for(j=i;j<=L.length;j++)
L.elem[j-1]=L.elem[j]; //被删除元素之后的元素前移
--L.length; } //表长减1
}
voidBubbleSort(List&L)
{
inti,j;
ElemTypekey;
for(i=0;ifor(j=i+1;jif(L.elem[i].num>L.elem[j].num)
{key=L.elem[i];
L.elem[i]=L.elem[j];
L.elem[j]=key;
}
}
void ChangeM(List&L)
{
inti,n,num;