ImageVerifierCode 换一换
格式:DOCX , 页数:22 ,大小:361.46KB ,
资源ID:4916368      下载积分:3 金币
快捷下载
登录下载
邮箱/手机:
温馨提示:
快捷下载时,用户名和密码都是您填写的邮箱或者手机号,方便查询和重复下载(系统自动生成)。 如填写123,账号就是123,密码也是123。
特别说明:
请自助下载,系统不会自动发送文件的哦; 如果您已付费,想二次下载,请登录后访问:我的下载记录
支付方式: 支付宝    微信支付   
验证码:   换一换

加入VIP,免费下载
 

温馨提示:由于个人手机设置不同,如果发现不能下载,请复制以下地址【https://www.bdocx.com/down/4916368.html】到电脑端继续下载(重复下载不扣费)。

已注册用户请登录:
账号:
密码:
验证码:   换一换
  忘记密码?
三方登录: 微信登录   QQ登录  

下载须知

1: 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。
2: 试题试卷类文档,如果标题没有明确说明有答案则都视为没有答案,请知晓。
3: 文件的所有权益归上传用户所有。
4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
5. 本站仅提供交流平台,并不能对任何下载内容负责。
6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

版权提示 | 免责声明

本文(家族关系查询系统.docx)为本站会员(b****6)主动上传,冰豆网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。 若此文所含内容侵犯了您的版权或隐私,请立即通知冰豆网(发送邮件至service@bdocx.com或直接QQ联系客服),我们立即给予删除!

家族关系查询系统.docx

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程序执行的命令包括5 2.12程序中的四大模块5结束语14参考文献15附录161 课程设计介绍11、 课程设计内容运用队列的存储结构,构建家族关系树。输入家族的名称,以此名称作文件的名称,建立文本文件。按层次输入结点信息,在文件中每个人的信息占一行,同时保

3、存到树的存储结构中。输入一个结点,若此结点有多个兄弟,以“”作为兄弟结点的结束标志,结点若无孩子,直接以“”作为标志,依次输入各个结点的信息,以“#”作为结束的标志。输入结点的序列为zhangxianzu,zhangguoyu,zhangguojun,zhangguoqiang,zhangyongzhi,zhangyongrui,zhangyongming,zhangwende,zhangwenjia,#。建立家族关系树后,对树进行一些基本操作。首先,对家族关系树遍历,确定家族成员已存入文件,并检验是否成功建立家族关系树。输入两个人的姓名,判断此二人是否属于此家族,若属于就判断此二人的关系。最

4、后,能够成功退出家族关系查询系统。12、 课程设计要求构建家族关系树。使用队列的存储结构,建立家族关系查询系统树。采用指针数组作为队列,保存结点输入的地址。能够遍历家族关系树。遍历家族成员,检验输出信息是否满足要求。成功地判断所输入的两个人是否是家族中得人,如果属于就判断两人的关系。最后,若选择退出,能够成功退出家族关系查询系统。否则,继续输入相关操作。13、课程设计的性质通过数据结构的学习,使自己对软件编程能力有一定的提高。数据结构学习是锻炼学生在进一步掌握模块化、结构化程序设计的方法的同时,培养自己运用已学知识分析问题、解决问题及编写实用程序的能力,通过对线性化、层次化、网络化数据结构的了

5、解进一步掌握自然数据的结构方式及组织方式,让自己深入体会存储在计算机中的数据及程序,如何运用数据实现编程。加深自己对该课程所学内容的进一步的理解与巩固,是将计算机课程与实际问题相联接的关键步骤。通过课程设计,能够提高自己分析问题、解决问题,从而运用所学知识解决实际问题的能力。 1.4、课程设计的目的主要目的如下:1、培养学生运用算法与数据结构的基本知识解决实际编程中的数据结构设计和算法设计问题。2、培养学生独立设计程序与解决问题的能力,培养学生团队协作集成程序模块及调试能力。3、培养学生初步的软件设计及软件测试的能力。 2.课程设计原理2.1、课程设计题目分析演示程序以用户和计算机的对话的方式

6、执行,即在计算机终端上显示“提示信息”之后,由用户在键盘上输入相应的数据(即每个人都所持的密码),每个人的序号由程序自动分配。2.1.1程序执行的命令包括:(1)构造家族关系查询系统(使用树的存储结构);(2)根据提示及使用者的需求,用户选择相关选项,输入相关数据;(3)执行用户所选的选项对应的程序,满足用户需求,实现相关功能;(4)退出家族关系查询系统,结束操作。2.1.2程序中的四个大模块(本程序共有六个模块,其中查找模块又分为六个):(1)家族成员信息录入(构造家族关系查询系统)模块。此模块将对家族关系树初始化,根据用户输入的信息构造家族关系查询系统树,并提醒用户再次输入数据以便后续程序

