家谱管理系统Word格式文档下载.docx
- 文档编号:16276396
- 上传时间:2022-11-22
- 格式:DOCX
- 页数:33
- 大小:283.41KB
家谱管理系统Word格式文档下载.docx
《家谱管理系统Word格式文档下载.docx》由会员分享,可在线阅读,更多相关《家谱管理系统Word格式文档下载.docx(33页珍藏版)》请在冰豆网上搜索。
成绩:
一、算法思想
本程序是一个管理家谱的系统,通过这个系统可以对家族成员进行创建、显示、查找
、修改、以及保存家谱和读取家谱功能。
该系统分为以下几个模块,分别是:
创建家谱,显示家谱、按和生日查找家庭成员、修改家谱、存盘、读盘以及退出系统。
本程序用到的存储形式为多叉树,因为家谱中每个人既有父母又有孩子,而且孩子的个数并不确定,所以用多叉树来存储最为合适。
用多叉树来存储,就用用到多叉树的递归创建及递归遍历。
因为是多叉树,所以遍历时用广度优先搜索合适。
本函数最主要的思想就是递归调用,每个子函数中都会用到递归。
定义结构体时给定指针数组的最大容量,来规定家谱中最多可以存多少人。
定义一个家族树的指针变量用来当每个子函数的参数,从而将其返回到主函数中。
以下时算法思想流程图:
创建家谱
显示家谱
修改家谱
查找成员
读写家谱
按照姓名
按照生日
修改本人
修改父母
修改孩子
存盘
读盘
退出系统
二、模块划分
1.intmain():
主函数
2.voidCreatTree(TreeNode*Tree):
创建家族树
3.voidOutPutAll(TreeNode*Tree):
显示家谱
4.voidMenue(TreeNode*Tree):
主菜单
5.voidSubMenue1(TreeNode*Tree):
副菜单(修改选项菜单)
6.voidChange(TreeNode*Tree):
7.TreeNode*SearchTree(TreeNode*Tree,charname[],intlength):
按照查找家谱成员
8.TreeNode*SearchTree1(TreeNode*Tree,charbirth[],intlength):
按照生日查找家谱成员
9.voidOutPutMessage(TreeNode*Tree,charname[],intlength):
输出按查找到的家谱成员
10.voidOutPutMessage1(TreeNode*Tree,charbirth[],intlength):
输出按生日查找到的家谱成员
11.voidSaveFamily(TreeNode*root):
保存家谱
12.voidReadFamily(TreeNode**root):
读取家谱
三、数据结构
typedefstructTreeNode
{
intChildNum;
//记录这个人拥有几个儿女
charName[20];
//记录这个人的
charbirthday[20];
//生日
intmarriage;
//婚否(1表示结婚,0表示没结婚)
intdeath;
//生死(1表示活着,0表示过世)
charKind;
//标示节点的种类有女G男B
charaddress[100];
//住址
charlivemassage[50];
//死亡日期(如果其已经死亡)
structTreeNode*NextNode[20];
//记录这个人的儿女
structTreeNode*Parent;
//记录这个节点的父节点
}TreeNode,*tree;
四、测试
第一组数据为:
爷爷,奶奶,爸爸,妈妈,我,二叔,二婶,姐姐,三叔,三婶,弟弟一共三代11个人。
其中爷爷是根节点,奶奶为爷爷的配偶,同时也是爷爷的第一个后继节点。
爸爸,二叔,三叔为爷爷的子女。
爸爸的配偶是妈妈,爸爸的子女是我。
二叔的配偶是二婶,子女是姐姐。
三叔的的配偶是三婶,三叔的的子女是弟弟。
进入程序之后,首先进行创建家谱,然后进行存盘,之后进行修改和查询等步骤。
退出程序在进入程序时,进行读盘。
之后在进行其他操作,程序完成之后退出即可。
爷爷
爸爸
二叔
奶奶
三叔
妈妈
二婶
三婶
我
姐姐
弟弟
图1家族树
第一组数据测试截图为:
图2显示家谱
图3按照查找家族成员
图4存盘
第二组数据为:
王老
王大
刘老
王二
李大
张二
王小一
王小二
图4王家家族树
第二组数据测试截屏为:
图5修改家族成员的信息
图6修改某个人的具体信息
图7按照生日查找某人
图8读盘
五、源程序
#include<
stdio.h>
stdlib.h>
string.h>
#ifdefWIN32
#defineCLEARsystem("
cls"
)
#defineTipForSaveFilePositionprintf("
\t\t输入文件名及保存位置(eg:
D:
\\\\example.txt):
"
#defineTipForReadFilePositionprintf("
\t\t文件名及其路径(eg:
\\\\example.txt):
#else
clear"
/home/xiong/example.txt):
#endif
#definemaxFileNameLen50//保存的文件名的最大长度
intFLAG=0;
inta=1;
voidCreatTree(TreeNode*Tree);
voidOutPutAll(TreeNode*Tree);
voidMenue(TreeNode*Tree);
voidSubMenue1(TreeNode*Tree);
voidSubMenue2(TreeNode*Tree);
voidChange(TreeNode*Tree);
voidAddNew(TreeNode*Tree);
TreeNode*SearchTree(TreeNode*Tree,charname[],intlength);
TreeNode*SearchTree1(TreeNode*Tree,charbirth[],intlength);
voidOutPutMessage(TreeNode*Tree,charname[],intlength);
voidOutPutMessage1(TreeNode*Tree,charbirth[],intlength);
voidSaveFamily(TreeNode*root);
voidReadFamily(TreeNode**root);
intmain()//主函数
{
TreeNode*Tree;
//TreeNode**Tree1;
//Tree1=&
(*Tree);
Tree=(TreeNode*)malloc(sizeof(TreeNode));
Tree->
Parent=NULL;
strcpy(Tree->
Name,"
0"
);
Menue(Tree);
return0;
}
voidMenue(TreeNode*Tree)//输出主菜单
/*TreeNode**Tree1;
Tree1=&
Tree;
*/
charc;
charname[20];
charbirth[20];
while
(1)
system("
printf("
\t"
\n\n\t\t**********欢迎使用家族管理系统**********\n\n"
\n\t\tA:
输入家谱信息建立树"
\n\t\tB:
输出整个家谱信息"
\n\t\tC:
按出生日期查找某人"
\n\t\tD:
按查找某人"
printf("
\n\t\tE:
修改某个人的信息"
\n\t\tF:
存盘"
\n\t\tG:
读盘"
\n\t\tH:
退出整个程序\n\t"
c=getchar();
switch(c)
{
case'
A'
:
TreeNode*NewNode;
NewNode=(TreeNode*)malloc(sizeof(TreeNode));
printf("
\n\t请输入:
"
scanf("
%s"
Tree->
Name);
\n\t请输入性别女G男B:
getchar();
%c"
&
(Tree->
Kind));
Tree->
Parent=NewNode;
Parent=NULL;
//
CreatTree(Tree);
//
\n\t--------------家谱图已经建立成功---------------\n\n"
\n\n\t--------------请按Enter键继续操作--------------"
break;
case'
B'
if(strcmp(Tree->
)==0)
{
printf("
\n\t家谱图的多叉树尚未建立请先建立树\n"
getchar();
break;
}
\n\n\t整个家谱的主要信息如下:
OutPutAll(Tree);
getchar();
C'
if(strcmp(Tree->
birthday,"
}
\n\t请输入你要查找的出生日期:
scanf("
birth);
OutPutMessage1(SearchTree1(Tree,birth,20),birth,20);
\n\n\t-----*----*----*----*----*----*----*----*----*----*----\n\t"
D'
}
\n\t请输入你要查找的人的:
\n\t"
name);
OutPutMessage(SearchTree(Tree,name,20),name,20);
E'
}
Change(Tree);
F'
}
SaveFamily(Tree);
G'
/*if(strcmp(Tree->
}*/
ReadFamily(&
Tree);
H'
\n\n\t-----------------本次服务到此结束------------------"
\n\t------------------欢迎下次使用---------------------"
\n\t-----------------------------------------------\n\n"
\n'
default:
\n\n\t--------对不起!
你的选择不在服务围之!
-----------"
\n\t-----------请您再次选择所需的服务项!
---------------"
\n\t------------------------------------------\n\t"
}
if(c=='
||c=='
f'
)
}
voidCreatTree(TreeNode*Node)//创建树
inti;
TreeNode*NewNode;
NewNode=(TreeNode*)malloc(sizeof(TreeNode));
Node->
NextNode[0]=NewNode;
NextNode[0]=NULL;
\n\t请输入出生日期:
scanf("
Node->
birthday);
\n\t请输入家庭住址:
getchar();
address);
\n\t请输入是否建在(1-是或0-否):
%d"
(Node->
death));
if(Node->
death==0)
{
\n\t请输入去世日期:
livemassage);
}
elseif(Node->
death=='
1'
\n\t仍然建在"
\n\t请输入%s的配偶的(输入0代表没结婚):
NewNode->
if(strcmp(NewNode->
)!
=0)
{printf("
\t请输入配偶的出生日期:
(NewNode->
if(NewNode->
elseif(NewNode->
\n\t请输入%s的子女的数目(当子女输入0时便停止输入该成员有关信息):
ChildNum));
if((Node->
ChildNum)==0&
&
strcmp(NewNode->
return;
Kind=='
||Node->
g'
NewNode->
Kind='
;
else
NewNode->
ChildNum=0;
Node->
NextNode[0]->
Parent=Node;
//孩子的父母
for(i=1;
i<
=Node->
ChildNum;
i++)
a++;
\n\t请输入%s的第%d子女的名字:
Name,i);
\n\t请输入%s的第%d子女的性别女G男B:
NewNode->
Kind);
ChildNum=-1;
Node->
NextNode[i]=NewNode;
CreatTree(Node->
NextNode[i]);
//从子女的数目开始
voidOutPutAll(TreeNode*Tree)
inti,flag=0;
\n\t---****---***---***---***---***---***---***---***---***---"
\n\t:
%s出生日期:
%s家庭住址:
%s性别:
%c"
Name,Tree->
birthday,Tree->
address,Tree->
if(Tree->
||Tree->
flag=1;
女"
else
男"
\t是否健在(1-健在,0-去世):
if(Tree->
death==1)printf("
1"
elseif(Tree->
death==0)printf("
if(!
NextNode[0]))
\n\t至今没有配偶和子女\n"
return;
if(flag==1)
\n\t丈夫:
\n\t妻子:
if(Tree
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 家谱 管理 系统
![提示](https://static.bdocx.com/images/bang_tan.gif)