数据结构课程设计企业员工信息管理系统设计与实现.docx
《数据结构课程设计企业员工信息管理系统设计与实现.docx》由会员分享,可在线阅读,更多相关《数据结构课程设计企业员工信息管理系统设计与实现.docx(36页珍藏版)》请在冰点文库上搜索。
数据结构课程设计企业员工信息管理系统设计与实现
《算法与数据结构》
课程设计
题目:
企业员工信息管理系统
设计与实现
院、系:
计算机信息与技术系
学科专业:
软件工程
学号:
B10060XXX
2012年9月16日
设计要求
1.1问题描述
企业员工信息管理系统,包括企业中所有员工的基本信息,如:
工号、姓名、性别、学历等。
且该系统能够完成新员工的增添、所有员工信息的相应查询、修改、删除等各项功能。
1.2需求分析
(1)在相应的每条记录中,应该包括该员工的所有信息,如:
工号、姓名、性别、学历等;
(2)根据不同关键字(如工号,姓名等),对所有员工的信息进行排序;
(3)按照指定条件查找某个员工的所有信息;
(4)按工号对某个员工的信息进行修改;
(5)添加新员工的信息;
(6)按工删除已离职、退休员工的信息;
(7)与此同时,除了以上基本的需求以外,该企业员工信息管理系统的程序源代码还应具有良好的编程结构和适当的注释,运行界面清晰,提示内容明确,易于操作。
概要设计
2.1主界面设计
当输入相应的操作字符(如:
数字0-6),实现并完成各项功能操作(如:
建立、修改、删除、显示、退出等)。
系统主界面如下:
2.2存储结构设计
依据给定的数据格式,个人信息由四个字段来组成,即工号、姓名、性别、学历,外加一个判断关键字。
如:
工号|姓名|性别|学历
123fengndaxue
本课程设计根据功能需求,使用线性结构来组织数据,由于要对表中某项数据进行插入、删除操作,所以使用链表比较方便。
2.3系统功能设计
依据程序的数据结构和功能,遵照“自顶向下,逐步细化”原则,描述该程序的层次结构,在总体上包括数据的增添、修改、删除、查询以及数据的显示等功能模块。
(1)新增函数功能:
通过输入各项数据给数据元素,来建立一个数据表。
(2)显示函数功能:
输出表中所有节点的信息。
(3)查询函数功能:
按照指定关键字,对相应员工信息进行查询。
(4)修改函数功能:
输入员工工号,查询员工信息,对其信息进行修改。
(5)删除函数功能:
查找到要删除员工的相应信息,并将其从表中永久的删除。
(6)主函数功能:
调用以上子函数,并用开关语句进行选择性的调用。
模块设计
3.1系统子程序及功能设计
(1)新增员工信息,利用函数:
creatlist(linklist&L)
(2)显示所有员工信息,利用函数:
display(linklist&L)
(3)删除员工信息,是按员工工号删除,
利用函数:
delet(linklist&L,charnum[6])
(4)查询员工信息,按工号和姓名进行查询;
①按工号查询利用函数:
searchnum(linklist&L,charnum[10]);
②按姓名查询利用函数:
searchname(linklist&L,charname[10])
(5)修改员工信息,利用函数:
alter(linklist&L,charnum[6])
3.2系统功能图
图3-2系统功能图
详细设计
4.1数据类型定义
结构体定义:
typedefstructnode
{
charnum[6];//工号
charname[10];//姓名
charsex[6];//性别
chardegree[20];//学历
structnode*next;//指针域
}node,*linklist;
4.2系统主要子程序详细设计
1.显示函数
函数原型:
voiddisplay(linklist&L)
函数功能:
输出表中所有节点的信息。
算法要点:
使用循环输出所有信息。
主要算法:
voiddisplay(linklist&L)
{
linklistp;
for(p=L->next;p;p=p->next)
{
printf("工号%s",p->num);
printf("姓名%s",p->name);
printf("性别%s",p->sex);
printf("学历%s",p->edu);
}
}
2.删除函数
函数原型:
voiddelet(linklist&L,charnum[6])
函数功能:
查找到要删除员工的相应信息,并将其从表中永久的删除。
算法要点:
(1)按关键字查找信息;
(2)链表中删除节点信息,并释放节点空间。
主要算法:
intdelet(linklist&L,charnum[6])
{
node*p;/*实现删除操作的临时的结构体指针变量*/
node*r;
p=L->next;
r=L;
if(!
L->next)//当list无后继结点时,提示和结束返回del()
{
printf("\n=====>提示:
没有记录可以删除!
\n");
printf("\n");
return1;
}
while(!
(strcmp(p->num,num)==0)&&p)
{
r=p;
p=p->next;
}
if(!
p)
printf("\n\n\t\t\t找不到该职工信息!
!
!
\n");
else
{
r->next=p->next;
free(p);
printf("删除成功\n");
printf("\n");
}
return1;
}
3.查询函数
(1)按工号查询
intsearchnum(linklist&L,charnum[10])
{
node*p;
p=L;
while(p)
{
if(strcmp(p->num,num)==0)
{
printf("\t");
printf("工号%s",p->num);
printf("\t");
printf("姓名%s",p->name);
printf("\n");
printf("\t");
printf("性别%s",p->sex);
printf("\t");
printf("\t");
printf("学历%s",p->edu);
printf("\n");
}
p=p->next;
}
return1;
}
(2)按姓名查询
intsearchname(linklist&L,charname[10])
{
node*p;
p=L;
while(p)
{
if(strcmp(p->name,name)==0)
{
printf("\t");
printf("工号%s",p->num);
printf("\t");
printf("姓名%s",p->name);
printf("\n");
printf("\t");
printf("性别%s",p->sex);
printf("\t");
printf("\t");
printf("学历%s",p->edu);
printf("\n");
}
p=p->next;
}
return1;
}
4.修改函数(按工号修改)
intalter(linklist&L,charnum[6])
{
node*p;
p=L;
while(p)
{
if(strcmp(p->num,num)==0)
{
printf("请输入员工的工号:
\n");
printf("您输入的是:
");
printf("\t");
scanf("%s",p->num);
printf("请输入员工的姓名:
\n");
printf("您输入的是:
");
printf("\t");
scanf("%s",p->name);
printf("请输入员工的性别:
\n");
printf("您输入的是:
");
printf("\t");
scanf("%s",p->sex);
printf("请输入员工的学历:
\n");
printf("您输入的是:
");
printf("\t");
scanf("%s",p->edu);
}
p=p->next;
printf("\n");
}
return1;
}
5.主函数
主函数主要是调用以上的子函数,用开关语句进行选择性的调用。
大致程序如下:
voidmain()
{
linklistL;
inta;
charm;
charname[10];
charnum[6];
initlist(L);
intg;
intf=1;
while(f)
{
menu();
scanf("%d",&g);
printf("\n");
switch(g)
{
case1:
creatlist(L);
do
{
printf("是否继续输入?
(y/n)");
printf("\t");
getchar();
scanf("%c",&m);
if(m=='y')
{
creatlist(L);
}
}
while(m!
='n');
printf("\n");
break;
case2:
printf("请输入修改员工的工号:
");
printf("您输入的是:
");
printf("\t");
getchar();
scanf("%s",&num);
alter(L,num);
printf("\n");
break;
······
case0:
f=0;
printf("\n\n");
break;
}
}
6.其他函数
这些函数主要起到辅助功能,比如:
菜单函数,主要起到引导作用;
菜单函数原型:
voidmenu()
测试分析
5.程序各功能的运行结果:
5.1系统主界面
5.2建立信息
(1)首先输入操作字符“1”;
(2)接着输入员工信息;
(3)最后输入操作字符“n”结束输入。
5.3修改信息
(1)首先输入操作字符“2”;
(2)再输入新的员工信息,
5.4查询信息
(1)首先输入操作字符“3”;
(2)接着输入操作字符“1”或者“2”(即实现按“工号”查询,或者按“姓名”查询);
(3)再输入编号的字符“1”;
5.5显示信息
输入操作字符“5”;
5.6删除信息
输入操作字符“4”;
5.7退出系统
输入操作字符“0”;
源程序清单
#include
#include
#include
typedefstructnode//定义节点类型
{
charnum[6];
charname[10];
charsex[3];
charedu[6];
structnode*next;
}node,*linklist;
intcreatlist(linklist&L)//头插法生成单链表
{
linklistp;
p=(linklist)malloc(sizeof(node));
if(!
p)
{
return(0);
}
else
{
printf("请输入员工的工号:
\n");
printf("\t");
scanf("%s",p->num);
printf("请输入员工的姓名:
\n");
printf("\t");
scanf("%s",p->name);
printf("请输入员工的性别:
\n");
printf("\t");
scanf("%s",p->sex);
printf("请输入员工的学历:
\n");
printf("\t");
scanf("%s",p->edu);
}
p->next=L->next;
L->next=p;
}
intinitlist(linklist&L)//初始化单链表
{
L=(linklist)malloc(sizeof(node));
if(!
L)
return(0);
L->next=NULL;
return1;
}
voidmeau()
{
printf("\t**********^_^欢迎使用企业员工信息系统^_^**********\n");
printf("\n");
printf("\t*1建立员工信息表*\n");
printf("\t*2插入新员工信息*\n");
printf("\t*3查询员工信息记录*\n");
printf("\t*4删除员工信息记录*\n");
printf("\t*5显示员工信息*\n");
printf("\t*0退出管理系统*\n");
printf("\n");
printf("\t**********^_^欢迎使用企业员工信息系统^_^**********\n");
printf("\n");
printf("\tXXX\n");
printf("\t2012年9月12日\n");
printf("\n");
printf("请您从0-5中选择:
\n");
printf("您选择的是:
");
printf("\t");
}
voiddisplay(linklist&L)//显示所有员工信息
{
linklistp;
for(p=L->next;p;p=p->next)
{
printf("\t");
printf("工号%s",p->num);
printf("\t");
printf("姓名%s",p->name);
printf("\n");
printf("\t");
printf("性别%s",p->sex);
printf("\t");
printf("\t");
printf("学历%s",p->edu);
printf("\n");
printf("\n");
}
printf("\n");
}
intdelet(linklist&L,charnum[6])//按工号删除
{
node*p;/*实现删除操作的临时的结构体指针变量*/
node*r;
p=L->next;
r=L;
if(!
L->next)//当list无后继结点时,提示和结束返回del()
{
printf("\n=====>提示:
没有记录可以删除!
\n");
printf("\n");
return1;
}
while(!
(strcmp(p->num,num)==0)&&p)
{
r=p;
p=p->next;
}
if(!
p)
printf("\n\n\t\t\t找不到该职工信息!
!
!
\n");
else
{
r->next=p->next;
free(p);
printf("删除成功\n");
printf("\n");
}
return1;
}
intsearchnum(linklist&L,charnum[10])//查询工号
{
node*p;
p=L;
while(p)
{
if(strcmp(p->num,num)==0)
{
printf("\t");
printf("工号%s",p->num);
printf("\t");
printf("姓名%s",p->name);
printf("\n");
printf("\t");
printf("性别%s",p->sex);
printf("\t");
printf("\t");
printf("学历%s",p->edu);
printf("\n");
}
p=p->next;
}
return1;
}
intsearchname(linklist&L,charname[10])//查询姓名
{
node*p;
p=L;
while(p)
{
if(strcmp(p->name,name)==0)
{
printf("\t");
printf("工号%s",p->num);
printf("\t");
printf("姓名%s",p->name);
printf("\n");
printf("\t");
printf("性别%s",p->sex);
printf("\t");
printf("\t");
printf("学历%s",p->edu);
printf("\n");
}
p=p->next;
}
return1;
}
intalter(linklist&L,charnum[6])//修改信息
{
node*p;
p=L;
while(p)
{
if(strcmp(p->num,num)==0)
{
printf("请输入员工的工号:
\n");
printf("您输入的是:
");
printf("\t");
scanf("%s",p->num);
printf("请输入员工的姓名:
\n");
printf("您输入的是:
");
printf("\t");
scanf("%s",p->name);
printf("请输入员工的性别:
\n");
printf("您输入的是:
");
printf("\t");
scanf("%s",p->sex);
printf("请输入员工的学历:
\n");
printf("您输入的是:
");
printf("\t");
scanf("%s",p->edu);
}
p=p->next;
printf("\n");
}
return1;
}
voidmain()//主函数
{
linklistL;
inta;
charm;
charname[10];
charnum[6];
initlist(L);
intg;
intf=1;
while(f)
{
meau();
scanf("%d",&g);
printf("\n");
switch(g)
{
case1:
creatlist(L);
do
{
printf("是否继续输入?
(y/n)");
printf("\t");
getchar();
scanf("%c",&m);
if(m=='y')
{
creatlist(L);
}
}
while(m!
='n');
printf("\n");
break;
case2:
printf("请输入修改员工的工号:
");
printf("您输入的是:
");
printf("\t");
getchar();
scanf("%s",&num);
alter(L,num);
printf("\n");
break;
case3:
printf("请选择查询方式(1.按工号查询,2.按姓名查找)");
printf("\n");
printf("您选择的是:
");
printf("\t");
scanf("%d",&a);
if(a==1)
{
printf("请输入查询员工的工号:
\n");
printf("您输入的是:
");
printf("\t");
scanf("%s",&num);
printf("\n");
searchnum(L,num);
}
if(a==2)
{
printf("请输入查询员工的姓名:
\n");
printf("您输入的是:
");
printf("\t");
scanf("%s",&name);
printf("\n");
searchname(L,name);
}
printf("\n");
break;
case4:
printf("请输入删除员工的工号:
\n");
printf("您输入的是:
");
printf("\t");
getchar();
scanf("%s",&num);
printf("\n");
delet(L,num);
break;
case5:
printf("所有员工的信息如下所示\n");
printf("\n");
display(L);
printf("\n");
break;
case0:
f=0;
printf("\n\n");
printf("\t┏━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━┓\n");
printf("\t┃************************************************************┃\n");
printf("\t┃**┃\n");
printf("\t┃*感谢您的使用,再见!
*┃\n");
printf("\t┃**┃\n");
printf("\t┃************************************************************┃\n");
printf("\t┗