家谱管理系统Word格式.docx
《家谱管理系统Word格式.docx》由会员分享,可在线阅读,更多相关《家谱管理系统Word格式.docx(28页珍藏版)》请在冰豆网上搜索。
定义结构体时给定指针数组的最大容量,来规定家谱中最多可以存多少人。
定义一个家族树的指针变量用来当每个子函数的参数,从而将其返回到主函数中。
以下时算法思想流程图:
、模块划分
1.intmain():
主函数
2.voidCreatTree(TreeNode*Tree)创建家族树
3.voidOutPutAII(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家族树
第一组数据测试截图为:
trtt―x**4ct寓**«
*h*#ttsnt
姓容:
年普出圭H期:
1944.他.药家庭崔址t山东冑鹰沂市性剧:
B1I
妻子趣有;
拥奶母香量在门傩左・卜击此hD
和彳讦立旳姓旨爸爸出生日駅1.9陌03一06遽庭性扯山东肖临折市性瑕晒女的娃客:
二H出生白期!
19?
O.Q8.0iS康庭住址:
Ll_耒省吐沂巾fi&
JEM
B3牛于玄的逑备三权Lt±
S®
:
1977(T14\0思圧臣址:
山东石话沂育隹刖已英
-—*■**——・・♦——**«
———■---*4■—•«
*—■
妊名:
二就31±
B^;
]ST0.08.05氟眶佚fch山專首t®
祈巾世刑:
E申
套子妊営:
二瞬在qw在.—去世)=L
竟1个手女的蛙各蛆粗由生Sfe:
lMl.ML14黑麗隹址土血条嘗薯诉市性]・c女
1**+事—■—SS*t————istt1———
旌名一姐粗岀iBfllilW1.02.14蠢庭生址t山未肯尙诉巾住狂:
Gt
車今逵雄配囲和子玄
图2显示家谱
■1C:
\Likteng-eke1—Q
**十*E■欢迎便用东廳营瑾蚕^C*T■**•<
***
A&
•、豪港它U建上忖
R怖呂乎孚屮
|?
岭朝去扛苹k
D:
擔堆名査找棠人匸魅汽昱-\r-s3.
F:
和
c:
^a
H-退吕豎'
•煜?
底听蓦找巧人己雄找麹博.鼠(0下昕示
壮名一等孕岀生m羁一_创丄一旧一亠豪哇生址I山未肯I乱rrrtf性制卫臭岂■連在「■羞芒,)-壬世”1
谨蜀社Z:
三怛
H亲曲呂;
三R
涓迫至令iEti青扌任w疔子
图3按照姓名查找家族成员
Ut乂Ulef丸>£
iHlitl\dkti^plke£
he%."
E=口
*片*=口廿軌迎怯用!
t族管理系统十*中***=
B:
五出%t■应诒怙u匚:
筈出主刁些会技-枣人D:
«
<
d.o査找冥.扎
卜人的信息
存盘
tas
H:
ifitE^f£
(T
*****保存家涪*****
AAX件容迪陳存(X豪(*E:
D:
\\«
XU»
I«
Ltxt)ID:
\\JIAFV.t>
t新建丸件成功.文件世耳瓯怦为:
?
\JIAJV.tit
图4存盘
第二组数据为:
图4王家家族树
第二组数据测试截屏为:
■'
CALter&
\^drmn\pe-口fAkucJumgLEXL—□X
—•«
=**—-flJiiS恨的嫌ft…«
**—
”__*#fl.:
修说牛人的佶息*■*--****
…紀*L希—B:
修段父彎的■荷胃一•金「打••*口命
■■■拿—耳—C:
價i氐于女的fg息
stt~—*"
^0:
jfi岀*—*事-"
新一p*—*—
图5修改家族成员的信息
・'
C:
\Jtin'
J.ie-s.^iDp,<
e-:
he--'
C-.rjs
"
用一、忙汝=■:
=£
;
七$」■■丐抵诈池和祀iV匕三芳三:
理卞冷王'
」■■二
曼召薑幣改岂耳•上毕筆逶丸糊.2:
匸詩芝密氏讥議汎P燃弓崔比“于貢遵束0
荷荷人修改的出生日糊;
帕果不需要核改就输人中‘幣石桂Enttr这进決0
淸达人悸戏为疣庭地址:
0卑乂需呈底戌戏输人-0-然台養E「-t£
r健进塗
■-L信息修改成功
谊按Ent刊-站年蒔於作1
图6修改某个人的具体信息
■1C;
'
Ll^^'
^diTwADe^tlop.<
.f<
ier*g.«
f
柑*・*"
*飞门悭用療族管邂帝^***-**-**'
任听要找的人己軽找捌悟总5P下听示:
柱合:
王4■二岀主白皑2O0S家咗住址:
缶匡性钊B境
■mr・|||^M■
锻政拥音笙
图7按照生日查找某人
L.」i11'
1-j-l!
t-in1:
u■:
c.-r-
a?
fii瓦港盲目逢亶nr
t祜卅峑牛落滑伍帛
c芒V三三卑耳述早\
加據硅茗占找其人
E條就笑牛人的■息
存我
G.isS
U咆出整不程字
读翳家请H4»
441
»
Ajt仲宕聂算踣栏*口便賦中flfflur晉.
亢杵宅艮耳珞律〈*E;
m^xaii^1<
.txt),E?
'
-JIA.txt
图8读盘
五、源程序
#include<
stdio.h>
stdlib.h>
#inelude<
string.h>
#ifdefWIN32
#defineCLEARsystem("
cls"
)
#defineTipForSaveFilePositionprintf("
\t\t输入文件名及保存位置(eg:
\W\example.txt):
#defineTipForReadFilePositionprintf("
\t\t文件名及其路径(eg:
#else
clear"
\t\t输入文件名及保存位置(eg:
/home/xiong/example.txt):
"
#endif
#definemaxFileNameLen50//保存的文件名的最大长度
intFLAG=0;
inta=1;
//记录这个人拥有几个儿女
〃记录这个人的姓名
〃生日
//婚否(1表示结婚,0表示没结婚)
//记录这个人的儿女
structTreeNode*Parent;
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("
欢迎使用家族管理系统**********\n\n"
A:
输入家谱信息建立树"
printf("
\t"
\n\n\t\t**********
\n\t\t
输出整个家谱信息
);
C:
按出生日期查找某人
D:
按姓名查找某人
E:
修改某个人的信息
F:
存盘”);
G:
读盘"
\n\t\tc=getchar();
switch(c)
case'
A'
:
退出整个程序
\n\t"
TreeNode*NewNode;
NewNode=(TreeNode*)malloc(sizeof(TreeNode));
printf("
\n\t请输入姓名:
scanf("
%s"
Tree->
Name);
\n\t请输入性别女G男B:
getchar();
scanf("
%c"
&
(Tree->
Kind));
Tree->
Parent=NewNode;
Parent=NULL;
//CreatTree(Tree);
//
\n\t家谱图已经建立成功\n\n"
\n\n\t请按Enter键继续操作"
break;
B'
if(strcmp(Tree->
)==0){
\n\t家谱图的多叉树尚未建立请先建立树\n"
getchar();
\n\n\t整个家谱的主要信息如下:
OutPutAll(Tree);
C'
if(strcmp(Tree->
birthday,"
)==0)
\n\t请输入你要查找的出生日期:
birth);
OutPutMessage1(SearchTree1(Tree,birth,20),birth,20);
\n\n\t**********\n\t"
D'
\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\n"
\n'
default:
---对不起!
你的选择不在服务范围之内
---请您再次选择所需的服务项!
谢谢\n\t"
if(c=='
||c=='
f'
)break;
voidCreatTree(TreeNode*Node)//创建树
inti;
TreeNode*NewNode;
Node->
NextNode[0]=NewNode;
NextNode[0]=NULL;
\n\t请输入出生日期:
Node->
birthday);
\n\t请输入家庭住址:
address);
\n\t请输入是否建在(1-是或0-否):
%d"
(Node->
death));
if(Node->
death==0)
\n\t请输入去世日期:
livemassage);
elseif(Node->
death=='
1'
)printf("
\n\t仍然建在"
\n\t请输入%s的配偶的姓名(输入0代表没结婚):
NewNode->
if(strcmp(NewNode->
)!
=0){printf("
\t请输入配偶的出生日期:
\n\t请输入是否建在(1-是或0-否):
(NewNode->
if(NewNode->
{printf("
elseif(NewNode->
}printf("
\n\t请输入%s的子女的数目(当子女输入0时便停止输入该成员有关信息):
ChildNum));
if((Node->
ChildNum)==0&
&
strcmp(NewNode->
)==0)return;
Kind=='
||Node->
g'
NewNode->
Kind='
;
else
ChildNum=0;
NextNode[0]->
Parent=Node;
//孩子的父母for(i=1;
i<
=Node->
ChildNum;
i++)
a++;
\n\t请输入%s的第%d子女的名字:
Name,i);
\n\t请输入%s的第%d子女的性别女G男B:
Kind);
NewNode->
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->