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查询家族成员辈份情况(任意输入两个家庭成员,查询他们的关系,父子,祖孙,兄弟,堂兄弟,共同的祖先)。4。 选做,考虑每个人有
3、多个兄弟姐妹的情况。2。3数据测试测试的数据有:田迎新 陈瑞英 田紫藤 田紫恒 孙超 李美霖 .。第三章 概要设计3。1 设计思想创建一棵树,存储家庭关系,数据类型有int Num; /记录这个人拥有几个儿女char Name20; /记录这个人的姓名char Sex; /标示节点的种类有女(0) 男(1)struct TreeNode NextNode20; /记录这个人的儿女struct TreeNode Parent; /记录这个节点的父节点3。2 实现方法完成功能的函数有 void CreatTree(TreeNode Tree);/-创建树void OutPutAll(TreeNod
4、e *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(T
5、reeNode Tree);/-修改成员信息void AddNew(TreeNode Tree);/-添加新成员void OutPutMessage(TreeNode Tree,char name,int length);/输出已经查找到的人的信息第四章 详细设计4。1功能构想构想好总体规划之后,便开始设计程序中需要用到的各个功能函数,初步构想是要先实现最基本的几项功能,其中数据操作的有:增加成员,修改成员资料,删除成员;数据存取的有:打开家谱,新建家谱,保存家谱;数据查询的有:查看某代信息,按姓名查找,查看成员关系,等等。4.2界面设计coutnnt -*-请选择你的操作-*”;coutnt
6、-1:输入家谱信息建立多叉树-;cout”nt-2:在家族中查找某人并输出他或(她)的相应信息-”;cout”nt-3:添加新的成员-”;coutnt-4:输出整个家谱信息-”;coutnt-5:修改某个人的信息-; cout”nt-6:家谱信息存入文件-”;coutNewNode-Name;cout”nnt请输入添加人员性别女(0) 男(1): ;cinNewNode-Sex;num=TreeNum;NewNodeNextNode0=new TreeNode;NewNodeNextNode0=NULL;NewNodeNum=0;NewNode-Parent=Tree;TreeNextNode
7、num+1=NewNode;TreeNum=TreeNum+1;cout”nnt-子女的信息添加成功-”;4。3。2 添加配偶NewNode=new TreeNode;cout”nnt请输入添加人员姓名: ”;cinNewNodeName;coutNewNodeSex;NewNode-Parent=Tree;TreeNextNode0=NewNode;4.4修改成员4。4.1修改个人信息cout”nnt请输入修改的姓名(如果不需要修改就输入0,然后按Enter键继续):n;cinname;if(strcmp(name,”0”)!=0)strcpy(Tree-Name,name);coutfla
8、g;if (flag=1)if(Tree-Sex=0)Tree-Sex=1;else Tree-Sex=0;4。4。2修改父母信息coutnnt请输入 name;if(strcmp(name,0”)!=0)strcpy(Tree-Parent-Name,name);coutnnt请输入 ”name;if(strcmp(name,”0)!=0)strcpy(TreeParent-NextNode0Name,name);4.4。3修改兄弟姐妹的信息cout”nnt请输入 ”Name 修改的姓名(如果不需要修改就输入0,然后按Enter键继续):n”;cinname;if(strcmp(name,0
9、”)!=0)strcpy(NewNodeNextNodei-Name,name);cout”nnt是否要修改性别(如果需要就输入1不需要修改就输入0然后按Enter键继续):n;cinflag;if (flag=1)if(NewNode-NextNodeiSex=0)NewNodeNextNodei-Sex=1;else NewNodeNextNodei-Sex=0;4。4。4修改子女的信息coutNextNodei-Name,name);coutflag;if (flag=1)if(Tree-NextNodeiSex=0)TreeNextNodeiSex=1;elseTreeNextNode
10、iSex=0;第五章 调试分析1。进入系统2。建立家谱3。查看信息4。添加成员5。修改信息第六章 测试结果父亲姓名 田迎新 母亲姓名 陈瑞英 姐姐 田紫藤 姐夫 孙超 本人 田紫恒 李美霖致谢感谢孙红艳老师辛苦教导与教诲,让我学到了很多知识,提高了很大的能力。与此同时,也感谢老师为我辛苦验收课设,耐心讲解,让我也受益匪浅. 今后,我一定会努力学习,用我的实际行动来回报家长,感谢我的老师,为学校争光,努力为我们的国家,贡献出一份微薄的贡献!参考文献1数据结构+语言版严蔚敏吴伟民编著 清华大学出版社 20112数据库数据结构软件工程课程设计指导及习题解答徐志才方贤文刘士喜编 北京师范大学出版社 2
11、0113C+语言程序设计 何钦铭 颜晖 主编 高等教育出版社2008附录#include iostream。hinclude #include stdio。h /getchar 可以将键入的信息存到缓冲区,按Enter键将进行输入include stdlib。h /system的头文件,exit的头文件#include int MATEFLAG=0;typedef struct TreeNodeint Num; /记录这个人拥有几个儿女char Name20; /记录这个人的姓名char Sex; /标示节点的种类有女(0) 男(1)struct TreeNode NextNode20; /记
12、录这个人的儿女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(TreeNo
13、de 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);/输出已经查找到的人的信息/主函数void main()TreeNode Tree;Tree=new TreeNode;TreeParent =NULL;strcp
14、y(TreeName,”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”; cout”nnt -*-请选择你的操作-*- ;coutnt-1:添加某个人的子女的信息- ”;coutnt-*-*-*-2:添加某个人配偶的信息-*-*- ”;coutnt-*-3:退出-*-*-nt;cout
15、name;Tree=SearchTree(Tree,name,20);if(Tree=NULL)coutParent=NULLTree-NextNode0=NULL|Tree-Parent!=NULL&Tree-Name!=Tree-ParentNextNode0Name) cout”nntParent=NULL(TreeNum20Tree-NumParent; NewNode=new TreeNode; coutNewNodeName;coutNewNode-Sex;num=Tree-Num;NewNodeNextNode0=new TreeNode;NewNodeNextNode0=NUL
16、L;NewNodeNum=0;NewNodeParent=Tree;TreeNextNodenum+1=NewNode;Tree-Num=Tree-Num+1;coutnnt-子女的信息添加成功-”;break;case 2:coutname;Tree=SearchTree(Tree,name,20);if(TreeParent!=NULLstrcmp(Tree-Name,Tree-Parent-NextNode0Name)=0|TreeNextNode0!=NULL)cout”nnt已经有了配偶;break;if(Tree=NULL)coutnnt*该家谱图中没有 ”name 这个人的信息,
17、请确认是否输入错误*n”;break;NewNode=new TreeNode;coutNewNode-Sex;NewNode-Parent=Tree;Tree-NextNode0=NewNode;break;case 3:cout”nnt-本项服务到此结束-”;break;case n:break;default:coutnnt-对不起!你的选择不在服务范围之内!- ;cout”nt-请您再次选择所需的服务项!- ;cout”nt-谢谢合作!-nt”;break;if (c=3)break;/修改某个人的信息void Change(TreeNode Tree) char name20;Tre
18、eNode NewNode;coutname; NewNode=SearchTree(Tree,name,20);if(NewNode=NULL) cout”nnt*该家谱图中没有 ”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);cout”t”; cout”nnt *-请选择你的操作* ”;co
19、utnt*-*-1:修改个人的信息-*- ”;cout”nt-*-2:修改父母的信息-*-*-*- ;coutnt-*-3:修改兄弟姐妹的信息-*-*- ;cout”nt-*-4:修改子女的信息-*-*-*- ”;coutc;switch(c)case 1:coutname;if(strcmp(name,”0”)!=0)strcpy(TreeName,name);coutSex=1;else TreeSex=0;cout”nnt个人信息修改成功!;coutParent=NULL)/判断是不是头节点coutnt是这个家谱图里最顶端的人没有父母信息!endl;coutn-按Enter键继续操作。
20、.。”Sex=0) cout”nnt她是嫁入此间的所以父母信息不在家谱内包括!”;cout”n-按Enter键继续操作。.。 。.。”endl; getchar(); else cout”nnt他是入赘此间的所以父母信息不在家谱内包括!;cout”n-按Enter键继续操作。.。 。.Sex=0) strcpy(Parent0,母亲); strcpy(Parent1,父亲”); else strcpy(Parent0,”父亲”); strcpy(Parent1,母亲”); coutnnt请输入 Parent0name; if(strcmp(name,0”)!=0) strcpy(TreePar
21、entName,name); cout”nnt请输入 ”Parent1Parent-NextNode0-Name,name); cout”nnt-父母的信息修改成功-endl;cout”n-按Enter键继续操作。.。 。”endl;getchar(); break; case 3: NewNode=Tree-Parent; if(NewNode=NULL) /判断是不是头节点 coutnt是这个家谱图里最顶端的人没有兄弟姐妹信息!”endl;cout”n-按Enter键继续操作.。. .。.”endl; getchar(); break; if (MATEFLAG=1) /判断是不是入赘或加
22、入此间的 if(TreeSex=0) cout”nnt她是嫁入此间的所以兄弟姐妹信息不在家谱内包括!”;coutn-按Enter键继续操作. 。endl; getchar(); elsecout”nnt他是入赘此间的所以兄弟姐妹信息不在家谱内包括!;cout”n-按Enter键继续操作。 。.”endl; getchar(); break; if(NewNodeNum=1) cout”nnt没有兄弟姐妹!;cout”n-按Enter键继续操作。. .。”endl; getchar(); break; else for(i=1;iName) coutnnt请输入 ”name; if(strcmp
23、(name,”0”)!=0) strcpy(NewNode-NextNodeiName,name); cout”nnt是否要修改性别(如果需要就输入1不需要修改就输入0然后按Enter键继续):n”; cinflag; if (flag=1) if(NewNodeNextNodeiSex=0) NewNode-NextNodeiSex=1; else NewNode-NextNodei-Sex=0;coutnnt-兄弟姐妹的信息修改成功-endl;coutn-按Enter键继续操作。 .。”endl;getchar();break;case 4:if(TreeNum=0) cout”nnt至今
24、还没有子女!”;coutName,TreeParentNextNode0Name)=0) /如果他是入赘或者是嫁入的就需用配偶节点完成修改 Tree=TreeParent;for(i=1;i=Tree-Num;i+)cout”nnt请输入 ”NextNodeiName” 修改的姓名(如果不需要修改就输入0,然后按Enter键继续):n”; cinname; if(strcmp(name,0”)!=0)strcpy(TreeNextNodeiName,name);coutflag; if (flag=1) if(TreeNextNodeiSex=0) Tree-NextNodei-Sex=1; elseTree-NextNodeiSex=0;cout”nnt-子女的信息修改成功-endl;coutParent!=NULL)if (TreeNextNode0=NULL&strcmp(Tree-Name,Tree-ParentNextNode0Name)!=0)cout”nnt至今还没有配偶!;cout”n-按Enter键继续操作。 。.。”ParentNextNode0-Name)=0)coutnnt请输入 TreeParentName 修改的姓名(如果不需要修改就输入0,