二叉樹實現的簡單家譜管理系統

源代碼連接: http://www.oschina.net/code/snippet_2348884_47615ios

1、題目算法

     用二叉樹的數據結構實現一個簡易實用的族譜。主要有建立,插入,查詢,刪除,修改信息,計算代數,打印,寫入,讀取重要人物信息的功能。數據結構

2、數據結構與算法函數

    數據結構:測試

利用二叉樹的鏈式存儲結構,以及結構體,類,棧,隊列完成。this

族譜表示二叉樹結構如 圖1;spa


族譜二叉樹結構中結點所包含的信息如 表 1 所示.net

表 1 族譜二叉樹結點信息指針

 

結構體分爲:code

1 結點結構體(我的姓名,兄弟結點指針,兒女結點指針,父親結點指針,妻子(們)信息指針,我的信息結構體);結構體分爲:

2 我的信息結構體(父母姓名,性別,狀態(去世 or 健在),處於家譜中第幾代,出生日期,死亡日期,選擇性重要信息指針);

 類分爲

1 日期類 (年,月,日,判斷大小, 計算享年,修改,打印格式) 

     須要用到棧和隊列:

         1 實現遍歷功能;

         2 實現查找功能        

算法:

    一、二叉樹的層次遍歷,利用隊列實現。

二、凹入式目錄打印族譜,利用遞歸,非遞歸兩種實現。

三、查找基於遍歷功能。

四、刪除,修改基於查找功能。

五、文件讀寫


重要頭文件(包含部分重要結構體,所有函數定義)

#include<iostream>
#include<string>
#include<queue>
#include<vector>
#include <algorithm>
#include<time.h>
#include<fstream>
#include "Date.h"
using namespace std;
 
//妻子信息
struct Wife_Information {
   string name;
   bool divorce;
   Wife_Information() {
     name = "";
      divorce = false;
   };
   Wife_Information(string name_) {
       name = name_;
      divorce = false;
   };
};
 
//我的信息
struct Member_Information{
   string Sex; //性別
   bool IsLife;
   vector<Wife_Information> wifves;
   string father_name;
   string mother_name;
   int generation;
   Date birth;
   Date death;
    string VIP_Information; // 若是這我的是個名人或者是對家族及其重要的人,新增信息緩衝區,存入該人平生事蹟 //
 
   Member_Information() {
       Sex = "undefine";
       VIP_Information = "";
       generation = 0;
       IsLife = true;
   };
   //先列基本信息,更多的信息能夠之後再加進去
};
 
struct Tree{
   string name;
   Tree *left;    //兒子或女兒
   Tree *right;   //兄弟
   Tree *father; //父親
   Tree *brother;
   vector<Wife_Information> wifves;  //妻子(們)的信息
   Member_Information  self;   // 本人信息 
    
   Tree() {
       name = "";
       left = right = father = brother = 0;
       self.generation = 0;
   };
 
    Tree(string name_,Member_Information s, Tree* left_=0, Tree* right_=0, Tree* father_=0, Tree* brother_=0) {
       name = name_;
      left = left_;
      right = right_;
      father = father_;
      brother = brother_;
      self = s;
   }; 
};
 
// fundamental operation //
void Create_Tree(Tree* &tr, string name);
Tree* Search(Tree *tr, string name);
int Count_Generation_All(Tree* tr);
 
// Insert //
string Insert_Wife(Tree* &tr, string name, string husband);
string Insert_Children(Tree* &tr, string name, string father);
string Insert_Brother_Or_Sister(Tree* &tr, string name,string brother_sister);
 
// add brief member informations or change informations //
void Change_Information(Tree* tr);
void Change_Name(Tree* &tr, string name, string new_name);
void Change_Wives_Information(Tree* &tr, string name, string wife);
void Change_Sex(Tree* &tr, string name, string sex );
void Change_IsLife(Tree* &tr, string name, bool islife);
void Change_Fathername(Tree* &tr, string name, string father_name);
void Change_Mothername(Tree* &tr, string name, string mother_name);
void Change_Birth(Tree* &tr, string name, string date);
void Change_Festa(Tree* &tr, string name, string date);
void Change_VIP(Tree* &tr, string name);
 
// Delete //
string Divorce(Tree* &tr, string name, string husband);
string Delete_Member(Tree* &tr, string name);
void Delete_SubTree(Tree* &tr);
 
// User Search  (if user find someone and this person is VIP ,ask if there is need to print the VIP's information) //
bool Search_Oneself(Tree* tr, string name);
bool Search_One_Parents(Tree* tr, string name);
bool Search_One_Children(Tree* tr, string name);
bool Search_One_Wife(Tree* tr, string name);
bool Search_One_Brother_And_Sister(Tree* tr, string name);
int Count_Ones_Age(Tree* tr, string name);
 
// Print //
void Print_Information(Tree* tr);
void Print_VIP_Information(Tree* tr);
void Print_All(Tree* tr);
void Print_MainMenu();
void Print_Add_Information_Menu();



一些測試:

相關文章
相關標籤/搜索