您好,欢迎来到华佗健康网。
搜索
您的当前位置:首页家谱管理系统设计报告

家谱管理系统设计报告

来源:华佗健康网
北华航天工业学院课程报告

目 录

第一章 绪论 ............................................................................................................................... 2 第二章 需求分析 ....................................................................................................................... 3

2.1题目 ..................................................................................................................................... 3 2。2设计任务 .......................................................................................................................... 3 2.3数据测试 ............................................................................................................................. 3 第三章 概要设计 ....................................................................................................................... 3

3。1 设计思想 ................................................................................................................... 3 3.2 实现方法 ...................................................................................................................... 4 第四章 详细设计 ....................................................................................................................... 4

4。1功能构想 .......................................................................................................................... 4 4.2界面设计 ............................................................................................................................. 5 4.3增加成员 ............................................................................................................................ 5

4。3。1 添加子女 ........................................................................................................... 5 4。3.2 添加配偶 .............................................................................................................. 6 4.4修改成员 ............................................................................................................................. 6

4。4。1修改个人信息 .................................................................................................... 6 4。4.2修改父母信息 ....................................................................................................... 7 4。4.3修改兄弟姐妹的信息 ........................................................................................... 7 4.4。4修改子女的信息 ................................................................................................... 7

第五章 调试分析 ....................................................................................................................... 8 第六章 测试结果 ..................................................................................................................... 10 致 谢 ............................................................................................................................................ 11 参考文献......................................................................................................................................... 12 附 录......................................................................................................................................... 12

1

北华航天工业学院课程报告

第一章 绪论

目前,很多家庭家谱丢失,家庭一些关系混乱,为了避免这一问题,制定一家谱程序.家谱用于记录某家族历代家族成员的情况与关系,实现对一个家族所有的资料进行收集整理。支持对家谱的存储、更新、查询、统计等操作.并用计算机永久储存家族数据,方便随时调用.

2

北华航天工业学院课程报告

第二章

2.1题目

家谱管理系统

需求分析

2。2设计任务

系统总体说明:

以树形结构存储家族信息,只考虑三代(祖父,父亲,叔叔,姑姑,自己,兄弟姐妹,堂兄弟姐妹),只考虑每个人有0或者1个兄弟姐妹的情况.注意每个结点结构。统计统计家族成员人数,查询家族成员辈份。 完成功能的详细说明:

1.输入家族成员情况,建立树结构(涉及创建二叉树);

2.统计家族成员人数和每一个家庭成员人数(涉及树的遍历);

3.查询家族成员辈份情况(任意输入两个家庭成员,查询他们的关系,父子,祖孙,兄弟,堂兄弟,共同的祖先)。

4。 选做,考虑每个人有多个兄弟姐妹的情况.

2.3数据测试

测试的数据有:田迎新 陈瑞英 田紫藤 田紫恒 孙超 李美霖 ……..

第三章 概要设计

3。1 设计思想

创建一棵树,存储家庭关系,数据类型有

int Num; //记录这个人拥有几个儿女 char Name[20]; //记录这个人的姓名 char Sex; //标示节点的种类有女(0) 男(1) struct TreeNode * NextNode[20]; //记录这个人的儿女 struct TreeNode * Parent; //记录这个节点的父节点

3

北华航天工业学院课程报告

3.2 实现方法

完成功能的函数有

void CreatTree(TreeNode *Tree);//————-————--——-—--——-——---——---——创建树

void OutPutAll(TreeNode *Tree);//--———-———————————--————-————-——遍历并输出树中的内容 void firstoftxt();//————-—----——-——-———-————-—-—---——-——--—————---——---—写入文件的开始信息 void ofAll(TreeNode *Tree);//-———————-—----—---———----———---————--写入文件函数

void ifAll();//———-———-———-——-—--———-————--—--————---———-—--——-—————-—--读取文件的函数

TreeNode * SearchTree(TreeNode *Tree,char name[],int length);//查找结点的函数

void MainMenue(TreeNode *Tree);//——-————————————-———————--—-——主菜单

void SubMenue1(TreeNode * Tree);//——-———-—-—-———————-———--——-—修改成员信息的菜单

void SubMenue2(TreeNode *Tree);//——---—--——-—-———-——-—-————---添加新成员菜单

void Change(TreeNode * Tree);//--—-—-———-—-———————-------—-———-—修改成员信息

void AddNew(TreeNode * Tree);//————-———-———--———-——--——-———————添加新成员

void OutPutMessage(TreeNode * Tree,char name[],int length);//输出已经查找到的人的信息

第四章 详细设计

4。1功能构想

构想好总体规划之后,便开始设计程序中需要用到的各个功能函数,初步构想是要先实现最基本的几项功能,其中数据操作的有:增加成员,修改成员资料,删除成员;数据存取的有:打开家谱,新建家谱,保存家谱;数据查询的有:查看某代信息,按姓名查找,查看成员关系,等等.

