家谱标准管理专业系统设计方案报告.doc
目 录第一章 绪论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.1题目家谱管理系统2.2设计任务系统总体阐明:以树形构造存储家族信息,只考虑三代(祖父,爸爸,叔叔,姑姑,自己,兄弟姐妹,堂兄弟姐妹),只考虑每个人有0或者1个兄弟姐妹状况。注意每个结点构造。记录记录家族成员人数,查询家族成员辈份。完毕功能详细阐明:1输入家族成员状况,建立树构造(涉及创立二叉树);2记录家族成员人数和每一种家庭成员人数(涉及树遍历);3查询家族成员辈份状况(任意输入两个家庭成员,查询她们关系,父子,祖孙,兄弟,堂兄弟,共同祖先)。4. 选做,考虑每个人有各种兄弟姐妹状况。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(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);/-添加新成员菜单void Change(TreeNode * Tree);/-修改成员信息void AddNew(TreeNode * Tree);/-添加新成员void OutPutMessage(TreeNode * Tree,char name,int length);/输出已经查找到人信息第四章 详细设计4.1功能构想构想好总体规划之后,便开始设计程序中需要用到各个功能函数,初步构想是要先实现最基本几项功能,其中数据操作有:增长成员,修改成员资料,删除成员;数据存取有:打开家谱,新建家谱,保存家谱;数据查询有:查看某代信息,按姓名查找,查当作员关系,等等。4.2界面设计cout<<"nnt -*-请选取你操作-*-"cout<<"nt-1:输入家谱信息建立多叉树-"cout<<"nt-2:在家族中查找某人并输出她或(她)相应信息-"cout<<"nt-3:添加新成员-"cout<<"nt-4:输出整个家谱信息-"cout<<"nt-5:修改某个人信息-" cout<<"nt-6:家谱信息存入文献-"cout<<"nt-7:读取家谱信息文献-"cout<<"nt-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(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;cout<<"nnt请输入添加人员姓名: "cin>>NewNode->Name;cout<<"nnt请输入添加人员性别女(0) 男(1): "cin>>NewNode->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;cout<<"nnt-子女信息添加成功-"4.3.2 添加配偶NewNode=new TreeNode;cout<<"nnt请输入添加人员姓名: "cin>>NewNode->Name;cout<<"nnt请输入添加人员性别女(0) 男(1): "cin>>NewNode->Sex;NewNode->Parent=Tree;Tree->NextNode0=NewNode;4.4修改成员4.4.1修改个人信息cout<<"nnt请输入修改姓名(如果不需要修改就输入'0',然后按Enter键继续):n"cin>>name;if(strcmp(name,"0")!=0)strcpy(Tree->Name,name);cout<<"nnt与否要修改性别:(如果需要就输入'1',不需要修改就输入'0'然后按Enter键继续):n"cin>>flag;if (flag=1)if(Tree->Sex='0') Tree->Sex='1'else Tree->Sex='0'4.4.2修改父母信息cout<<"nnt请输入 "<<Parent0<<" 要修改姓名(如果不需要修改就输入'0',然后按Enter键继续):n"cin>>name;if(strcmp(name,"0")!=0)strcpy(Tree->Parent->Name,name);cout<<"nnt请输入 "<<Parent1<<" 要修改姓名(如果不需要修改就输入'0',然后按Enter键继续):n"cin>>name;if(strcmp(name,"0")!=0)strcpy(Tree->Parent->NextNode0->Name,name);4.4.3修改兄弟姐妹信息cout<<"nnt请输入 "<<NewNode->NextNodei->Name<<" 修改姓名(如果不需要修改就输入'0',然后按Enter键继续):n"cin>>name;if(strcmp(name,"0")!=0)strcpy(NewNode->NextNodei->Name,name);cout<<"nnt与否要修改性别(如果需要就输入'1'不需要修改就输入'0'然后按Enter键继续):n"cin>>flag;if (flag=1)if(NewNode->NextNodei->Sex='0')NewNode->NextNodei->Sex='1'else NewNode->NextNodei->Sex='0'4.4.4修改子女信息cout<<"nnt请输入 "<<Tree->NextNodei->Name<<" 修改姓名(如果不需要修改就输入'0',然后按Enter键继续):n"cin>>name;if(strcmp(name,"0")!=0)strcpy(Tree->NextNodei->Name,name);cout<<"nnt与否要修改性别(如果需要就输入'1',不需要修改就输入'0'然后按Enter键继续):n"cin>>flag;if (flag=1)if(Tree->NextNodei->Sex='0')Tree->NextNodei->Sex='1'elseTree->NextNodei->Sex='0'第五章 调试分析1.进入系统2.建立家谱3.查看信息4.添加成员5.修改信息第六章 测试成果爸爸姓名 田迎新 妈妈姓名 陈瑞英 姐姐 田紫藤 姐夫 孙超 本人 田紫恒 李美霖致 谢感谢孙红艳教师辛苦辅导与教诲,让我学到了诸多知识,提高了很大能力。与此同步,也感谢教师为我辛苦验收课设,耐心解说,让我也受益匪浅。 此后,我一定会努力学习,用我实际行动来回报家长,感谢我教师,为学校争光,努力为咱们国家,贡献出一份微薄贡献!参照文献 1数据构造+语言版严蔚敏吴伟民编著 清华大学出版社 2数据库数据构造软件工程课程设计指引及习题解答徐志才方贤文刘士喜编 北京师范大学出版社 3C+语言程序设计 何钦铭 颜晖 主编 高等教诲出版社附 录#include <iostream.h>#include <string.h>#include <stdio.h> /getchar 可以将键入信息存到缓冲区,按Enter键将进行输入#include <stdlib.h> /system头文献,exit头文献#include <fstream.h>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 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(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;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");cout<<"t" cout<<"nnt -*-请选取你操作-*- "cout<<"nt-*-*-*-1:添加某个人子女信息-*-*-*-*- "cout<<"nt-*-*-*-2:添加某个人配偶信息-*-*-*-*-*- "cout<<"nt-*-*-*-3:退出-*-*-*-*-*-*-*-*-*-nt"cout<<"请输入:"cin>>c;switch(c)case '1':cout<<"nnt请输入那个人名字: "cin>>name;Tree=SearchTree(Tree,name,20);if(Tree=NULL)cout<<"nnt*该家谱图中没有 "<<name<<" 这个人信息,请确认与否输入错误*n"break; if(Tree->Parent=NULL&&Tree->NextNode0=NULL|Tree->Parent!=NULL&&Tree->Name!=Tree->Parent->NextNode0->Name) cout<<"nnt"<<Tree->Name<<" 至今还没有配偶请先添加配偶!" break; if(Tree->Parent=NULL&&(Tree->Num>20|Tree->Num<0)Tree->Num=0; if(MATEFLAG=1)Tree=Tree->Parent; NewNode=new TreeNode; cout<<"nnt请输入添加人员姓名: "cin>>NewNode->Name;cout<<"nnt请输入添加人员性别女(0) 男(1): "cin>>NewNode->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;cout<<"nnt-子女信息添加成功-"break;case '2':cout<<"nnt请输入那个人名字: "cin>>name;Tree=SearchTree(Tree,name,20);if(Tree->Parent!=NULL&&strcmp(Tree->Name,Tree->Parent->NextNode0->Name)=0|Tree->NextNode0!=NULL)cout<<"nnt已有了配偶"break;if(Tree=NULL)cout<<"nnt*该家谱图中没有 "<<name<<" 这个人信息,请确认与否输入错误*n"break;NewNode=new TreeNode;cout<<"nnt请输入添加人员姓名: "cin>>NewNode->Name;cout<<"nnt请输入添加人员性别女(0) 男(1): "cin>>NewNode->Sex;NewNode->Parent=Tree;Tree->NextNode0=NewNode;break;case '3':cout<<"nnt-本项服务到此结束-"break;case 'n':break;default:cout<<"nnt-对不起!你选取不在服务范畴之内!- "cout<<"nt-请您再次选取所需服务项!- "cout<<"nt-谢谢合伙!-nt"break;if (c='3')break;/修改某个人信息void Change(TreeNode * Tree) char name20;TreeNode * NewNode;cout<<"nt请输入你要修改人信息: " cin>>name; 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 -*-请选取你操作-*- "cout<<"nt-*-*-*-1:修改个人信息-*-*-*-*-*-*- "cout<<"nt-*-*-*-2:修改父母信息-*-*-*-*-*-*- "cout<<"nt-*-*-*-3:修改兄弟姐妹信息-*-*-*-*-*- "cout<<"nt-*-*-*-4:修改子女信息-*-*-*-*-*-*- "cout<<"nt-*-*-*-5:修改配偶信息-*-*-*-*-*-*- "cout<<"nt-*-*-*-6:退出-*-*-*-*-*-*-*-*-*-nt"cout<<"请输入:"cin>>c;switch(c)case '1':cout<<"nnt请输入修改姓名(如果不需要修改就输入'0',然后按Enter键继续):n"cin>>name;if(strcmp(name,"0")!=0)strcpy(Tree->Name,name);cout<<"nnt与否要修改性别:(如果需要就输入'1',不需要修改就输入'0'然后按Enter键继续):n"cin>>flag;if (flag=1)if(Tree->Sex='0')Tree->Sex='1'else Tree->Sex='0'cout<<"nnt个人信息修改成功!"cout<<"n-按Enter键继续操作. ."<<endl;getchar();break;case '2':if(Tree->Parent=NULL)/判断是不是头节点cout<<"nt是这个家谱图里最顶端人没有父母信息!"<<endl;cout<<"n-按Enter键继续操作. ."<<endl; getchar();break;if (MATEFLAG=1)/判断是不是入赘或加入此间if(Tree->Sex='0') cout<<"nnt她是嫁入此间因此父母信息不在家谱内涉及!"cout<<"n-按Enter键继续操作. ."<<endl; getchar(); else cout<<"nnt她是入赘此间因此父母信息不在家谱内涉及!"cout<<"n-按Enter键继续操作. ."<<endl; getchar(); break; if(Tree->Parent->Sex='0') strcpy(Parent0,"妈妈"); strcpy(Parent1,"爸爸"); else strcpy(Parent0,"爸爸"); strcpy(Parent1,"妈妈"); cout<<"nnt请输入 "<<Parent0<<" 要修改姓名(如果不需要修改就输入'0',然后按Enter键继续):n" cin>>name; if(strcmp(name,"0")!=0) strcpy(Tree->Parent->Name,name); cout<<"nnt请输入 "<<Parent1<<" 要修改姓名(如果不需要修改就输入'0',然后按Enter键继续):n" cin>>name; if(strcmp(name,"0")!=0) strcpy(Tree->Parent->NextNode0->Name,name); cout<<"nnt-父母信息修改成功-"<<endl;cout<<"n-按Enter键继续操作. ."<<endl;getchar(); break; case '3': NewNode=Tree->Parent; if(NewNode=NULL) /判断是不是头节点 cout<<"nt是这个家谱图里最顶端人没有兄弟姐妹信息!"<<endl;cout<<"n-按Enter键继续操作. ."<<endl; getchar(); break; if (MATEFLAG=1) /判断是不是入赘或加入此间 if(Tree->Sex='0') cout<<"nnt她是嫁入此间因此兄弟姐妹信息不在家谱内涉及!"cout<<"n-按Enter键继续操作. ."<<endl; getchar(); elsecout<<"nnt她是入赘此间因此兄弟姐妹信息不在家谱内涉及!"cout<<"n-按Enter键继续操作. ."<<endl; getchar(); break; if(NewNode->Num=1) cout<<"nnt没有兄弟姐妹!"cout<<"n-按Enter键继续操作. ."<<endl; getchar(); break; else for(i=1;i<=NewNode->Num;i+) if(NewNode->NextNodei->Name!=Tree->Name) cout<<"nnt请输入 "<<NewNode->NextNodei->Name<<" 修改姓名(如果不需要修改就输入'0',然后按Enter键继续):n" cin>>name; if(strcmp(name,"0")!=0) strcpy(NewNode->NextNodei->Name,name); cout<<"nnt与否要修改性别(如果需要就输入'1'不需要修改就输入'0'然后按Enter键继续):n" cin>>flag; if (flag=1) if(NewNode->NextNodei->Sex='0') NewNode->NextNodei->Sex='1' else NewNode->NextNodei->Sex='0'cout<<"nnt-兄弟姐妹信息修改成功-"<<endl;cout<<"n-按Enter键继续操作. ."<<endl;getchar();break;case '4':if(Tree->Num=0) cout<<"nnt至今还没有子女!"cout<<"n-按Enter键继续操作. ."<<endl; getchar(); break; if (Tree->Parent !=NULL)if (strcmp(Tree->Name,Tree->Parent->NextNode0->Name)=0) /如果她是入赘或者是嫁入就需用配偶节点完毕修改 Tree=Tree->Parent;for(i=1;i<=Tree->Num;i+)cout<<"nnt请输入 "<<Tree->NextNodei->Name<<" 修改姓名(如果不需要修改就输入'0',然后按Enter键继续):n" cin>>name; if(strcmp(name,"0")!=0)strcpy(Tree->NextNodei->Name,name);cout<<"nnt与否要修改性别(如果需要就输入'1',不需要修改就输入'0'然后按Enter键继续):n" cin>>flag; if (flag=1) if(Tree->NextNodei->Sex='0') Tree->NextNodei->Sex='1' elseTree->NextNodei->Sex='0'cout<<"nnt-子女信息修改成功-"<<endl;cout<<"n-按Enter键继续操作. ."<<endl; getchar();break;case '5':if(Tree->Parent!=NULL)if (Tree->NextNode0=NULL&&strcmp(Tree->Name,Tree->Parent->NextNode0->Name)!=0)cout<<"nnt至今还没有配偶!"cout<<"n-按Enter键继续操作. ."<<endl; getchar();break;