- 1、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。。
- 2、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 3、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
- 4、该文档为VIP文档,如果想要下载,成为VIP会员后,下载免费。
- 5、成为VIP后,下载本文档将扣除1次下载权益。下载后,不支持退款、换文档。如有疑问请联系我们。
- 6、成为VIP后,您将拥有八大权益,权益包括:VIP文档下载权益、阅读免打扰、文档格式转换、高级专利检索、专属身份标志、高级客服、多端互通、版权登记。
- 7、VIP文档为合作方或网友上传,每下载1次, 网站将根据用户上传文档的质量评分、类型等,对文档贡献者给予高额补贴、流量扶持。如果你也想贡献VIP文档。上传文档
查看更多
数据结构家谱系统的设计与实现
项目名称: 家谱系统的设计与实现
学生姓名:
学 号:
班 级:
指导教师:
2011年12月23日
目 录
1系统需求分析 1
1.1 问题分析 1
1.2 任务意义 1
2 设数据结构设计及用法说明 2
3 详细设计和编码 3
3.1初始化 3
3.2功能选择 4
3.3信息输入 7
3.4信息输出 7
3.5信息存盘 8
3.6信息清盘 9
3.7信息查询 10
4 实验结果 13
4.1菜单函数功能测试 13
4.2输入功能函数测试 13
4.3输出功能函数测试 13
4.4清盘功能函数测试 13
4.5存盘功能函数测试 14
4.6查询功能函数测试 15
致谢 17
参考文献 18
附录:源代码 19
1系统需求分析
1.1 问题分析
从课程设计的题目要求可以知道,我需要设计一个对数据输入,输出,储存,查找的多功能软件,我选择用二叉树来保存家族的基本信息,包括姓名及它们的关系,但是由于家族信息很巨大而且关系很复杂所以采用二叉树来储存它们的信息及输出它们的关系。并且具有保存文件的功能,以便下次直接使用先前存入的信息。
1.2 任务意义
家谱的功能是查询家族每个人的信息,并且输出它们的信息,还要具有查询输出功能。这样复习了一下查询。插入。删除函数的应用。并复习了上学期c语言的文件储存及调用功能,子函数和递归调用功能,熟练运用这些函数。
2系统数据结构设计及用法说明
采用文件保存信息,并且从文件中输出原先保存的信息,用结构体fnode来储存家族的信息,采用递归的方法从fam中创建一个空二叉树,然后初始化二叉树。采用InputFam函数添加信息,OutputFam函数输出信息,DelAll函数删除家族的全部记录,SaveFile函数保存添加的信息,FindNode函数查找节点。
图2 数据存储结构图
相应的存储结构代码为:
typedef struct fnode
{
char father[NAMEWIDTH];
char wife[NAMEWIDTH];
char son[NAMEWIDTH];
char brother[NAMEWIDTH];
}FamType;
typedef struct tnode
{
char name[NAMEWIDTH];
struct tnode *lchild,*rchild;
}BTree;
3 详细设计和编码
3.1初始化
图3-1为初始化函数的流程图,主要是对二叉树中数据域置空,对二叉树中的数据进行初始化。
代码如下:
BTree *CreatBTree(char *root,FamType fam[],int n) //从fam中(含n个记录)递归创建一棵二叉树
{
int i=0,j;
BTree *bt,*p;
bt=(BTree *)malloc(sizeof(BTree)); //创建父亲结点
strcpy(bt-name,root);
bt-lchild=bt-rchild=NULL;
while(instrcmp(fam[i].father,root)!=0)
i++;
if(in) //找到该姓名的记录
{
p=(BTree *)malloc(sizeof(BTree)); //创建母亲结点
p-lchild=p-rchild=NULL;
strcpy(p-name,fam[i].wife);
bt-lchild=p;
for(j=0;jn;j++) //找所有儿子
if(strcmp(fam[j].father,root)==0) //找到一个儿子
{
p-rchild=CreatBTree(fam[j].son,fam,n);
p=p-rchild;
}
}
return(bt);
}
图3-1 初始化函数流程图
3.2功能选择
图3-2为功能选择模块函数的流程图,主要提供1:文件 2:家谱 两个功能模块让用户选择。输入数字1的时候,出现界面1:输入 2:输出 9:清盘 0:存盘返回。返回后输入数字2,出现界面1:找某人的所有儿子 2:找某人所有祖先 3:找某人所有兄弟。用户根据提示操作。
代码如下:
void main()
{
BTree *bt;
BTree *p,*father;
FamType fam[MaxSize];
int n,sel,sell;
char xm[NAMEWIDTH];
ReadFil
文档评论(0)