鱼C论坛

 找回密码
 立即注册
查看: 6686|回复: 3

[已解决]数据结构程序设计之家谱管理系统

[复制链接]
发表于 2015-12-21 14:35:01 From FishC Mobile | 显示全部楼层 |阅读模式
20鱼币
求一个关于家谱管理系统的代码,要求对家谱管理进行简单的模拟。以实现查看祖先和子孙个人信息,插入家族成员,删除家族成员等功能。。。。。拜托各位大神了,帮忙写一下代码。。。
最佳答案
2015-12-21 14:35:02
#include "iostream"
#include "string"
using namespace std;

/*******************************************************************************
        树的节点类
*******************************************************************************/
class Node
{
        friend class Person;
public:
        Node()
        {
                name = '?';
                lchild = NULL;
                rchild = NULL;
        }

private:
        string name;
        Node *lchild;
        Node *rchild;
};

/*******************************************************************************
        家谱成员类
*******************************************************************************/
class Person
{
public:
        void Update(Person &L);                                                                        //家谱成员改名
        void Delete(Person &L);                                                                        //删除部分家庭成员
        void Insert(Person &L);                                                                        //添加单个家庭成员
        void Print(Node *p);                                                                        //显示部分家庭成员
        Node * Lookup(Node *p, string name);                                        //查找某人
        void Add(Person &L);                                                                        //添加部分家庭成员
        void Creat(Person &L);                                                                        //创建家谱
        Person()
        {
                root = NULL;
        }

private:
        Node *root;
};

/*******************************************************************************
        创建家谱
*******************************************************************************/
void Person::Creat(Person &L)
{
        cout << "请输入祖先的姓名:";
        string rootname;
        cin >> rootname;
        Node *p = new Node;
        p->name = rootname;
        L.root = p;
        cout << "此家谱的祖先是:" << p->name << '\n';
}

/*******************************************************************************
        添加部分家庭成员
*******************************************************************************/
void Person::Add(Person &L)
{
        cout << "请输入要建立家庭的人的姓名:";
        string rootname;
        cin >> rootname;
        Node *s = Person::Lookup(L.root, rootname);
        if (s) {
                Node *r = s;
                cout << "请输入" << s->name << "的儿女人数:";
                int n;
                cin >> n;
                int m = n;
                cout << "请依次输入" << s->name << "的儿女的姓名:";
                while (m) {
                        Node *q = new Node;
                        string name;
                        cin >> name;
                        q->name = name;
                        if (m == n) {
                                s->lchild = q;
                                s = s->lchild;
                        }
                        else {
                                s->rchild = q;
                                s = s->rchild;
                        }
                        m --;
                }
                Person::Print(r);
        }
        else {
                cout << "查无此人,请重新输入!" << '\n';
                Person::Add(L);
        }
}

/*******************************************************************************
        查找某人
*******************************************************************************/
Node * Person::Lookup(Node *p, string name)
{
        Node *t = NULL;
        Node *s[100];
        int top = 0;
        while (p || top > 0) {
                while (p) {
                        if (p->name == name) {
                                t = p;
                        }
                        s[++ top] = p;
                        p = p->lchild;
                }
                p = s[top --];
                p = p->rchild;
        }
        return t;
}

/*******************************************************************************
        显示部分家庭成员
*******************************************************************************/
void Person::Print(Node *p)
{
        cout << p->name << "的第一代子孙是:" << p->lchild->name << '\t';
        p = p->lchild;
        while (p->rchild) {
                cout << p->rchild->name << '\t';
                p = p->rchild;
        }
        cout << '\n';
}

/*******************************************************************************
        添加单个家庭成员
*******************************************************************************/
void Person::Insert(Person &L)
{
        cout << "请输入要添加儿子(或女儿)的人的姓名:";
        string rootname;
        cin >> rootname;
        Node *s = Person::Lookup(L.root, rootname);
        if (s) {
                Node *r = s;
                cout << "请输入" << s->name << "新添加的儿子(或女儿)的姓名:" ;
                Node *p = new Node;
                string name;
                cin >> name;
                p->name = name;
                if (!s->lchild) {
                        s->lchild = p;
                }
                else {
                        s = s->lchild;
                        while (s->rchild) {
                                s = s->rchild;
                        }
                        s->rchild = p;
                }
                Person::Print(r);
        }
        else {
                cout << "查无此人,请重新输入!" << '\n';
                Person::Insert(L);
        }
}

