1、问题描述

家谱管理系统是一个可以记录家族成员信息、家谱关系的系统。使用C语言可以实现一个基本的家谱管理系统,可以包括以下功能:

实现对某家族成员信息的管理,包含建立、查找、插入、修改、删除等功能。

2、存储结构:

可以采用存储结构-儿子兄弟链法,一个链域指向第一个儿子,另一个链域指向紧靠其右边的兄弟,这种存储结构优点是找儿子、兄弟易,缺点是找父亲难,但是这种存储结构占用内存较少。

结点结构定义:

typedef struct linkednode
{char name[maxprice];//名字 int age;//年龄 double high;//身高 char gender[maxprice];//性别 char death[maxprice];//是否在世 struct linkednode *son;//指向第一个儿子 struct linkednode *Lbrother;//指向右边第一个兄弟 int dai;//第几代
}snode,*ptr; 

定义了节点的家庭成员的名字 、年龄、身高 、性别 、是否在世 、指向第一个儿子的链表、指向右边第一个兄弟的链表,是第几代成员,形成儿子兄弟链法存储结构,节省了大量空间

3、数据的录入:

ptr creatlinked_B(ptr head);

先把头节点传入函数中,这段代码实现了家谱管理系统中的创建家族成员关系的函数。函数名为creatlinked_B,接受一个ptr类型的参数head。函数中定义了类型为ptr的数组sonxnode,用于存储每个节点的儿子节点。函数开头通过system("cls")函数清屏,然后输入双亲节点的信息,使用shuru(p)函数实现。

接下来进入循环体,先询问当前节点是否有子女,如果有,则使用zinv1函数新增一个儿子节点,并在此节点中使用zinv2函数递归添加孙子节点。如果没有,则设置该节点的儿子节点指针为NULL。

然后再询问当前节点是否有兄弟,如果有,则使用xiongdi函数新增一个兄弟节点。如果没有,则设置该节点的兄弟节点指针为NULL,接着进入循环

最后返回链表头节点head。

该函数使用了许多自定义的函数,如shuru、zinv1、zinv2、xiongdi等,这些函数实现了相应的功能,例如新增节点、添加孙子节点、新增兄弟节点等。在完整的家谱管理系统中,这些函数应该都有相应的实现。

4、家庭成员的添加:

ptr chazhao(ptr head);

首先,通过chazhao函数查找家谱中是否有此人存在,如果没有,就返回无此人。如果有此人,输出此人信息。

然后询问是否添加子女,如果输入“是”,就输入子女信息,如果此人没有子女,就直接将子女信息输入,并将此人和子女建立父子关系。如果此人有子女,则需要判断子女是否已经存在,如果存在重名就添加失败,如果不存在重名就添加子女,并将此人和子女建立父子关系。

最后,如果输入“否”,就直接退出添加子女的操作。

该函数没有返回值,但是会修改家谱结构体中的数据,故使用指针类型的参数。如果添加成功,函数会输出“子女添加成功”,如果添加失败,函数会输出“子女添加失败”。

5、家庭成员的修改:

void xiougai(ptr head);

一个用于修改家庭成员信息的函数。函数首先调用了一个名为chazhao的函数来查找需要修改的家庭成员,如果找到了,则输出该成员的信息,并提供修改选项;如果没有找到,则输出“无这个人”的提示。

在修改选项中,函数提供了修改成员姓名、性别、是否在世、年龄和身高的选项。对于每个选项,函数首先输出该成员的原始信息,然后要求用户输入新的信息,最后再次确认用户是否要进行修改。如果用户确认修改,则将新的信息赋值给该成员的相应属性,否则保持原有信息不变。

最后,当用户选择退出成员修改时,函数将会结束。

6、成员的查询:

ptr chazhao(ptr head);

这是寻找家谱中的某一成员函数,读入成员的姓名,然后在家谱中寻找名字相同的成员。搜索使用了广度优先遍历的方法,以便快速找到目标成员。

在家谱中查找某一成员就可以使用广度优先遍历的方法。具体方法如下:

输入要查找的成员的姓名。

