91av视频/亚洲h视频/操亚洲美女/外国一级黄色毛片 - 国产三级三级三级三级

資源簡介

數據結構課設,簡單家譜管理系統.只給出了源代碼。還有自己創建工程進行運行

資源截圖

代碼片段和文件信息

#include“genealogy.h“

GEnealogy::GEnealogy()
{
T=NULL;//開始為空家譜
}

GEnealogy::~GEnealogy()
{
DestroyGEnealogy();//釋放資源
}

void?GEnealogy::NewGEnealogy()
{
//建立一空家譜,
DestroyGEnealogy();//刪除原有家譜
T=NULL;
}

void?GEnealogy::CreateGEnealogy()
{
DestroyGEnealogy();//刪除原來家譜樹結構
????int?n=0;//初始化數組下標,用來看有幾多個數據
fstream?f(“1.dat“ios::binary|ios::in);//以二進制讀方式打開
? if(!f)
{
? cerr<<“File?can‘t?be?open“<? return;
}
f.seekg(0ios::end);//指針移到文件尾
long?posEnd=f.tellg();//記錄文件尾位置
f.seekg(0ios::beg);//指針移到文件頭
person?ParentT=new?CSNode;
ParentT=NULL;
person?temp[max_char_num];//定義讀取數據的數組
for(int?i=0;i temp[i]=new?CSNode;//初始化一個地址值,且不能為空否則出錯
if(?posEnd?==?f.tellg(?)?)?????????????
{
cout<<“It‘s?a?null?Genealogy“< return;
}
while(?posEnd?!=?f.tellg()?)//從頭到尾讀取二進制數據
{
f.read((char*)&(temp[n]->data)sizeof(Info));
n++;
}
NewGEnealogy();
????T=temp[0];T->firstchild=T->nextsibling=NULL;//將第一個賦給根結點
for(int?j=1;j {
FindByName(TParentTtemp[j]->data.parentname);
if(ParentT)
{
temp[j]->firstchild=temp[j]->nextsibling=NULL;
temp[j]->parent=ParentT;
if(ParentT->firstchild)
{
InsertSibling(ParentT->firstchildtemp[j]);
}
else
ParentT->firstchild=temp[j];
}
}
f.close();//關閉文件流
}

void?DestroyNode(person?&pnode)
{
//刪除一結點
if(pnode)
{
delete?pnode;
pnode=NULL;
}
}


void?GEnealogy::DestroyGEnealogy()
{
//刪除家譜,釋放資源
PostOrderTraverse(TDestroyNode);
}

void?GEnealogy::PostOrderTraverse(person?&Tvoid?(__cdecl?*Visit)(person?&T))
{
//后序遍歷二叉樹,并執行visit函數
if(T)
{
PostOrderTraverse(T->firstchildVisit);
PostOrderTraverse(T->nextsiblingVisit);
(*Visit)(T);
}
}

void?GEnealogy::PreOrderTraverse(fstream?&fperson?&T?void?(__cdecl?*Visit)(fstream?&fperson?&T))
{
//先序遍歷二叉樹,并執行visit函數
if(T)
{
(*Visit)(fT);
PreOrderTraverse(fT->firstchildVisit);
PreOrderTraverse(fT->nextsiblingVisit);
}
}

void?SaveNode(fstream?&f?person?&pnode)
{
//以二進制形式保存一個結點的info信息
if(pnode)
{
f.write?(?(char?*?)&pnode->data?sizeof(Info)?)?;
}
}

void?GEnealogy::SaveGEnealogy()
{
????//保存二叉樹到文件
fstream?f(“1.dat“ios::binary|ios::out);//以二進制寫方式打開文件
? if(!f)
{
? cerr<<“File?can‘t?be?open“<? return;
}
PreOrderTraverse(fTSaveNode);//調用先序遍歷寫二叉樹信息到文件
f.close();//關閉文件
}

person&?GEnealogy::GetRoot()
{
//返回家譜的根結點
return?T;
}


void?GEnealogy::ReadNode(fstream?&fperson?&pnode)
{
//讀取文件的Info信息到pnode中去,供createGenealogy()調用
f.read((char*)&pnode->datasizeof(Info));

}

void?GEnealogy::FindByName(person&?Tperson&?Tnamechar*?name)//search?the?name?in?info?from?root?T
{
//查找姓名=name的人,若在家譜中,用Tname返回,否則Tname為空,Tname初始為空
if(T)
{
if(strcmp(T->data.namename)==0) //用string庫的strcmp()比較兩個字符串,若相等,則找到符合條件的
Tname=T;
else
{

?屬性????????????大小?????日期????時間???名稱
-----------?---------??----------?-----??----
?????文件????????4573??2005-04-02?23:27??genealogy.h
?????文件????????4682??2005-04-02?18:21??main.cpp
?????文件???????23060??2005-04-03?01:17??bigwork.cpp

評論

共有 條評論