7、的使用。(2)遍历家族成员模块。此模块将满足用户遍历家族关系查询系统树中的各个成员。另外,可以检测用户输入的信息是否正确,以及浏览家族中的人员。(3)确定两个家族成员的关系模块。由用户输入两个人的名字,此模块实现在整个程序中查找,确定是否有用户输入的人。如果有,则输出两人的之间的关系(即他们相差几代)。(4)主程序中的退出模块。根据用户输入的信息管理控制变量,根据控制变量判断是否退出程序。2.2、课程设计原理图分析 2.2.1、功能模块图 2.2.2、流程图分析1、此部分是家族关系查询系统的主函数。首先,初始化程序中所需要的变量;在输出提示性的语句,等待用户输入将要进行的操作的选项,根据用户输

8、入的数据调用相关的函数。 N Y N Y Y N 2、此部分是创建家族关系树函数,并且保存到文件。用队列的存储结构辅助创建树。 N Y N Y N Y N Y N Y3、此部分是遍历家族成员函数。采用递归的思想,对家族关系树进行遍历。 Y N N Y N Y4、此部分是确定家族成员中两人关系的函数。由用户输入两个人的姓名,系统调用Confirm()函数判断此二人是否属于此家族。若属于,判断两人的关系。 3、数据结构分析3.1、存储结构根据要求首先应该建立一个队列,用队列的存储结构辅助实现家族关系树的建立。树是n(=0)个结点的有限集。在任意一棵非空树中:(1)有且仅有一个特定的称为根的结点;(

9、2)当n1时,其余结点可分为m个互不相交的有限集,其中每个集合本身又是一棵树。设置结构体存储节点:用结构体存储每一个家族成员的基本信息,及结点的左右孩子指针和双亲指针;再使用结构体存储表示队列结点。树的结点结构体:typedef struct TNode char nameM; struct TNode *parent; struct TNode *lchild; struct TNode *rchild;Tree;队列结点结构体:typedef struct Node Tree *info; struct Node *next;Node;typedef struct struct Node

10、*front; struct Node *rear;LQ;3.2、算法描述1、用户进入家族关系查询系统,根据提示输入要进行的操作所对应的选项,用户输入的数据被d接收,系统判断d是否大于7并小于1,如果是,则提醒用户重新输入。否则调用相关函数,执行相应的功能。若用户输入的d的值在1-6之间,如果用户第一次输入的数值大于1,则系统会提醒用户先建立家族关系树。2、建立家族关系树。用户输入家族名称,系统根据家族名称建立对应的文件,用户输入结点信息,系统先将信息保存到文件和fnameM数组中。在建树时,将结点的信息从fnameM数组中复制给str,系统判断str0是否等于#,并且是否等于,直接执行下面的

11、语句,第一次传入结点时,root等于NULL,建立头结点,再次传入结点时,如果str0等于,内部循环结束,接着出入结点,再次此判断str0是否等于,不等于的话,执行内部循环,取对头元素,判断flag是否等于0,如果等于0,将结点接在所取对头的左孩子上,否则接在右孩子上。在执行外循环时,如果start2不等于0时,删除对头元素。3、查询两个家族成员的关系。由用户输入两个人的姓名,Relation()函数调用Confirm()函数,确认用户所输入成员姓名是否属于此家族中的成员。如果属于,用xM存放对应的结点,并令全局变量z等于1,在执行Relation()函数时,判断z的值,确定此人是否属于这个家

12、族。若属于,令结点不停的指向它的父亲结点,直到父亲结点是根结点,同时应整数形式的wM控制执行的次数,作为判断是第几代的根据。最后,根据wM判断两人相差几代。4、退出家族关系查询系统。在主函数中,用户选择退出选项在(即输入6),系统执行flag等于0,即控制外循环的变量为0,循环结束,成功退出家族关系查询系统。4、调试与分析4.1、调试过程在调试程序是主要遇到一下几类问题:1、 当输入此函数时出现了与&相关的错误,例如后面缺少括号以及分号等等以下的错误;2、输入每个家庭成员的的信息时,兄弟之间没有用“”区分,导致建立家族关系树时错误。另外输入不正确,程序有可能出现停止;3、在一些函数前不加返回值

