首页 > 编程语言 >C++家谱管理系统[2023-06-18]

C++家谱管理系统[2023-06-18]

时间:2023-06-18 16:56:39浏览次数:64  
标签:02 06 管理系统 18 南昌 已婚 家谱 C++ 实验报告

C++家谱管理系统[2023-06-18]

小组项目二

实验题目:家谱管理系统

实验目的:
1、掌握树以及二叉树的定义;
2、掌握树以及二叉树的基本操作,如建立、查找、插入和删除等。
实验要求:小组合作方式,共同讨论完成该任务。

实验内容:
家谱管理系统是查询家谱信息必不可少的一部分,利用家谱管理系统可以清楚的查询到家族成员的详细信息。

输入文件以存放最初家谱中各成员的信息,成员的信息中均应包含以下内容:假设姓名中没有重名
层号、姓名、性别、出生日期、婚否、配偶姓名(若已婚)、家庭地址、是否健在、死亡日期(若其已死亡),也可附加其它信息、但不是必需的。
具有如下功能:

[1]从family.txt文件读取信息,并创建家谱树
[2]对家谱信息进行后序遍历(对应二叉树的中序),并输出
[3]保存家谱信息到文件(按先序遍历顺序输出)
[4]以凹入表示法显示家谱信息;每一代空一格
[5]显示第n 代所有人的信息
[6]按照姓名查询,输出成员信息(包括其本人、父母、孩子的信息)
[7]输入出生日期查询成员名单
[8]为某成员添加孩子                                          
[9]根据姓名查找,修改某成员信息                            
[10]按出生日期对家谱中所有人排序
[11]根据姓名查找,删除成员

[其他]输入值若小于1或者大于11,结束程序

备注:系统需要包含但不仅限于以上功能。

实验提示:

初始家庭成员信息存放在family.txt中,你也可以修改数据。

数据样例:

15
层号  姓名  性别  出生日期  婚否  配偶姓名(若已婚,否则无该数据)  家庭地址  是否健在  死亡日期
1 陈雪见  男 1926.11.21 已婚  李美丽  江西南昌  否 2016.07.02
2 陈敏瑜  女 1953.04.26 已婚  江怀国  江西南昌  是
3 江浩东  男 1977.08.02 已婚  田晶晶  江西南昌  是
4 江天宇  男 2008.07.26 未婚  江西南昌  是
3 江浩南  男 1979.08.26 已婚  高晓云  江西南昌  是
4 江天怡  女 2010.08.26 未婚  江西南昌  是
3 江浩北  男 1981.06.02 已婚  黄志丽  江西南昌  是
4 江天豪  男 2010.03.02 未婚  江西南昌  是
2 陈敏杰  男 1956.09.01 已婚  曾钰  江西南昌  是
3 陈贝贝  女 1983.04.26 已婚  薛庚庆  江西南昌  是
4 薛加真  男 2009.10.1 未婚  江西南昌  是
4 薛惊云  男 2011.08.26 未婚  江西南昌  是
3 薛加美  女 1988.02.04 已婚  曹志高  北京  是   
4 曹霄涵  男 2015.08.26 未婚  北京  是
4 曹雪涵  女 2018.07.08 未婚  北京  是

家谱文本文件中,每一行包含一个人的名字。第一行是家族人数,第二行是表头信息,第三行之后是家族成员。家谱仅包含最早祖先的后代,而他们的丈夫或妻子出现在家谱的配偶信息中。每个人的信息第一列是层号信息,数据以先序遍历的顺序给出 。以上述家谱文本文件为例,“陈雪见”是这个家族最早的祖先;他有两个子女“陈敏瑜”和“陈敏杰”;“陈敏瑜”有三个子女“江浩东”、“江浩南”和“江浩北”;“江浩东”有只有一个子女“江天宇”。

#define MaxPerson 100
typedef struct datainfo {
 int level;
 char name[50];//姓名
 char sex[3];//性别
 char birthday[11];//生日 2008.09.02
 bool marriage;//婚否(true表示结婚,false表示没结婚)
 char partner[50];//伴侣,如果已婚
 char address[100];//住址
 bool live;//是否健在(true表示活着,false表示过世)
 char death_date[11];//死亡日期(如果其已经死亡) 1998.07.02
} familyInfoNode,*FamilyInfo;

//将树结构转换成二叉树来处理
typedef struct biTreeNode {
 familyInfo data;
 struct biTreeNode *leftChild,*rightChild,*parent;
} familyTreeNode,*FamilyTree;

