资源简介
数据结构课设,简单家谱管理系统.只给出了源代码。还有自己创建工程进行运行
代码片段和文件信息
#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
- 上一篇:PCB识别包含程序截图和原图
- 下一篇:XY数控工作台装配图
相关资源
- 数字时钟数字时钟课程设计
- 汇编语言课设 设计时钟 实现整点报时
- 数据结构 课程设计 宾馆订房系统
- 利用后缀表达式计算中缀表达式的值
- 农夫过河问题 数据结构
- 电话客户服务模拟 数据结构课程设计
- 家庭成员问题数据结构
- 张铭版数据结构与算法代码
- 数据结构课程设计报告基于双向循环
- 数据结构课程设计 数据结构课程设计
- 数据结构课程设计——迷宫问题
- 教学计划编制数据结构课程设计报告
- 数据结构_运动会分数统计
- 数据结构与算法源代码 北大 张铭
- 高频课程设计 二极管双平衡混频器
- 操作系统课设之页面置换
- 数据结构课程设计报告 迷宫游戏
- KMP字符串模式匹配详解及程序
- 数据结构图的邻接矩阵邻接表存储表
- 数据结构课程设计-通讯录(双链表全
- 数据结构课程设计 文章编辑
- 数字逻辑数字时钟原理图
- 六种内部排序算法比较:直接插入排
- 组原课设-加减交替法定点原码一位除
- 职工工资管理系统(数据结构课程设
- 数据结构教程上机实验指导李春葆源
- 数据结构《交通咨询系统》完整代码
- 数据结构课程设计哈夫曼编译码器
- 数据结构文件实现宿舍管理软件设计
- 基于PT100温度传感器课设
评论
共有 条评论