1、资料内容仅供您学习参考,如有不当之处,请联系改正或者删除。目 录第一章 绪论2第二章需求分析32.1题目32.2设计任务32.3数据测试3第三章 概要设计33.1 设计思想33.2 实现方法4第四章 详细设计44.1功能构想44.2界面设计44.3增加成员54.3.1 添加子女54.3.2 添加配偶54.4修改成员64.4.1修改个人信息64.4.2修改父母信息64.4.3修改兄弟姐妹的信息64.4.4修改子女的信息7第五章 调试分析7第六章 测试结果9致 谢10参考文献11附 录11第一章 绪论当前, 很多家庭家谱丢失, 家庭一些关系混乱, 为了避免这一问题, 制定一家谱程序。家谱用于记录某
2、家族历代家族成员的情况与关系, 实现对一个家族所有的资料进行收集整理。支持对家谱的存储、 更新、 查询、 统计等操作。并用计算机永久储存家族数据, 方便随时调用。第二章 需求分析2.1题目家谱管理系统2.2设计任务系统总体说明: 以树形结构存储家族信息, 只考虑三代( 祖父, 父亲, 叔叔, 姑姑, 自己, 兄弟姐妹, 堂兄弟姐妹) , 只考虑每个人有0或者1个兄弟姐妹的情况。注意每个结点结构。统计统计家族成员人数, 查询家族成员辈份。完成功能的详细说明: 1输入家族成员情况, 建立树结构( 涉及创立二叉树) ; 2统计家族成员人数和每一个家庭成员人数( 涉及树的遍历) ; 3查询家族成员辈份
3、情况( 任意输入两个家庭成员, 查询她们的关系, 父子, 祖孙, 兄弟, 堂兄弟, 共同的祖先) 。4. 选做, 考虑每个人有多个兄弟姐妹的情况。2.3数据测试测试的数据有: 田迎新 陈瑞英 田紫藤 田紫恒 孙超 李美霖 .第三章 概要设计3.1 设计思想创立一棵树, 存储家庭关系, 数据类型有int Num; /记录这个人拥有几个儿女char Name20; /记录这个人的姓名char Sex; /标示节点的种类有女(0) 男(1)struct TreeNode * NextNode20; /记录这个人的儿女struct TreeNode * Parent; /记录这个节点的父节点3.2 实
4、现方法完成功能的函数有 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(TreeN
5、ode * Tree);/-修改成员信息的菜单void SubMenue2(TreeNode *Tree);/-添加新成员菜单void Change(TreeNode * Tree);/-修改成员信息void AddNew(TreeNode * Tree);/-添加新成员void OutPutMessage(TreeNode * Tree,char name,int length);/输出已经查找到的人的信息第四章 详细设计4.1功能构想构想好总体规划之后, 便开始设计程序中需要用到的各个功能函数, 初步构想是要先实现最基本的几项功能, 其中数据操作的有: 增加成员, 修改成员资料, 删除成员
6、; 数据存取的有: 打开家谱, 新建家谱, 保存家谱; 数据查询的有: 查看某代信息, 按姓名查找, 查看成员关系, 等等。4.2界面设计coutnnt -*-请选择你的操作-*-;coutnt-1:输入家谱信息建立多叉树-;coutnt-2:在家族中查找某人并输出她或(她)的相应信息-;coutnt-3:添加新的成员-;coutnt-4:输出整个家谱信息-;coutnt-5:修改某个人的信息-; coutnt-6:家谱信息存入文件-;coutnt-7:读取家谱信息文件-;coutnt-8:退出整个程序-nt; if(选择1) CreatTree(TreeNode *Tree); Else i
7、f( 选择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();Elseexit( 0) ;4.3增加成员4.3.1 添加子女NewNode=new TreeNode;coutNewNode-Na
8、me;coutNewNode-Sex;num=Tree-Num;NewNode-NextNode0=new TreeNode;NewNode-NextNode0=NULL;NewNode-Num=0;NewNode-Parent=Tree;Tree-NextNodenum+1=NewNode;Tree-Num=Tree-Num+1;coutnnt-子女的信息添加成功-;4.3.2 添加配偶NewNode=new TreeNode;coutNewNode-Name;coutNewNode-Sex;NewNode-Parent=Tree;Tree-NextNode0=NewNode;4.4修改成员
9、4.4.1修改个人信息coutname;if(strcmp(name,0)!=0)strcpy(Tree-Name,name);coutflag;if (flag=1)if(Tree-Sex=0) Tree-Sex=1;else Tree-Sex=0;4.4.2修改父母信息coutnnt请输入 Parent0name;if(strcmp(name,0)!=0)strcpy(Tree-Parent-Name,name);coutnnt请输入 Parent1name;if(strcmp(name,0)!=0)strcpy(Tree-Parent-NextNode0-Name,name);4.4.3
10、修改兄弟姐妹的信息coutnnt请输入 NextNodei-Namename;if(strcmp(name,0)!=0)strcpy(NewNode-NextNodei-Name,name);coutflag;if (flag=1)if(NewNode-NextNodei-Sex=0)NewNode-NextNodei-Sex=1;else NewNode-NextNodei-Sex=0;4.4.4修改子女的信息coutnnt请输入 NextNodei-Namename;if(strcmp(name,0)!=0)strcpy(Tree-NextNodei-Name,name);coutflag
11、;if (flag=1)if(Tree-NextNodei-Sex=0)Tree-NextNodei-Sex=1;elseTree-NextNodei-Sex=0;第五章 调试分析1.进入系统2.建立家谱3.查看信息4.添加成员5.修改信息第六章 测试结果父亲姓名 田迎新 母亲姓名 陈瑞英 姐姐 田紫藤 姐夫 孙超 本人 田紫恒 李美霖致 谢感谢孙红艳老师辛苦教导与教诲, 让我学到了很多知识, 提高了很大的能力。与此同时, 也感谢老师为我辛苦验收课设, 耐心讲解, 让我也受益匪浅。 今后, 我一定会努力学习, 用我的实际行动来回报家长, 感谢我的老师, 为学校争光, 努力为我们的国家, 贡献出
12、一份微薄的贡献! 参考文献 1数据结构+语言版严蔚敏吴伟民编著 清华大学出版社 2数据库数据结构软件工程课程设计指导及习题解答徐志才方贤文刘士喜编 北京师范大学出版社 3C+语言程序设计 何钦铭 颜晖 主编 高等教育出版社 附 录#include #include #include /getchar 能够将键入的信息存到缓冲区,按Enter键将进行输入#include /system的头文件,exit的头文件#include int MATEFLAG=0;typedef struct TreeNodeint Num; /记录这个人拥有几个儿女char Name20; /记录这个人的姓名char
13、 Sex; /标示节点的种类有女(0) 男(1)struct TreeNode * NextNode20; /记录这个人的儿女struct TreeNode * Parent; /记录这个节点的父节点TreeNode;void CreatTree(TreeNode *Tree);/-创立树void OutPutAll(TreeNode *Tree);/-遍历并输出树中的内容void firstoftxt();/-写入文件的开始信息void ofAll(TreeNode *Tree);/-写入文件函数void ifAll();/-读取文件的函数TreeNode * SearchTree(Tree
14、Node *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);/-输出已经查找到的
15、人的信息/主函数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 name20;TreeNode * NewNode;while(1)system(cls);coutt; coutnnt -*-请选择你的操作-*- ;coutnt-*
16、-*-*-1:添加某个人的子女的信息-*-*-*-*- ;coutnt-*-*-*-2:添加某个人配偶的信息-*-*-*-*-*- ;coutnt-*-*-*-3:退出-*-*-*-*-*-*-*-*-*-nt;coutc;switch(c)case 1:coutname;Tree=SearchTree(Tree,name,20);if(Tree=NULL)coutnnt*该家谱图中没有 nameParent=NULL&Tree-NextNode0=NULL|Tree-Parent!=NULL&Tree-Name!=Tree-Parent-NextNode0-Name) coutnntName
17、Parent=NULL&(Tree-Num20|Tree-NumNum=0; if(MATEFLAG=1)Tree=Tree-Parent; NewNode=new TreeNode; coutNewNode-Name;coutNewNode-Sex;num=Tree-Num;NewNode-NextNode0=new TreeNode;NewNode-NextNode0=NULL;NewNode-Num=0;NewNode-Parent=Tree;Tree-NextNodenum+1=NewNode;Tree-Num=Tree-Num+1;coutnnt-子女的信息添加成功-;break;c
18、ase 2:coutname;Tree=SearchTree(Tree,name,20);if(Tree-Parent!=NULL&strcmp(Tree-Name,Tree-Parent-NextNode0-Name)=0|Tree-NextNode0!=NULL)coutnnt已经有了配偶;break;if(Tree=NULL)coutnnt*该家谱图中没有 name 这个人的信息,请确认是否输入错误*n;break;NewNode=new TreeNode;coutNewNode-Name;coutNewNode-Sex;NewNode-Parent=Tree;Tree-NextNode
19、0=NewNode;break;case 3:coutnnt-本项服务到此结束-;break;case n:break;default:coutnnt-对不起!你的选择不在服务范围之内!- ;coutnt-请您再次选择所需的服务项!- ;coutnt-谢谢合作!-nt;break;if (c=3)break;/修改某个人的信息void Change(TreeNode * Tree) char name20;TreeNode * NewNode;coutname; NewNode=SearchTree(Tree,name,20);if(NewNode=NULL) coutnnt*该家谱图中没有
20、name 这个人的信息,请确认是否输入错误*n;return;else SubMenue1(NewNode); /输出副菜单void SubMenue1(TreeNode * Tree)char c;int flag,i;char name20;char Parent220;TreeNode * NewNode;while(1)system(cls);coutt; coutnnt -*-请选择你的操作-*- ;coutnt-*-*-*-1:修改个人的信息-*-*-*-*-*-*- ;coutnt-*-*-*-2:修改父母的信息-*-*-*-*-*-*- ;coutnt-*-*-*-3:修改兄弟
21、姐妹的信息-*-*-*-*-*- ;coutnt-*-*-*-4:修改子女的信息-*-*-*-*-*-*- ;coutnt-*-*-*-5:修改配偶的信息-*-*-*-*-*-*- ;coutnt-*-*-*-6:退出-*-*-*-*-*-*-*-*-*-nt;coutc;switch(c)case 1:coutname;if(strcmp(name,0)!=0)strcpy(Tree-Name,name);coutflag;if (flag=1)if(Tree-Sex=0)Tree-Sex=1;else Tree-Sex=0;coutnnt个人信息修改成功!;coutn-按Enter键继续操
22、作. .Parent=NULL)/判断是不是头节点coutnt是这个家谱图里最顶端的人没有父母信息!endl;coutn-按Enter键继续操作. .Sex=0) coutnnt她是嫁入此间的因此父母信息不在家谱内包括!;coutn-按Enter键继续操作. .endl; getchar(); else coutnnt她是入赘此间的因此父母信息不在家谱内包括!;coutn-按Enter键继续操作. .Parent-Sex=0) strcpy(Parent0,母亲); strcpy(Parent1,父亲); else strcpy(Parent0,父亲); strcpy(Parent1,母亲);
23、 coutnnt请输入 Parent0name; if(strcmp(name,0)!=0) strcpy(Tree-Parent-Name,name); coutnnt请输入 Parent1name; if(strcmp(name,0)!=0) strcpy(Tree-Parent-NextNode0-Name,name); coutnnt-父母的信息修改成功-endl;coutn-按Enter键继续操作. .Parent; if(NewNode=NULL) /判断是不是头节点 coutnt是这个家谱图里最顶端的人没有兄弟姐妹信息!endl;coutn-按Enter键继续操作. .Sex=0
24、) coutnnt她是嫁入此间的因此兄弟姐妹信息不在家谱内包括!;coutn-按Enter键继续操作. .endl; getchar(); elsecoutnnt她是入赘此间的因此兄弟姐妹信息不在家谱内包括!;coutn-按Enter键继续操作. .Num=1) coutnnt没有兄弟姐妹!;coutn-按Enter键继续操作. .endl; getchar(); break; else for(i=1;iNum;i+) if(NewNode-NextNodei-Name!=Tree-Name) coutnnt请输入 NextNodei-Namename; if(strcmp(name,0)!
25、=0) strcpy(NewNode-NextNodei-Name,name); coutflag; if (flag=1) if(NewNode-NextNodei-Sex=0) NewNode-NextNodei-Sex=1; else NewNode-NextNodei-Sex=0;coutnnt-兄弟姐妹的信息修改成功-endl;coutn-按Enter键继续操作. .Num=0) coutnnt至今还没有子女!;coutn-按Enter键继续操作. .Parent !=NULL)if (strcmp(Tree-Name,Tree-Parent-NextNode0-Name)=0) /
26、如果她是入赘或者是嫁入的就需用配偶节点完成修改 Tree=Tree-Parent;for(i=1;iNum;i+)coutnnt请输入 NextNodei-Namename; if(strcmp(name,0)!=0)strcpy(Tree-NextNodei-Name,name);coutflag; if (flag=1) if(Tree-NextNodei-Sex=0) Tree-NextNodei-Sex=1; elseTree-NextNodei-Sex=0;coutnnt-子女的信息修改成功-endl;coutn-按Enter键继续操作. .endl; getchar();break;case 5:if(