收藏 分销(赏)

家谱标准管理系统标准设计优质报告.doc

上传人:快乐****生活 文档编号:2999298 上传时间:2024-06-12 格式:DOC 页数:36 大小:163.54KB 下载积分:12 金币
下载 相关 举报
家谱标准管理系统标准设计优质报告.doc_第1页
第1页 / 共36页
家谱标准管理系统标准设计优质报告.doc_第2页
第2页 / 共36页


点击查看更多>>
资源描述
目 录 第一章 绪论 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 第五章 调试分析 7 第六章 测试结果 9 致 谢 10 参考文件 11 附 录 11 第一章 绪论 现在,很多家庭家谱丢失,家庭部分关系混乱,为了避免这一问题,制订一家谱程序。家谱用于统计某家族历代家族组员情况和关系,实现对一个家族全部资料进行搜集整理。支持对家谱存放、更新、查询、统计等操作。并用计算机永久储存家族数据,方便随时调用。 第二章 需求分析 2.1题目 家谱管理系统 2.2设计任务 系统总体说明: 以树形结构存放家族信息,只考虑三代(祖父,父亲,叔叔,姑姑,自己,弟兄姐妹,堂弟兄姐妹),只考虑每个人有0或1个弟兄姐妹情况。注意每个结点结构。统计统计家族组员人数,查询家族组员辈份。 完成功效具体说明: 1.输入家族组员情况,建立树结构(包含创建二叉树); 2.统计家族组员人数和每一个家庭组员人数(包含树遍历); 3.查询家族组员辈份情况(任意输入两个家庭组员,查询她们关系,父子,祖孙,弟兄,堂弟兄,共同祖先)。 4. 选做,考虑每个人有多个弟兄姐妹情况。 2.3数据测试 测试数据有:田迎新 陈瑞英 田紫藤 田紫恒 孙超 李美霖 …….. 第三章 概要设计 3.1 设计思想 创建一棵树,存放家庭关系,数据类型有 int Num; //统计这个人拥有多个儿女 char Name[20]; //统计这个人姓名 char Sex; //标示节点种类有女(0) 男(1) struct TreeNode * NextNode[20]; //统计这个人儿女 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<<"\n\n\t ---*****---请选择你操作---****---"; cout<<"\n\t--------------1:输入家谱信息建立多叉树----------------------"; cout<<"\n\t--------------2:在家族中查找某人并输出她或(她)对应信息----"; cout<<"\n\t--------------3:添加新组员--------------------------------"; cout<<"\n\t--------------4:输出整个家谱信息----------------------------"; cout<<"\n\t--------------5:修改某个人信息----------------------------"; cout<<"\n\t--------------6:家谱信息存入文件----------------------------"; cout<<"\n\t--------------7:读取家谱信息文件----------------------------"; cout<<"\n\t--------------8:退出整个程序--------------------------------\n\t"; 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();} Else {exit(0);} 4.3增加组员 4.3.1 添加儿女 NewNode=new 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+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请输入修改姓名(假如不需要修改就输入'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请输入 "<<Parent[0]<<" 要修改姓名(假如不需要修改就输入'0',然后按Enter键继续):\n"; cin>>name; if(strcmp(name,"0")!=0) strcpy(Tree->Parent->Name,name); cout<<"\n\n\t请输入 "<<Parent[1]<<" 要修改姓名(假如不需要修改就输入'0',然后按Enter键继续):\n"; cin>>name; if(strcmp(name,"0")!=0) strcpy(Tree->Parent->NextNode[0]->Name,name); 4.4.3修改弟兄姐妹信息 cout<<"\n\n\t请输入 "<<NewNode->NextNode[i]->Name<<" 修改姓名(假如不需要修改就输入'0',然后按Enter键继续):\n"; cin>>name; if(strcmp(name,"0")!=0) 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]->Sex='0'; } 4.4.4修改儿女信息 cout<<"\n\n\t请输入 "<<Tree->NextNode[i]->Name<<" 修改姓名(假如不需要修改就输入'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=='0') Tree->NextNode[i]->Sex='1'; else Tree->NextNode[i]->Sex='0'; } 第五章 调试分析 1.进入系统 2.建立家谱 3.查看信息 4.添加组员 5.修改信息 第六章 测试结果 父亲姓名 田迎新 母亲姓名 陈瑞英 姐姐 田紫藤 姐夫 孙超 本人 田紫恒 李美霖 致 谢 感谢孙红艳老师辛劳教导和教育,让我学到了很多知识,提升了很大能力。 和此同时,也感谢老师为我辛劳验收课设,耐心讲解,让我也受益匪浅。 以后,我一定会努力学习,用我实际行动往返报家长,感谢我老师,为学校争光,努力为我们国家,贡献出一份微薄贡献! 参考文件 [1]《数据结构》C++语言版 严蔚敏 吴伟民编著 清华大学出版社 [2]《数据库数据结构软件工程课程设计指导及习题解答》徐志才 方贤文 刘士喜编 北京师范大学出版社 [3]《C++语言程序设计》 何钦铭 颜晖 主编 高等教育出版社 附 录 #include <iostream.h> #include <string.h> #include <stdio.h> //getchar 能够将键入信息存到缓冲区,按Enter键将进行输入 #include <stdlib.h> //system头文件,exit头文件 #include <fstream.h> int MATEFLAG=0; typedef struct TreeNode { int Num; //统计这个人拥有多个儿女 char Name[20]; //统计这个人姓名 char Sex; //标示节点种类有女(0) 男(1) struct TreeNode * NextNode[20]; //统计这个人儿女 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 name[20]; TreeNode * NewNode; while(1) { system("cls"); cout<<"\t"; cout<<"\n\n\t ---*****---请选择你操作---****--- "; cout<<"\n\t---*---*---*---1:添加某个人儿女信息---*---*---*---*---- "; cout<<"\n\t---*---*---*---2:添加某个人配偶信息-*---*---*---*---*---- "; cout<<"\n\t---*---*---*---3:退出-*---*---*---*---*---*---*---*---*----\n\t"; cout<<"请输入:"; cin>>c; switch(c) { case '1': cout<<"\n\n\t请输入那个人名字: "; cin>>name; Tree=SearchTree(Tree,name,20); if(Tree==NULL) { cout<<"\n\n\t****该家谱图中没有 "<<name<<" 这个人信息,请确定是否输入错误*****\n"; break; } if(Tree->Parent==NULL&&Tree->NextNode[0]==NULL||Tree->Parent!=NULL&&Tree->Name!=Tree->Parent->NextNode[0]->Name) { cout<<"\n\n\t"<<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<<"\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+1; cout<<"\n\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已经有了配偶"; break; } if(Tree==NULL) { cout<<"\n\n\t****该家谱图中没有 "<<name<<" 这个人信息,请确定是否输入错误*****\n"; break; } 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; break; case '3': cout<<"\n\n\t----------------本项服务到此结束-----------------"; break; case '\n': break; default: cout<<"\n\n\t--------对不起!你选择不在服务范围之内!--------- "; cout<<"\n\t-----------请您再次选择所需服务项!------------- "; cout<<"\n\t------------------谢谢合作!----------------------\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****该家谱图中没有 "<<name<<" 这个人信息,请确定是否输入错误*****\n"; return; } else { SubMenue1(NewNode); } } //输出副菜单 void SubMenue1(TreeNode * Tree) { char c; int flag,i; char name[20]; char Parent[2][20]; TreeNode * NewNode; while(1) { system("cls"); cout<<"\t"; cout<<"\n\n\t ---*****---请选择你操作---****--- "; cout<<"\n\t---*---*---*---1:修改个人信息---*---*---*---*---*---*---- "; cout<<"\n\t---*---*---*---2:修改父母信息---*---*---*---*---*---*---- "; cout<<"\n\t---*---*---*---3:修改弟兄姐妹信息---*---*---*---*---*---- "; cout<<"\n\t---*---*---*---4:修改儿女信息---*---*---*---*---*---*---- "; cout<<"\n\t---*---*---*---5:修改配偶信息---*---*---*---*---*---*---- "; cout<<"\n\t---*---*---*---6:退出-*---*---*---*---*---*---*---*---*----\n\t"; cout<<"请输入:"; cin>>c; switch(c) { case '1': cout<<"\n\n\t请输入修改姓名(假如不需要修改就输入'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'; } cout<<"\n\n\t个人信息修改成功!"; cout<<"\n--------------按Enter键继续操作... ..."<<endl; getchar(); break; case '2': if(Tree->Parent==NULL) //判定是不是头节点 { cout<<"\n\t是这个家谱图里最顶端人没有父母信息!"<<endl; cout<<"\n--------------按Enter键继续操作... ..."<<endl; getchar(); break; } if (MATEFLAG==1) //判定是不是入赘或加入此间 { if(Tree->Sex=='0') { cout<<"\n\n\t她是嫁入此间所以父母信息不在家谱内包含!"; cout<<"\n--------------按Enter键继续操作... ..."<<endl; getchar(); } else { cout<<"\n\n\t她是入赘此间所以父母信息不在家谱内包含!"; cout<<"\n--------------按Enter键继续操作... ..."<<endl; getchar(); } break; } if(Tree->Parent->Sex=='0') { strcpy(Parent[0],"母亲"); strcpy(Parent[1],"父亲"); } else { strcpy(Parent[0],"父亲"); strcpy(Parent[1],"母亲"); } cout<<"\n\n\t请输入 "<<Parent[0]<<" 要修改姓名(假如不需要修改就输入'0',然后按Enter键继续):\n"; cin>>name; if(strcmp(name,"0")!=0) strcpy(Tree->Parent->Name,name); cout<<"\n\n\t请输入 "<<Parent[1]<<" 要修改姓名(假如不需要修改就输入'0',然后按Enter键继续):\n"; cin>>name; if(strcmp(name,"0")!=0) strcpy(Tree->Parent->NextNode[0]->Name,name); cout<<"\n\n\t-------------父母信息修改成功----------------"<<endl; cout<<"\n--------------按Enter键继续操作... ..."<<endl; getchar(); break; case '3': NewNode=Tree->Parent; if(NewNode==NULL) //判定是不是头节点 { cout<<"\n\t是这个家谱图里最顶端人没有弟兄姐妹信息!"<<endl; cout<<"\n--------------按Enter键继续操作... ..."<<endl; getchar(); break; } if (MATEFLAG==1) //判定是不是入赘或加入此间 { if(Tree->Sex=='0') { cout<<"\n\n\t她是嫁入此间所以弟兄姐妹信息不在家谱内包含!"; cout<<"\n--------------按Enter键继续操作... ..."<<endl; getchar(); } else {cout<<"\n\n\t她是入赘此间所以弟兄姐妹信息不在家谱内包含!"; cout<<"\n--------------按Enter键继续操作... ..."<<endl; getchar(); } break; } if(NewNode->Num==1) { cout<<"\n\n\t没有弟兄姐妹!"; cout<<"\n--------------按Enter键继续操作... ..."<<endl; getchar(); break; } else { for(i=1;i<=NewNode->Num;i++) { if(NewNode->NextNode[i]->Name!=Tree->Name) { cout<<"\n\n\t请输入 "<<NewNode->NextNode[i]->Name<<" 修改姓名(假如不需要修改就输入'0',然后按Enter键继续):\n"; cin>>name; if(strcmp(name,"0")!=0) 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]->Sex='0'; } } } } cout<<"\n\n\t------------弟兄姐妹信息修改成功-------------"<<endl; cout<<"\n--------------按Enter键继续操作... ..."<<endl; getchar(); break; case '4': if(Tree->Num==0) { cout<<"\n\n\t至今还没有儿女!"; cout<<"\n--------------按Enter键继续操作... ..."<<endl; getchar(); break; } if (Tree->Parent !=NULL) if (strcmp(Tree->Name,Tree->Parent->NextNode[0]->Name)==0) //假如她是入赘或是嫁入就需用配偶节点完成修改 { Tree=Tree->Parent; } for(i=1;i<=Tree->Num;i++) { cout<<"\n\n\t请输入 "<<Tree->NextNode[i]->Name<<" 修改姓名(假如不需要修改就输入'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=='0') Tree->NextNode[i]->Sex='1'; else Tree->NextNode[i]->Sex='0'; } } cout<<"\n\n\t---------------儿女信息修改成功----------------"<<endl; cout<<"\n--------------按Enter键继续操作... ..."<<endl; getchar(); break; case '5': if(Tree->Parent!=NULL) { if (Tree->NextNode[0]==NULL&&strcmp(Tree->Name,Tree->Parent->NextNode[0]->Name)!=0) { cout<<"\n\n\t至今还没有配偶!"; cout<<"\n--------------按Enter键继续操作... ..."<<endl; g
展开阅读全文

开通  VIP会员、SVIP会员  优惠大
下载10份以上建议开通VIP会员
下载20份以上建议开通SVIP会员


开通VIP      成为共赢上传

当前位置:首页 > 包罗万象 > 大杂烩

移动网页_全站_页脚广告1

关于我们      便捷服务       自信AI       AI导航        抽奖活动

©2010-2026 宁波自信网络信息技术有限公司  版权所有

客服电话:0574-28810668  投诉电话:18658249818

gongan.png浙公网安备33021202000488号   

icp.png浙ICP备2021020529号-1  |  浙B2-20240490  

关注我们 :微信公众号    抖音    微博    LOFTER 

客服