目录
1. 题目
1、问题描述
家谱管理系统是查询家谱信息必不可少的一部分,利用家谱管理系统可以清楚地查询成员的详细信息。成员的信息包括:姓名(假设姓名不重复)、出生年月日、目前状况(健在、身故)。请设计合理的数据结构存储该家谱的信息,要求能够实现以下功能功能。
2、基本功能
该系统应具有以下功能(即可以重复操作):
家谱信息预先设置好,程序启动,从文件中读入家谱信息,自动建立家谱数据结构,使用菜单实现以下功能,每次操作后应该输出当前结果:
(1)插入:给某个人添加一个孩子
(2)删除:删除某个人,如果某人有后代,不允许删除
(3)堂兄弟:根据所在世代的字,可以输出该世代所有人的信息
(4)父子:可以根据姓名查询,并输出该人的父亲和孩子信息
(5)显示:以凹入表的形式显示家谱
(6)退出时,家谱信息保存到文件中
3、测试数据
2. 系统功能分析
2.1. 系统功能
2.2. 功能详细说明
2.2.1. 读取文件
通过循环将家谱信息读入家谱树。
2.2.2. 添加孩子
2.2.3. 删除名字
2.2.4. 查找
3. 程序源码
#include <stdlib.h>
#include<iostream>
#include<fstream>
#pragma warning(disable:4996)
using namespace std;
typedef struct {
char name[50];//姓名
int brithday;//出生
int beifen;//辈分
int die;//是否健在
}StructNode;
typedef struct Node {
StructNode data;
struct Node* lc;//左指针
struct Node* rc;//右指针
}TreeNode;
int num;//总人数
TreeNode* root;//根指针
TreeNode* findLocation(TreeNode* b, char cname[]) //查询位置
{
TreeNode* p;
if (b == NULL) return NULL;
if (strcmp(b->data.name, cname) == 0)
return b;
if (b->lc) {
p = findLocation(b->lc, cname);
if (p)return p;
}
if (b->rc) {
p = findLocation(b->rc, cname);
if (p)return p;
}
return NULL;
}
void searchByChar(TreeNode* node, char letter) {
if (node == NULL) {
return;
}
string name = node->data.name;
if (name.find(letter) != string::npos) {
cout << "Name: " << node->data.name << endl;
cout << "Birthday: " << node->data.brithday << endl;