大数据结构课程设计家族关系_第1页
大数据结构课程设计家族关系_第2页
大数据结构课程设计家族关系_第3页
大数据结构课程设计家族关系_第4页
大数据结构课程设计家族关系_第5页
已阅读5页,还剩12页未读 继续免费阅读

下载本文档

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

文档简介

1、课程名称:数据结构课程设计 课程设计题目:家族关系查询系统 姓名:周楠院系:计算机学院专业:软件工程年级:2011学号:E01114323指导教师:王爱平2013年9月25日目录1课程设计的目的2需求分析3课程设计报告内容3.1概要设计3.2详细设计3.3调试分析3.4用户手册3.5测试结果3.6程序清单4小结5参考文献1. 课程设计的目的(1) 熟练使用C语言编写程序,解决实际问题;(2) 了解并掌握数据结构与算法的设计方法,具备初步的独立分析和设计能力(3) 初步掌握软件开发过程的问题分析、系统设计、程序编码、测试等基本方 法和技能;(4) 提高综合运用所学的理论知识和方法独立分析和解决问

2、题的能力;2. 需求分析随着社会发展,人们使用纸质的家谱已经非常不方便而且不利于在家谱里进行 添加和修改。而用算法设计一个家族关系查询系统则可以解决这个问题。数据 结构的二叉树刚好满足家谱的基本结构。首先建立一个文件作为家谱,然后在 文件中输入字符串,实现了在文件中按照数据的逻辑关系进进输入便可建立相 应的三叉链表。然后就是进行数据的存储、删除及查找工作。3. 算法分析本次设计研究的是建立家族关系,实现对家族成员关系相关查询的问题。在设 计中使用的数据结构为树状结构,树状结构采用三叉链表实现。我们在建立好 家族关系后将其存储在文件中,在文件中家族关系是以树的形式存储,运用树 的操作使家族关系得

3、以准确建立。家族关系查询系统可分为六大模块,分别是创建、修改、查询、保存、退出等。建立家族关系模块,建立家族关系并存入 文件。建立时首先输入家族关系的名称,以此名称为名建立文本文件。接下来 按层输入成员姓名,输入一个在文件中写入一个字符串,以回车键结束。打开 一个家族关系。在界面输入选项名,以家族关系名为文件名打开文件,如果家 族关系不存在,返回空;如果存在,打开文件,读取文件。向家族中添加一个 新成员,添加的新成员要根据其父亲确定其在家族中的位置。首先判断该父亲 是否在此家族关系中,若存在,则查找其父亲,将新节点插入其父亲的最后一 个孩子之后;若没有孩子,直接作为左孩子插入。以写入的方式打开

4、文件,更 新数组中的信息,然后将数组中的信息写入文件保存,关闭文件。查找功能模 块,查找一个成员的所有祖先及其兄弟,查找一个成员的所有祖先路径,需要 从它的父亲一直向上查找带根结点。查找一个成员的兄弟,一个成员的兄弟为 其父亲除了该结点以外的所有孩子。对于要操作的结点,先判断它是否是根结 点,若是根结点,贝U无兄弟;若不是根结点,贝U找到该结点的父亲。接着判断 父亲的兄弟是否都存在,如果都不存在,则无兄弟;如果都存在,对父亲的孩 子操作。4. 源程序#i nclude #i nclude #i nclude #in cludetypedef char TEIemType;typedef int