13、变量类型,调试时出现逻辑错误;4、在定义结构体时,定义结构体指针变量,但在程序运行时出现了定义的结构体指针不起作用。5、在运行程序时,由于没有声明变量,或对于指针变量没有初始化,无法执行程序。4.2、执行过程进入家族关系查询系统,系统提示用户输入相关操作:输入要进行的操作:1输入家族的名称:zhang输入家族成员姓名:zhangxianzu输入家族成员姓名:输入家族成员姓名:zhangguoyu输入家族成员姓名:zhangguojun输入家族成员姓名:zhangguoqiang输入家族成员姓名:输入家族成员姓名:zhangyongzhi输入家族成员姓名:输入家族成员姓名:zhangyongru

14、i输入家族成员姓名:zhangyongming输入家族成员姓名:输入家族成员姓名:输入家族成员姓名:zhangwende输入家族成员姓名:zhangwenjia输入家族成员姓名:输入家族成员姓名:#家族关系成功建立!(系统接着提示用户输入)输入要进行的操作:2(输入结果)zhangxianzu zhangguoyu zhangyongzhi zhangwende,zhangwenjia zhangguojun zhangyongrui zhangyongming zhangguoqiang (系统接着提示用户输入)输入要进行的操作:6(输入结果)成功退出家族关系查询系统!4.3、运行时界面1、

15、运行主函数时。2、输入要进行的操作。3、接着根据提示输入相应的操作,输入数据遍历家族关系查询系统中的成员。4、根据提示选择确定两人关系选项,输入两个人的姓名。1、 若输入的人不时家族中得人,运行情况如下。2、 退出家族关系查询系统。结束语通过这次课程设计,虽然程序设计和调试的能力有所提升,但最终还是没能独立完成课程设计的课程要求。这次课程设计使我深刻认识到自己专业知识的匮乏,缺乏独立程序设计的能力。通过这次的课程设计也是我认识到了我在程序设计方面的严重不足,以及专业知识的严重匮乏。我的程序设计思想和代码的编写和调试能力在此次课设期间有所提高。这样一种更贴切实际的课程设计,大大的提高了我的学习效

16、率,希望能够在平时教学的时候也能加入一些类似课程设计的程序设计习题。参考文献【1】严蔚敏、吴伟民.数据结构(C语言版).清华大学出版社【2】滕国文.数据结构课程设计.清华大学出版社【3】谭浩强.C程序设计(第四版).清华大学出版社附录主要程序:1、 主函数程序:void main() 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、添加家族

17、关系t6、退出查询系统n); printf(t-n); A:printf(输入要进行的操作(1-6):); scanf(%d,&d);getchar(); f=1; if(d6) printf(n输入有误,请重新输入!nn); goto A; if(d1)&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 4: Sea

18、rch(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(%s,filename);getchar(); strcat(filename,.txt); if(fp=fopen(fil

19、ename,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(请继续输入:n); gets(str); fputs(str,fp); fputc(n,fp); strcpy(fnamei,str); i+; fclose(fp); TreeCreate(t); printf(家族关系已成功建立!nn);v

20、oid 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!=) 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;

21、 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,fnamei); if(start2!=0) LQDeQueue(q); if(q-front!=NULL) root=LQGetFront(q); start2=1; fla

22、g=0; i+; strcpy(str,fnamei); 3、 确定关系函数程序void Relation() char str2M; int i,w2=1,1; v=0; for(i=0;i2;i+) printf(请输入第%d个人的姓名:,i+1); gets(stri); Confirm(t,stri); if(z=1) yi=1; else yi=0; z=0; if(y0&y1) printf(n两人都属于此家族。nn); for(i=0;iparent; wi+; if(w0=w1) printf(%s和%s都是第%d代人。n,str0,str1,w0); else if(w0w1

23、) printf(%s比%s早%d代。n,str1,str0,w0-w1); else printf(%s比%s早%d代。n,str0,str1,w1-w0); else if(!y0&y1) printf(%s是此家族中的人,%s不是此家族中的人!n,str1,str0); else if(y0&!y1) printf(%s是此家族中的人,%s不是此家族中的人!n,str0,str1); else printf(%s和%s都不是此家族中的人!n,str0,str1);课程设计成绩评定表评定项目内 容满分评分总分学习态度学习认真,态度端正,遵守纪律。10设计情况认真查阅资料,勤学好问,提出的问题有一定的深度,分析解决问题的能力较强。40说明书质量设计方案正确、表达清楚;设计思路、实验(论证)方法科学合理;达到课程设计任务书规定的要求;图、表、文字表达准确规范,上交及时。40回答问题情况回答问题准确,基本概念清楚,有理有据,有一定深度。10总成绩采用五级分制:优、良、中、及格、不及格指导教师评语: 签名: 年 月 日

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

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