家族关系查询系统_第1页
家族关系查询系统_第2页
家族关系查询系统_第3页
家族关系查询系统_第4页
家族关系查询系统_第5页
已阅读5页,还剩29页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

1、课程设计说明书 题目: 家族关系查询系统 姓 名: 院 (系): 信 息 工 程 学 院 专业班级:16级计算机科学与技术二班 学 号: 指导教师: 成 绩: 时间: 2018 年1 月 2日至 2018 年 1 月 11 日 课程设计任务书 题目 家族关系查询系统 专业、班级16级计算机科学与技术二班 学号 姓名 基本要求:1、建立家族关系并能存储到文件;2、对于建立的家族关系能够遍历家族成员,输入两个人的名字能够确定二人的关系;3、实现家族成员的添加。4、可以查询家族成员的双亲、祖先、兄弟、孩子和后代等信息。主要参考资料:【1】严蔚敏、吴伟民.数据结构(C语言版).清华大学出版社【2】滕国

2、文.数据结构课程设计.清华大学出版社【3】谭浩强.C程序设计(第四版).清华大学出版社 完 成 期 限: 2018.1.2-2018.1.11 指导教师签名: 课程负责人签名: 目 录1、课程设计介绍41.1课程设计内容41.2课程设计要求41.3课程设计性质41.4课程设计目的42、课程设计原理42.1课程设计题目分析2.1.1程序执行的命令包括52.12程序中的四大模块52.2 课程设计原理图分析52.2.1 功能模块图52.2.2 流程图分析63、数据结构分析93.1 存储结构93.2 算法描述104、调试与分析104.1 调试过程104.2执行过程114.3运行时的界面12结束语14参

3、考文献15附录161 课程设计介绍11、 课程设计内容运用队列的存储结构,构建家族关系树。输入家族的名称,以此名称作文件的名称,建立文本文件。按层次输入结点信息,在文件中每个人的信息占一行,同时保存到树的存储结构中。输入一个结点,若此结点有多个兄弟,以“”作为兄弟结点的结束标志,结点若无孩子,直接以“”作为标志,依次输入各个结点的信息,以“#”作为结束的标志。输入结点的序列为zhangxianzu,zhangguoyu,zhangguojun,zhangguoqiang,zhangyongzhi,zhangyongrui,zhangyongming,zhangwende,zhangwenjia

4、,#。建立家族关系树后,对树进行一些基本操作。首先,对家族关系树遍历,确定家族成员已存入文件,并检验是否成功建立家族关系树。输入两个人的姓名,判断此二人是否属于此家族,若属于就判断此二人的关系。最后,能够成功退出家族关系查询系统。12、 课程设计要求构建家族关系树。使用队列的存储结构,建立家族关系查询系统树。采用指针数组作为队列,保存结点输入的地址。能够遍历家族关系树。遍历家族成员,检验输出信息是否满足要求。成功地判断所输入的两个人是否是家族中得人,如果属于就判断两人的关系。最后,若选择退出,能够成功退出家族关系查询系统。否则,继续输入相关操作。13、课程设计的性质通过数据结构的学习,使自己对

5、软件编程能力有一定的提高。数据结构学习是锻炼学生在进一步掌握模块化、结构化程序设计的方法的同时,培养自己运用已学知识分析问题、解决问题及编写实用程序的能力,通过对线性化、层次化、网络化数据结构的了解进一步掌握自然数据的结构方式及组织方式,让自己深入体会存储在计算机中的数据及程序,如何运用数据实现编程。加深自己对该课程所学内容的进一步的理解与巩固,是将计算机课程与实际问题相联接的关键步骤。通过课程设计,能够提高自己分析问题、解决问题,从而运用所学知识解决实际问题的能力。 1.4、课程设计的目的主要目的如下:1、培养学生运用算法与数据结构的基本知识解决实际编程中的数据结构设计和算法设计问题。2、培

6、养学生独立设计程序与解决问题的能力,培养学生团队协作集成程序模块及调试能力。3、培养学生初步的软件设计及软件测试的能力。 2.课程设计原理2.1、课程设计题目分析演示程序以用户和计算机的对话的方式执行,即在计算机终端上显示“提示信息”之后,由用户在键盘上输入相应的数据(即每个人都所持的密码),每个人的序号由程序自动分配。2.1.1程序执行的命令包括:(1)构造家族关系查询系统(使用树的存储结构);(2)根据提示及使用者的需求,用户选择相关选项,输入相关数据;(3)执行用户所选的选项对应的程序,满足用户需求,实现相关功能;(4)退出家族关系查询系统,结束操作。2.1.2程序中的四个大模块(本程序

7、共有六个模块,其中查找模块又分为六个):(1)家族成员信息录入(构造家族关系查询系统)模块。此模块将对家族关系树初始化,根据用户输入的信息构造家族关系查询系统树,并提醒用户再次输入数据以便后续程序的使用。(2)遍历家族成员模块。此模块将满足用户遍历家族关系查询系统树中的各个成员。另外,可以检测用户输入的信息是否正确,以及浏览家族中的人员。(3)确定两个家族成员的关系模块。由用户输入两个人的名字,此模块实现在整个程序中查找,确定是否有用户输入的人。如果有,则输出两人的之间的关系(即他们相差几代)。(4)主程序中的退出模块。根据用户输入的信息管理控制变量,根据控制变量判断是否退出程序。2.2、课程