5、 status;typedef struct BiTPNodeTElemType data10;父亲及左右孩子指针struct BiTPNode *pare nt,*lchild,*rchild; / BiTPNode,*BiPTree;BiPTree P;BiPTree T;/家谱的创建int Cre()system(cls);FILE *fp; /声明指向文件的指针char file name40,str10;printf(请输入家谱名称:);getchar();gets(file name); /输入家谱名称while(file name0=NULL)printf(家谱名不能为空,请重新

6、输入:);gets(file name);if(fp=fope n(file name,w)=NULL)printf(%s家谱创建失败!n,filename);return 0;printf(请输入家谱内容:n);while (strle n( gets(str)0)fputs(str,fp); /向文件写入字符串putc(n,fp);fclose(fp); / 关闭文件printf(按任一键继续!);getch();return 1;status loc(BiPTree T,BiPTree & P,TElemType name10) if(T)P=T;/字符串的比较if(!strcmp( n

7、ame,T-data) return 1; if(loc(T-lchild,P, name) return 1; if(loc(T-rchild,P, name) return 1;elsereturn 0;/构造二叉树status in ittree(BiPTree & T)T=(BiTPNode *)malloc(sizeof(BiTPNode); if(T) return 0;T-lchild=NULL;T-rchild=NULL;T-pare nt=NULL;return 1;/载入家谱status Crt(BiPTree & T)FILE *fp;BiPTree Q,R,M,N;ch

8、ar file name40, name10;system(cls); / 清屏分配存储空间R=(BiTPNode *)malloc(sizeof(BiTPNode); / M=(BiTPNode *)malloc(sizeof(BiTPNode);N=(BiTPNode *)malloc(sizeof(BiTPNode);printf(请输入家谱名:);getchar();gets(file name);while(file nameO=NULL)printf(家谱名不能为空,请重新输入:);gets(file name);if(fp=fope n(file name,r)=NULL)pri

9、ntf(%s家谱打开失败!n,filename);return 0;in ittree(T);fscan f(fp,%s, name); /从文件读入姓名strcpy(T-data, name);T-lchild=NULL; T-rchild=NULL; T-pare nt=NULL; fclose(fp);if(fp=fope n(file name,r)=NULL)printf(%家谱打开失败!n,filename);return 0;fscan f(fp,%s, name);while(!feof(fp)if(loc(T,P, name)fscan f(fp,%s, name);Q=(B

10、iTPNode *)malloc(sizeof(BiTPNode); strcpy(Q-data, name);P-lchild=Q; /构建孩子Q-pare nt=P;Q-lchild=NULL;Q-rchild=NULL;N=P;else if(!loc(T,P ,n ame)Q=(BiTPNode *)malloc(sizeof(BiTPNode); R=N;R=R-lchild; while(R) M=R;R=R-rchild; strcpy(Q-data, name); M-rchild=Q; Q-pare nt=M; Q-lchild=NULL; Q-rchild=NULL; fs

11、can f(fp,%s, name);printf(信息载入成功,按任一键继续!);getch();return 1;/添加成员status in (BiPTree & T)char father10, name10;BiPTree Q,M;system(cls);printf(请输入要添加到该家谱中的人的父亲姓名:);getchar();gets(father);while(!loc(T,P,father)printf(%s不在该家谱中!请重新输入:,father);gets(father);printf(请输入要添加到该家谱中的人的姓名:);gets( name);Q=(BiTPNode

12、*)malloc(sizeof(BiTPNode);M=(BiTPNode *)malloc(sizeof(BiTPNode);strcpy(Q-data, name);Q-lchild=NULL;Q-rchild=NULL;if(!P-lchild)P-lchild=Q;Q-pare nt=P;else P=P-lchild;while(P)M=P;P=P-rchild;M-rchild=Q;Q-pare nt=M;printf(成员添加成功,按任一键继续!);getch();return 1;/删除成员status de(BiPTree & T)char n ame10;system(cl

13、s);printf(请输入要删除的人的姓名:);getchar();gets( name);while(!loc(T,P, name)printf(%s不在该家谱中!请重新输入:,name);gets( name);if(!P-rchild)if(P-pare nt-lchild=P)P-pare nt-lchild=NULL;elseP-pare nt-rchild=NULL;free(P);else if(P-rchild) if(P-pare nt-lchild=P)P-pare nt-lchild=P-rchild;elseP-pare nt-rchild=P-rchild;free(

14、P);printf( 成员删除成功,按任一键继续!);getch();return 1;status Show(TEIemType e10)prin tf(%s ,e);return 1;/二叉树的遍历status pre(BiPTree T,status(*visit)(TElemType10)if(T) if (*visit)(T-data)if (pre(T-lchild,visit)if (pre(T-rchild,visit) return 1;return 0;else return 1;/家族成员查询status Sea(BiPTree T)char n ame10;BiPTre

15、e N;N=(BiTPNode *)malloc(sizeof(BiTPNode);system(cls);printf(请输入要查寻的人的姓名:);getchar();gets( name);while(!loc(T,P, name)printf(%s不在该家谱中!请重新输入:,name);gets( name);N=P;if(P=T)prin tf(%s的父亲在该家谱中没有记载!n,P-data);else while(N-pare nt-rchild=N)N=N-pare nt;printf(%s的父亲是:%sn,P-data,N-parent-data);N=P;if(P=T)prin

16、tf(%s没有兄弟!n,P-data);else if(!P-rchild&P-pare nt-rchild!=P)printf(%s没有兄弟!n,P-data);else printf(%s的兄弟有:n,name);while(N-rchild)prin tf(%s ,N-rchild-data);N=N-rchild;N=P;while(N-pare nt-rchild=N)prin tf(%s ,N-pare nt-data);N=N-pare nt;prin tf(n);if(P=T)prin tf(%s的祖先在该家谱中没有记载!n, name);elseprintf(%s的祖先是:%

17、sn,name,T-data);N=P;if(!P-lchild)printf(%s没有孩子!n,name);printf(%s没有后代n,name);else printf(%s的孩子有:n,name);prin tf(%s ,P-lchild-data);N=N-lchild;while(N-rchild)prin tf(%s ,N-rchild-data);N=N-rchild;prin tf(n);printf(%s的后代有:n,name);pre(P-lchild,Show);prin tf(n);printf(按任一键继续!);getch();return 1;/文件的创建stat

18、us write(BiPTree T,char file name40)FILE *fp;if(fp=fope n(file name,a+)=NULL)printf(%s文件创建失败!n,filename);return 0;fprin tf(fp,%s ,T-data);T=T-lchild;while(T)fprin tf(fp,%s ,T-data);T=T-rchild;fprin tf(fp,n); /输出fclose(fp);return 1;status prewrite(BiPTree T,status(*visit)(BiPTree,char40),char file na

19、me40)if(T) if (T-lchild)(*visit)(T,file name);prewrite(T-lchild,visit,file name);prewrite(T-rchild,visit,file name);return 1;else return 1;status wron g() char a; scan f(%c,&a);printf(无此选项,请重新选择!(按任一键继续!);getch();return 1;/家谱的存储status Sav(BiPTree T)FILE *fp;char file name40;system(cls);printf(请输入新的文件名:);getchar();gets(file name);while(file name0=NULL)printf(家谱名不能为空,请重新输入:);gets(file name);prewrite(T,write,file name);printf(%s家谱保存成功,按任一键继续!,filename);getch();return 1;/修改家谱status Upd()system(cls);int xz;while(1)system(cls);prin tf(nnnn);printf(家族成员的添加与删除操作n);prin tf(请选择 n);printf(1.添加成员.n

温馨提示

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

评论

0/150

提交评论