家谱管理系统设计报告.docx
《家谱管理系统设计报告.docx》由会员分享,可在线阅读,更多相关《家谱管理系统设计报告.docx(37页珍藏版)》请在冰豆网上搜索。
家谱管理系统设计报告
第一章绪论
目前,很多家庭家谱丢失,家庭一些关系混乱,为了避免这一问题,制定一家谱程序。
家谱用于记录某家族历代家族成员的情况与关系,实现对一个家族所有的资料进行收集整理。
支持对家谱的存储、更新、查询、统计等操作。
并用计算机永久储存家族数据,方便随时调用。
第二章需求分析
2.1题目
家谱管理系统
2.2设计任务
系统总体说明:
以树形结构存储家族信息,只考虑三代(祖父,父亲,叔叔,姑姑,自己,兄弟姐妹,堂兄弟姐妹),只考虑每个人有0或者1个兄弟姐妹的情况。
注意每个结点结构。
统计统计家族成员人数,查询家族成员辈份。
完成功能的详细说明:
1.输入家族成员情况,建立树结构(涉及创建二叉树);
2.统计家族成员人数和每一个家庭成员人数(涉及树的遍历);
3.查询家族成员辈份情况(任意输入两个家庭成员,查询他们的关系,父子,祖孙,兄弟,堂兄弟,共同的祖先)。
4.选做,考虑每个人有多个兄弟姐妹的情况。
2.3数据测试
测试的数据有:
田迎新陈瑞英田紫藤田紫恒孙超李美霖……..
第三章概要设计
3.1设计思想
创建一棵树,存储家庭关系,数据类型有
intNum;//记录这个人拥有几个儿女
charName[20];//记录这个人的姓名
charSex;//标示节点的种类有女(0)男
(1)
structTreeNode*NextNode[20];//记录这个人的儿女
structTreeNode*Parent;//记录这个节点的父节点
3.2实现方法
完成功能的函数有
voidCreatTree(TreeNode*Tree);//--------------------------------创建树
voidOutPutAll(TreeNode*Tree);//-------------------------------遍历并输出树中的内容
voidfirstoftxt();//----------------------------------------------------写入文件的开始信息
voidofAll(TreeNode*Tree);//-------------------------------------写入文件函数
voidifAll();//---------------------------------------------------------读取文件的函数
TreeNode*SearchTree(TreeNode*Tree,charname[],intlength);//查找结点的函数
voidMainMenue(TreeNode*Tree);//-----------------------------主菜单
voidSubMenue1(TreeNode*Tree);//----------------------------修改成员信息的菜单
voidSubMenue2(TreeNode*Tree);//-----------------------------添加新成员菜单
voidChange(TreeNode*Tree);//---------------------------------修改成员信息
voidAddNew(TreeNode*Tree);//--------------------------------添加新成员
voidOutPutMessage(TreeNode*Tree,charname[],intlength);//输出已经查找到的人的信息
第四章详细设计
4.1功能构想
构想好总体规划之后,便开始设计程序中需要用到的各个功能函数,初步构想是要先实现最基本的几项功能,其中数据操作的有:
增加成员,修改成员资料,删除成员;数据存取的有:
打开家谱,新建家谱,保存家谱;数据查询的有:
查看某代信息,按姓名查找,查看成员关系,等等。
4.2界面设计
cout<<"\n\n\t---*****---请选择你的操作---****---";
cout<<"\n\t--------------1:
输入家谱信息建立多叉树----------------------";
cout<<"\n\t--------------2:
在家族中查找某人并输出他或(她)的相应信息----";
cout<<"\n\t--------------3:
添加新的成员--------------------------------";
cout<<"\n\t--------------4:
输出整个家谱信息----------------------------";
cout<<"\n\t--------------5:
修改某个人的信息----------------------------";
cout<<"\n\t--------------6:
家谱信息存入文件----------------------------";
cout<<"\n\t--------------7:
读取家谱信息文件----------------------------";
cout<<"\n\t--------------8:
退出整个程序--------------------------------\n\t";
if(选择1)
{CreatTree(TreeNode*Tree);}
Elseif(选择2)
{OutPutMessage(TreeNode*Tree,charname[],intlength);}
Elseif(选择3)
{AddNew(TreeNode*Tree);}
Elseif(选择4)
{OutPutAll(TreeNode*Tree);}
Elseif(选择5)
{Change(TreeNode*Tree);}
Elseif(选择6)
{ofAll(TreeNode*Tree);}
Elseif(选择7)
{ifAll();}
Else
{exit(0);}
4.3增加成员
4.3.1添加子女
NewNode=newTreeNode;
cout<<"\n\n\t请输入添加人员姓名:
";
cin>>NewNode->Name;
cout<<"\n\n\t请输入添加人员性别女(0)男
(1):
";
cin>>NewNode->Sex;
num=Tree->Num;
NewNode->NextNode[0]=newTreeNode;
NewNode->NextNode[0]=NULL;
NewNode->Num=0;
NewNode->Parent=Tree;
Tree->NextNode[num+1]=NewNode;
Tree->Num=Tree->Num+1;
cout<<"\n\n\t-------------子女的信息添加成功----------------";
4.3.2添加配偶
NewNode=newTreeNode;
cout<<"\n\n\t请输入添加人员姓名:
";
cin>>NewNode->Name;
cout<<"\n\n\t请输入添加人员性别女(0)男
(1):
";
cin>>NewNode->Sex;
NewNode->Parent=Tree;
Tree->NextNode[0]=NewNode;
4.4修改成员
4.4.1修改个人信息
cout<<"\n\n\t请输入修改的姓名(如果不需要修改就输入'0',然后按Enter键继续):
\n";
cin>>name;
if(strcmp(name,"0")!
=0)
strcpy(Tree->Name,name);
cout<<"\n\n\t是否要修改性别:
(如果需要就输入'1',不需要修改就输入'0'然后按Enter键继续):
\n";
cin>>flag;
if(flag==1)
{
if(Tree->Sex=='0')
Tree->Sex='1';
elseTree->Sex='0';
}
4.4.2修改父母信息
cout<<"\n\n\t请输入"<\n";
cin>>name;
if(strcmp(name,"0")!
=0)
strcpy(Tree->Parent->Name,name);
cout<<"\n\n\t请输入"<\n";
cin>>name;
if(strcmp(name,"0")!
=0)
strcpy(Tree->Parent->NextNode[0]->Name,name);
4.4.3修改兄弟姐妹的信息
cout<<"\n\n\t请输入"<NextNode[i]->Name<<"修改的姓名(如果不需要修改就输入'0',然后按Enter键继续):
\n";
cin>>name;
if(strcmp(name,"0")!
=0)
strcpy(NewNode->NextNode[i]->Name,name);
cout<<"\n\n\t是否要修改性别(如果需要就输入'1'不需要修改就输入'0'然后按Enter键继续):
\n";
cin>>flag;
if(flag==1)
{
if(NewNode->NextNode[i]->Sex=='0')
NewNode->NextNode[i]->Sex='1';
elseNewNode->NextNode[i]->Sex='0';
}
4.4.4修改子女的信息
cout<<"\n\n\t请输入"<NextNode[i]->Name<<"修改的姓名(如果不需要修改就输入'0',然后按Enter键继续):
\n";
cin>>name;
if(strcmp(name,"0")!
=0)
strcpy(Tree->NextNode[i]->Name,name);
cout<<"\n\n\t是否要修改性别(如果需要就输入'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';
}
第五章调试分析
1.进入系统
2.建立家谱
3.查看信息
4.添加成员
5.修改信息
第六章测试结果
父亲姓名田迎新母亲姓名陈瑞英姐姐田紫藤姐夫孙超本人田紫恒李美霖
致谢
感谢孙红艳老师辛苦教导与教诲,让我学到了很多知识,提高了很大的能力。
与此同时,也感谢老师为我辛苦验收课设,耐心讲解,让我也受益匪浅。
今后,我一定会努力学习,用我的实际行动来回报家长,感谢我的老师,为学校争光,努力为我们的国家,贡献出一份微薄的贡献!
参考文献
[1]《数据结构》C++语言版 严蔚敏 吴伟民编著清华大学出版社2011
[2]《数据库数据结构软件工程课程设计指导及习题解答》徐志才 方贤文 刘士喜编北京师范大学出版社2011
[3]《C++语言程序设计》何钦铭颜晖主编高等教育出版社2008
附录
#include
#include
#include//getchar可以将键入的信息存到缓冲区,按Enter键将进行输入
#include//system的头文件,exit的头文件
#include
intMATEFLAG=0;
typedefstructTreeNode
{intNum;//记录这个人拥有几个儿女
charName[20];//记录这个人的姓名
charSex;//标示节点的种类有女(0)男
(1)
structTreeNode*NextNode[20];//记录这个人的儿女
structTreeNode*Parent;//记录这个节点的父节点
}TreeNode;
voidCreatTree(TreeNode*Tree);//-------------------------------创建树
voidOutPutAll(TreeNode*Tree);//-------------------------------遍历并输出树中的内容
voidfirstoftxt();//--------------------------------------------写入文件的开始信息
voidofAll(TreeNode*Tree);//-----------------------------------写入文件函数
voidifAll();//-------------------------------------------------读取文件的函数
TreeNode*SearchTree(TreeNode*Tree,charname[],intlength);//查找结点的函数
voidMainMenue(TreeNode*Tree);//-------------------------------主菜单
voidSubMenue1(TreeNode*Tree);//------------------------------修改成员信息的菜单
voidSubMenue2(TreeNode*Tree);//-------------------------------添加新成员菜单
voidChange(TreeNode*Tree);//---------------------------------修改成员信息
voidAddNew(TreeNode*Tree);//---------------------------------添加新成员
voidOutPutMessage(TreeNode*Tree,charname[],intlength);//---输出已经查找到的人的信息
//主函数
voidmain()
{TreeNode*Tree;
Tree=newTreeNode;
Tree->Parent=NULL;
strcpy(Tree->Name,"0");
MainMenue(Tree);
}
//添加新的成员
voidAddNew(TreeNode*Tree)
{SubMenue2(Tree);}
//输出副菜单
voidSubMenue2(TreeNode*Tree)
{charc;
intnum;
charname[20];
TreeNode*NewNode;
while
(1)
{system("cls");
cout<<"\t";
cout<<"\n\n\t---*****---请选择你的操作---****---";
cout<<"\n\t---*---*---*---1:
添加某个人的子女的信息---*---*---*---*----";
cout<<"\n\t---*---*---*---2:
添加某个人配偶的信息-*---*---*---*---*----";
cout<<"\n\t---*---*---*---3:
退出-*---*---*---*---*---*---*---*---*----\n\t";
cout<<"请输入:
";
cin>>c;
switch(c)
{case'1':
cout<<"\n\n\t请输入那个人的名字:
";
cin>>name;
Tree=SearchTree(Tree,name,20);
if(Tree==NULL)
{cout<<"\n\n\t****该家谱图中没有"<Parent==NULL&&Tree->NextNode[0]==NULL||Tree->Parent!
=NULL&&Tree->Name!
=Tree->Parent->NextNode[0]->Name)
{cout<<"\n\n\t"<Name<<"至今还没有配偶请先添加配偶!
";
break;
}
if(Tree->Parent==NULL&&(Tree->Num>20||Tree->Num<0))
Tree->Num=0;
if(MATEFLAG==1)
Tree=Tree->Parent;
NewNode=newTreeNode;
cout<<"\n\n\t请输入添加人员姓名:
";
cin>>NewNode->Name;
cout<<"\n\n\t请输入添加人员性别女(0)男
(1):
";
cin>>NewNode->Sex;
num=Tree->Num;
NewNode->NextNode[0]=newTreeNode;
NewNode->NextNode[0]=NULL;
NewNode->Num=0;
NewNode->Parent=Tree;
Tree->NextNode[num+1]=NewNode;
Tree->Num=Tree->Num+1;
cout<<"\n\n\t-------------子女的信息添加成功----------------";
break;
case'2':
cout<<"\n\n\t请输入那个人的名字:
";
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\t已经有了配偶";
break;
}
if(Tree==NULL)
{cout<<"\n\n\t****该家谱图中没有"<NewNode=newTreeNode;
cout<<"\n\n\t请输入添加人员姓名:
";
cin>>NewNode->Name;
cout<<"\n\n\t请输入添加人员性别女(0)男
(1):
";
cin>>NewNode->Sex;
NewNode->Parent=Tree;
Tree->NextNode[0]=NewNode;
break;
case'3':
cout<<"\n\n\t----------------本项服务到此结束-----------------";break;
case'\n':
break;
default:
cout<<"\n\n\t--------对不起!
你的选择不在服务范围之内!
---------";
cout<<"\n\t-----------请您再次选择所需的服务项!
-------------";
cout<<"\n\t------------------谢谢合作!
----------------------\n\t";break;
}
if(c=='3')
break;
}
}
//修改某个人的信息
voidChange(TreeNode*Tree)
{charname[20];
TreeNode*NewNode;
cout<<"\n\t请输入你要修改的人的信息:
";
cin>>name;
NewNode=SearchTree(Tree,name,20);
if(NewNode==NULL)
{cout<<"\n\n\t****该家谱图中没有"<else
{SubMenue1(NewNode);}
}
//输出副菜单
voidSubMenue1(TreeNode*Tree)
{charc;
intflag,i;
charname[20];
charParent[2][20];
TreeNode*NewNode;
while
(1)
{system("cls");
cout<<"\t";
cout<<"\n\n\t---*****---请选择你的操作---****---";
cout<<"\n\t---*---*---*---1:
修改个人的信息---*---*---*---*---*---*----";
cout<<"\n\t---*---*---*---2:
修改父母的信息---*---*---*---*---*---*----";
cout<<"\n\t---*---*---*---3:
修改兄弟姐妹的信息---*---*---*---*---*----";
cout<<"\n\t---*---*---*---4:
修改子女的信息---*---*---*---*---*---*----";
cout<<"\n\t---*---*---*---5:
修改配偶的信息---*---*---*---*---*---*----";
cout<<"\n\t---*---*---*---6:
退出-*---*---*---*---*---*---*---*---*----\n\t";
cout<<"请输入:
";
cin>>c;
switch(c)
{case'1':
cout<<"\n\n\t请输入修改的姓名(如果不需要修改就输入'0',然后按Enter键继续):
\n";
cin>>name;
if(strcmp(name,"0")!
=0)
strcpy(Tree->Name,name);
cout<<"\n\n\t是否要修改性别:
(如果需要就输入'1',不需要修改就输入'0'然后按Enter键继续):
\n"