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

下载本文档

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

文档简介

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

2、.清华大学完 成 期 限:指导教师签名:课程负责人签名:1、课程设计介绍1.1课程设计容41.2课程设计要求 41.3课程设计性质 41.4课程设计目的 42、 课程设计原理 42.1课程设计题目分析程序执行的命令包括52.12程序中的四大模块52.2课程设计原理图分析 52.2.1 功能模块图52.2.2 流程图分析 63、数据结构分析93.1存储结构93.2算法描述104、调试与分析 104.1调试过程104.2执行过程 114.3运行时的界面12结束语 1416参考文献 15 附录1课程设计介绍1.1、课程设计容运用队列的存储结构,构建家族关系树。输入家族的名称,以此名 称作文件的名称,

3、建立文本文件。按层次输入结点信息,在文件中每个 人的信息占一行,同时保存到树的存储结构中。输入一个结点,若此结 点有多个兄弟,以“”作为兄弟结点的结束标志,结点若无孩子,直接 以“”作为标志,依次输入各个结点的信息,以“ #”作为结束的标志。 输 入结点 的序歹U 为 zhangxianzu, zhangguoyu, zhangguojun, zhangguoqiang,, zhangyongzhi, zhangyongrui, zhangyongming, zhangwende zhangwenjia,,#。建立家族关系树后,对树进行一些基本操作。首先,对家族关系树 遍历,确定家族成员已存入

4、文件,并检验是否成功建立家族关系树。输入两个人的,判断此二人是否属于此家族,若属于就判断此二人 的关系。最后,能够成功退出家族关系查询系统。1. 2、课程设计要求构建家族关系树。使用队列的存储结构,建立家族关系查询系统树。 采用指针数组作为队列,保存结点输入的地址。能够遍历家族关系树。遍历家族成员,检验输出信息是否满足要求。成功地判断所输入的两个人是否是家族中得人,如果属于就判断两人 的关系。最后,若选择退出,能够成功退出家族关系查询系统。否则,继续输 入相关操作。1. 3、课程设计的性质通过数据结构的学习,使自己对软件编程能力有一定的提高。数据结构学习是 锻炼学生在进一步掌握模块化、结构化程

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

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

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

8、、此部分是家族关系查询系统的主函数。首先,初始化程序中所需要 变量;在输出提示性的语句,等待用户输入将要进行的操作的选项, 用户输入的数据调用相关的函数。2、此部分是创建家族关系树函数,并且保存到文件。用队列的存储结构 辅助创建树。输入成员信息并存入文件,开始建树将文件中的一个结点入队strO!= ' #'str0!='N root=NULL建立树的头结点取队头作结点的双亲,flag=O接双亲结点的左孩子接双亲结点的右孩子Nstart2=03、此部分是遍历家族成员函数。采用递归的思想,对家族关系树进行遍 历。4、此部分是确定家族成员中两人关系的函数。由用户输入两个人的,

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

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

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

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

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

14、要进行的操作:1输入家族的名称:zha ng输入家族成员:zha ngxia nzu输入家族成员:输入家族成员:zha ngguoyu输入家族成员:zha ngguoj un输入家族成员:zha ngguoqia ng输入家族成员:输入家族成员:zha ngyon gzhi输入家族成员:输入家族成员:zha ngyon grui输入家族成员:zha ngyongming输入家族成员:输入家族成员:输入家族成员:zha ngwe nde输入家族成员:zha ngwenjia输入家族成员:输入家族成员:#家族关系成功建立!(系统接着提示用户输入)输入要进行的操作:2(输入结果)zhangxianz

15、u zhangguoyu zhangyongzhi zhangwende , zhangwenjiazha ngguoj un zha ngyon grui zha ngyongmingzha ngguoqia ng(系统接着提示用户输入) 输入要进行的操作:6(输入结果)成功退出家族关系查询系统!4.3、运行时界面1、运行主函数时。2、输入要进行的操作。&lt±u-u y冲詔xijmv;slodfio 20L0,Projeclsg lazuguanl butDr'iigDeb<jgly> sizj话诊窝入曇点兄弟筍入轟以*r为标志.踣更标志为"

16、” zhAJiqrxljuisu削It綁八:*訂带启输人 zhan<vqu<oyu -扒FJ瓠:釈it期乳/_: in 卿 曽酣躺I. 诒巡列輔人 zhan*g yomjiuhi 徐It脚人 han 卿 vomifLU i 诒證鴻宀 zhan? Monqri in 号 釈世囹輛人: 站蜩丄3、接着根据提示输入相应的操作,输入数据遍历家族关系查询系统中的 成员。关農己咸功矍毎录旗关.诙51铸-祜隹蜕蔗丢耳氛遍帀冢棧成员J- E走网心系仏国找氣沃M:亭旗氏气氣退出査询系统toASitfr 的幄作azJMunsgpcinziuhungguosjuzhknngoingzhihnffucnd

17、ce hafigwcn jinv. IwiligiyiMci Ju lr|iit h&ny uli UJ-£ tiMing-uill yn in y丄 lini|jiy利口爼 in甘叢世野蛋旬寻统;亓冠鹼系筑遞諒隹忌負x餌定两人矢瘗 < 查找5、毎加嶷关系4退岀査询篆统翎入婴11彳泄操lV<m -4、根据提示选择确定两人关系选项,输入两个人的蛊 hen 殖 moli«in ri«iin mi FL/ h*i 11 ci yn >i irrii 匚早 i I4':A.郡层二此黑住:e: yu-sotsV £ no.: .d

18、 ne 忑: t:. it b._ _i_ jljm/?案费蠻査恂系城1、新建輸关系a. ifi历家庶趣3、嵋示两人壬系冬古挣氣 勵家族关漿J也出沓荀聚垮1£c I 1.- n ; lf.& % % -fH-l -2 .-8 零 <A 0LL+LL1、若输入的人不时家族中得人,运行情况如下2、退出家族关系查询系统。BE1E冢族关糸金询家顿 匚弔直融斥=矗忘議五焉j*确定两人关杀蛊杏找畀爲加衣族关茶6,週出查询慕统讷入要进行的操件C1F; &寂旅矢系丑再绞便月结刃Pr«SB l»v to G&ntiniUiD结束语通过这次课程设计,虽然

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

20、id mai n()int 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):");s

21、can f("%d",&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);pri ntf("nn");break;case 3: Relatio n();pri ntf(&qu

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

23、的名称):");sca nf("%s",file name);getchar();strcat(file name,".txt");if(fp=fope n(file name,"w")=NULL)prin tf("ca n not ope n!");exit(O);printf("请按层次输入结点(),兄弟输入结束以“”为标志, 结束标志为“ #” :n");gets(str);fputs(str,fp);fputc('n',fp);strcpy(fnamei,str

24、);i+;while(strO!=#)prin tf("请继续输入: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!=

25、#)while(str0!='')if(root=NULL)root=(Tree *)malloc(sizeof(Tree); strcpy(root- >n ame,str); root->lchild=NULL;root->pare nt=NULL; root->rchild=NULL;LQE nQueue(q,root);t=root;elset1=(Tree *)malloc(sizeof(Tree); strcpy(t1- >n ame,str); t1->lchild=NULL;t1->rchild=NULL;t1->pare nt=LQGetFro nt(q);LQEn Queue(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->fro nt!=NULL) root=LQGetFro nt(q);start2=1;flag=0;i+;strcpy(str,fnamei);3、确定关系

温馨提示

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

评论

0/150

提交评论