家族关系查询系统.docx

上传人:b****8 文档编号:10345888 上传时间:2023-02-10 格式:DOCX 页数:26 大小:376.44KB
下载 相关 举报
家族关系查询系统.docx_第1页
第1页 / 共26页
家族关系查询系统.docx_第2页
第2页 / 共26页
家族关系查询系统.docx_第3页
第3页 / 共26页
家族关系查询系统.docx_第4页
第4页 / 共26页
家族关系查询系统.docx_第5页
第5页 / 共26页
点击查看更多>>
下载资源
资源描述

家族关系查询系统.docx

《家族关系查询系统.docx》由会员分享,可在线阅读,更多相关《家族关系查询系统.docx(26页珍藏版)》请在冰豆网上搜索。

家族关系查询系统.docx

家族关系查询系统

课程设计说明书

 

题目:

家族关系查询系统

XX:

院〔系〕:

信息工程学院

专业班级:

16级计算机科学与技术二班

学号:

指导教师:

 

成绩:

 

时间:

2021年1月2日至2021年1月11日

 

课程设计任务书

题目家族关系查询系统

专业、班级16级计算机科学与技术二班学号XX

根本要求:

1、建立家族关系并能存储到文件;

2、对于建立的家族关系能够遍历家族成员,输入两个人的名字能够确定二人的关系;

3、实现家族成员的添加。

4、可以查询家族成员的双亲、祖先、兄弟、孩子和后代等信息。

主要参考资料:

【1】严蔚敏、吴伟民.数据构造〔C语言版〕.清华大学

【2】滕国文.数据构造课程设计.清华大学

【3】谭浩强.C程序设计〔第四版〕.清华大学

完成期限:

2021.1.2-2021.1.11

指导教师签名:

课程负责人签名:

1、课程设计介绍…………………………………………4

1.1课程设计内容……………………………………4

1.2课程设计要求……………………………………4

1.3课程设计性质……………………………………4

1.4课程设计目的……………………………………4

2、课程设计原理…………………………………………4

2.1课程设计题目分析

2.1.1程序执行的命令包括……………………………………5

2.12程序中的四大模块………………………………………5

完毕语…………………………………………………14

参考文献………………………………………………15

附录……………………………………………………16

1课程设计介绍

1.1、课程设计内容

运用队列的存储构造,构建家族关系树。

输入家族的名称,以此名称作文件的名称,建立文本文件。

按层次输入结点信息,在文件中每个人的信息占一行,同时保存到树的存储构造中。

输入一个结点,假设此结点有多个兄弟,以“〞作为兄弟结点的完毕标志,结点假设无孩子,直接以“〞作为标志,依次输入各个结点的信息,以“#〞作为完毕的标志。

输入结点的序列为zhangxianzu,,zhangguoyu,zhangguojun,zhangguoqiang,,zhangyongzhi,,zhangyongrui,zhangyongming,,zhangwende,zhangwenjia,,#。

建立家族关系树后,对树进展一些根本操作。

首先,对家族关系树遍历,确定家族成员已存入文件,并检验是否成功建立家族关系树。

输入两个人的XX,判断此二人是否属于此家族,假设属于就判断此二人的关系。

最后,能够成功退出家族关系查询系统。

1.2、课程设计要求

构建家族关系树。

使用队列的存储构造,建立家族关系查询系统树。

采用指针数组作为队列,保存结点输入的地址。

能够遍历家族关系树。

遍历家族成员,检验输出信息是否满足要求。

成功地判断所输入的两个人是否是家族中得人,如果属于就判断两人的关系。

最后,假设选择退出,能够成功退出家族关系查询系统。

否那么,继续输入相关操作。

1.3、课程设计的性质

通过数据构造的学习,使自己对软件编程能力有一定的提高。

数据构造学习是锻炼学生在进一步掌握模块化、构造化程序设计的方法的同时,培养自己运用已学知识分析问题、解决问题及编写实用程序的能力,通过对线性化、层次化、网络化数据构造的了解进一步掌握自然数据的构造方式及组织方式,让自己深入体会存储在计算机中的数据及程序,如何运用数据实现编程。

加深自己对该课程所学内容的进一步的理解与稳固,是将计算机课程与实际问题相联接的关键步骤。

通过课程设计,能够提高自己分析问题、解决问题,从而运用所学知识解决实际问题的能力。

1.4、课程设计的目的

主要目的如下:

1、培养学生运用算法与数据构造的根本知识解决实际编程中的数据构造设计和算法设计问题。

2、培养学生独立设计程序与解决问题的能力,培养学生团队协作集成程序模块及调试能力。

