1、资料内容仅供您学习参考,如有不当之处,请联系改正或者删除。 目 录 第一章 绪论 2 第二章 需求分析 3 2.1题目 3 2.2设计任务 3 2.3数据测试 3 第三章 概要设计 3 3.1 设计思想 3 3.2 实现方法 4 第四章 详细设计 4 4.1功能构想 4 4.2界面设计 4 4.3增加成员 5 4.3.1 添加子女 5 4.3.2 添加配偶 5 4.4修改成员 6 4.4.1修改个人信息 6 4.4.2修改父母信息 6 4.4.3修改兄弟姐妹的信息 6 4.4.4修改子女的信息 7 第五章 调试分
2、析 7 第六章 测试结果 9 致 谢 10 参考文献 11 附 录 11 第一章 绪论 当前, 很多家庭家谱丢失, 家庭一些关系混乱, 为了避免这一问题, 制定一家谱程序。家谱用于记录某家族历代家族成员的情况与关系, 实现对一个家族所有的资料进行收集整理。支持对家谱的存储、 更新、 查询、 统计等操作。并用计算机永久储存家族数据, 方便随时调用。 第二章 需求分析 2.1题目 家谱管理系统 2.2设计任务 系统总体
3、说明: 以树形结构存储家族信息, 只考虑三代( 祖父, 父亲, 叔叔, 姑姑, 自己, 兄弟姐妹, 堂兄弟姐妹) , 只考虑每个人有0或者1个兄弟姐妹的情况。注意每个结点结构。统计统计家族成员人数, 查询家族成员辈份。 完成功能的详细说明: 1.输入家族成员情况, 建立树结构( 涉及创立二叉树) ; 2.统计家族成员人数和每一个家庭成员人数( 涉及树的遍历) ; 3.查询家族成员辈份情况( 任意输入两个家庭成员, 查询她们的关系, 父子, 祖孙, 兄弟, 堂兄弟, 共同的祖先) 。 4. 选做, 考虑每个人有多个兄弟姐妹的情况。 2.3数据测试 测试的数据有: 田迎
4、新 陈瑞英 田紫藤 田紫恒 孙超 李美霖 …….. 第三章 概要设计 3.1 设计思想 创立一棵树, 存储家庭关系, 数据类型有 int Num; //记录这个人拥有几个儿女 char Name[20]; //记录这个人的姓名 char Sex; //标示节点的种类有女(0) 男(1) struct TreeNode * NextNode[20]; //记录这个人的儿女 struct TreeNode * Par
5、ent; //记录这个节点的父节点 3.2 实现方法 完成功能的函数有 void CreatTree(TreeNode *Tree);//--------------------------------创立树 void OutPutAll(TreeNode *Tree);//-------------------------------遍历并输出树中的内容 void firstoftxt();//----------------------------------------------------写入文件的开始信息 void ofAll(TreeNode
6、 *Tree);//-------------------------------------写入文件函数 void ifAll();//---------------------------------------------------------读取文件的函数 TreeNode * SearchTree(TreeNode *Tree,char name[],int length);//查找结点的函数 void MainMenue(TreeNode *Tree);//-----------------------------主菜单 void SubMenue1(TreeNode
7、 Tree);//----------------------------修改成员信息的菜单 void SubMenue2(TreeNode *Tree);//-----------------------------添加新成员菜单 void Change(TreeNode * Tree);//---------------------------------修改成员信息 void AddNew(TreeNode * Tree);//--------------------------------添加新成员 void OutPutMessage(TreeNode * Tree,cha
8、r name[],int length);//输出已经查找到的人的信息 第四章 详细设计 4.1功能构想 构想好总体规划之后, 便开始设计程序中需要用到的各个功能函数, 初步构想是要先实现最基本的几项功能, 其中数据操作的有: 增加成员, 修改成员资料, 删除成员; 数据存取的有: 打开家谱, 新建家谱, 保存家谱; 数据查询的有: 查看某代信息, 按姓名查找, 查看成员关系, 等等。 4.2界面设计 cout<<"\n\n\t ---*****---请选择你的操作---****---"; cout<<"\n\t--------------1:输入家谱
9、信息建立多叉树----------------------"; cout<<"\n\t--------------2:在家族中查找某人并输出她或(她)的相应信息----"; cout<<"\n\t--------------3:添加新的成员--------------------------------"; cout<<"\n\t--------------4:输出整个家谱信息----------------------------"; cout<<"\n\t--------------5:修改某个人的信息----------------------------";
10、 cout<<"\n\t--------------6:家谱信息存入文件----------------------------"; cout<<"\n\t--------------7:读取家谱信息文件----------------------------"; cout<<"\n\t--------------8:退出整个程序--------------------------------\n\t"; if(选择1) { CreatTree(TreeNode *Tree); } Else if( 选择2) { OutPutMessage(TreeNo
11、de * 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
12、TreeNode; cout<<"\n\n\t请输入添加人员姓名: "; cin>>NewNode->Name; cout<<"\n\n\t请输入添加人员性别女(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
13、1; cout<<"\n\n\t-------------子女的信息添加成功----------------"; 4.3.2 添加配偶 NewNode=new TreeNode; 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请输入
14、修改的姓名(如果不需要修改就输入'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';
else Tree->Sex='0';
}
4.4.2修改父母信息
cout<<"\n\n\t请输入 "< 15、]<<" 要修改的姓名(如果不需要修改就输入'0',然后按Enter键继续):\n";
cin>>name;
if(strcmp(name,"0")!=0)
strcpy(Tree->Parent->Name,name);
cout<<"\n\n\t请输入 "< 16、\n\t请输入 "< 17、de->NextNode[i]->Sex='1';
else NewNode->NextNode[i]->Sex='0';
}
4.4.4修改子女的信息
cout<<"\n\n\t请输入 "< 18、\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.修改信息
第六章 测试结果
父亲姓名 田迎新 母亲姓名 陈瑞英 姐姐 田紫藤 姐夫 孙超 本人 田紫恒 李美霖
致 谢
感谢 19、孙红艳老师辛苦教导与教诲, 让我学到了很多知识, 提高了很大的能力。
与此同时, 也感谢老师为我辛苦验收课设, 耐心讲解, 让我也受益匪浅。
今后, 我一定会努力学习, 用我的实际行动来回报家长, 感谢我的老师, 为学校争光, 努力为我们的国家, 贡献出一份微薄的贡献!
参考文献
[1]《数据结构》C++语言版 严蔚敏 吴伟民编著 清华大学出版社
[2]《数据库数据结构软件工程课程设计指导及习题解答》徐志才 方贤文 刘士 20、喜编 北京师范大学出版社
[3]《C++语言程序设计》 何钦铭 颜晖 主编 高等教育出版社
附 录
#include 21、 //记录这个人拥有几个儿女
char Name[20]; //记录这个人的姓名
char Sex; //标示节点的种类有女(0) 男(1)
struct TreeNode * NextNode[20]; //记录这个人的儿女
struct TreeNode * Parent; //记录这个节点的父节点
}TreeNode;
void CreatTree(TreeNode *Tree);//------------------------ 22、创立树
void OutPutAll(TreeNode *Tree);//-------------------------------遍历并输出树中的内容
void firstoftxt();//--------------------------------------------写入文件的开始信息
void ofAll(TreeNode *Tree);//-----------------------------------写入文件函数
void ifAll();//-------------------------------------------------读 23、取文件的函数
TreeNode * SearchTree(TreeNode *Tree,char name[],int length);//查找结点的函数
void MainMenue(TreeNode *Tree);//-------------------------------主菜单
void SubMenue1(TreeNode * Tree);//------------------------------修改成员信息的菜单
void SubMenue2(TreeNode *Tree);//-------------------------------添加新成员菜单
vo 24、id 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;
25、
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<<"\t";
cout<<"\n\n\t ---** 26、请选择你的操作---****--- ";
cout<<"\n\t---*---*---*---1:添加某个人的子女的信息---*---*---*---*---- ";
cout<<"\n\t---*---*---*---2:添加某个人配偶的信息-*---*---*---*---*---- ";
cout<<"\n\t---*---*---*---3:退出-*---*---*---*---*---*---*---*---*----\n\t";
cout<<"请输入:";
cin>>c;
switch(c)
27、 { case '1':
cout<<"\n\n\t请输入那个人的名字: ";
cin>>name;
Tree=SearchTree(Tree,name,20);
if(Tree==NULL)
{ cout<<"\n\n\t****该家谱图中没有 "< 28、tNode[0]->Name)
{ cout<<"\n\n\t"< 29、>NewNode->Name;
cout<<"\n\n\t请输入添加人员性别女(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 30、\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已经有了配偶";
bre 31、ak;
}
if(Tree==NULL)
{ cout<<"\n\n\t****该家谱图中没有 "< 32、>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------------ 33、谢谢合作!----------------------\n\t";break;
}
if (c=='3')
break;
}
}
//修改某个人的信息
void Change(TreeNode * Tree)
{ char name[20];
TreeNode * NewNode;
cout<<"\n\t请输入你要修改的人的信息: ";
cin>>name;
NewNode=SearchTree(Tree,name,20);
if(NewNode==NULL)
{ cout<<"\n\n\t****该家谱 34、图中没有 "< 35、请选择你的操作---****--- ";
cout<<"\n\t---*---*---*---1:修改个人的信息---*---*---*---*---*---*---- ";
cout<<"\n\t---*---*---*---2:修改父母的信息---*---*---*---*---*---*---- ";
cout<<"\n\t---*---*---*---3:修改兄弟姐妹的信息---*---*---*---*---*---- ";
cout<<"\n\t---*---*---*---4:修改子女的信息---*- 36、 ";
cout<<"\n\t---*---*---*---5:修改配偶的信息---*---*---*---*---*---*---- ";
cout<<"\n\t---*---*---*---6:退出-*---*---*---*---*---*---*---*---*----\n\t";
cout<<"请输入:";
cin>>c;
switch(c)
{ case '1':
cout<<"\n\n\t请输入修改的姓名(如果不需要修改就输入'0',然后按Enter键继续):\n";
37、 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';
else Tree->Sex='0';
}
cout<<"\n\n\t个人信息修改成功!";
cout< 38、<"\n--------------按Enter键继续操作... ..."< 39、入赘或加入此间的
{ if(Tree->Sex=='0')
{ cout<<"\n\n\t她是嫁入此间的因此父母信息不在家谱内包括!";
cout<<"\n--------------按Enter键继续操作... ..."< 40、 getchar();
} break;
}
if(Tree->Parent->Sex=='0')
{ strcpy(Parent[0],"母亲");
strcpy(Parent[1],"父亲");
}
else
{ strcpy(Parent[0],"父亲");
strcpy(Parent[1],"母亲");
}
cout<<"\n\n\t请输入 "< 41、入'0',然后按Enter键继续):\n";
cin>>name;
if(strcmp(name,"0")!=0)
strcpy(Tree->Parent->Name,name);
cout<<"\n\n\t请输入 "< 42、
cout<<"\n\n\t-------------父母的信息修改成功----------------"< 43、 cout<<"\n--------------按Enter键继续操作... ..."< 44、);
}
else
{cout<<"\n\n\t她是入赘此间的因此兄弟姐妹信息不在家谱内包括!";
cout<<"\n--------------按Enter键继续操作... ..."< 45、 getchar(); break; }
else
{ for(i=1;i<=NewNode->Num;i++)
{ if(NewNode->NextNode[i]->Name!=Tree->Name)
{ cout<<"\n\n\t请输入 "< 46、 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';
else NewNode->NextNode[i]-> 47、Sex='0';
}
}
}
}
cout<<"\n\n\t------------兄弟姐妹的信息修改成功-------------"< 48、"< 49、改的姓名(如果不需要修改就输入'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 50、'0')
Tree->NextNode[i]->Sex='1';
else
Tree->NextNode[i]->Sex='0';
}
}
cout<<"\n\n\t---------------子女的信息修改成功----------------"<
©2010-2025 宁波自信网络信息技术有限公司 版权所有
客服电话:4009-655-100 投诉/维权电话:18658249818