设置头指针指向家谱的树根。

定义一个指向节点的指针变量P,这个指针变量的初始化值是家谱的根节点。 再定义一个指向查找到的成员的指针变量Q,它的初值为NULL。

初始化一个数组sonxnode[maxprice]保存当前层次中所有儿子节点的指针。

将修改计数器m=1,yang= -1和xin= -1。

开始循环找到节点P中名字与需搜索的名字相同的那个节点,找到则令Q=P。 对P->son(查找P的孩子),P->Lbrother(查找P左兄弟)执行判断,发现存在之后就将这些节点存放在sonxnode[maxprice]数组里面。

现在开始向数组sonxnode[maxprice]中寻找孩子节点,如果发现元素已被存放,然后使用数组下标进行访问。

7、查询成员其他内容:

qita(a4,head);

该函数实现了查询家族成员的功能:

包括查询某个成员的所有子女

查询某个成员这一辈的所有成员

查询某个成员的父亲结点等

具体实现方式是通过输入数字选择不同的查询方式,然后根据查询方式分别进行相应的操作。其中,查询某个成员的所有子女需要先遍历该成员的兄弟结点,将其子节点存入一个数组中,再依次输出子节点的信息;查询某个成员这一辈的所有成员则需要先找到该成员所在的代数,然后遍历该代数的所有成员,输出其信息;查询某个成员的父亲结点则需要调用另一个函数fuqin来实现。

8、家庭成员的删除:

int shanchu(ptr head);

该函数实现了在家谱中删除某一成员的功能,首先通过查找找到该成员的父亲,然后再查找要删除的成员。如果确认删除,就根据该成员在家谱中的位置进行删除操作。如果该成员是父亲的第一个儿子,则直接删除。如果该成员不是父亲的第一个儿子,但有兄弟,则需要找到该成员的前一个兄弟,将其与该成员的后一个兄弟相连。如果该成员是最后一个儿子,则将其前一个兄弟的指针置为NULL。

这个函数的实现较为复杂,需要考虑多种情况,但是通过合理的逻辑设计和指针操作,可以实现高效的删除功能。在家谱管理系统中,删除成员是一项非常重要的功能,可以帮助用户及时更新家谱信息,保证家谱的准确性和完整性

源代码与视频:

链接:https://pan.baidu.com/s/1Ex_6nRxM7pBex3VH1a2kDQ 
提取码:bs3t

麻烦点个关注,谢谢

