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

加入VIP,免费下载
 

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

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

下载须知

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

版权提示 | 免责声明

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

数据结构课程设计总结报告.docx

1、数据结构课程设计总结报告郑州轻工业学院课 程 设 计 任 务 书题目 家族关系查询系统 专业、班级 软件外包11-01 学号 541107080145 姓名 周朱莉 主要内容、基本要求、主要参考资料等:主要内容:建立家族关系数据库,实现对家族成员关系的相关查询。基本要求:(1)建立家族关系并能存储到文件中;(2)实现家族成员的添加。(3)可以查询家族成员的双亲、祖先、兄弟、孩子和后代等信息。课程设计按照教学要求需要一周时间完成,总共要上机调试程序10小时。对每个题目要有需求分析,在需求分析中,将题目中要求的功能进行叙述分析,并且设计解决此问题的数据存储结构,设计或叙述解决此问题的算法,描述算法

2、建议使用流程图,进行算法分析指明关键语句的时间复杂度。给出实现功能的一组或多组测试数据,程序调试后,将按照此测试数据进行测试的结果列出来 。源程序要按照写程序的规则来编写。要结构清晰,重点函数的重点变量,重点功能部分要加上清晰的程序注释。程序能够运行,要有基本的容错功能。尽量避免出现操作错误时出现死循环; 主要参考资料:数据结构(C语言版),在网上查询的相关资料及部分代码完 成 期 限: 2013.6.18-2013.6.20 指导教师签名: 课程负责人签名: 2013年 6 月 18 日郑州轻工业学院本科数据结构课程设计总结报告设计题目:家族关系查询系统学生姓名:周朱莉系 别:计算机与通信工

3、程专 业:软件外包班 级:11-01学 号:541107080145指导教师:卢冰 2013年 6 月 20 日一、 设计题目(任选其一) 家族关系查询系统二、 运行环境(软、硬件环境)电脑 及Visual C+ 6.0三、 算法设计的思想随着社会发展,人们使用纸质的家谱已经非常不方便而且不利于在家谱里进行添加和修改。而用算法设计一个家族关系查询系统则可以解决这个问题。数据结构的二叉树刚好满足家谱的基本结构。首先建立一个文件作为家谱,然后在文件中输入字符串,实现了在文件中按照数据的逻辑关系进进输入便可建立相应的三叉链表。然后就是进行数据的存储、删除及查找工作。四、 算法的流程图家谱的创建:开始

4、 载入家谱: 载入成功结束家谱是否存在?家谱打开失败是否 修改家谱: 选择 成员查询:开始 输入成员名成员是否存在?不在家谱中,请重新输入是否 输出成员信息结束五、 算法设计分析本次设计研究的是建立家族关系,实现对家族成员关系相关查询的问题。在设计中使用的数据结构为树状结构,树状结构采用三叉链表实现。我们在建立好家族关系后将其存储在文件中,在文件中家族关系是以树的形式存储,运用树的操作使家族关系得以准确建立。 家族关系查询系统可分为六大模块,分别是创建、修改、查询、保存、退出等。建立家族关系模块,建立家族关系并存入文件。建立时首先输入家族关系的名称,以此名称为名建立文本文件。接下来按层输入成员

5、姓名,输入一个在文件中写入一个字符串,以回车键结束。打开一个家族关系。在界面输入选项名,以家族关系名为文件名打开文件,如果家族关系不存在,返回空;如果存在,打开文件,读取文件。向家族中添加一个新成员,添加的新成员要根据其父亲确定其在家族中的位置。首先判断该父亲是否在此家族关系中,若存在,则查找其父亲,将新节点插入其父亲的最后一个孩子之后;若没有孩子,直接作为左孩子插入。以写入的方式打开文件,更新数组中的信息,然后将数组中的信息写入文件保存,关闭文件。查找功能模块,查找一个成员的所有祖先及其兄弟,查找一个成员的所有祖先路径,需要从它的父亲一直向上查找带根结点。查找一个成员的兄弟,一个成员的兄弟为

6、其父亲除了该结点以外的所有孩子。对于要操作的结点,先判断它是否是根结点,若是根结点,则无兄弟;若不是根结点,则找到该结点的父亲。接着判断父亲的兄弟是否都存在,如果都不存在,则无兄弟;如果都存在,对父亲的孩子操作。六、源代码#include #include #include #include typedef char TElemType; typedef int status; typedef struct BiTPNode TElemType data10; struct BiTPNode *parent,*lchild,*rchild; /父亲及左右孩子指针BiTPNode,*BiPTre

