1、课 程 设 计 任 务 书 题目题目 家族关系查询系统家族关系查询系统 主要内容、基本要求、主要参考资料等:主要内容、基本要求、主要参考资料等: 主要内容:主要内容: 建立家族关系数据库,实现对家族成员关系的相关查询。 基本要求:基本要求: (1)建立家族关系并能存储到文件中; (2)实现家族成员的添加。 (3)可以查询家族成员的双亲、祖先、兄弟、孩子和后代等信息。 课程设计按照教学要求需要一周时间完成,总共要上机调试程序 10 小时。 对每个题目要有需求分析, 在需求分析中, 将题目中要求的功能进行叙述分析, 并且设计解决此问题的数据存储结构,设计或叙述解决此问题的算法,描述算法 建议使用流
2、程图,进行算法分析指明关键语句的时间复杂度。给出实现功能的一 组或多组测试数据,程序调试后,将按照此测试数据进行测试的结果列出来 。 源程序要按照写程序的规则来编写。要结构清晰,重点函数的重点变量, 重点功能部分要加上清晰的程序注释。 程序能够运行,要有基本的容错功能。 尽量避免出现操作错误时出现死循环; 主要参考资料:主要参考资料:数据结构(C 语言版) ,在网上查询的相关资料及部 分代码 完完 成成 期期 限:限: 2013.6.2013.6.1818- -2013.6.20 2013.6.20 指 导教师签名:指 导教师签名: 课程负责人签名:课程负责人签名: 20132013 年年 6
3、 6 月月 18 18 日日 一、一、 设计题目(任选其一)设计题目(任选其一) 家族关系查询系统 二、二、 运行环境(软、硬件环境)运行环境(软、硬件环境) 电脑 及 Visual C+ 6.0 三、三、 算法设计的思想算法设计的思想 随着社会发展,人们使用纸质的家谱已经非常不方便 而且不利于在家谱里进行添加和修改。而用算法设计一个 家族关系查询系统则可以解决这个问题。数据结构的二叉 树刚好满足家谱的基本结构。 首先建立一个文件作为家谱,然后在文件中输入字符 串,实现了在文件中按照数据的逻辑关系进进输入便可建 立相应的三叉链表。然后就是进行数据的存储、删除及查 找工作。 四、四、 算法的流程
4、图算法的流程图 家谱的创建:家谱的创建: 载入家谱:载入家谱: 开始开始 输入家谱名称输入家谱名称 输入家族成员输入家族成员 结束结束 开始开始 修改家谱:修改家谱: 成员查询:成员查询: 输入家谱名输入家谱名 载入成功载入成功 结束结束 家谱是否存在?家谱是否存在? 家谱打开失败家谱打开失败 是是 否否 开始开始 选择选择 输入成员姓名输入成员姓名 结束结束 添加成员添加成员 输入成员姓名输入成员姓名 是是 否否 返回上一级返回上一级 删除成员删除成员 成员是否存在?成员是否存在? 删除成功删除成功 请重新输入请重新输入 五、五、 算法设计分析算法设计分析 本次设计研究的是建立家族关系, 实
5、现对家族成员关 系相关查询的问题。 在设计中使用的数据结构为树状结构, 树状结构采用三叉链表实现。我们在建立好家族关系后将 其存储在文件中,在文件中家族关系是以树的形式存储, 运用树的操作使家族关系得以准确建立。 家族关系查询系 统可分为六大模块,分别是创建、修改、查询、保存、退 出等。建立家族关系模块,建立家族关系并存入文件。建 立时首先输入家族关系的名称,以此名称为名建立文本文 件。接下来按层输入成员姓名,输入一个在文件中写入一 个字符串,以回车键结束。打开一个家族关系。在界面输 开始开始 输入成员名输入成员名 输出成员信息输出成员信息 结束结束 成员成员是否存在?是否存在? 不在家谱中,
6、请重新不在家谱中,请重新 输入输入 是是 否否 入选项名,以家族关系名为文件名打开文件,如果家族关 系不存在,返回空;如果存在,打开文件,读取文件。向 家族中添加一个新成员,添加的新成员要根据其父亲确定 其在家族中的位置。 首先判断该父亲是否在此家族关系中, 若存在,则查找其父亲,将新节点插入其父亲的最后一个 孩子之后;若没有孩子,直接作为左孩子插入。以写入的 方式打开文件,更新数组中的信息,然后将数组中的信息 写入文件保存,关闭文件。查找功能模块,查找一个成员 的所有祖先及其兄弟,查找一个成员的所有祖先路径,需 要从它的父亲一直向上查找带根结点。查找一个成员的兄 弟, 一个成员的兄弟为其父亲除了该结点以外的所有孩子。 对于要操作的结点, 先判断它是否是根结点, 若是根结点, 则无兄弟;若不是根结点,则找到该结点的父亲。接着判 断父亲的兄弟是否都存在,如果都不存在,则无兄弟;如 果都存在,对父亲的孩子操作。 六六、源代码源代码 #include