数据结构课程设计总结报告
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
郑州轻工业学院
课程设计任务书
题目家族关系查询系统
专业、班级软件外包11-01 学号 541107080145 姓名周朱莉主要内容、基本要求、主要参考资料等:
主要内容:
建立家族关系数据库,实现对家族成员关系的相关查询。
基本要求:
(1)建立家族关系并能存储到文件中;
(2)实现家族成员的添加。
(3)可以查询家族成员的双亲、祖先、兄弟、孩子和后代等信息。
课程设计按照教学要求需要一周时间完成,总共要上机调试程序10小时。对每个题目要有需求分析,在需求分析中,将题目中要求的功能进行叙述分析,并且设计解决此问题的数据存储结构,设计或叙述解决此问题的算法,描述算法建议使用流程图,进行算法分析指明关键语句的时间复杂度。给出实现功能的一组或多组测试数据,程序调试后,将按照此测试数据进行测试的结果列出来。
源程序要按照写程序的规则来编写。要结构清晰,重点函数的重点变量,重点功能部分要加上清晰的程序注释。程序能够运行,要有基本的容错功能。尽量避免出现操作错误时出现死循环;
主要参考资料:数据结构(C语言版),在网上查询的相关资料及部分代码
完成期限:2013.6.18-2013.6.20
指导教师签名:
课程负责人签名:
2013年 6 月 18 日
郑州轻工业学院本科
数据结构课程设计总结报告
设计题目:家族关系查询系统
学生姓名:周朱莉
系别:计算机与通信工程
专业:软件外包
班级:11-01
学号:541107080145
指导教师:卢冰
2013年6 月20 日
一、设计题目(任选其一)
家族关系查询系统
二、运行环境(软、硬件环境)
电脑及Visual C++ 6.0
三、算法设计的思想
随着社会发展,人们使用纸质的家谱已经非常不方便而且不利于在家谱里进行添加和修改。而用算法设计一个家族关系查询系统则可以解决这个问题。数据结构的二叉树刚好满足家谱的基本结构。
首先建立一个文件作为家谱,然后在文件中输入字符串,实现了在文件中按照数据的逻辑关系进进输入便可建立相应的三叉链表。然后就是进行数据的存储、删除及查找工作。
四、算法的流程图
家谱的创建:
载入家谱:
修改家谱:
成员查询:
五、算法设计分析
本次设计研究的是建立家族关系,实现对家族成员关系相关查询的问题。在设计中使用的数据结构为树状结构,树状结构采用三叉链表实现。我们在建立好家族关系后将
其存储在文件中,在文件中家族关系是以树的形式存储,
运用树的操作使家族关系得以准确建立。家族关系查询系
统可分为六大模块,分别是创建、修改、查询、保存、退
出等。建立家族关系模块,建立家族关系并存入文件。建
立时首先输入家族关系的名称,以此名称为名建立文本文
件。接下来按层输入成员姓名,输入一个在文件中写入一
个字符串,以回车键结束。打开一个家族关系。在界面输
入选项名,以家族关系名为文件名打开文件,如果家族关
系不存在,返回空;如果存在,打开文件,读取文件。向
家族中添加一个新成员,添加的新成员要根据其父亲确定
其在家族中的位置。首先判断该父亲是否在此家族关系中,
若存在,则查找其父亲,将新节点插入其父亲的最后一个
孩子之后;若没有孩子,直接作为左孩子插入。以写入的
方式打开文件,更新数组中的信息,然后将数组中的信息
写入文件保存,关闭文件。查找功能模块,查找一个成员
的所有祖先及其兄弟,查找一个成员的所有祖先路径,需
要从它的父亲一直向上查找带根结点。查找一个成员的兄
弟,一个成员的兄弟为其父亲除了该结点以外的所有孩子。
对于要操作的结点,先判断它是否是根结点,若是根结点,
则无兄弟;若不是根结点,则找到该结点的父亲。接着判
断父亲的兄弟是否都存在,如果都不存在,则无兄弟;如
果都存在,对父亲的孩子操作。
六、源代码
#include
#include
#include
#include
typedef char TElemType;
typedef int status;
typedef struct BiTPNode{
TElemType data[10];
struct BiTPNode *parent,*lchild,*rchild; //父亲及左右孩子指针
}BiTPNode,*BiPTree;
BiPTree P;
BiPTree T;
//家谱的创建
int Cre()
{
system("cls");
FILE *fp; //声明指向文件的指针
char [40],str[10];
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); //向文件写入字符串
putc('\n',fp);
}
fclose(fp); //关闭文件
printf("按任一键继续!");
getch();
return 1;
}
status loc(BiPTree T,BiPTree &P,TElemType name[10]){ if(T)