数据结构课程设计.docx
《数据结构课程设计.docx》由会员分享,可在线阅读,更多相关《数据结构课程设计.docx(13页珍藏版)》请在冰豆网上搜索。
数据结构课程设计
目录
1.开发背景2
2.系统分析2
2.2可行性分析3
3.系统设计3
3.1系统设计思路3
3.2程序功能结构4
4.运算结果9
4.总结12
1.开发背景
家谱管理系统是查询家谱信息必不可少的一部分,利用家谱管理系统可以清楚的查询到家族成员的详细信息。
该家谱管理系统是通过树来实现的。
本程序具有插入、查找等功能,可以实现存放家谱中各成员的信息。
程序的操作界面简洁美观,易于操作。
本程序运用了函数、循环、树等知识来进行设计,实现系统和数据结构设计。
2.系统分析
输入文件以存放最初家谱中各成员的信息,成员的信息中均应包含以下内容:
1).姓名、配偶、第几代
2).实现数据的存盘和读盘。
3).显示第n代所有人的信息。
4).按照姓名查询,输出成员信息。
5).输入两人姓名,确定其关系。
6).某成员添加孩子。
7).删除某成员(若其还有后代,则一并删除)。
8).修改某成员信息。
2.2可行性分析
(1)技术可行性
【根据需求和目前学习的技术分析是否可以开发该系统】
3.系统设计
3.1系统设计思路
本程序要求模块化管理,本程序的主要功能是:
创建主程序模块菜单选择模块树操作模块数据:
创建各相关数据,例如创建家谱信息。
添加数据:
增加家谱成员孩子信息。
查询信息:
按照姓名来查询成员信息。
退出系统:
程序编译结束后退出系统
3.2程序功能结构
本程序首先定义了结构体,定义如下:
源代码:
#include
#include
#include
#include
typedefstructpnode
{
charmale[10];
charfemale[10];
intn;
structpnode*fchild,*brother;
}pnode,*ptree;
voidcreatfamily(ptree,FILE);
voidpreorder(ptreep);
voidshow(ptreep);
intMenu(){
system("colorIf");
system("modecon:
cols=76lines=35");
inti;
printf("***************欢迎使用余氏家谱管理系统***************\n\n");
printf("请选择:
\n");
printf("\n");
printf("1.读取一个家庭关系\n");
printf("\n");
printf("2.显示一个家庭关系\n");
printf("\n");
printf("3.查找成员\n");
printf("\n");
printf("4.添加新成员\n");
printf("\n");
printf("5.修改成员\n");
printf("\n");
printf("6.保存\n");
printf("\n");
printf("7.退出系统\n\n\n");
printf("\n");
printf("********************************************************************\n\n");
printf("输出1~6之间的数字选择相应功能:
");
scanf("%d",&i);
returni;
}
ptreecreatfamily(FILE*fp)
{
if(!
feof(fp))
{
ptreep;
p=(ptree)malloc(sizeof(pnode));
charfname[10],mname[10];
inti;
fscanf(fp,"%s%s%d\n",fname,mname,&i);
if(strcmp(fname,"n")==0)&&(strcmp(mname,"n")==0)&&(i==0))
{
p=NULL;
returnp;
}
else
{
strcpy(p->male,fname);
strcpy(p->female,mname);
p->n=i;
printf("读取成功\n");
P->fchild=creatfamily(fp);
p->brother=creatfamily(fp);
returnp;
}
}
}
voidPreOrder(ptreep)
{
if(p)
{
show(p);
PreOrder(p->fchild);
PreOrder(p->brother);
}
}
voidshow(ptreep)
{
printf("名字配偶第几代\n");
printf("%2s%6s%d\n",p->male,p->female,p->n);
}
voidsearch(ptreep,charname[])
{
if(p)
{
if(strcmp(p->male,name)==0)
{
show(p);
getchar();
getchar();
}
search(p->fchild,name);
search(p->brother,name);
}
}
voidadd(ptreep,charname[])
{
charfname[10],mname[10];
inti;
if(p)
{
if(strcmp(p->male,name)==0)
{
printf("名字配偶第几代\n");
scanf("%s%s%d",fname,mname,&i);
p->fchild=(ptree)malloc(sizeof(pnode));
strcpy(p->fchild->male,fname);
strcpy(p->fchild->female,mname);
p->fchild->n=i;
p->fchild->fchild=NULL;
p->fchild->brother=NULL;
}
add(p->fchild,name);
add(p->brother,name);
}
}
voidgai(ptreep,charname[])
{
charfname[10],mname[10];
inti;
if(p)
{
if(strcmp(p->male,name)==0)
{
printf("名字配偶第几代\n");
scanf("%s%s%d",fname,mname,&i);
strcpy(p->male,fname);
strpy(P->female,mname);
p->n=i;
}
gai(p->fchild,name);
gai(p->brother,name);
}
}
voidsave(ptreep,FILE*stream);
{
if(p)
{
fprintf(stream,"%s%s%d",p->male,p->female,p->n);
save(p->child,stream);
save(p->brother,stream);
}
else
{
charout[20]="nn0";
fprintf(stream,"%s\n",out);
}
}
intmain()
{
intstatus;
charname[10];
ptreep;
FILE*fp=fopen("lmx.txt","r+");
while
(1){
status=Menu();
switch(status)
{
case1;
p=creatfamily(fp);
getchar();
getchar();
break;
case2;
PreOrder(p);
getchar();
getchar();
break;
case3;
printf("请输入要搜索的名字\n");
scanf("%s",name);
search(p,name);
break;
case4;
printf("请输入要孩子的人\n");
scanf("%s",name);
add(p,name);
break;
case5;
printf("请输入要修改的人\n");
scanf("%s",name);
gai(p,name);
break;
case6;
save(p,fp);
getchar();
getchar();
break;
case7;
printf("\n感谢使用本系统\n");
fclose(fp);
fclose(fp);
exit(0);//如果选择5,则退出循环系统终止程序
break;
default;
printf("\n您选择有误\n");
getchar();
}
}
4.运算结果
1.主菜单
2.显示家谱信息
3.显示家谱中第n代人的信息
4.按姓名查找某人并输出相应信息
5.为家谱成员添加孩子信息
6.修改家谱中成员的信息
4.总结
通过这次的课程设计,我明白了,代码编写能力的提高不是一天两天的事,而是一个日积月累的过程。
当老师说道,你还仅仅写了一个开头而已?
那时候,就发现,平常的自己所缺乏的吃苦耐劳的精神。
所以,我在不断地编写调试,在提出问题解决问题的过程中慢慢提升。
所以,要多编程多提问多思考,在其中体味努力的甘甜味道。
我也明白了,在今后的时间里更加努力地学习。
在这个课程设计里我做了对家谱管理的系统分析。
我从网上下载好了需要的资料,通过取其精华去其糟粕,本来是想把系统整合的很完美,可是由于c语言基础不扎实,没能完成。
也向同学和学长学姐请教,只能做到现在这个地步。
通过这次课程设计,我对这个树的操作有了深刻的了解,对C语言也有了更深刻的了解。
关于树我听课时最认真的一段课了,通过之前下载好的资料,我也试着去整合一些好的地方,不过未能完成。
通过本次的项目我意识到自己知识的匮乏。
在之后的日子里会好好的补习知识。
希望在下次的项目中可以做的好点。