3、培养学生初步的软件设计及软件测试的能力。

2.课程设计原理

2.1、课程设计题目分析

演示程序以用户和计算机的对话的方式执行,即在计算机终端上显示“提示信息〞之后,由用户在键盘上输入相应的数据〔即每个人都所持的密码〕,每个人的序号由程序自动分配。

2.1.1程序执行的命令包括:

〔1〕构造家族关系查询系统〔使用树的存储构造〕;

〔2〕根据提示及使用者的需求,用户选择相关选项,输入相关数据;

〔3〕执行用户所选的选项对应的程序,满足用户需求,实现相关功能;

〔4〕退出家族关系查询系统,完毕操作。

2.1.2程序中的四个大模块〔本程序共有六个模块,其中查找模块又分为六个〕:

〔1〕家族成员信息录入〔构造家族关系查询系统〕模块。

此模块将对家族关系树初始化,根据用户输入的信息构造家族关系查询系统树,并提醒用户再次输入数据以便后续程序的使用。

〔2〕遍历家族成员模块。

此模块将满足用户遍历家族关系查询系统树中的各个成员。

另外,可以检测用户输入的信息是否正确,以及浏览家族中的人员。

〔3〕确定两个家族成员的关系模块。

由用户输入两个人的名字,此模块实现在整个程序中查找,确定是否有用户输入的人。

如果有,那么输出两人的之间的关系〔即他们相差几代〕。

〔4〕主程序中的退出模块。

根据用户输入的信息管理控制变量,根据控制变量判断是否退出程序。

2.2、课程设计原理图分析

2.2.1、功能模块图

 

 

2.2.2、流程图分析

1、此局部是家族关系查询系统的主函数。

首先,初始化程序中所需要的变量;在输出提示性的语句,等待用户输入将要进展的操作的选项,根据用户输入的数据调用相关的函数。

N

 

Y

 

N

Y

Y

N

 

 

2、此局部是创立家族关系树函数,并且保存到文件。

用队列的存储构造辅助创立树。

 

N

 

Y

N

 

Y

N

Y

 

N

 

Y

N

 

Y

 

3、此局部是遍历家族成员函数。

采用递归的思想,对家族关系树进展遍历。

 

Y

N

 

N

Y

 

N

 

Y

 

4、此局部是确定家族成员中两人关系的函数。

由用户输入两个人的XX,系统调用Confirm〔〕函数判断此二人是否属于此家族。

假设属于,判断两人的关系。

 

3、数据构造分析

3.1、存储构造

根据要求首先应该建立一个队列,用队列的存储构造辅助实现家族关系树的建立。

树是n〔>=0〕个结点的有限集。

在任意一棵非空树中:

〔1〕有且仅有一个特定的称为根的结点;〔2〕当n>1时,其余结点可分为m个互不相交的有限集,其中每个集合本身又是一棵树。

设置构造体存储节点:

用构造体存储每一个家族成员的根本信息,及结点的左右孩子指针和双亲指针;再使用构造体存储表示队列结点。

树的结点构造体:

typedefstructTNode

{

charname[M];

structTNode*parent;

structTNode*lchild;

structTNode*rchild;

}Tree;

队列结点构造体:

typedefstructNode

{

Tree*info;

structNode*next;

}Node;

typedefstruct

{

structNode*front;

structNode*rear;

}LQ;

3.2、算法描述

1、用户进入家族关系查询系统,根据提示输入要进展的操作所对应的选项,用户输入的数据被d接收,系统判断d是否大于7并小于1,如果是,那么提醒用户重新输入。

否那么调用相关函数,执行相应的功能。

假设用户输入的d的值在1-6之间,如果用户第一次输入的数值大于1,那么系统会提醒用户先建立家族关系树。

2、建立家族关系树。

用户输入家族名称,系统根据家族名称建立对应的文件,用户输入结点信息,系统先将信息保存到文件和fname[M]数组中。

在建树时,将结点的信息从fname[M]数组中复制给str,系统判断str[0]是否等于’#’,并且是否等于’’,直接执行下面的语句,第一次传入结点时,root等于NULL,建立头结点,再次传入结点时,如果str[0]等于‘’,内部循环完毕,接着出入结点,再次此判断str[0]是否等于‘’,不等于的话,执行内部循环,取对头元素,判断flag是否等于0,如果等于0,将结点接在所取对头的左孩子上,否那么接在右孩子上。

在执行外循环时,如果start2不等于0时,删除对头元素。

3、查询两个家族成员的关系。