4

北华航天工业学院课程报告

4.2界面设计

cout〈〈\"\\n\\n\ —-—*****-——请选择你的操作-—-****--—”;

cout<〈\"\\n\---—-——-——-———1:输入家谱信息建立多叉树—--——--————————-—-—-—-”; cout〈〈\"\\n\--———-—-———-——2:在家族中查找某人并输出他或(她)的相应信息--——\"; cout〈〈”\\n\——————-—-——-—-3:添加新的成员-—--—-———-—-—--————-——-—-——-—-——\"; cout〈〈”\\n\—————-—---——-—4:输出整个家谱信息————--——---—---—————---————-”; cout〈〈”\\n\--———————————-5:修改某个人的信息———-———-——————--———-—-—————-”; cout〈〈”\\n\-—---———————-—6:家谱信息存入文件--—----——-——-----———---—-———”; cout<〈\"\\n\—-—-—-——-————-7:读取家谱信息文件————-——————---——-—---—-————-”; cout〈<”\\n\—————----——-——8:退出整个程序—-———-——-———-----——-—-——--—-———-\\n\\"; if(选择1)

{ CreatTree(TreeNode *Tree); } Else if(选择2)

{ OutPutMessage(TreeNode * Tree,char name[],int length);} Else if(选择3)

{ AddNew(TreeNode * Tree);} Else if(选择4)

{ OutPutAll(TreeNode *Tree);} Else if(选择5)

{ Change(TreeNode * Tree);} Else if(选择6)

{ ofAll(TreeNode *Tree);} Else if(选择7) { ifAll();} Else

{exit(0);}

4。3增加成员

4。3.1 添加子女

NewNode=new TreeNode;

cout<〈”\\n\\n\请输入添加人员姓名: \";

5

北华航天工业学院课程报告

cin〉〉NewNode—〉Name; cout〈<”\\n\\n\请输入添加人员性别女(0) 男(1): \"; cin〉>NewNode—>Sex; num=Tree—〉Num; NewNode—>NextNode[0]=new TreeNode; NewNode->NextNode[0]=NULL; NewNode—〉Num=0; NewNode-〉Parent=Tree; Tree->NextNode[num+1]=NewNode; Tree-〉Num=Tree->Num+1; cout〈<”\\n\\n\--——-———-——-—子女的信息添加成功———-——————-———-—\";

4。3.2 添加配偶

NewNode=new TreeNode;

cout<〈”\\n\\n\请输入添加人员姓名: \"; cin>>NewNode—〉Name;

cout〈<\"\\n\\n\请输入添加人员性别女(0) 男(1): ”; cin〉>NewNode—〉Sex; NewNode—>Parent=Tree;

Tree-〉NextNode[0]=NewNode;

4。4修改成员 4.4。1修改个人信息