7、e; BiPTree P; BiPTree T; /家谱的创建int Cre() system(cls); FILE *fp; /声明指向文件的指针 char 40,str10; printf(请输入家谱名称:); getchar(); gets(); /输入家谱名称 while(0=NULL) printf(家谱名不能为空,请重新输入:); gets(); if(fp=fopen(,w)=NULL) printf(%s家谱创建失败!n,); return 0; printf(请输入家谱内容:n); while (strlen(gets(str)0) fputs(str,fp); /向文件写入

8、字符串 putc(n,fp); fclose(fp); /关闭文件 printf(按任一键继续!); getch(); return 1; status loc(BiPTree T,BiPTree &P,TElemType name10) if(T) P=T; /字符串的比较 if(!strcmp(name,T-data) return 1; if(loc(T-lchild,P,name) return 1; if(loc(T-rchild,P,name) return 1; else return 0; /构造二叉树status inittree(BiPTree &T) T=(BiTPNod

9、e *)malloc(sizeof(BiTPNode); if(T) return 0; T-lchild=NULL; T-rchild=NULL; T-parent=NULL; return 1; /载入家谱status Crt(BiPTree &T) FILE *fp; BiPTree Q,R,M,N; char 40,name10; system(cls); /清屏 R=(BiTPNode *)malloc(sizeof(BiTPNode); /分配存储空间 M=(BiTPNode *)malloc(sizeof(BiTPNode); N=(BiTPNode *)malloc(sizeo

10、f(BiTPNode); printf(请输入家谱名:); getchar(); gets(); while(0=NULL) printf(家谱名不能为空,请重新输入:); gets(); if(fp=fopen(,r)=NULL) printf(%s家谱打开失败!n,); return 0; inittree(T); fscanf(fp,%s,name); /从文件读入姓名 strcpy(T-data,name); T-lchild=NULL; T-rchild=NULL; T-parent=NULL; fclose(fp); if(fp=fopen(,r)=NULL) printf(%家谱

11、打开失败!n,); return 0; fscanf(fp,%s,name); while(!feof(fp) if(loc(T,P,name) fscanf(fp,%s,name); Q=(BiTPNode *)malloc(sizeof(BiTPNode); strcpy(Q-data,name); P-lchild=Q; /构建孩子 Q-parent=P; Q-lchild=NULL; Q-rchild=NULL; N=P; else if(!loc(T,P,name) Q=(BiTPNode *)malloc(sizeof(BiTPNode); R=N; R=R-lchild; whi

12、le(R) M=R; R=R-rchild; strcpy(Q-data,name); M-rchild=Q; Q-parent=M; Q-lchild=NULL; Q-rchild=NULL; fscanf(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

13、(T,P,father) printf(%s不在该家谱中!请重新输入:,father); gets(father); printf(请输入要添加到该家谱中的人的姓名:); gets(name); Q=(BiTPNode *)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-parent=P; else P=P-lchild; while(P) M=P; P=P-

14、rchild; M-rchild=Q; Q-parent=M; printf(成员添加成功,按任一键继续!); getch(); return 1; /删除成员status de(BiPTree &T) char name10; system(cls); printf(请输入要删除的人的姓名:); getchar(); gets(name); while(!loc(T,P,name) printf(%s不在该家谱中!请重新输入:,name); gets(name); if(!P-rchild) if(P-parent-lchild=P) P-parent-lchild=NULL; else P

15、-parent-rchild=NULL; free(P); else if(P-rchild) if(P-parent-lchild=P) P-parent-lchild=P-rchild; else P-parent-rchild=P-rchild; free(P); printf(成员删除成功,按任一键继续!); getch(); return 1; status Show(TElemType e10) printf(%s ,e); return 1; /二叉树的遍历status pre(BiPTree T,status(*visit)(TElemType10) if(T) if (*vi

16、sit)(T-data) if (pre(T-lchild,visit) if (pre(T-rchild,visit) return 1; return 0; else return 1; /家族成员查询status Sea(BiPTree T) char name10; BiPTree N; N=(BiTPNode *)malloc(sizeof(BiTPNode); system(cls); printf(请输入要查寻的人的姓名:); getchar(); gets(name); while(!loc(T,P,name) printf(%s不在该家谱中!请重新输入:,name); get

17、s(name); N=P; if(P=T) printf(%s的父亲在该家谱中没有记载!n,P-data); else while(N-parent-rchild=N) N=N-parent; printf(%s的父亲是:%sn,P-data,N-parent-data); N=P; if(P=T) printf(%s没有兄弟!n,P-data); else if(!P-rchild&P-parent-rchild!=P) printf(%s没有兄弟!n,P-data); else printf(%s的兄弟有:n,name); while(N-rchild) printf(%s ,N-rchi

18、ld-data); N=N-rchild; N=P; while(N-parent-rchild=N) printf(%s ,N-parent-data); N=N-parent; printf(n); if(P=T) printf(%s的祖先在该家谱中没有记载!n,name); else printf(%s的祖先是:%sn,name,T-data); N=P; if(!P-lchild) printf(%s没有孩子!n,name); printf(%s没有后代n,name); else printf(%s的孩子有:n,name); printf(%s ,P-lchild-data); N=N

19、-lchild; while(N-rchild) printf(%s ,N-rchild-data); N=N-rchild; printf(n); printf(%s的后代有:n,name); pre(P-lchild,Show); printf(n); printf(按任一键继续!); getch(); return 1; /文件的创建status write(BiPTree T,char 40) FILE *fp; if(fp=fopen(,a+)=NULL) printf(%s文件创建失败!n,); return 0; fprintf(fp,%s ,T-data); T=T-lchil

20、d; while(T) fprintf(fp,%s ,T-data); T=T-rchild; fprintf(fp,n); /输出 fclose(fp); return 1; status prewrite(BiPTree T,status(*visit)(BiPTree,char40),char 40) if(T) if (T-lchild) (*visit)(T,); prewrite(T-lchild,visit,); prewrite(T-rchild,visit,); return 1; else return 1; status wrong() char a; scanf(%c,

21、&a); printf(无此选项,请重新选择!(按任一键继续!); getch(); return 1; /家谱的存储status Sav(BiPTree T) FILE *fp; char 40; system(cls); printf(请输入新的文件名:); getchar(); gets(); while(0=NULL) printf(家谱名不能为空,请重新输入:); gets(); prewrite(T,write,); printf(%s家谱保存成功,按任一键继续!,); getch(); return 1; /修改家谱status Upd() system(cls); int xz

22、; while(1) system(cls); printf(nnnn);printf(*)家族成员的添加与删除操作(*) n);printf(*) 请选择 (*)n); printf(*) 1.添加成员. (*)n); printf(*) 2.删除成员. (*)n); printf( (*) 3.返回上一级. (*)n); printf( 请选择:); scanf(%d,&xz); switch(xz) case 1 : in(T);break; case 2 : de(T);break; case 3 : return 0; default : wrong(); break; main()

23、 P=(BiTPNode *)malloc(sizeof(BiTPNode); int xz; while(1) system(cls); printf(nnnn); printf(*) 家族关系查询系统 (*) n); printf(*) 具体操作如下 (*) n); printf(*) 1.创建家谱. (*) n); printf(*) 2.载入家谱. (*) n); printf(*) 3.修改家谱. (*) n); printf(*) 4.查寻成员. (*) n); printf(*) 5.保存家谱. (*) n); printf(*) 6.退出程序. (*) n); printf(

24、请选择操作:); scanf(%d,&xz); switch(xz) case 1 : Cre(); break; case 2 : Crt(T); break; case 3 : Upd(); break; case 4 : Sea(T); break; case 5 : Sav(T); break; case 6 : return 0; default : wrong(); break; 六、 运行结果分析主界面及其操作选项:输入家谱名称及家谱内容:载入已建立家谱:家族成员的添加及删除主选项:家族成员的添加:家族成员的删除:家族成员的查询操作:七、 收获及体会转眼课程设计已经结束,从选择任

25、务到上网查找资料,到源代码的完成,到代码真正的运行出来。我通过本次数据结构课程设计对数据结构的算法有了更深的了解、对以前学过的知识进行了巩固和提高。 数据结构是计算机程序设计的重要理论技术基础。这次课程设计运用C语言作为数据结构和算法的描述语言对数据的存储结构和算法进行描述。这次任务提高了我们对实际问题的解决能力,即运用所学的知识对问题进行分析:了解问题的基本要求,怎样将实际问题转化成学科语言的输入输出,要用到什么知识来存储信息。虽然这次的课程设计有点困难,在网上借鉴了部分代码的情况下做的还是不够完美,有很多的基本算法思想还不是很理解,但是我没有放弃,让我学会怎样在遇到困难的时候去解决问题,去坚持。同时也让我感受到了数据结构的乐趣,坚定了我学习数据结构的决心。

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

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