实验要求:
(1) 程序要添加适当的注释,程序的书写要采用缩进格式。
(2) 程序要具在一定的健壮性,即当输入数据非法时,程序也能适当地做出反应,如插入删除时指定的位置不对等等。
(3) 程序要做到界面友好,在程序运行时用户可以根据相应的提示信息进行操作。
(4) 根据实验报告模板详细书写实验报告,在实验报告中给出根据姓名进行查找的算法和插入算法的流程图或者伪代码。
(5) 上传源程序和实验报告小组作业中。实验报告命名为:第小组-小组实验报告03+家族管理系统.doc 或者小组实验报告03+家族管理系统.docx。源程序压缩为一个文件(如果定义了头文件则一起压缩),按以下方式命名:第小组-实验报告02+家族管理系统.rar或者  第小组-实验报告02+家族管理系统.zip
(6)录制5分钟左右的视频,对项目进行介绍,需对项目实现功能进行演示,同时上传到学习通的小组作业中。

源码

https://pan.baidu.com/s/1J--MYtUyPilpJKTD15-SgA?pwd=1111

标签:02,06,管理系统,18,南昌,已婚,家谱,C++,实验报告
From: https://www.cnblogs.com/codewriter/p/17489323.html

相关文章

  • 2023.6.18 11.数据库主从复制
    11.数据库主从复制1.MySQL数据库传统复制2.MySQL数据库Gtid复制3.MySQL数据库多源复制4.MysQL数据库读写分离5.MySQL数据库架构演变Mysql的主从架构模式,是很多企业⼴泛使⽤,并且是⼴为熟知的⼀种架构模式,这是DBA所应该熟练掌握的技能。1.mysql主从复制主要⽤途a.⽤于......
  • 【详解C++中的引用】
    @TOC一、什么是引用引用就是给一个变量取别名。注意:这个引用不会新开辟一块空间,而是和原来的变量公用一块空间。举个例子:李逵,在家称为"铁牛",江湖上人称"黑旋风"。二、引用规则引用规则:引用实体类型+&+引用别名=引用实体。比如下面:intmain(){ inta=10; //引用 int&ba=a......
  • 2023年的618,我决定入坑博客园
    从大学第一次从网上找技术贴起,便一直有一个写博客的想法,但苦于学业繁忙(打游戏时间都不够),且自己太菜(这才是真实原因),一直没能真正落地。大学毕业后,由于学习和工作需要时常翻起博客园里众多大佬的技术分享贴,收获满满,因此也想加入其中。即使难免会产出垃圾,或成为知识的搬运工。但......
  • 系统架构设计师笔记第18期:NoSQL数据库
    NoSQL数据库通常指非关系型数据库,是一种基于数据键值对存储、高度分布式、支持动态查询的数据管理系统。NoSQL数据库的设计目的是为了解决传统关系型数据库无法处理的大型应用程序的数据存储和管理问题。它们通常具有以下特点:灵活性:NoSQL数据库没有固定的表结构和查询语言,允许在......
  • Licensecc-C++ License Manager
    [email protected] Licensecc:aC++softwarelicensemanager。使用Licensecc可以给开发的软件加上保护,限制软件的使用。通过授权控制来限制软件的使用,也可以限制软件的使用时间,及限制软件在指定机器上运行。Licensecc是基于BSD协议开源的软件授权......
  • AtCoder ABC306 DEF
    D-PoisonousFull-Course(DP)题意现在有\(N\)道菜,高桥需要依次享用。第\(i\)道菜有两个属性\((X_i,Y_i)\),其意义是:若\(X_i=0\),则第\(i\)道菜是解毒的,其美味度为\(Y_i\);若\(X_i=1\),则第\(i\)道菜是有毒的,其美味度为\(Y_i\)。当高桥享用一道菜,他的状态变化如下:......
  • C++ STL(algorithm)
    1字符和整数排序#include<iostream>#include<algorithm>usingnamespacestd;voidstl1(){inta[]={-1,9,-34,100,45,2,98,32};intlen=sizeof(a)/sizeof(int);sort(a,a+len);//由小到大排列sort(a,a+len,greater<int>());//由大到小排列}vo......
  • C++ STL(algorithm)
    1字符和整数排序#include<iostream>#include<algorithm>usingnamespacestd;voidstl1(){inta[]={-1,9,-34,100,45,2,98,32};intlen=sizeof(a)/sizeof(int);sort(a,a+len);//由小到大排列sort(a,a+len,greater<int>());//由大到小排列}vo......
  • [pybind11]为c++项目写python API接口
    C++项目的pybind方法有哪些?有什么区别?以下是主要的python绑定cpp的方法:方法年份代表用户适用于CPython的C/C++扩展模块1991标准库PyBind11(推荐用于C++)2015Cython(推荐用于C)2007gevent、kivyHPy2019mypyc2017ctype2003oscryptocffi......
  • CF1840C题解
    题目描述题目传送门\(T\)组数据,每组数据给定\(n\),\(k\),\(q\)和一个长度为\(n\)的数组\(a\),求\(a\)中长度大于等于\(k\)且最大值小于等于\(q\)的序列个数。\(\sum{n}\le2e5\)。题目解析解法一:数据结构解法显然可以利用数据结构维护。考虑ST表预处理出区间最大......