8、设计原理图分析2.2.1、功能模块图家族关系查询系统主函数建立家族关系树遍历家族关系树航空订票系统主菜单确定家族成员中两人关系2.2.2、流程图分析1、此部分是家族关系查询系统的主函数。首先,初始化程序中所需要的变量;在输出提示性的语句,等待用户输入将要进行的操作的选项,根据用户输入的数据调用相关的函数。开始声明变量t、f初始化flag=1,start1=1flag=1 N Y提示用户输入d的值0<d<7 Nd>1&&start1 Y Y N 调用相关函数退出2、此部分是创建家族关系树函数,并且保存到文件。用队列的存储结构辅助创建树。输入成员信息并存入文件,开

9、始建树将文件中的一个结点入队str0!=# Nstr0!= Y N Yroot=NULL N Y建立树的头结点取队头作结点的双亲,flag=0 N Y接双亲结点的左孩子接双亲结点的右孩子start2=0 N Y队头元素出队成功建立家族关系树3、此部分是遍历家族成员函数。采用递归的思想,对家族关系树进行遍历。传入一个结点tt=NULL Y N输出结点信息,t=t->lchild t=NULL N Y输出结点信息,t=t->rchildt=NULL N Y返回上级调用结束4、此部分是确定家族成员中两人关系的函数。由用户输入两个人的姓名,系统调用Confirm()函数判断此二人是否属于此

10、家族。若属于,判断两人的关系。输入姓名调用confirm()函数t=NULL输出谁不是家族中的人输出两人的关系3、数据结构分析3.1、存储结构根据要求首先应该建立一个队列,用队列的存储结构辅助实现家族关系树的建立。树是n(>=0)个结点的有限集。在任意一棵非空树中:(1)有且仅有一个特定的称为根的结点;(2)当n>1时,其余结点可分为m个互不相交的有限集,其中每个集合本身又是一棵树。设置结构体存储节点:用结构体存储每一个家族成员的基本信息,及结点的左右孩子指针和双亲指针;再使用结构体存储表示队列结点。树的结点结构体:typedef struct TNodechar nameM;st

11、ruct TNode *parent;struct TNode *lchild;struct TNode *rchild;Tree;队列结点结构体:typedef struct NodeTree *info;struct Node *next;Node;typedef structstruct Node *front;struct Node *rear;LQ;3.2、算法描述1、用户进入家族关系查询系统,根据提示输入要进行的操作所对应的选项,用户输入的数据被d接收,系统判断d是否大于7并小于1,如果是,则提醒用户重新输入。否则调用相关函数,执行相应的功能。若用户输入的d的值在1-6之间,如果用

12、户第一次输入的数值大于1,则系统会提醒用户先建立家族关系树。2、建立家族关系树。用户输入家族名称,系统根据家族名称建立对应的文件,用户输入结点信息,系统先将信息保存到文件和fnameM数组中。在建树时,将结点的信息从fnameM数组中复制给str,系统判断str0是否等于#,并且是否等于,直接执行下面的语句,第一次传入结点时,root等于NULL,建立头结点,再次传入结点时,如果str0等于,内部循环结束,接着出入结点,再次此判断str0是否等于,不等于的话,执行内部循环,取对头元素,判断flag是否等于0,如果等于0,将结点接在所取对头的左孩子上,否则接在右孩子上。在执行外循环时,如果sta

13、rt2不等于0时,删除对头元素。3、查询两个家族成员的关系。由用户输入两个人的姓名,Relation()函数调用Confirm()函数,确认用户所输入成员姓名是否属于此家族中的成员。如果属于,用xM存放对应的结点,并令全局变量z等于1,在执行Relation()函数时,判断z的值,确定此人是否属于这个家族。若属于,令结点不停的指向它的父亲结点,直到父亲结点是根结点,同时应整数形式的wM控制执行的次数,作为判断是第几代的根据。最后,根据wM判断两人相差几代。4、退出家族关系查询系统。在主函数中,用户选择退出选项在(即输入6),系统执行flag等于0,即控制外循环的变量为0,循环结束,成功退出家族