由用户输入两个人的XX,Relation()函数调用Confirm〔〕函数,确认用户所输入成员XX是否属于此家族中的成员。

如果属于,用x[M]存放对应的结点,并令全局变量z等于1,在执行Relation〔〕函数时,判断z的值,确定此人是否属于这个家族。

假设属于,令结点不停的指向它的父亲结点,直到父亲结点是根结点,同时应整数形式的w[M]控制执行的次数,作为判断是第几代的根据。

最后,根据w[M]判断两人相差几代。

4、退出家族关系查询系统。

在主函数中,用户选择退出选项在〔即输入6〕,系统执行flag等于0,即控制外循环的变量为0,循环完毕,成功退出家族关系查询系统。

4、调试与分析

4.1、调试过程

在调试程序是主要遇到一下几类问题:

1、当输入此函数时出现了与&相关的错误,例如后面缺少括号以及分号等等以下的错误;

2、输入每个家庭成员的的信息时,兄弟之间没有用“〞区分,导致建立家族关系树时错误。

另外输入不正确,程序有可能出现停顿;

3、在一些函数前不加返回值变量类型,调试时出现逻辑错误;

4、在定义构造体时,定义构造体指针变量,但在程序运行时出现了定义的构造体指针不起作用。

5、在运行程序时,由于没有声明变量,或对于指针变量没有初始化,无法执行程序。

4.2、执行过程

进入家族关系查询系统,系统提示用户输入相关操作:

输入要进展的操作:

1

输入家族的名称:

zhang

输入家族成员XX:

zhangxianzu

输入家族成员XX:

输入家族成员XX:

zhangguoyu

输入家族成员XX:

zhangguojun

输入家族成员XX:

zhangguoqiang

输入家族成员XX:

输入家族成员XX:

zhangyongzhi

输入家族成员XX:

输入家族成员XX:

zhangyongrui

输入家族成员XX:

zhangyongming

输入家族成员XX:

输入家族成员XX:

输入家族成员XX:

zhangwende

输入家族成员XX:

zhangwenjia

输入家族成员XX:

输入家族成员XX:

#

家族关系成功建立!

〔系统接着提示用户输入〕

输入要进展的操作:

2

〔输入结果〕

zhangxianzuzhangguoyuzhangyongzhizhangwende,zhangwenjiazhangguojunzhangyongruizhangyongming

zhangguoqiang

〔系统接着提示用户输入〕

输入要进展的操作:

6

〔输入结果〕

成功退出家族关系查询系统!

4.3、运行时界面

1、运行主函数时。

2、输入要进展的操作。

3、接着根据提示输入相应的操作,输入数据遍历家族关系查询系统中的成员。

4、根据提示选择确定两人关系选项,输入两个人的XX。

 

1、假设输入的人不时家族中得人,运行情况如下。

2、退出家族关系查询系统。

 

完毕语

通过这次课程设计,虽然程序设计和调试的能力有所提升,但最终还是没能独立完成课程设计的课程要求。

这次课程设计使我深刻认识到自己专业知识的匮乏,缺乏独立程序设计的能力。

通过这次的课程设计也是我认识到了我在程序设计方面的严重缺乏,以及专业知识的严重匮乏。

我的程序设计思想和代码的编写和调试能力在此次课设期间有所提高。

这样一种更贴切实际的课程设计,大大的提高了我的学习效率,希望能够在平时教学的时候也能参加一些类似课程设计的程序设计习题。

 

参考文献

【1】严蔚敏、吴伟民.数据构造〔C语言版〕.清华大学

【2】滕国文.数据构造课程设计.清华大学

【3】谭浩强.C程序设计〔第四版〕.清华大学

 

附录

主要程序:

1、主函数程序:

voidmain()

