还剩29页未读,继续阅读
本资源只提供10页预览,全部文档请下载后查看!喜欢就下载吧,查找使用更方便
文本内容:
课程名称《数据构造》课程设计课程设计题目家族关系查询系统姓名周楠院系计算机学院专业软件工程年级2023学号E01114323指导教师:王爱平2023年9月25日strcpyQ-data,name;〃构建孩子P-lchild=Q;Q-parent=P;Q-lchild=NULL;Q-rchild=NULL;N=P;else if!locT,P,name{Q=BiTPNode*mallocsizeofBiTPNode;R=N;R=R-lchild;whileR{M=R;R=R-rchild;}strcpyQ-data,name;M-rchild=Q;Q-parent=M;Q-lchild=NULL;fscanffp,%s”,name;信息载入成功,按任一键继续!”;printfdgetch;return1;〃添加组员status inBiPTree T{char father
[10],name
[10];BiPTree Q,M;systemnclsw;请输入要添加到该家谱中的人的父亲姓名;printfgetchar;gets father;while!locT,P,father{printf H%s不在该家谱中!请重新输入,father;getsfather;},请输入要添加到该家谱中的人的姓名”;printfgetsname;M=BiTPNode*mallocsizeofBiTPNode;strcpyQ-data,name;Q-lchild=NULL;Q-rchild=NULL;if!P-lchild{P-lchild=Q;Q-parent=P;}else{P=P-lchild;whileP{M=P;P=P-rchild;M-rchild=Q;Q-parent=M;组员添加成功,按任一键继续!printf;getch;return1;〃删除组员status deBiPTree T{char name
[10];systemwclsw;.请输入要删除的人的姓名;printfgetchar;getsname;while!locT,P,name{printf H%s不在该家谱中!请重新输入,name;getsname;}if!P-rchild{ifP-parent-Ichiid==PP-parent-Ichiid=NULL;elseP-parent-rchild=NULL;freeP;}else ifP-rchild{ifP-parent-Ichiid==PP-parent-lchild=P-rchild;elseP-parent-rchild=P-rchild;freeP;}组员删除成功,按任一键继续!;printfCgetch;return1;status ShowTElemTypee
[10]{printfM%s n,e;return1;〃二叉树的遍历status preBiPTree T,status*visitTElemTypeE10]{ifT{if*visitT-dataif preT-lchild,visitif preT-rchild,visit return1;return0;else return1;〃家族组员查询status SeaBiPTree T{char name
[10];BiPTree N;N=BiTPNode*malloc sizeofBiTPNode;systemnclsn;请输入要查寻的人的姓名printf;getchar;getsname;while!locT,P,name{printf,f%s不在该家谱中!请重新输入:name;getsname;}N=P;ifP==Tprintf n%s的父亲在该家谱中没有记载!\n,P-〉data;else{whileN-parent-rchild==NN=N-parent;printf n%s的父亲是:%s\n,P-data,N-parent-data;}N=P;ifP==Tprintf w%s没有兄弟!\n,P-data;else if!P-rchildP-parent-rchiId!=Pprintf n%s没有兄弟!\n,P-data;else{printf w%s的兄弟有\nn,name;whileN-rchiId{printf,r%s w,N-rchild-data;N=N-rchild;N=P;whileN-parent-rchild==N{printf%s w,N-parent-data;N=N-parent;}printf Xn;ifP==Tprintf(n%s的祖先在该家谱中没有记载!\n,name);elseprintf n%s的祖先是:%s\n,name,T-data;N=P;if!P-lchild{printf n%s没有孩子!\n,name;printf n%s没有后裔\n,name;}else{printf w%s的孩子有\nw,name;printf,f%s H,P-lchild-data;.N=N-lchild;whileN-rchiId{printf n%s w,N-rchild-data;N=N-rchild;printf\n;printf w%s的后裔有\nw,name;pre P-IchiId,Show;printf\n;按任一键继续!printf”;.return1;〃文献的创立status writeBiPTreeT,char filename
[40]{FILE*fp;if fp=fopenfilename,f,a+w==NULLprintf n%s文献创立失败!\n,filename;return0;fprintffp,w%s w,T-data;T=T-lchild;whileT{fprintffp,H%s,T-data;T=T-rchild;}//输出fprintf fp,\n;fclosefp;status prewriteBiPTreeT,status*visitBiPTree,char[401,charfilename
[40]{ifT{if T-lchild visitT,filename;♦prewriteT-lchild,visit,filename;prewriteT-rchild,visit,filename;return1;else return1;status wrongchara;scanfn%cw,a;无此选项,请重新选择!按任一键继续!”;printfgetch;return1;1课程设计的目的…2需求分析3课程设计汇报内容
3.1概要设计
3.2详细设计
3.3调试分析
3.4顾客手册
3.5测试成果
3.6程序清单4小结5参照文献・〃家谱的存储status SavBiPTreeT{FILE*fp;char filename
[40];systemnclsn;请输入新的文献名printf;getchar;gets filename;whilefilenameEO]==NULL家谱名不能为空,请重新输入printf;getsfilename;prewriteT,write,filename;printf n%s家谱保留成功,按任一键继续!n.filename;getchO;return1;〃修改家谱status Upd{systemnclsn;int xz;while1systemnclsw;printf\n\n\n\n;printfn家族组员的添加与删除操作\n;请选择printf\n;.添加组员.printf1\n;printf n
2.删除组员.\n;printf n
3.返回上一级.\n;printfff请选择;scanfw%dn,xz;switchxz{case1inT;break;case2de T;break;case3return0;defaultwrong;break;mainOP=BiTPNode*mallocsizeofBiTPNode;int xz;while1systemnclsw;printfn\n\n\n\nw;printf(n家族关系查询系统\n);printf(n详细操作如下\n);printf(n
1.创立家谱.\n);printf(n
2.载入家谱.\n);printf(n
3.修改家谱.\n“);printf(n4,查寻组员.\n);printf f,
5.保留家谱.\nH;printfn
6.退出程序.\P;printfn请选择操作;scanfw%dff,xz;switchxzcase1Cre;break;case2Crt⑴;break;case3Upd0;break;case4Sea T;break;case5Sav T;break;case6return0;default.wrong;break;运行截图:5询系日下外人改塞寻选军择■j F:\Microsoft VisualStudio\MyProjects\we\Debug\we.exe家
2.
3.一级・请选择.■j F:\Microsoft VisualStudio\MyProjects\^l^l\Debug\^^l.exe.添加成员.1iX-I22■j F:\Microsoft VisualStudio\MyProjects\^l^l\Debug\^^l.exeMW®■j F:\Microsoft VisualStudio\MyProjects\^l^l\Debug\^^l.exe盾住谱加功家士刖・哇最软该养在入添幺吠靖EM0ETMicrosoft VisualStudio\MyProjects\^l^l\Debug\^^l.exe请翦杳百着廷石:寻2SA的要亲弟屯屯屯屯屯屯屯屯屯用人父兄的没・续是僵子有祖有按有一AstASifsE^ASASQ:•.课程设计的目的1纯熟使用语言编写程序,处理实际问题;1c理解并掌握数据构造与算法的设计措施,具有初步的独立分析和设计能力;2初步掌握软件开发过程的问题分析、系统设计、程序编码、测试等基本措施3和技能;提高综合运用所学的理论知识和措施独立分析和处理问题的能力;
4.需求分析2伴随社会发展,人们使用纸质的家谱已经非常不以便并且不利于在家谱里进行添加和修改而用算法设计一种家族关系查询系统则可以处理这个问题数据构造的二叉树刚好满足家谱的基本构造首先建立一种文献作为家谱,然后在文献中输入字符串,实现了在文献中按照数据的逻辑关系进进输入便可建立对应的三叉链表然后就是进行数据的存储、删除及查找工作算法分析
3.本次设计研究的是建立家族关系,实现对家族组员关系有关查询的问题在设计中使用的数据构造为树状构造,树状构造采用三叉链表实现我们在建立好家族关系后将其存储在文献中,在文献中家族关系是以树的形式存储,运用树的操作使家族关系得以精确建立家族关系查询系统可分为六大模块,分别是创立、修改、查询、保留、退出等建立家族关系模块,建立家族关系并存入文献建立时首先输入家族关系的名称,以此名称为名建立文本文献接下来按层输入组员姓名,输入一种在文献中写入一种字符串,以回车键结束打开一种家族关系在界面输入选项名,以家族关系名为文献名打开文献,假如家族关系不存在,返回空;假如存在,打开文献,读取文献向家族中添加一种新组员,添加的新组员要根据其父亲确定其在家族中的位置首先判断该父亲与否在此家族关系中,若存在,则查找其父亲,将新节点插入其父亲时最终一种孩子之后;若没有孩子,直接作为左孩子插入以写入的方式打开文献,更新数组中的信息,然后将数组中的信息写入文献保留,关闭文献查找功能模块,查找一种组员的所有祖先及其兄弟,查找一种组员的所有祖先途径,需要从它的父亲一直向上查找带根结点查找一种组员的兄弟,一种组员的兄弟为其父亲除了该结点以外的所有孩子对于要操作的结点,先判断它与否是根结点,若是根结点,则无兄弟;若不是根结点,则找到该结点的父亲接着判断父亲的兄弟与否都存在,假如都不存在,则无兄弟;假如都存在,对父亲的孩子操作.源程序4#include stdio.h ftincludestdlib.h ttincludestring.h#includeconio.htypedef charTElemType;typedef intstatus;typedef struct BiTPNode{TElemType data
[10];〃父亲及左右孩子指针structBiTPNode*parent,*lchild,*rchild;}BiTPNode,*BiPTree;BiPTree P;BiPTreeT;〃家谱的创立int CreOsystemnclsw;〃申明指向文献的指针FILE*fp;char filename
[40],strE10];请输入家谱名称printf;getchar;〃输入家谱名称gets filename;whilefilename
[0]==NULL(家谱名不能为空,请重新输入printf);gets filename;if fp=fopenfilename,frwfr==NULL{printf,f%s家谱创立失败!\n,filename;return0;请输入家谱内容:printf\n;while strlengetsstr0〃向文献写入字符串fputsstr.fp;putc,\n,,fp;〃关闭文献fclosefp;按任一键继续!;printfgetch;return1;status locBiPTreeT,BiPTree P,TElemType name
[10]{ifTP=T;〃字符串的比较if!strcmpname,T-data return1;iflocT-lchild,P,name return1;iflocT-rchild,P,name return1;elsereturn0;〃构造二叉树status inittreeBiPTreeT{T=BiTPNode*mallocsizeofBiTPNode;ifTreturn0;T-lchild=NULL;T-rchild=NULL;T-parent=NULL;return1;〃载入家谱status CrtBiPTreeT{FILE*fp;BiPTree Q,R,M,N;char filename
[40],name
[10];〃清屏system cis;〃分派存储空间R=BiTPNode*malloc sizeofBiTPNode;M=BiTPNode*mallocsizeofBiTPNode;N=BiTPNode*mallocsizeofBiTPNode;请输入家谱名;printfgetchar;getsfilename;whilefilenameE0]==NULL家谱名不能为空,请重新输入〃;printfgetsfilename;if fp=fopenfilename,wrw==NULLprintf,f%s家谱打开失败!\n,filename;return0;inittreeT;fscanf fp,w%sn,name;〃从文献读入姓名strcpyT-data,name;T-lchild=NULL;T-rchild=NULL;T-parent=NULL;fclosefp;if fp=fopenfilename,wrw==NULL家谱打开失败失printf%n”,filename;return0;吗fscanffp,s,name;while!feoffp{iflocT,P,name{fscanf fp,%s,name;。
个人认证
优秀文档
获得点赞 0