cout〈〈”\\n\\n\请输入修改的姓名(如果不需要修改就输入'0’,然后按Enter键继续):\\n\"; cin>>name;

if(strcmp(name,”0\")!=0) strcpy(Tree—〉Name,name); cout〈〈\"\\n\\n\是否要修改性别:(如果需要就输入’1’,不需要修改就输入’0’然后按Enter键继续):\\n”; cin〉〉flag; if (flag==1) { if(Tree—>Sex==’0') Tree—>Sex='1'; else Tree—>Sex=’0'; }

6

北华航天工业学院课程报告

4.4.2修改父母信息

cout<〈\"\\n\\n\请输入 ”〈〈Parent[0]〈〈” 要修改的姓名(如果不需要修改就输入’0’,然后按Enter键继续):\\n”; cin>>name;

if(strcmp(name,\"0”)!=0) strcpy(Tree—〉Parent->Name,name); cout〈〈”\\n\\n\请输入 ”〈〈Parent[1]<〈” 要修改的姓名(如果不需要修改就输入'0',然后按Enter键继续):\\n\"; cin>>name;

if(strcmp(name,\"0”)!=0) strcpy(Tree—〉Parent—〉NextNode[0]—>Name,name);

4。4。3修改兄弟姐妹的信息

cout<〈”\\n\\n\请输入 ”〈〈NewNode—>NextNode[i]->Name〈〈” 修改的姓名(如果不需要修改就输入’0’,然后按Enter键继续):\\n\"; cin〉>name;

if(strcmp(name,”0”)!=0) strcpy(NewNode—>NextNode[i]—>Name,name);

cout〈<”\\n\\n\是否要修改性别(如果需要就输入’1’不需要修改就输入’0'然后按Enter键继续):\\n”; cin〉〉flag; if (flag==1) { if(NewNode—〉NextNode[i]—〉Sex==’0’) NewNode-〉NextNode[i]—>Sex='1’; else NewNode—〉NextNode[i]-〉Sex=’0’; }

4.4.4修改子女的信息

cout<〈”\\n\\n\请输入 ”〈NextNode[i]—>Name〈<” 修改的姓名(如果不需要修改就输入’0’,然后按Enter键继续):\\n”; cin〉>name;

if(strcmp(name,”0”)!=0) strcpy(Tree—>NextNode[i]—>Name,name); cout〈〈\"\\n\\n\是否要修改性别(如果需要就输入’1’,不需要修改就输入'0’然后按Enter键继续):\\n\"; cin〉〉flag; if (flag==1) {

7

北华航天工业学院课程报告

if(Tree—〉NextNode[i]-〉Sex=='0') Tree—>NextNode[i]-〉Sex='1'; else Tree—〉NextNode[i]—>Sex=’0';

第五章 调试分析

1。进入系统

2.建立家谱

8

北华航天工业学院课程报告

3.查看信息

4.添加成员

9

北华航天工业学院课程报告

5。修改信息

第六章 测试结果

父亲姓名 田迎新 母亲姓名 陈瑞英 姐姐 田紫藤 姐夫 孙超 本人 田紫恒 李美霖

10

北华航天工业学院课程报告

致 谢

感谢孙红艳老师辛苦教导与教诲,让我学到了很多知识,提高了很大的能力. 与此同时,也感谢老师为我辛苦验收课设,耐心讲解,让我也受益匪浅。

今后,我一定会努力学习,用我的实际行动来回报家长,感谢我的老师,为学校争光,努力为我们的国家,贡献出一份微薄的贡献!

11

北华航天工业学院课程报告

参考文献

[1]《数据结构》C++语言版 严蔚敏 吴伟民编著 清华大学出版社 2011

[2]《数据库数据结构软件工程课程设计指导及习题解答》徐志才 方贤文 刘士喜编 北京师范大学出版社 2011 [3]《C++语言程序设计》 何钦铭 颜晖 主编 高等教育出版社2008

附 录

#include 〈iostream。h> #include 〈string。h〉

#include #include 〈stdlib。h〉 //system的头文件,exit的头文件 #include int MATEFLAG=0; typedef struct TreeNode

{ int Num; //记录这个人拥有几个儿女 char Name[20]; //记录这个人的姓名 char Sex; //标示节点的种类有女(0) 男(1) struct TreeNode * NextNode[20]; //记录这个人的儿女 struct TreeNode * Parent; //记录这个节点的父节点 }TreeNode;

void CreatTree(TreeNode *Tree);//——-——-——-—————-————--———-——--—-创建树

void OutPutAll(TreeNode *Tree);//—————--———---———-————————-----—遍历并输出树中的内容 void firstoftxt();//-——————-—-——————————-—————————--—--—-—-———-—写入文件的开始信息 void ofAll(TreeNode *Tree);//-——-—---——--—--——--—-———-——-—-—————写入文件函数

void ifAll();//——————-—-——-————---——-—--————-—-—-————-—-——-——-——读取文件的函数

TreeNode * SearchTree(TreeNode *Tree,char name[],int length);//查找结点的函数 void MainMenue(TreeNode *Tree);//—-—-————-——-———-—————-——-——————主菜单

void SubMenue1(TreeNode * Tree);//-——-———————————————-———--———-—修改成员信息的菜单

void SubMenue2(TreeNode *Tree);//——————-——--————-—-——--——--—-——

12

北华航天工业学院课程报告

-添加新成员菜单

void Change(TreeNode * Tree);//-——--—-——----———————-—--—-—-—--——修改成员信息

void AddNew(TreeNode * Tree);//-—-—-—————-——-————-—-—---—-——————添加新成员

void OutPutMessage(TreeNode * Tree,char name[],int length);//——-输出已经查找到的人的信息 //主函数

void main()

{ TreeNode *Tree; Tree=new TreeNode; Tree—〉Parent =NULL; strcpy(Tree->Name,”0”); MainMenue(Tree); }

//添加新的成员

void AddNew(TreeNode * Tree) { SubMenue2(Tree); } //输出副菜单

void SubMenue2(TreeNode *Tree) { char c; int num; char name[20]; TreeNode * NewNode; while(1) { system(”cls\"); cout<〈”\”; cout〈〈\"\\n\\n\ -——*****-—-请选择你的操作——-****--- \"; cout<〈”\\n\—-—*--—*———*---1:添加某个人的子女的信息—--*——-*---*——-*-—-— ”; cout〈<\"\\n\——-*---*-——*———2:添加某个人配偶的信息-*——-*--—*—--*---*———— ”; cout<〈”\\n\———*-—-*———*———3:退出—*-——*———*—-—*--—*———*———*———*---*———-\\n\\"; cout<〈”请输入:”; cin>〉c; switch(c) { case ’1’: cout〈〈\"\\n\\n\请输入那个人的名字: \"; cin〉〉name; Tree=SearchTree(Tree,name,20); if(Tree==NULL) { cout<〈”\\n\\n\****该家谱图中没有 ”<〈name<<\" 这个人的信息,

13

北华航天工业学院课程报告

请确认是否输入错误*****\\n”; break; } if(Tree—>Parent==NULL&&Tree-〉NextNode[0]==NULL||Tree—>Parent!=NULL&&Tree—>Name!=Tree—〉Parent—>NextNode[0]-〉Name) { cout〈〈”\\n\\n\”〈〈Tree->Name<<\" 至今还没有配偶请先添加配偶!”; break; } if(Tree-〉Parent==NULL&&(Tree—〉Num>20||Tree->Num〈0)) Tree-〉Num=0; if(MATEFLAG==1) Tree=Tree—〉Parent; NewNode=new TreeNode; cout〈〈\"\\n\\n\请输入添加人员姓名: ”; cin>〉NewNode—>Name; cout〈〈”\\n\\n\请输入添加人员性别女(0) 男(1): \"; cin〉>NewNode—>Sex; num=Tree—>Num; NewNode—〉NextNode[0]=new TreeNode; NewNode-〉NextNode[0]=NULL; NewNode—>Num=0; NewNode-〉Parent=Tree; Tree-〉NextNode[num+1]=NewNode; Tree-〉Num=Tree—>Num+1; cout〈〈”\\n\\n\——————-—-————子女的信息添加成功-—----——-—————-—\"; break; case ’2’: cout〈〈\"\\n\\n\请输入那个人的名字: \"; cin〉〉name; Tree=SearchTree(Tree,name,20); if(Tree->Parent!=NULL&&strcmp(Tree-〉Name,Tree—〉Parent-〉NextNode[0]—>Name)==0||Tree—>NextNode[0]!=NULL) { cout〈〈\"\\n\\n\已经有了配偶”; break; } if(Tree==NULL) { cout<〈\"\\n\\n\****该家谱图中没有 ”〈〈name〈〈\" 这个人的信息,请确认是否输入错误*****\\n\"; break; } NewNode=new TreeNode; cout<〈”\\n\\n\请输入添加人员姓名: \"; cin>〉NewNode—>Name; cout<<”\\n\\n\请输入添加人员性别女(0) 男(1): ”; cin〉〉NewNode—>Sex; NewNode—>Parent=Tree; Tree—〉NextNode[0]=NewNode;

14

北华航天工业学院课程报告

break; case ’3': cout<〈”\\n\\n\——--—-—--———--——本项服务到此结束————————---—-————”; break; case '\\n’: break; default: cout〈<\"\\n\\n\—--———--对不起!你的选择不在服务范围之内!—-——-——-- \"; cout〈〈”\\n\-——-—————--请您再次选择所需的服务项!—-------————— ”; cout<〈\"\\n\-————--————-—--—--谢谢合作!—--——-——-———--———————-\\n\\";break; } if (c==’3') break; } }

//修改某个人的信息

void Change(TreeNode * Tree) { char name[20]; TreeNode * NewNode; cout〈〈”\\n\请输入你要修改的人的信息: ”; cin〉〉name; NewNode=SearchTree(Tree,name,20); if(NewNode==NULL)

{ cout<<”\\n\\n\****该家谱图中没有 ”〈〈name〈〈\" 这个人的信息,请确认是否输入错误*****\\n”; return; } else { SubMenue1(NewNode); } }

//输出副菜单

void SubMenue1(TreeNode * Tree) { char c; int flag,i; char name[20]; char Parent[2][20]; TreeNode * NewNode; while(1) { system(”cls\"); cout〈<\"\”; cout<<”\\n\\n\ —--*****--—请选择你的操作——-****-—— ”; cout<〈\"\\n\——-*—-—*———*--—1:修改个人的信息--—*——-*---*—-—*---*--—*——-- ”;

15

北华航天工业学院课程报告

cout<<”\\n\-——*-——*—--*———2:修改父母的信息———*———*--—*—--*———*—-—*-——— ”; cout<〈\"\\n\——-*———*—--*—--3:修改兄弟姐妹的信息—-—*———*———*———*—-—*——-— ”; cout〈<”\\n\———*-—-*——-*-—-4:修改子女的信息—-—*——-*—-—*-——*——-*-—-*—--— \"; cout〈<”\\n\—-—*—--*———*———5:修改配偶的信息——-*--—*-—-*———*—-—*--—*—--- \"; cout〈〈”\\n\———*——-*——-*-—-6:退出—*-——*--—*—-—*——-*———*--—*-—-*———*———-\\n\”; cout<<\"请输入:”; cin>〉c; switch(c) { case ’1’: cout<〈”\\n\\n\请输入修改的姓名(如果不需要修改就输入’0’,然后按Enter键继续):\\n”; cin〉>name; if(strcmp(name,\"0\")!=0) strcpy(Tree—〉Name,name); cout〈<”\\n\\n\是否要修改性别:(如果需要就输入’1’,不需要修改就输入’0’然后按Enter键继续):\\n”; cin〉>flag; if (flag==1) { if(Tree—〉Sex==’0') Tree-〉Sex='1’; else Tree-〉Sex=’0'; } cout〈〈”\\n\\n\个人信息修改成功!”; cout<<”\\n-——-——-———-———按Enter键继续操作。。。 。。。”〈16

北华航天工业学院课程报告

getchar(); } else { cout<〈”\\n\\n\他是入赘此间的所以父母信息不在家谱内包括!”; cout<<\"\\n-———————----—-按Enter键继续操作。.。 .。。\"〈〈endl; getchar(); } break; } if(Tree-〉Parent-〉Sex==’0') { strcpy(Parent[0],\"母亲\"); strcpy(Parent[1],\"父亲”); } else { strcpy(Parent[0],”父亲”); strcpy(Parent[1],\"母亲\"); } cout〈〈”\\n\\n\请输入 \"〈〈Parent[0]<<\" 要修改的姓名(如果不需要修改就输入’0',然后按Enter键继续):\\n\"; cin〉〉name; if(strcmp(name,\"0”)!=0) strcpy(Tree—〉Parent—〉Name,name); cout<<\"\\n\\n\请输入 ”〈〉name; if(strcmp(name,\"0”)!=0) strcpy(Tree-〉Parent-〉NextNode[0]->Name,name); cout〈<”\\n\\n\—--—-—-—--———父母的信息修改成功-—-——--—-——-—--—\"<〈endl; cout〈<”\\n———--—--——————按Enter键继续操作... ..。”<〈endl; getchar(); break; case '3’: NewNode=Tree—>Parent; if(NewNode==NULL) //判断是不是头节点 { cout〈〈\"\\n\是这个家谱图里最顶端的人没有兄弟姐妹信息!\"〈17

北华航天工业学院课程报告

括!”; cout〈〈”\\n——-———--——--—-按Enter键继续操作.。。 。。.\"<Num==1) { cout〈〈”\\n\\n\没有兄弟姐妹!”; cout〈〈”\\n-———-——-—-——--按Enter键继续操作。.. ..。\"〈〈endl; getchar(); break; } else { for(i=1;i〈=NewNode—>Num;i++) { if(NewNode->NextNode[i]-〉Name!=Tree->Name) { cout〈<\"\\n\\n\请输入 \"<Name〈<\" 修改的姓名(如果不需要修改就输入’0’,然后按Enter键继续):\\n\"; cin〉〉name; if(strcmp(name,”0”)!=0) strcpy(NewNode->NextNode[i]->Name,name); cout〈〈”\\n\\n\是否要修改性别(如果需要就输入'1'不需要修改就输入’0’然后按Enter键继续):\\n”; cin>〉flag; if (flag==1) { if(NewNode-〉NextNode[i]—>Sex=='0’) NewNode—>NextNode[i]-〉Sex=’1'; else NewNode—〉NextNode[i]—〉Sex='0'; } } } } cout<<\"\\n\\n\-—-———-—————兄弟姐妹的信息修改成功-———--—---———\"〈18

北华航天工业学院课程报告

if (Tree-〉Parent !=NULL) if (strcmp(Tree—>Name,Tree—〉Parent-〉NextNode[0]—〉Name)==0) //如果他是入赘或者是嫁入的就需用配偶节点完成修改 { Tree=Tree->Parent; } for(i=1;i〈=Tree—〉Num;i++) { cout〈〈\"\\n\\n\请输入 ”〈〈Tree—>NextNode[i]—>Name〈〈” 修改的姓名(如果不需要修改就输入’0’,然后按Enter键继续):\\n\"; cin>〉name; if(strcmp(name,\"0”)!=0) strcpy(Tree-〉NextNode[i]->Name,name); cout〈〈”\\n\\n\是否要修改性别(如果需要就输入’1’,不需要修改就输入’0’然后按Enter键继续):\\n\"; cin〉>flag; if (flag==1) { if(Tree—〉NextNode[i]—〉Sex==’0’) Tree—〉NextNode[i]->Sex='1'; else Tree-〉NextNode[i]—〉Sex=’0’; } } cout〈〈”\\n\\n\——-————-———-——-子女的信息修改成功—-———--—--—-——-—”<〈endl; cout〈〈”\\n-————————-————按Enter键继续操作。.. 。。.”<〈endl; getchar(); break; case '5’: if(Tree—〉Parent!=NULL) { if (Tree->NextNode[0]==NULL&&strcmp(Tree—>Name,Tree—>Parent-〉NextNode[0]-〉Name)!=0) { cout〈〈\"\\n\\n\至今还没有配偶!”; cout〈〈\"\\n——-———--——--——按Enter键继续操作.。。 。。.”〈Parent—>NextNode[0]—>Name)==0) { cout<〈\"\\n\\n\请输入 ”〈〈Tree—>Parent—〉Name〈〈” 修改的姓名(如果不需要修改就输入'0’,然后按Enter键继续):\\n\"; cin〉〉name; if(strcmp(name,\"0\")!=0) strcpy(Tree->Parent-〉Name,name); } else { cout〈<”\\n\\n\请输入 \"<〈Tree—>NextNode[0]—〉Name〈〈\" 修改的姓名(如果不需要修改就输入’0’,然后按Enter键继续):\\n”;

19

北华航天工业学院课程报告

cin>〉name; if(strcmp(name,”0\")!=0) strcpy(Tree—>NextNode[0]-〉Name,name); } } else { if(Tree—〉NextNode[0]==NULL) { cout〈〈\"\\n\\n\至今还没有配偶!”; } else { cout<〈\"\\n\\n\请输入 ”〈〈Tree-〉NextNode[0]—>Name〈〈” 修改的姓名(如果不需要修改就输入'0'然后按Enter键继续):\\n”; cin>>name; if(strcmp(name,”0”)!=0) strcpy(Tree->NextNode[0]-〉Name,name); } } cout〈〈”\\n\\n\—--———--—-—-——-配偶的信息修改成功--——-—————-—-—-—\"<//输出主菜单

void MainMenue(TreeNode *Tree) { char c; char name[20]; while(1) { system(”cls”); cout<〈”\”; cout〈〈”\\n\\n\ -—-*****———请选择你的操作——-****—-—”; cout<〈”\\n\—--—-——-——--—-1:输入家谱信息建立多叉树————-———-—————--———-—-\";

20

北华航天工业学院课程报告

cout<〈\"\\n\-—-———-——-—-—-2:在家族中查找某人并输出他或(她)的相应信息—-——\"; cout〈〈”\\n\—-—--—--—-——-—3:添加新的成员——-—-—————-——-—----——-——-—-—-———”; cout<〈”\\n\—-—-—--——-———-4:输出整个家谱信息—-——----——-—---——----——--—--”; cout〈<”\\n\-————-————-—-—5:修改某个人的信息---—---———————-—-—-—-—-—--—-”; cout〈〈”\\n\—-—-—---——-———6:家谱信息存入文件———-——-—--—--—--——-—————————”; cout<〈”\\n\-—-——-—--———--7:读取家谱信息文件-—————--——-—---————-——--———-”; cout<〈”\\n\——-—————--—-——8:退出整个程序——----——-—-—-—-—————--—————--——-\\n\\"; cout〈<”请输入:”; cin>〉c; switch(c) { case ’1’://输入家谱信息建立多叉树 TreeNode * NewNode; NewNode=new TreeNode; cout<<”\\n\请输入姓名: \"; cin〉〉Tree—>Name; cout<〈”\\n\请输入性别女(0) 男(1): ”; cin〉>Tree—>Sex; Tree->Parent=NewNode; Tree->Parent=NULL; CreatTree(Tree); cout〈〈”\\n\--————---—-———家谱图已经建立成功—-—-——--——-—--—\\n\\n”; cout〈〈”\\n———-—-—-—-————按Enter键继续操作。.。 ...”<Name,”0\")==0) { cout〈〈\"\\n\家谱图的多叉树尚未建立请先建立树\\n”; cout〈〈”\\n———---———-———-按Enter键继续操作..。 .。。〈”〈endl; getchar(); break; } cout<〈”\\n\请输入你要查找的人的姓名: \"; cin〉>name; OutPutMessage(SearchTree(Tree,name,20),name,20); cout〈<”\\n\\n\---——*————*—---*-———*————*————*——-—*———-*—--—*————*——-—\\n\”; cout〈〈”\\n--—-————————-—按Enter键继续操作。。. 。。。”<21

北华航天工业学院课程报告

{ cout〈<”\\n\******家谱图的多叉树尚未建立请先建立树******\\n”; cout〈<”\\n—————--—--———-按Enter键继续操作。。。 .。。”〈〈endl; getchar(); break; } AddNew(Tree); cout〈〈\"\\n--———-——————-—按Enter键继续操作。.。 。。。”〈〈endl; getchar(); break; case ’4’://输出整个家谱信息 *****\\n\"; <〈endl; ***\\n”; 〈if(strcmp(Tree->Name,\"0”)==0) { cout〈〈”\\n\******家谱图的多叉树尚未建立请先建立树* cout〈<”\\n——-———-—-——--—按Enter键继续操作。。。 。.。” getchar(); break; } cout〈〈”\\n\\n\整个家谱的主要信息如下:”; OutPutAll(Tree); cout<〈\"\\n——————-——-—-——按Enter键继续操作..。 .。。\"〈〈endl; getchar(); break; case ’5’://修改某个人的信息 if(strcmp(Tree-〉Name,\"0”)==0) { cout<〈”\\n\******家谱图的多叉树尚未建立请先建立树*** cout〈<”\\n----————----—-按Enter键继续操作.。. .。。”〈北华航天工业学院课程报告

getchar(); break; case '8’://退出整个程序 cout<〈\"\\n\\n\-—-—-——-——-——-———本次服务到此结束-———-———-—-—————-—\"; cout<<”\\n\————--—-———-——-—--欢迎下次使用——---—-——--—————-—--—”; cout〈〈\"\\n\————-—-—-----——--——--—谢谢—-—-—--———--——----—--——--\\n\\n”; exit(0); break; default: cout〈<”\\n\\n\——-——--——--———对不起!你的选择不在服务范围之内!—-——--—-—-———-”; cout<〈\"\\n\——-———--———-—————请您再次选择所需的服务项!——-———————-———-———”; cout<〈”\\n\-———-—--—-———————---—--—谢谢合作!—--——--—--—--——--—-———-——-—\\n\\"; cout〈<”\\n————-—-————--—按Enter键继续操作。。. .。。”〈〈endl; getchar(); break; } } }

//创建树

void CreatTree(TreeNode *Node) { int i; int flag; TreeNode *NewNode; NewNode=new TreeNode;

Node-〉NextNode[0]=NewNode; Node-〉NextNode[0]=NULL; cout<〈”\\n\请输入 \"〈〉NewNode—〉Name; cout〈〈”\\n\请输入 ”<Num; if((Node-〉Num)==0&&strcmp(NewNode—〉Name,\"0”)==0) return ; if (Node->Sex==’0') NewNode-〉Sex=’1'; else NewNode-〉Sex='0'; NewNode-〉Num=0; NewNode—〉NextNode[0]=NULL; Node-〉NextNode[0]=NewNode; Node-〉NextNode[0]-〉Parent=Node; for(i=1;i〈=Node-〉Num;i++) { NewNode=new TreeNode;

23

北华航天工业学院课程报告

cout<〈”\\n\请输入 ”〈〈Node—>Name〈<” 的第 ”〈Name; cout<〈\"\\n\请输入 \"<〈Node—〉Name〈<” 的第 ”〈〈i<〈\" 子女的性别女(0) 男(1): \"; cin>>NewNode—〉Sex; NewNode-〉Num=0; NewNode-〉Parent=Node; Node—>NextNode[i]=NewNode; CreatTree(Node—〉NextNode[i]); } }

//遍历并输出树中的内容

void OutPutAll(TreeNode *Tree) { int i, flag=0; cout〈〈”\\n\———****——-***—--***———***—-—***———***--—***---***——-***———”; cout〈<”\\n\姓名:”〈Name; else cout<〈”\\n\妻子 姓名:”〈〈Tree—>NextNode[0]—>Name; for(i=1;i〈=Tree-〉Num;i++) { cout〈〈”\\n\第 ”〈〈i<〈” 个子女的姓名:”<Sex==’0’) cout<〈”女”; else cout<<\"男”; } cout<〈”\\n\”; for(i=1;i〈=Tree->Num;i++) { OutPutAll(Tree->NextNode[i]); } }

//家谱信息存入文件 void firstoftxt()

{ fstream outf(\"D:\\\\f1。txt”,ios::out|ios::trunc); if(!outf) { cerr〈〈\"打开文件错误!”<〈endl;

24

北华航天工业学院课程报告

return; } else { outf〈〈”\\n\\n\******整个家谱的主要信息如下:”〈〈endl; } outf。close(); }

void ofAll(TreeNode *Tree) { fstream outf(”D:\\\\f1.txt\",ios::out|ios::ate|ios::app); if(!outf) { cerr<〈”打开文件错误!”〈outf〈<”\\n\-——****—-—***--—***——-***-——***—--***—-—***—-—***---***-——\"; outf〈<”\\n\姓名:”〈〈Tree—〉Name〈<” 性别:”; if (Tree-〉Sex==’0') { flag=1; outf<<\"女”; } else outf<〈\"男”; if (!(Tree—〉NextNode[0])) { outf〈<”\\n\******至今没有配偶和子女******\\n”; return; } if(flag==1) outf〈〈”\\n\丈夫 姓名:”〈〈Tree—〉NextNode[0]->Name; else outf〈<\"\\n\妻子 姓名:\"〈NextNode[i]—>Name〈<” 性别:\"; if (Tree->NextNode[i]—>Sex==’0’) outf〈〈”女\"; else outf〈〈”男”; } outf〈〈\"\\n\”; for(i=1;i〈=Tree->Num;i++) { ofAll(Tree—〉NextNode[i]); } } outf.close(); cout〈〈”\\n\******家谱信息存入文件成功!**********”〈〈endl; }

//读取家谱信息 void ifAll() { char s[100];

25

北华航天工业学院课程报告

ifstream inf(\"D:\\\\f1.txt\",ios::in); if(!inf) { cerr<〈”文件打开错误!”〈〈endl; return; } inf.getline(s,100); cout〈〈s〈<'\\n'; while(!inf。eof()) { inf。getline(s,100); cout<〈s<〈’\\n’; } inf.close(); cout<<\"\\n\*********家谱信息文件读取成功!**********”<//在树中经过遍历查找某个人

TreeNode * SearchTree(TreeNode *Tree,char name[],int length) { int i; TreeNode *NewNode;

if(strcmp(Tree—>Name,name)==0) { if(length==0) MATEFLAG=1; else MATEFLAG=0; return Tree; } if(Tree-〉NextNode[0]==NULL) return NULL; for(i=0;i〈=Tree—>Num;i++) { if (i==0) NewNode=SearchTree(Tree-〉NextNode[i],name,0); else NewNode=SearchTree(Tree-〉NextNode[i],name,20); if (NewNode!=NULL) return NewNode; } return NULL; }

//输出已经查找到的人的信息

void OutPutMessage(TreeNode * Tree,char name[],int length) { int flag=0,i; TreeNode *NewNode; cout〈〈”\\n\\n\--——-*——--*——-—*-—-—*—-—-*—--—*————*—--—*——--*-———*————\"; if(Tree==NULL) { cout〈〈”\\n\\n\****该家谱图中没有\"〈〈name<<”这个人的信息,请确认是否输入错误*****\\n\";

26

北华航天工业学院课程报告

cout〈<”\\n—-—————-———-—-按Enter键继续操作。。。 。.。\"<〈endl; getchar(); return; } cout<<\"\\n\\n\******您所要找的人已经找到信息如下所示:”; cout<<”\\n\\n\姓名:\"〈Parent; if (MATEFLAG==1) { if(flag==1) { cout<〈”\\n\\n\她是嫁入此间的所以父母信息不在家谱内包括!\"; cout〈<”\\n\丈夫 姓名:\"<〈NewNode—〉Name; } else { cout<<\"\\n\\n\他是入赘此间的所以父母信息不在家谱内包括!\"; cout〈〈\"\\n\妻子 姓名:”<〈NewNode-〉Name; } if ((NewNode—〉Num)〉0) //判断他(她)是否有孩子 { cout〈〈”\\n\孩子的信息如下:”; //输出他(她)的孩子的信息 for(i=1;i<=NewNode—〉Num;i++) { cout〈〈”\\n\姓名:\"〈〈NewNode—〉NextNode[i]—〉Name〈<” 性别:”; if (NewNode—>NextNode[i]—〉Sex=='0’||NewNode->Sex==’0') cout〈〈”女”; else cout〈<”男”; } } return; } if(NewNode==NULL) //判断它是不是根节点如果是的话就没有父母兄弟信息 cout<〈\"\\n\是这个家谱图里最顶端的人没有父母和兄弟姐妹信息!”; else { if (NewNode-〉Sex==’0’) //判断父亲节点是父亲还是母亲 { //输出他(她)的父母亲的信息 cout〈〈”\\n\母亲 姓名:”〈Name; } else { cout〈〈”\\n\母亲 姓名:”〈〈NewNode—>NextNode[0]—〉Name;

27

北华航天工业学院课程报告

cout〈〈”\\n\父亲 姓名:\"〈〈NewNode—〉Name; } if (NewNode—〉Num〉1) //判断他(她)是否有兄弟姐妹 { //输出他(她)的兄弟姐妹的信息 cout〈〈”\\n\\"〈NextNode[i]) cout〈〈”\\n\姓名:\"〈〈NewNode-〉NextNode[i]—〉Name〈〈” 性别:”; if (NewNode-〉NextNode[i]-〉Sex==’0’||Tree—>Sex=='0’) cout〈〈”女\"; else cout〈<”男\"; } } else cout〈〈”\\n\”〈〈Tree—〉Name<<” 没有兄弟姐妹!”; } if(Tree—>NextNode[0]!=NULL) //判断他(她)是否有配偶 { //输出他(她)的配偶的信息 if(flag==1) cout〈<”\\n\丈夫 姓名:”<〈Tree-〉NextNode[0]—〉Name; else cout〈〈”\\n\妻子 姓名:\"〈NextNode[0]—>Name; if (Tree—〉Num〉0) //判断他(她)是否有孩子 { cout〈〈”\\n\孩子的信息如下:”; //输出他(她)的孩子的信息 for(i=1;i〈=Tree—>Num;i++) { cout〈〈”\\n\姓名:\"〈Name〈〈\" 性别:\"; if (Tree—〉NextNode[i]—>Sex=='0'||Tree—〉Sex==’0') cout<〈”女”; else cout〈〈\"男”; } } else cout〈〈”\\n\\"〈〈name〈〈”至今还没有孩子!”; } else cout<〈\"\\n\”〈28

因篇幅问题不能全部显示,请点此查看更多更全内容

Copyright © 2019- huatuo0.com 版权所有 湘ICP备2023021991号-1

违法及侵权请联系:TEL:199 1889 7713 E-MAIL:2724546146@qq.com

本站由北京市万商天勤律师事务所王兴未律师提供法律服务