{

intd,flag=1,start1=1,f;

Treet1;

t=&t1;

while(flag)

{

printf("\t\t家族关系查询系统\n");

printf("\t-------------------------------\n");

printf("\t1、新建家族关系\t2、遍历家族成员\n\n");

printf("\t3、确定两人关系\t4、查找\n\n");

printf("\t5、添加家族关系\t6、退出查询系统\n");

printf("\t-------------------------------\n");

A:

printf("输入要进展的操作(1-6):

");

scanf("%d",&d);getchar();

f=1;

if(d<1||d>6)

{

printf("\n输入有误,请重新输入!

\n\n");

gotoA;

}

if((d>1)&&start1)

{

printf("\n\n请先创立家庭关系!

\n\n");

f=0;

}

if(f)

{

switch(d)

{

case1:

Create();start1=0;break;

case2:

Traverse(t);printf("\n\n");break;

case3:

Relation();printf("\n\n");break;

case4:

Search(t);printf("\n\n");break;

case5:

Add(t);printf("\n\n");break;

case6:

flag=0;break;

}

}

}

printf("\n\t家族关系查询系统使用完毕!

\n");

}

2、建立家族关系树程序

voidCreate()

{

charstr[M];

inti=0;

FILE*fp;

t->parent=NULL;

t->lchild=NULL;

t->rchild=NULL;

printf("请输入文件的名称〔家族的名称〕:

");

scanf("%s",filename);getchar();

strcat(filename,".txt");

if((fp=fopen(filename,"w"))==NULL)

{

printf("cannotopen!

");

exit(0);

}

printf("请按层次输入结点〔XX〕,兄弟输入完毕以“〞为标志,完毕标志为“#〞:

\n");

gets(str);

fputs(str,fp);

fputc('\n',fp);

strcpy(fname[i],str);

i++;

while(str[0]!

='#')

{

printf("请继续输入:

\n");

gets(str);

fputs(str,fp);

fputc('\n',fp);

strcpy(fname[i],str);

i++;

}

fclose(fp);

TreeCreate(t);

printf("家族关系已成功建立!

\n\n");

}

voidTreeCreate()

{

Tree*t1,*root=NULL;

LQ*q;

inti=0,flag=0,start2=0;

charstr[M];

q=LQCreateEmpty();

strcpy(str,fname[i]);

while(str[0]!

='#')

{

while(str[0]!

='')

{

if(root==NULL)

{

root=(Tree*)malloc(sizeof(Tree));

strcpy(root->name,str);

root->lchild=NULL;

root->parent=NULL;

root->rchild=NULL;

LQEnQueue(q,root);

t=root;

}

else

{

t1=(Tree*)malloc(sizeof(Tree));

strcpy(t1->name,str);

t1->lchild=NULL;

t1->rchild=NULL;

t1->parent=LQGetFront(q);

LQEnQueue(q,t1);

if(!

flag)

root->lchild=t1;

else

root->rchild=t1;

root=t1;

}

flag=1;

i++;

strcpy(str,fname[i]);

}

if(start2!

=0)

{

LQDeQueue(q);

if(q->front!

=NULL)

root=LQGetFront(q);

}

start2=1;

flag=0;

i++;

strcpy(str,fname[i]);

}

}

3、确定关系函数程序

voidRelation()

{

charstr[2][M];

inti,w[2]={1,1};

v=0;

for(i=0;i<2;i++)

{

printf("请输入第%d个人的XX:

",i+1);

gets(str[i]);

Confirm(t,str[i]);

if(z==1)

y[i]=1;

else

y[i]=0;

z=0;

}

if(y[0]&&y[1])

{

printf("\n两人都属于此家族。

\n\n");

for(i=0;i<2;i++)

{

while(x[i]!

=t)

{

x[i]=x[i]->parent;

w[i]++;

}

}

if(w[0]==w[1])

printf("%s和%s都是第%d代人。

\n",str[0],str[1],w[0]);

elseif(w[0]>w[1])

printf("%s比%s早%d代。

\n",str[1],str[0],w[0]-w[1]);

else

printf("%s比%s早%d代。

\n",str[0],str[1],w[1]-w[0]);

}

elseif(!

y[0]&&y[1])

printf("%s是此家族中的人,%s不是此家族中的人!

\n",str[1],str[0]);

elseif(y[0]&&!

y[1])

printf("%s是此家族中的人,%s不是此家族中的人!

\n",str[0],str[1]);

else

printf("%s和%s都不是此家族中的人!

\n",str[0],str[1]);

}

 

课程设计成绩评定表

评定工程

内容

总分值

评分

总分

学习态度

学习认真,态度端正,遵守纪律。

10

设计情况

认真查阅资料,勤学好问,提出的问题有一定的深度,分析解决问题的能力较强。

40

说明书质量

设计方案正确、表达清楚;设计思路、实验〔论证〕方法科学合理;到达课程设计任务书规定的要求;图、表、文字表达准确标准,上交及时。

40

答复以下问题情况

答复以下问题准确,根本概念清楚,有理有据,有一定深度。

10

总成绩

采用五级分制:

优、良、中、及格、不及格

指导教师评语:

 

签名:

年月日

 

展开阅读全文
相关资源
猜你喜欢
相关搜索

当前位置:首页 > 考试认证 > 从业资格考试

copyright@ 2008-2022 冰豆网网站版权所有

经营许可证编号:鄂ICP备2022015515号-1