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. 选做,考虑每个人有多个弟兄姐妹情况。2.3数据测
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(TreeNode *Tree);/-遍历并输出树中
4、内容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);/
5、-修改组员信息void AddNew(TreeNode * Tree);/-添加新组员void OutPutMessage(TreeNode * Tree,char name,int length);/输出已经查找到人信息第四章 具体设计4.1功效构想构想好总体计划以后,便开始设计程序中需要用到各个功效函数,初步构想是要先实现最基础几项功效,其中数据操作有:增加组员,修改组员资料,删除组员;数据存取有:打开家谱,新建家谱,保留家谱;数据查询有:查看某代信息,按姓名查找,查看组员关系,等等。4.2界面设计coutnnt -*-请选择你操作-*-;coutnt-1:输入家谱信息建立多叉树-;cou
6、tnt-2:在家族中查找某人并输出她或(她)对应信息-;coutnt-3:添加新组员-;coutnt-4:输出整个家谱信息-;coutnt-5:修改某个人信息-; coutnt-6:家谱信息存入文件-;coutnt-7:读取家谱信息文件-;coutnt-8:退出整个程序-nt; 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(
7、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-Name;coutNewNode-Sex;num=Tree-Num;NewNode-NextNode0=new TreeNode;NewNode-NextNode0=NULL;NewNode-Num=0;NewNode-Parent=Tree;Tree-Ne
8、xtNodenum+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修改组员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.
9、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修改弟兄姐妹信息coutnnt请输入 NextNodei-Namename;if(strcmp(name,0)!=0)strcpy(NewNode-NextNodei-Name,name);coutflag;if (flag=1)if(NewNode-Ne
10、xtNodei-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;if (flag=1)if(Tree-NextNodei-Sex=0)Tree-NextNodei-Sex=1;elseTree-NextNodei-Sex=0;第五章 调试分析1.进入系统2.建立家谱3.查看信息4.添加组员5.修改信息第六章 测试结果父亲
11、姓名 田迎新 母亲姓名 陈瑞英 姐姐 田紫藤 姐夫 孙超 本人 田紫恒 李美霖致 谢感谢孙红艳老师辛劳教导和教育,让我学到了很多知识,提升了很大能力。和此同时,也感谢老师为我辛劳验收课设,耐心讲解,让我也受益匪浅。 以后,我一定会努力学习,用我实际行动往返报家长,感谢我老师,为学校争光,努力为我们国家,贡献出一份微薄贡献!参考文件 1数据结构+语言版严蔚敏吴伟民编著 清华大学出版社 2数据库数据结构软件工程课程设计指导及习题解答徐志才方贤文刘士喜编 北京师范大学出版社 3C+语言程序设计 何钦铭 颜晖 主编 高等教育出版社附 录#include #include #include /getch
12、ar 能够将键入信息存到缓冲区,按Enter键将进行输入#include /system头文件,exit头文件#include int MATEFLAG=0;typedef struct TreeNodeint Num; /统计这个人拥有多个儿女char Name20; /统计这个人姓名char Sex; /标示节点种类有女(0) 男(1)struct TreeNode * NextNode20; /统计这个人儿女struct TreeNode * Parent; /统计这个节点父节点TreeNode;void CreatTree(TreeNode *Tree);/-创建树void OutPu
13、tAll(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);/-添加新组员菜单
14、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); /输出副
15、菜单void SubMenue2(TreeNode *Tree) char c;int num;char name20;TreeNode * NewNode;while(1)system(cls);coutt; coutnnt -*-请选择你操作-*- ;coutnt-*-*-*-1:添加某个人儿女信息-*-*-*-*- ;coutnt-*-*-*-2:添加某个人配偶信息-*-*-*-*-*- ;coutnt-*-*-*-3:退出-*-*-*-*-*-*-*-*-*-nt;coutc;switch(c)case 1:coutname;Tree=SearchTree(Tree,name,20);
16、if(Tree=NULL)coutnnt*该家谱图中没有 nameParent=NULL&Tree-NextNode0=NULL|Tree-Parent!=NULL&Tree-Name!=Tree-Parent-NextNode0-Name) coutnntNameParent=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 TreeNo
17、de;NewNode-NextNode0=NULL;NewNode-Num=0;NewNode-Parent=Tree;Tree-NextNodenum+1=NewNode;Tree-Num=Tree-Num+1;coutnnt-儿女信息添加成功-;break;case 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)c
18、outnnt*该家谱图中没有 name 这个人信息,请确定是否输入错误*n;break;NewNode=new TreeNode;coutNewNode-Name;coutNewNode-Sex;NewNode-Parent=Tree;Tree-NextNode0=NewNode;break;case 3:coutnnt-本项服务到此结束-;break;case n:break;default:coutnnt-对不起!你选择不在服务范围之内!- ;coutnt-请您再次选择所需服务项!- ;coutnt-谢谢合作!-nt;break;if (c=3)break;/修改某个人信息void Cha
19、nge(TreeNode * Tree) char name20;TreeNode * NewNode;coutname; NewNode=SearchTree(Tree,name,20);if(NewNode=NULL) coutnnt*该家谱图中没有 name 这个人信息,请确定是否输入错误*n;return;else SubMenue1(NewNode); /输出副菜单void SubMenue1(TreeNode * Tree)char c;int flag,i;char name20;char Parent220;TreeNode * NewNode;while(1)system(c
20、ls);coutt; coutnnt -*-请选择你操作-*- ;coutnt-*-*-*-1:修改个人信息-*-*-*-*-*-*- ;coutnt-*-*-*-2:修改父母信息-*-*-*-*-*-*- ;coutnt-*-*-*-3:修改弟兄姐妹信息-*-*-*-*-*- ;coutnt-*-*-*-4:修改儿女信息-*-*-*-*-*-*- ;coutnt-*-*-*-5:修改配偶信息-*-*-*-*-*-*- ;coutnt-*-*-*-6:退出-*-*-*-*-*-*-*-*-*-nt;coutc;switch(c)case 1:coutname;if(strcmp(name,0)
21、!=0)strcpy(Tree-Name,name);coutflag;if (flag=1)if(Tree-Sex=0)Tree-Sex=1;else Tree-Sex=0;coutnnt个人信息修改成功!;coutn-按Enter键继续操作. .Parent=NULL)/判定是不是头节点coutnt是这个家谱图里最顶端人没有父母信息!endl;coutn-按Enter键继续操作. .Sex=0) coutnnt她是嫁入此间所以父母信息不在家谱内包含!;coutn-按Enter键继续操作. .endl; getchar(); else coutnnt她是入赘此间所以父母信息不在家谱内包含!;
22、coutn-按Enter键继续操作. .Parent-Sex=0) strcpy(Parent0,母亲); strcpy(Parent1,父亲); else strcpy(Parent0,父亲); strcpy(Parent1,母亲); 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-父母信息修改成功-
23、endl;coutn-按Enter键继续操作. .Parent; if(NewNode=NULL) /判定是不是头节点 coutnt是这个家谱图里最顶端人没有弟兄姐妹信息!endl;coutn-按Enter键继续操作. .Sex=0) coutnnt她是嫁入此间所以弟兄姐妹信息不在家谱内包含!;coutn-按Enter键继续操作. .endl; getchar(); elsecoutnnt她是入赘此间所以弟兄姐妹信息不在家谱内包含!;coutn-按Enter键继续操作. .Num=1) coutnnt没有弟兄姐妹!;coutn-按Enter键继续操作. .endl; getchar(); br
24、eak; else for(i=1;iNum;i+) if(NewNode-NextNodei-Name!=Tree-Name) 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;coutnnt-弟兄姐妹信息修改成功-endl;coutn-按Enter键继续操作
25、. .Num=0) coutnnt至今还没有儿女!;coutn-按Enter键继续操作. .Parent !=NULL)if (strcmp(Tree-Name,Tree-Parent-NextNode0-Name)=0) /假如她是入赘或是嫁入就需用配偶节点完成修改 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键继续操作. .Parent!=NULL)if (Tree-NextNode0=NULL&strcmp(Tree-Name,Tree-Parent-NextNode0-Name)!=0)coutnnt至今还没有配偶!;coutn-按Enter键继续操作. .endl; g
©2010-2024 宁波自信网络信息技术有限公司 版权所有
客服电话:4008-655-100 投诉/维权电话:4009-655-100