- 1、本文档共29页,可阅读全部内容。
- 2、有哪些信誉好的足球投注网站(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
- 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多
实用标准文案
精彩文档
1 课程设计介绍
1.1课程设计项目简介
家谱是一种以表谱形式,记载一个以血缘关系为主体的家族世系繁衍和重要人物事迹的特殊图书载体。家谱是中国特有的文化遗产,是中华民族的三大文献之一,属珍贵的人文资料,对于历史学,民俗学,人口学,社会学和经济学的深入研究,均有不可替代的重要功能。本项目对家谱管理进行简单的模拟,以实现查看祖先和子孙个人信息 、插入家族成员等功能。
1.2课设题目分析
本程序的实质是完成对家谱成员信息的建立、查找、插入等功能。可以首先定义家族成员的数据结构,然后将每个功能写成一个函数来完成对数据的操作,最后完成主函数以验证各个函数功能并得出运行结果。
本程序包含以下几个模块
建立家族关系树。此模块将构建一个家族关系,对数据初始化,构造关系树并录入数据一遍后续程序使用。
添加新成员。此模块将添加一个新成员,实现对家族关系的修改。
家族关系的查询。此模块将实现对家族不同关系的查询
主程序模块。此模块实现整个程序的进入和进出,以及各种初始化处理。
1.3课程题目原理与数据结构
因为家族的成员之间存在一个对多个的层次结构关系,所以不能用线性表来表示和实现。家谱从形状上看像一颗倒长的树,所以用树结构来表示比较合适。树形结构是一类非常重要的非线性数据结构,直观看来树是以分支关系定义的层次结构。
因此本课程设计可以采用的数据结构有树状结构和队列。树状结构采用三叉链表来实现,队列采用链式队列实现。
1.4功能分析说明图
家族关系查询系统
家族关系查询系统
退出系统
退出系统
打开一个家族关系按关系查找各个家庭成员建立
打开一个家族关系
按关系查找各个家庭成员
建立一个家族关系
添加一个家庭成员
查找一个成员的兄弟查找一个成员的祖先查找成员的子孙后代查找一个成员的孩子查找成员的堂兄弟查找成员祖先路径查找成员是第几代查找一个成员双亲
查找一个成员的兄弟
查找一个成员的祖先
查找成员的子孙后代
查找一个成员的孩子
查找成员的堂兄弟
查找成员祖先路径
查找成员是第几代
查找一个成员双亲
2 分析与实现
2.1 基本数据结构和栈队的操作
2.1.1 结点基本数据结构和链队的定义
/*家族关系树实现*/
#include string.h
#include malloc.h
#includelimits.h
#includestdio.h
#includestdlib.h
#includeio.h
#includemath.h
#includeprocess.h
#define TRUE 1
#define FALSE 0
#define OK 1
#define ERROR -1
#define INFEASIBLE -1
typedef char DataType;
#define MAXNUM 20
typedef struct TriTNode/* 树的三叉链表存储结构*/
{
DataType data[MAXNUM];
struct TriTNode *parent;/* 双亲*/
struct TriTNode *lchild;/* 左孩子*/
struct TriTNode *rchild;/* 右孩子*/
}TriTree;
typedef struct Node/* 队列的结点结构*/
{
TriTree *info;
struct Node *next;
}Node;
typedef struct/* 链接队列类型定义*/
{
struct Node *front; /* 头指针*/
struct Node *rear; /* 尾指针*/
}LinkQueue;
DataType fname[MAXNUM],family[50][MAXNUM];/* 全局变量*/
2.1.2 链队的基本操作
LinkQueue *LQueueCreateEmpty( )/* 建立一个空队列*/
{
LinkQueue *plqu=(LinkQueue *)malloc(sizeof(LinkQueue));
if (plqu!=NULL)
plqu-front=plqu-rear=NULL;
else
{
printf(内存不足!\n);
return NULL;
}
return plqu;
}
int LQueueIsEmpty(LinkQueue *plqu)/* 判断链接表示队列是否为空队列*/
{
return(plqu-f
文档评论(0)