族谱管理
    族谱(或称家谱)是一种以表谱形式,记载一个以血缘关系为主体的家族世系繁衍和重要人物事迹的特殊图书体裁。族谱是中国特有的文化遗产,是中华民族的三大文献(国史,地志,族谱)之一,属珍贵的人文资料,对于历史学、民俗学、人口学、社会学和经济学的深入研究,均有其不可替代的独特功能。本题对族谱管理进行简单的模拟,以实现查看祖先和子孙个人信息、插入家族成员、删除家族成员、修改家族成员信息、按事迹查找家族成员、列出全部家族成员及关系等功能。家族成员至少包括姓名、性别、生卒年月、配偶、简介等信息,数据结构可自行设计。

/*族谱管理
实现查看祖先和子孙个人信息、插入家族成员、删除家族成员、修改家族成员信息、
按事迹查找家族成员、列出全部家族成员及关系等功能。
家族成员至少包括姓名、性别、生卒年月、配偶、简介等信息,数据结构可自行设计。*/
#include<iostream>
#include<cstring>
#include<string>
#include<cstdio>
#include<cstdlib>
#include<algorithm>
using namespace std;typedef struct Tree{char name[99];char sex[10];char brith[99];char wife[99];char other[99];int  ranking;struct Tree *parent;struct Tree *brother;struct Tree *child;}Tree;char Member[99],Parent[99];Tree *CreateGenealogy(Tree *&g)//创建族谱
{Tree *t;t = new Tree;t->brother=NULL;t->child=NULL;t->parent=NULL;cout<<"请输入祖先的姓名"<<endl;cin>>t->name;cout<<"请输入祖先的性别"<<endl;cin>>t->sex;cout<<"请输入祖先的生日"<<endl;cin>>t->brith;cout<<"请输入祖先的配偶"<<endl;cin>>t->wife;cout<<"请输入祖先的个人简介"<<endl;cin>>t->other;t->ranking=1;g=t;return g;
}Tree *Find(Tree *b,char cname[])
{Tree *p;if(b==NULL){//cout<<"NULL"<<endl;return NULL;}else if(strcmp(b->name,cname)==0){return b;}else{p=Find(b->child,cname);if(p!=NULL){return p;}else{return Find(b->brother,cname);}}
}void addMember(Tree *&g,char Parent[],char Member[])
{Tree *p,*q;p=Find(g,Parent);if(p==NULL){cout<<"NULL"<<endl;return ;}//elseq = new Tree;strcpy(q->name,Member);cout<<"请输入插入人的性别"<<endl;cin>>q->sex;cout<<"请输入插入人的生日"<<endl;cin>>q->brith;cout<<"请输入插入人的配偶"<<endl;cin>>q->wife;cout<<"请输入插入人的个人简介"<<endl;cin>>q->other;q->ranking=p->ranking+1;q->child=NULL;q->brother=NULL;q->parent=p;if(p->child==NULL){p->child=q;}else{p=p->child;while(p->brother!=NULL){p=p->brother;}p->brother = q;}
}void deleteMember(Tree *&g)
{Tree *p,*s;char ch[99];cout<<"输入你想要删除的人姓名"<<endl;cin>>ch;p = Find(g,ch);if(p==NULL){cout<<"查无此人,无法删除!"<<endl;return ;}/*Tree *q;s=p;q=p->parent;else if(q->child==p){if(p->brother!=NULL){q->child=p->brother;}delete s;}*/else{p->ranking=0;}
}void ChangeMsg(Tree *&g)
{char xm[99];cout<<"输入你想要修改的人姓名"<<endl;cin>>xm;Tree *p,*q;p = Find(g,xm);if(p==NULL){cout<<"查无此人,无法修改!"<<endl;}else{cout<<"请重新输入你想要修改的个人信息"<<endl;cout<<"请输入姓名"<<endl;cin>>p->name;cout<<"请输入性别"<<endl;cin>>p->sex;cout<<"请输入生日"<<endl;cin>>p->brith;cout<<"请输入其配偶"<<endl;cin>>p->wife;cout<<"请输入个人简介"<<endl;cin>>p->other;}
}void LookGenealogy(Tree *b)
{if(b!=NULL)//此处忘加导致bug{for(int i=0;i<b->ranking;i++)cout<<" ";cout<<"辈分     "<<b->ranking<<";  ";cout<<"姓名:      "<<b->name<<";  ";cout<<"性别:       "<<b->sex<<";  ";cout<<"出生年月: "<<b->brith<<";  ";cout<<"配偶:      "<<b->wife<<";  ";cout<<"个人简介: "<<b->other<<";  "<<endl;cout<<endl;if(b->brother!=NULL||b->child!=NULL){LookGenealogy(b->child);LookGenealogy(b->brother);}}
}void InfoSearch(Tree *b,string str)
{if(b!=NULL){string s;s=b->other;if(s.find(str) < s.length()){cout<<"姓名:      "<<b->name<<";  "<<endl;cout<<"个人简介: "<<b->other<<";  "<<endl;}else if (b->child!=NULL || b->brother!=NULL){InfoSearch(b->child,str);InfoSearch(b->brother,str);}}
}void menu()
{printf("\n");printf("--------------------------家谱系统---------------------------\n");printf("\n");printf("                       1.添加家族成员                        \n");printf("\n");printf("                       2.删除家族成员                        \n");printf("\n");printf("                       3.查询个人信息                        \n");printf("\n");printf("                       4.修改个人信息                        \n");printf("\n");printf("                       5.查看详细族谱                        \n");printf("\n");printf("                       6.根据事迹查询                        \n");printf("\n");printf("                       7.创建族谱                            \n");printf("\n");printf("                       0.退出系统                            \n");printf("\n");printf("-------------------------------------------------------------\n");printf("                    请输入(0-7)进行操作:\n");printf("-------------------------------------------------------------\n");printf("\n");}int main()
{int n = 7,m;Tree *g;char cname[99];menu();while(1&&n){cin>>n;switch(n){case 5: LookGenealogy(g); break;case 4: ChangeMsg(g);     break;case 2: deleteMember(g);  break;case 1: cout<<"请输入需要插入人员的长辈姓名"<<endl;cin>>Parent;cout<<"请输入需要插入人员的姓名"<<endl;cin>>Member;addMember(g,Parent,Member);break;case 7: CreateGenealogy(g); break;case 3: cout<<"请输入需要查询人的姓名"<<endl;cin>>cname;//cout<<"..."<<g->name<<endl;why????????????Tree *t ;t = Find(g,cname);if(t){cout<<"姓名  "<<t->name<<endl;cout<<"性别  "<<t->sex<<endl;cout<<"出生年月  "<<t->brith<<endl;cout<<"配偶  "<<t->wife<<endl;cout<<"个人简介  "<<t->other<<endl;cout<<"辈分  "<<t->ranking<<endl;if(t->parent==NULL){cout<<"此人为祖先"<<endl;}else{cout<<t->name<<"的爸爸是  "<<t->parent->name<<endl;}}else{cout<<"查无此人"<<endl;}break;case 6: string str;cout<<"请输入个人简历关键字"<<endl;cin>>str;InfoSearch(g,str);break;//case 0: break;}}cout<<"感谢使用!"<<endl;return 0;
}

数据结构课程实验->族谱相关推荐

  1. 数据结构课程实验——学生管理系统——源代码

    源代码 screen类(用来与用户交互) import java.util.*;class screen {void maindan(){student1 pg1=new student1();pg1 ...

  2. c语言数据结构课程设计电梯,数据结构课程设计报告(模拟电梯).doc

    数据结构课程设计报告(模拟电梯) 山东理工大学计算机学院 课 程 设 计 (数据结构) 班 级姓 名学 号 指导教师 二〇一二年一月十日 课程设计任务书及成绩评定 课题名称电 梯 模 拟 Ⅰ.题目的目 ...

  3. 《数据结构与算法》之课程实验

    <数据结构与算法>之课程实验 BSTree and AVLTree BSTree AVLTree Top-K problem Dijkstra RandomData 电子科技大学<数 ...

  4. 山东大学数据结构课程设计实验五(低风险出行系统)

    数据结构课程设计(五)--低风险出行系统 前言 题目要点 ①生成数据 ②要给定两种最短路解法 ③创立文件 ④模拟时间流动并与用户交互 代码讲解 源代码 写在最后 前言 数据结构课程设计第五题是每一个同 ...

  5. 数据结构最短路径例题_《数据结构课程设计》最短路径问题实验报告

    <<数据结构课程设计>最短路径问题实验报告>由会员分享,可在线阅读,更多相关<<数据结构课程设计>最短路径问题实验报告(17页珍藏版)>请在人人文库网上 ...

  6. c语言程序设计报告表达式求值,数据结构 课程设计表达式求值 实验报告

    <数据结构 课程设计表达式求值 实验报告>由会员分享,可在线阅读,更多相关<数据结构 课程设计表达式求值 实验报告(21页珍藏版)>请在人人文库网上搜索. 1.实验课程名称 级 ...

  7. 《数据结构课程设计》 活期储蓄管理系统 实验报告

    <数据结构课程设计> 题目1:活期储蓄管理系统   学生姓名 胡泳行 所在专业 信息管理与信息系统专业 所在班级 信管1134班 任课老师 易学明 实习时间 2015年 1月 4 日 指导 ...

  8. c语言单源最短路径问题实验报告,数据结构课程设计最短路径问题实验报告-20210320182652.docx-原创力文档...

    IMB standardization office[IMB 5AB- IMBK 08- IMB 2C] IMB standardization office[IMB 5AB- IMBK 08- IM ...

  9. c语言数据结构五子棋实验报告,数据结构课程设计-五子棋

    数据结构课程设计-五子棋 姓 名: 学 院: 计算机与通信学院 班 级: 通信工程 101 班 指导老师: 目录一.需求分析 31.1 开发背景 .32.2 功能简介 .3二.系统设计 42.1 函数 ...

最新文章

  1. 网友为对百合所唱的最后的挽歌!(节选)
  2. mSystems:生物地球化学进入病毒时代-采用多样的方法研究病毒和生物地球化学循环...
  3. maven上解决循环依赖、又不想新加第三模块的方法
  4. 《图解HTTP》读书笔记--第5章与HTTP协作的Web服务器
  5. 程序员面试题精选100题(36)-在字符串中删除特定的字符[算法]
  6. html:(28):后代选择器和通用选择器
  7. Python批量提取docx格式Word文档中所有文本框内的文本
  8. NOIP模拟 6.26
  9. Linux安装Jenkins教程
  10. 跳过Android6.0+权限的方法
  11. 利用SQL求中位数(已修复BUG)
  12. 三国志战略版:魏国新黑科技,程昱春华满宠
  13. Nginx 踩坑之405 not allow
  14. 与设备无关的位图一、DIB 文件格式
  15. Markdown 中设置文本字体为红色(改变字体颜色)的方法
  16. pe如何格式化Linux硬盘,linux格式化硬盘
  17. 【pm笔记】产品中的需求层次——以音乐产品为例
  18. django请求生命周期,FBV和CBV,ORM拾遗,Git
  19. UVM中SVA使用指南
  20. 流行的javascript库介绍

热门文章

  1. (结构光)单目+结构光三维重构总体结构
  2. C语言实现扫雷游戏(分解代码,超级详细,无压力)
  3. ns3加入模块之vanet-highway
  4. 【 无线网络技术 】实验二十五、IEEE0.11p和VANET仿真
  5. 客服聊天系统来电弹屏自动回复评价推送;
  6. vue3中如何去请求数据
  7. 高通平台TP常见问题
  8. 橘子洲头共享生态盛宴‖华为中国 ICT 生态之行走进长沙
  9. matlab 产生循环矩阵,matlab循环矩阵
  10. python文字转图片(二值、RGB)以及numpy数组