家谱管理系统的设计与实现.c(含源代码)相关推荐

  1. 职工信息管理系统开发设计报告版(含源代码)

    提示:文章写完后,目录可以自动生成,如何生成可参考右边的帮助文档 需要解答可以私信给我,冲冲冲. 前言 假设如果我们要存储n个职员信息,我们可以定义一个大小为n的顺序表,每个Si元素可以储存一个职工的 ...

  2. mysql存储家庭成员信息_家谱管理系统的设计与实现(MyEclipse,MySQL)

    家谱管理系统的设计与实现(MyEclipse,MySQL)(任务书,开题报告,中期检查表,文献综述,毕业论文16700字,程序代码,MySQL数据库,答辩PPT) 家谱是现代人们怀旧的重要部分,因此, ...

  3. mysql餐饮管理系统设计_酒店餐饮管理系统的设计与实现(MySQL)(含录像)

    酒店餐饮管理系统的设计与实现(MySQL)(含录像)(任务书,开题报告,中期检查表,外文翻译,毕业论文11900字,程序代码,MySQL数据库,答辩PPT,答辩视频录像) 摘 要 随着计算机产业的高速 ...

  4. 基于php酒店仓库管理系统的设计与实现(含word文档毕业设计php和mysql)

    摘要 当下是一个信息技术高速发达的时代,企业掌握计算机管理信息的技术, 以优化管理和节约成本.随着酒店的飞速发展,该酒店的物资也日益剧增,之前一直沿用传统的人工管理模式,仓库物品种类繁多且物品繁杂,在 ...

  5. ADI Blackfin DSP处理器-BF533的开发详解23:SDRAM内存的设计和自检(含源代码)

    硬件准备 ADSP-EDU-BF533:BF533开发板 AD-HP530ICE:ADI DSP仿真器 软件准备 Visual DSP++软件 硬件链接 硬件设计原理图 功能介绍 ADSP-EDU-B ...

  6. 【基于SSM+MySQL+Jsp的高校学生成绩信息管理系统的设计与实现 ---(效果+源代码+数据库+获取 ~ ~】

    快速阅读目录 写在前面: (一)效果展示 (1)数据库表一览 (2)部分运行截图 (二)代码展示 (三)说明 写在前面: tips:这是一个基于SSM+MySQL+Jsp等技术的高校学生成绩信息管理系 ...

  7. jsp简介mysql_个人知识管理系统的设计与实现(JSP,MySQL)(含录像)

    个人知识管理系统的设计与实现(,MySQL)(含录像)(论文11800字,程序代码,MySQL数据库) 本课题在分析了个人知识管理现状以及对现有的个人知识管理网站进行研究比较的基础上,针对网络交流互助 ...

  8. 理发店管理系统java_美容美发店管理系统的设计与实现(JSP,SQLServer)(含录像)

    美容美发店管理系统的设计与实现(,SQLServer)(含录像)(开题报告,论文12700字,程序代码,SQLServer数据库) 系统功能结构 本系统是根据我国美容业的现状及中小型美容院的发展需要进 ...

  9. jsp mysql电子档案管理系统_学生档案管理系统的设计与实现(JSP,MySQL)(含录像)

    学生档案管理系统的设计与实现(,MySQL)(含录像)(开题报告,毕业论文12100字,程序代码,MySQL数据库,答辩PPT) 本文主要工作内容是梳理学生档案管理系统工作的流程,吸收.借鉴先进的指导 ...

最新文章

  1. TCP/IP反码求和校验
  2. 数据结构(严蔚敏)之六——链式队列c语言实现
  3. 使用MATLAB GUI创建图形用户界面GUI
  4. 蔚来否认关闭硅谷办公室 近期也没有回科创板的计划
  5. 一本程序员职场的百科全书
  6. 20220626-JAVA高德地图天气API调用总结
  7. 微型计算机控制技术应用,微型计算机控制技术的发展及应用123.doc
  8. 以机房B级建设标准满足等保2.0三级要求 | 混合云基础设施
  9. 彼得林奇+《称雄华尔街》
  10. windows7台式计算机网线连接,win7如何用一根网线连接两台电脑_一根网线怎样连接两台Win7电脑传输文件...
  11. 捍卫者usb管理控制系统_捍卫效用优先CSS
  12. java:多线程的 共享资源冲突问题
  13. kali linux 获取ip_Kali Linux常用服务配置教程获取IP地址
  14. 五、MUX-VLAN QinQ技术
  15. 钢笔朝花夕拾录————一位钢笔玩家的入坑至出坑心路历程
  16. Java遍历Map效率对比
  17. 倒计时工具类:PYContDownManager
  18. matlab巴克码发生器,2018年移动通信课程设计题目.doc
  19. VR普及成视频主流,TSINGSEE青犀视频云服务将从EasyPlayer.js播放器支持VR播放启动VR研发
  20. 数据库连接池到底应该设多大?这次直接从100ms优化到3ms!

热门文章

  1. css-点击按钮实现水滴动画
  2. 2 创建菜单和游戏界面
  3. linux中的网络端口
  4. geth共识替换方法
  5. 用C语言实现“模拟用户登录情景”、“猜数字小游戏”
  6. Vue双向绑定原理代码实现
  7. CAD快速进入到手机及地图叠加(导入外业精灵、导入图新地球、导入GlobalMapper、CAD转tif、CAD转mbt、CAD转KML)
  8. 马云都说不要周报了,那互联网公司是否需要执行严格的考勤制度?
  9. 写一个关键词检索全网信息的搜索引擎web
  10. vba odbc 3704 mysql_oracle - VBA / ADODB运行时错误:3704 - 堆栈内存溢出