/*******************************************************************************
        删除部分家庭成员
*******************************************************************************/
void Person::Delete(Person &L)
{
        cout << "请输入要解散家庭的人的姓名:";
        string rootname;
        cin >> rootname;
        Node *s = Person::Lookup(L.root, rootname);
        if (s) {
                if (s->lchild) {
                        cout << "要解散家庭的人是:" << s->name << '\n';
                        Person::Print(s);
                        s->lchild = NULL;
                }
                else {
                        cout << s->name << "尚未有家庭!";
                }
        }
        else {
                cout << "查无此人,请重新输入!" << '\n';
                Person::Delete(L);
        }
}

/*******************************************************************************
        家谱成员改名
*******************************************************************************/
void Person::Update(Person &L)
{
        cout << "请输入要更改姓名的人的目前姓名:";
        string rootname;
        cin >> rootname;
        Node *s = Person::Lookup(L.root, rootname);
        if (s) {
                cout << "请输入更改后的姓名:";
                string name;
                cin >> name;
                s->name = name;
                cout << rootname << "已更名为" << s->name << '\n';
        }
        else {
                cout << "查无此人,请重新输入!" << '\n';
                Person::Update(L);
        }
}

/*******************************************************************************
        主函数
*******************************************************************************/
void main()
{
        cout<<"\n**              家谱管理系统                     **"<<endl;
    cout<<"==================================================="<<endl;
        cout<<"**           请选择要执行的操作 :               **"<<endl;
    cout<<"**              A --- 完善家谱                   **"<<endl;
    cout<<"**              B --- 添加家庭成员               **"<<endl;
    cout<<"**              C --- 解散局部家庭               **"<<endl;
        cout<<"**              D --- 更改家庭成员姓名           **"<<endl;
    cout<<"**              E --- 退出程序                   **"<<endl;
    cout<<"==================================================="<<endl;
       
        cout << "首先建立一个家谱!" << '\n';
        Person L;
        L.Creat(L);

        char ch;       
        while(ch!='E')
        {
                cout << "\n请选择要执行的操作:";
                cin >> ch;
                switch(ch) {               
                case 'A':
                        {
                                L.Add(L);
                                break;
                        }
                case 'B':
                        {
                                L.Insert(L);
                                break;
                        }
                case 'C':
                        {
                                L.Delete(L);
                                break;
                        }
                case 'D':
                        {
                                L.Update(L);
                                break;
                        }
                case 'E':
                        break;
                default:
                        cout << "请输入正确的操作!" << '\n';
                }
        }
}

最佳答案

查看完整内容

#include "iostream" #include "string" using namespace std; /******************************************************************************* 树的节点类 *******************************************************************************/ class Node { friend class Person; public: Node() { name = '?'; lchild = NULL; rchild = NULL; } private: string name; Node *lchild; ...
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2015-12-21 14:35:02 | 显示全部楼层    本楼为最佳答案   
#include "iostream"
#include "string"
using namespace std;

/*******************************************************************************
        树的节点类
*******************************************************************************/
class Node
{
        friend class Person;
public:
        Node()
        {
                name = '?';
                lchild = NULL;
                rchild = NULL;
        }

private:
        string name;
        Node *lchild;
        Node *rchild;
};

/*******************************************************************************
        家谱成员类
*******************************************************************************/
class Person
{
public:
        void Update(Person &L);                                                                        //家谱成员改名
        void Delete(Person &L);                                                                        //删除部分家庭成员
        void Insert(Person &L);                                                                        //添加单个家庭成员
        void Print(Node *p);                                                                        //显示部分家庭成员
        Node * Lookup(Node *p, string name);                                        //查找某人
        void Add(Person &L);                                                                        //添加部分家庭成员
        void Creat(Person &L);                                                                        //创建家谱
        Person()
        {
                root = NULL;
        }

private:
        Node *root;
};

/*******************************************************************************
        创建家谱
*******************************************************************************/
void Person::Creat(Person &L)
{
        cout << "请输入祖先的姓名:";
        string rootname;
        cin >> rootname;
        Node *p = new Node;
        p->name = rootname;
        L.root = p;
        cout << "此家谱的祖先是:" << p->name << '\n';
}

/*******************************************************************************
        添加部分家庭成员
*******************************************************************************/
void Person::Add(Person &L)
{
        cout << "请输入要建立家庭的人的姓名:";
        string rootname;
        cin >> rootname;
        Node *s = Person::Lookup(L.root, rootname);
        if (s) {
                Node *r = s;
                cout << "请输入" << s->name << "的儿女人数:";
                int n;
                cin >> n;
                int m = n;
                cout << "请依次输入" << s->name << "的儿女的姓名:";
                while (m) {
                        Node *q = new Node;
                        string name;
                        cin >> name;
                        q->name = name;
                        if (m == n) {
                                s->lchild = q;
                                s = s->lchild;
                        }
                        else {
                                s->rchild = q;
                                s = s->rchild;
                        }
                        m --;
                }
                Person::Print(r);
        }
        else {
                cout << "查无此人,请重新输入!" << '\n';
                Person::Add(L);
        }
}

