数据结构课程设计员工信息管理系统方案.docx
- 文档编号:30163614
- 上传时间:2023-08-05
- 格式:DOCX
- 页数:30
- 大小:25.76KB
数据结构课程设计员工信息管理系统方案.docx
《数据结构课程设计员工信息管理系统方案.docx》由会员分享,可在线阅读,更多相关《数据结构课程设计员工信息管理系统方案.docx(30页珍藏版)》请在冰豆网上搜索。
数据结构课程设计员工信息管理系统方案
成绩
12信计2013-2014
(一)
数据结构课程设计
设计题目 员工信息管理系统
设计时间 2014.1.6~2014.1.10
学生 葛考
学生学号 20120402127
所在班级 12精算
指导教师 风华
工程学院数学与物理科学学院
题目员工信息管理系统
一、需求分析
员工信息管理系统设计,具体功能如下:
1、系统以菜单方式工作,应为用户提供清晰的使用提示,依据用户的选择来进行各种处理,并且在此过程中能够尽可能的兼容用户使用过程中的输入异常情况。
2、员工信息录入系统(员工信息用文件保存),注意员工按员工编号进行区分,即每个员工的员工编号都是唯一的,不允许出现两个员工或员工编号相同的情况。
3、可对员工信息进行查询,具体分为:
按查询、按员工号查询、按生日查询;
4、可对员工信息进行删除;
5、可对员工信息进行修改,但应注意员工号不能修改,修改应逐个进行,一个员工记录的更改不应影响其他的员工记录;
6、可对全部的员工信息进行显示v(员工信息浏览),注意员工信息的显示规;
员工信息应包括、员工编号、性别、年龄、生日、学历、职务、联系、住址。
二、概要设计
2.1、抽象数据类型
ADTList{
数据对象:
D={ai|ai∈ElemSet,i=1,2,······,n,n>=0}
数据关系:
R1={
基本操作:
InitList(&L);
操作结果:
构造一个空的线性表L。
DestroyList(&L);
初始条件:
线性表L存在。
操作结果:
销毁线性表L。
LocateElem(L,I,&e);
初始条件:
线性表L存在,1
操作结果:
用e返回线性表L中第i个数据元素的值。
ClearList(&L);
初始条件:
线性表L存在。
操作结果:
将线性表L重置为空表。
}ADTGraph
2.2、程序流程
系统的执行从菜单的选择开始,依据用户的选择进行相应的处理,直到用户选择退出系统为止。
其间应对用户的选择做出判断及异常处理。
系统的流程如图1所示:
图1员工信息管理系统流程图
三、详细设计
3.1函数构成
(1)主函数:
voidmain();
(2)文件读入函数:
voidreaddata();
(3)文件写入函数:
voidwritedata();
(4)菜单函数
函数原型:
voidMenu()
功能:
此函数的功能为依据用户选择的功能来进行相应的处理,直到用户选择退出系统为止,包括员工信息的查询、更新、列表及退出管理;
(5)信息查询函数
函数原型:
voidchaxun()
功能:
该函数的功能是按照用户的选择进行不同方式的查找,本程序实现了按三种方式进行查找,包括按编号、、生日查找;
(6)信息更新函数
函数原型:
voidgengxin()
功能:
此函数的功能为使用户修改记录。
首先判断用户要修改的记录是否存在,因为只有员工编号是唯一的,所以根据员工编号进行查找。
若存在则用用户输入的新的信息替换原信息;若不存在则函数结束。
在此函数中要注意的是文件的打开方式应为”rb+”,因为在这个函数中不仅要读文件,还要向文件中写入数据,所以要用读写的方式打开二进制文件;
(7)信息一览函数
函数原型:
voidliebiao()
功能:
此函数的功能为从文件中依次取出每条记录并将其显示出来。
因为只需读文件不需要向文件中写入数据,所以文件的打开方式是只读。
3.2模块程序清单(详细程序见附录)
1、员工信息的结构体:
Typedefstructemp
{
longintnum;//编号
charname[20];//
intage;//年龄
charsex[4];//性别
charbirthday[10];//生日
chartel[15];//
charedu[8];//学历
charpos[20];//职务
charadd[30];//住址
structemp*next;
};
2、菜单函数:
voidmenu(void)
{chari,lj[100];intflog;time_tT;
structtm*timenow;
time(&T);timenow=localtime(&T);
flog=0;
while
(1)
{
system("cls");printf("\n\n\n\n\n");
printf("┏━━━━━━━━━员工信息管理系统━━━━━━━━━┓\n");
printf("┃┃\n");
printf("┃┃\n");
printf("┃┃\n");
printf("┃1.员工信息查询┃\n");
printf("┃┃\n");
printf("┃┃\n");
printf("┃┃\n");
printf("┃2.员工信息更新┃\n");
printf("┃┃\n");
printf("┃┃\n");
printf("┃┃\n");
printf("┃3.员工信息列表┃\n");
printf("┃┃\n");
printf("┃┃\n");
printf("┃┃\n");
printf("┃0.退出管理系统┃\n");
printf("┃┃\n");
printf("┃┃\n");
printf("┃┃\n");
printf("┗━━━━━━━━━━━━━━━━━━━━━━━━━━┛\n");
printf("%s",asctime(timenow));
printf("请输入您的选择(数字0-3):
\n");
scanf("%c",&i);gets(lj);if(lj[0])i='a';
switch(i)
{case'1':
chaxun();break;
case'2':
gengxin();break;
case'3':
liebiao();break;
case'0':
flog=1;break;
default:
printf("输入有误,请按回车键重新输入\n");gets(lj);break;
}if(flog)break;}}
3、信息查询函数:
voidchaxun()
{
chari,lj[100];intflog;time_tT;structtm*timenow;
time(&T);timenow=localtime(&T);flog=0;
while
(1)
{
system("cls");printf("\n\n\n\n\n");
printf("┏━━━━━━━━━员工信息查询系统━━━━━━━━━┓\n");
printf("┃┃\n");
printf("┃┃\n");
printf("┃┃\n");
printf("┃1.按照编号查询┃\n");
printf("┃┃\n");
printf("┃┃\n");
printf("┃┃\n");
printf("┃2.按照查询┃\n");
printf("┃┃\n");
printf("┃┃\n");
printf("┃┃\n");
printf("┃3.按照生日查询┃\n");
printf("┃┃\n");
printf("┃┃\n");
printf("┃0.退出管理系统┃\n");
printf("┃┃\n");
printf("┃┃\n");
printf("┃┃\n");
printf("┗━━━━━━━━━━━━━━━━━━━━━━━━━━┛\n");
printf("%s",asctime(timenow));
printf("请输入您的选择(数字0-3):
\n");
scanf("%c",&i);gets(lj);if(lj[0])i='a';
switch(i)
{
case'1':
bianhao();break;case'2':
xingming();break;
case'3':
shengri();break;case'0':
flog=1;break;
default:
printf("输入有误,请重新输入\n");gets(lj);break;
}if(flog)break;}}
4、信息更新函数:
voidgengxin()
{
chari,lj[100];
time_tT;
intflog;
structtm*timenow;
time(&T);timenow=localtime(&T);
flog=0;
while
(1)
{
system("cls");
printf("\n\n\n\n\n");
printf("┏━━━━━━━━员工信息更新系统━━━━━━━━━┓\n");
printf("┃┃\n");
printf("┃┃\n");
printf("┃┃\n");
printf("┃1.员工信息添加┃\n");
printf("┃┃\n");
printf("┃┃\n");
printf("┃┃\n");
printf("┃2.员工信息删除┃\n");
printf("┃┃\n");
printf("┃┃\n");
printf("┃┃\n");
printf("┃3.员工信息修改┃\n");
printf("┃┃\n");
printf("┃┃\n");
printf("┃┃\n");
printf("┃0.退出管理系统┃\n");
printf("┃┃\n");
printf("┃┃\n");
printf("┃┃\n");
printf("┗━━━━━━━━━━━━━━━━━━━━━━━━━┛\n");
printf("%s",asctime(timenow));
printf("请输入您的选择(数字0-3):
\n");
scanf("%c",&i);
gets(lj);
if(lj[0])i='a';
switch(i)
{case'1':
tianjia();break;
case'2':
shanchu();break;
case'3':
xiugai();break;
case'0':
flog=1;break;
default:
printf("输入有误,请重新输入\n");gets(lj);break;
}
if(flog)break;
}
}
5、信息一览函数:
voidliebiao()
{
charlj[100];structemp*p;p=head;system("cls");
if(head==NULL){printf("查找不到信息\n");menu();}
printf("━━━━━━━━━━━员工信息列表━━━━━━━━━━━\n");
printf("编号\t\t\t\t年龄\t\t性别\t\t出生年月\t\t\t\t学历\t\t职务\t\t住址:
\n");
if(head!
=NULL)
{while(p!
=NULL)
{display(p);p=p->next;}}
printf("\n按回车键返回主菜单\n");gets(lj);}
四、调试分析
4.1、时间复杂度分析
在源程序的各个模块,时间复杂读为
,并且随着输入信息量的增加,从而时间复杂度也逐渐增加。
4.2、问题解决
在程序设计过程中,本程序采用两种方式进行数据输入,一种是由用户手动输入数据,另一种是由文本文件数据导入[1]的方式。
但在文本导入过程中,导入的是二进制文件,但由于复杂程度较高,从而根据所查资料进行修改,采用导入文本文件。
在结果输出上,由于输出的是黑屏,所以经过查阅资料,运用
函数对输出结果的页面进行修饰。
4.3、设计收获
在做实验前,一定要将课本上的知识吃透,因为这是做实验的基础,否则,在做设计程序实验时,这将使你做的难度加大,浪费宝贵的时间,使你事倍功半。
做实验时,一定要亲力亲为,务必要将每个步骤,每个细节弄清楚,弄明白。
实验后,还要复习,思考,这样,你的印象才深刻,记得才牢固,否则,过后不久你就会忘得一干二净,这还不如不做。
通过这次程序设计的实验,使我们学到了不少实用的知识,更重要的是,做实验的过程,思考问题的方法,这与做其他的实验是通用的,真正使我们们受益匪浅。
五、测试结果
1、菜单函数的测试结果如图2
图2
2、信息查询函数的测试结果如图3
图3
3、信息更新函数测试结果如图4
图4
六、用户使用说明
本程序实在VB.6.0环境下通过编译并执行。
用户根据提示信息进行选择并操作。
七、附录
源程序:
#include
#include
#include
#include
#include
#include
#include
#defineLENsizeof(structemp)
#defineDATA"employee.txt"
structemp
{
longintnum;//编号
charname[20];//
intage;//年龄
charsex[4];//性别
charbirthday[10];//生日
chartel[15];//
charedu[8];//学历
charpos[20];//职务
charadd[30];//住址
structemp*next;
};
structemp*head=NULL;
intt=0;
voidmenu();
voidgengxin();
voidtianjia();
voidinsert(structemp*em);
voiddisplay(structemp*p);
voidliebiao();
voidchaxun();
voidbianhao();
voidshengri();
voidxingming();
voidreadDate();
voidwriteDate();
voidfreeAll();
voidshanchu();
voidchange();
voiddevise(structemp*p);
voidmain()
{
structemp*head=NULL;
head=(structemp*)malloc(LEN);
head->next=NULL;system("colorF1");
system("modecon:
cols=500lines=1000");
readDate();menu();system("cls");
printf("\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n");
printf("谢谢使用,再见\n");
}
voidmenu(void)
{
chari,lj[100];intflog;time_tT;
structtm*timenow;
time(&T);timenow=localtime(&T);
flog=0;
while
(1)
{
system("cls");printf("\n\n\n\n\n");
printf("┏━━━━━━━━━员工信息管理系统━━━━━━━━━┓\n");
printf("┃┃\n");
printf("┃┃\n");
printf("┃┃\n");
printf("┃1.员工信息查询┃\n");
printf("┃┃\n");
printf("┃┃\n");
printf("┃┃\n");
printf("┃2.员工信息更新┃\n");
printf("┃┃\n");
printf("┃┃\n");
printf("┃┃\n");
printf("┃3.员工信息列表┃\n");
printf("┃┃\n");
printf("┃┃\n");
printf("┃┃\n");
printf("┃0.退出管理系统┃\n");
printf("┃┃\n");
printf("┃┃\n");
printf("┃┃\n");
printf("┗━━━━━━━━━━━━━━━━━━━━━━━━━━┛\n");
printf("%s",asctime(timenow));
printf("请输入您的选择(数字0-3):
\n");
scanf("%c",&i);gets(lj);if(lj[0])i='a';
switch(i)
{
case'1':
chaxun();break;
case'2':
gengxin();break;
case'3':
liebiao();break;
case'0':
flog=1;break;
default:
printf("输入有误,请按回车键重新输入\n");gets(lj);break;
}if(flog)break;}}
voidtianjia()
{
structemp*p,*p1;charlj[100];
p=NULL;p1=head;
printf("请输入第%d个员工的信息.\n",t+1);
p=(structemp*)malloc(LEN);
if(p==NULL)
{printf("分配空间失败");exit(0);}
printf("请输入员工的编号:
\n");
scanf("%ld",&p->num);
while((p1!
=NULL)&&(p->num!
=p1->num))p1=p1->next;
if(p1!
=NULL)
{if(p->num==p1->num)
{
printf("编号已经存在,请重新输入,按回车键继续:
\n");
free(p);gets(lj);getchar();}}
printf("请输入员工的:
\n");scanf("%s",p->name);
printf("请输入员工的年龄:
\n");scanf("%d",&p->age);
printf("请输入员工的性别:
\n");scanf("%s",p->sex);
printf("请输入员工的出生年月:
\n");scanf("%s",p->birthday);
printf("请输入员工的:
\n");scanf("%s",p->tel);
printf("请输入员工的学历:
\n");scanf("%s",p->edu);
printf("请输入员工的职务:
\n");scanf("%s",p->pos);
printf("请输入员工的住址:
\n");scanf("%s",p->add);
insert(p);printf("输入的员工信息为:
\n");
printf("------------------------------------------------------------------------:
\n");
printf("编号\t\t\t\t年龄\t\t性别\t\t出生年月\t\t\t\t学历\t\t职务\t\t住址:
\n");display(p);printf("按回车键继续\n");writeDate();gets(lj);getchar();}
voidinsert(structemp*em)
{
structemp*p0,*p1,*p2;p1=head;p0=em;
if(head==NULL)
{head=p0;p0->next=NULL;}
else
{
while((p0->num>p1->num)&&(p1->next!
=NULL))
{p2=p1;p1=p1->next;}if(p0->num<=p1->num)
{
if(head==p1)head=p0;
else
p2->next=p0;p0->next=p1;}
else
{p1->next=p0;p0->next=NULL;}}t++;}
voiddisplay(structemp*p)
{printf("%ld\t\t%s\t\t%d\t\t%s\t\t%s\t\t%s\t\t%s\t\t%s\t\t%s\n",p->num,p->name,p->age,p->sex,p->birthday,p->tel,p->edu,p->pos,p->add);}
voidliebiao()
{
charlj[100];structemp*p;p=head;system("cls");
if(head==NULL){printf("查找不到信息\n");menu();}
printf("━━━━━━━━━━━员工信息列表━━━━━━━━━━━\n");
printf("编号\t\t\t\t年龄\t\t性别\t\t出生年月\t\t\t\t学历\t\t职务\t\t住址:
\n");
if(head!
=NULL)
{while(p!
=NULL){display(p);p=p->next;}}
printf("\n按回车键返回主菜单\n");gets(lj);}
voidchaxun()
{
chari,lj[100];
intflog;
time_tT;
structtm*timenow;
time(&T);timenow=localtime(
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 数据结构 课程设计 员工 信息管理 系统 方案