14、关系查询系统。4、调试与分析4.1、调试过程在调试程序是主要遇到一下几类问题:1、 当输入此函数时出现了与&相关的错误,例如后面缺少括号以及分号等等以下的错误;2、输入每个家庭成员的的信息时,兄弟之间没有用“”区分,导致建立家族关系树时错误。另外输入不正确,程序有可能出现停止;3、在一些函数前不加返回值变量类型,调试时出现逻辑错误;4、在定义结构体时,定义结构体指针变量,但在程序运行时出现了定义的结构体指针不起作用。5、在运行程序时,由于没有声明变量,或对于指针变量没有初始化,无法执行程序。4.2、执行过程进入家族关系查询系统,系统提示用户输入相关操作:输入要进行的操作:1输入家族的名

15、称:zhang输入家族成员姓名:zhangxianzu输入家族成员姓名:输入家族成员姓名:zhangguoyu输入家族成员姓名:zhangguojun输入家族成员姓名:zhangguoqiang输入家族成员姓名:输入家族成员姓名:zhangyongzhi输入家族成员姓名:输入家族成员姓名:zhangyongrui输入家族成员姓名:zhangyongming输入家族成员姓名:输入家族成员姓名:输入家族成员姓名:zhangwende输入家族成员姓名:zhangwenjia输入家族成员姓名:输入家族成员姓名:#家族关系成功建立!(系统接着提示用户输入)输入要进行的操作:2(输入结果)zhangxia

16、nzuzhangguoyu zhangyongzhi zhangwende,zhangwenjia zhangguojun zhangyongrui zhangyongming zhangguoqiang (系统接着提示用户输入)输入要进行的操作:6(输入结果)成功退出家族关系查询系统!4.3、运行时界面1、运行主函数时。2、输入要进行的操作。3、接着根据提示输入相应的操作,输入数据遍历家族关系查询系统中的成员。4、根据提示选择确定两人关系选项,输入两个人的姓名。1、 若输入的人不时家族中得人,运行情况如下。2、 退出家族关系查询系统。结束语通过这次课程设计,虽然程序设计和调试的能力有所提升,

17、但最终还是没能独立完成课程设计的课程要求。这次课程设计使我深刻认识到自己专业知识的匮乏,缺乏独立程序设计的能力。通过这次的课程设计也是我认识到了我在程序设计方面的严重不足,以及专业知识的严重匮乏。我的程序设计思想和代码的编写和调试能力在此次课设期间有所提高。这样一种更贴切实际的课程设计,大大的提高了我的学习效率,希望能够在平时教学的时候也能加入一些类似课程设计的程序设计习题。参考文献【1】严蔚敏、吴伟民.数据结构(C语言版).清华大学出版社【2】滕国文.数据结构课程设计.清华大学出版社【3】谭浩强.C程序设计(第四版).清华大学出版社附录主要程序:1、 主函数程序:void main()int

18、 d,flag=1,start1=1,f;Tree t1;t=&t1;while(flag)printf("tt家族关系查询系统n");printf("t-n");printf("t1、新建家族关系t2、遍历家族成员nn");printf("t3、确定两人关系t4、查找nn");printf("t5、添加家族关系t6、退出查询系统n");printf("t-n");A:printf("输入要进行的操作(1-6):");scanf("%d&

19、quot;,&d);getchar();f=1;if(d<1|d>6)printf("n输入有误,请重新输入!nn");goto A;if(d>1)&&start1)printf("nn请先创建家庭关系!nn");f=0;if(f)switch(d)case 1: Create();start1=0;break;case 2: Traverse(t);printf("nn");break;case 3: Relation();printf("nn");break;case

20、4: Search(t);printf("nn");break;case 5: Add(t);printf("nn");break;case 6: flag=0;break;printf("nt家族关系查询系统使用结束!n");2、 建立家族关系树程序void Create()char strM;int i=0;FILE *fp;t->parent=NULL;t->lchild=NULL;t->rchild=NULL;printf("请输入文件的名称(家族的名称):");scanf("%

21、s",filename);getchar();strcat(filename,".txt");if(fp=fopen(filename,"w")=NULL)printf("can not open!");exit(0);printf("请按层次输入结点(姓名),兄弟输入结束以“”为标志,结束标志为“#”:n");gets(str);fputs(str,fp);fputc('n',fp);strcpy(fnamei,str);i+;while(str0!='#')printf

22、("请继续输入:n");gets(str);fputs(str,fp);fputc('n',fp);strcpy(fnamei,str);i+;fclose(fp);TreeCreate(t);printf("家族关系已成功建立!nn");void TreeCreate()Tree *t1,*root=NULL;LQ *q;int i=0,flag=0,start2=0;char strM;q=LQCreateEmpty();strcpy(str,fnamei);while(str0!='#')while(str0!=&#

23、39;')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;elset1=(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;elseroot->rchild=t1;root=t1;flag=1;i+;strcpy(str,fnamei);if(start2!=0)LQDeQueue(q);if(q->front!=NULL)root=LQGetFront(q);start2=1;flag=0;i+;strcpy(str,fnamei);3、 确定关系函数程序void Relation()char str2M;int i,w2=1,1;v=0;for(i=0;i<2;i+)

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论