/*******************************************************************************
        查找某人
*******************************************************************************/
Node * Person::Lookup(Node *p, string name)
{
        Node *t = NULL;
        Node *s[100];
        int top = 0;
        while (p || top > 0) {
                while (p) {
                        if (p->name == name) {
                                t = p;
                        }
                        s[++ top] = p;
                        p = p->lchild;
                }
                p = s[top --];
                p = p->rchild;
        }
        return t;
}

/*******************************************************************************
        显示部分家庭成员
*******************************************************************************/
void Person::Print(Node *p)
{
        cout << p->name << "的第一代子孙是:" << p->lchild->name << '\t';
        p = p->lchild;
        while (p->rchild) {
                cout << p->rchild->name << '\t';
                p = p->rchild;
        }
        cout << '\n';
}

/*******************************************************************************
        添加单个家庭成员
*******************************************************************************/
void Person::Insert(Person &L)
{
        cout << "请输入要添加儿子(或女儿)的人的姓名:";
        string rootname;
        cin >> rootname;
        Node *s = Person::Lookup(L.root, rootname);
        if (s) {
                Node *r = s;
                cout << "请输入" << s->name << "新添加的儿子(或女儿)的姓名:" ;
                Node *p = new Node;
                string name;
                cin >> name;
                p->name = name;
                if (!s->lchild) {
                        s->lchild = p;
                }
                else {
                        s = s->lchild;
                        while (s->rchild) {
                                s = s->rchild;
                        }
                        s->rchild = p;
                }
                Person::Print(r);
        }
        else {
                cout << "查无此人,请重新输入!" << '\n';
                Person::Insert(L);
        }
}

/*******************************************************************************
        删除部分家庭成员
*******************************************************************************/
void Person::Delete(Person &L)
{
        cout << "请输入要解散家庭的人的姓名:";
        string rootname;
        cin >> rootname;
        Node *s = Person::Lookup(L.root, rootname);
        if (s) {
                if (s->lchild) {
                        cout << "要解散家庭的人是:" << s->name << '\n';
                        Person::Print(s);
                        s->lchild = NULL;
                }
                else {
                        cout << s->name << "尚未有家庭!";
                }
        }
        else {
                cout << "查无此人,请重新输入!" << '\n';
                Person::Delete(L);
        }
}

/*******************************************************************************
        家谱成员改名
*******************************************************************************/
void Person::Update(Person &L)
{
        cout << "请输入要更改姓名的人的目前姓名:";
        string rootname;
        cin >> rootname;
        Node *s = Person::Lookup(L.root, rootname);
        if (s) {
                cout << "请输入更改后的姓名:";
                string name;
                cin >> name;
                s->name = name;
                cout << rootname << "已更名为" << s->name << '\n';
        }
        else {
                cout << "查无此人,请重新输入!" << '\n';
                Person::Update(L);
        }
}

/*******************************************************************************
        主函数
*******************************************************************************/
void main()
{
        cout<<"\n**              家谱管理系统                     **"<<endl;
    cout<<"==================================================="<<endl;
        cout<<"**           请选择要执行的操作 :               **"<<endl;
    cout<<"**              A --- 完善家谱                   **"<<endl;
    cout<<"**              B --- 添加家庭成员               **"<<endl;
    cout<<"**              C --- 解散局部家庭               **"<<endl;
        cout<<"**              D --- 更改家庭成员姓名           **"<<endl;
    cout<<"**              E --- 退出程序                   **"<<endl;
    cout<<"==================================================="<<endl;
       
        cout << "首先建立一个家谱!" << '\n';
        Person L;
        L.Creat(L);

        char ch;       
        while(ch!='E')
        {
                cout << "\n请选择要执行的操作:";
                cin >> ch;
                switch(ch) {               
                case 'A':
                        {
                                L.Add(L);
                                break;
                        }
                case 'B':
                        {
                                L.Insert(L);
                                break;
                        }
                case 'C':
                        {
                                L.Delete(L);
                                break;
                        }
                case 'D':
                        {
                                L.Update(L);
                                break;
                        }
                case 'E':
                        break;
                default:
                        cout << "请输入正确的操作!" << '\n';
                }
        }
}
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

头像被屏蔽
发表于 2015-12-23 20:24:21 | 显示全部楼层
提示: 作者被禁止或删除 内容自动屏蔽
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2015-12-25 16:06:07 | 显示全部楼层
这个就是  你看一下
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

小黑屋|手机版|Archiver|鱼C工作室 ( 粤ICP备18085999号-1 | 粤公网安备 44051102000585号)

GMT+8, 2024-11-22 20:36

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

快速回复 返回顶部 返回列表