家谱管理系统的设计与实现(附源码)

本文介绍了如何设计和实现一个家谱管理系统,包括数据结构的选择,关键功能如读取文件、添加孩子、删除成员、查找和显示信息等的详细描述,以及相应的程序源码片段。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

目录

1. 题目

2. 系统功能分析

2.1. 系统功能

2.2. 功能详细说明

2.2.1. 读取文件

2.2.2. 添加孩子

2.2.3. 删除名字

2.2.4. 查找

3. 程序源码

4. 运行截图


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;
  
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值