家谱系统

家谱系统
家谱系统

《数据结构的课程设计》

报告

题目:家谱管理系统设计与实现班级:1612401

学号:161240113

姓名:张修鸣

指导老师:孙涵

完成日期:2014.1.3

目录

一.需求分析.

二.程序主要功能.

三.程序运行平台.

四.程序类说明.

五.运行分析

六.存在的不足与对策.

七.体验感悟

八.程序源代码.

需求分析

实现具有下列功能的家谱管理系统。

程序主要功能

(1)输入文件以存放最初家谱中各成员的信息,成员的信息中均应包含以下内容:姓名、出生日期、婚否、地址、健在否、死亡日期(若其已死亡),也可附加其它信息、但不是必需的。

(2)实现数据的存盘和读盘。

(3)以图形方式显示家谱。

(4)显示第n 代所有人的信息。

(5)按照姓名查询,输出成员信息(包括其本人、父亲、孩子的信息)。

(6)按照出生日期查询成员名单。

(7)输入两人姓名,确定其关系。

(8)某成员添加孩子。

(9)删除某成员(若其还有后代,则一并删除)。

(10)修改某成员信息。

(11)按出生日期对家谱中所有人排序。

(12)打开一家谱时,提示当天生日的健在成员。

(13)要求建立至少30个成员的数据,以较为直观的方式显示结果,并提供文稿形式以便检查。

(14)界面要求:有合理的提示,每个功能可以设立菜单,根据提示,可以完成相关的功能要求。

(15)存储结构:根据系统功能要求自行设计,但是要求相关数据要存储在数据文件中。测试数据:要求使用1、全部合法数据;2、局部非法数据。进行程序测试,以保证程序的稳定。

程序运行平台

该程序是用VC++6.0制做的,使用Microsoft Visual C++ 6.0运行该程序,具体操作是:打开Microsoft Visual C++ 6.0,菜单栏里点文件→打开工作区→找到“图书管理系统.dsw”这个文件→打开,或者在资源管理器中双击该文件,此时,VC++6.0会自动打开,并载入该系统相关资源,点击Run命令菜单或者或用快捷键Ctrl+F5运行该程序。

程序类说明

函数分析:

void setupinfo(per person[30]) //创建信息

void displayhome(per person[30],int &n2) 显示家谱

void displaylive(per person[30],int &n2) 现今健在的成员

void displayinfo(per person[30],int &n2) //显示代数

void namesearch(per person[30],int &n2) 姓名查询

void birtfdaysearch(per person[30],int &n2)生日查询

void addchild(per person[30],int &n2)添加孩子

void editmember(per person[30],int &n2)修改信息

void clear(per person[30],int &n2)删除成员

void FixRelation(per person[30],int &n2)//输入两人姓名,确定其关系void display(per person[30],int &n1)交互界面

运行分析

显示家谱

姓名查找

生日排序

生日查找

比较关系

存在的不足与对策

由于自身能力有限,所以没有设计提示当天生日的健在成员。

在设计过程中由于设计者的编程功底欠缺,因此学习过程较为艰辛,需要解决的问题也比较多。在以后的学习中,应该循序渐进,不可急于求成,先打好基础,这样才能更好地发展。

体验感悟

在编写程序的过程中,深切的体会到自身能力还有待提高,通过大规模的查询网上资料与相关书籍我学习到了很多以前不知道的编程方法与各种奇妙的函数语句时,提高了自己对程序设计本身的兴趣,更加乐意去学习这方面的新的东西,并在不断地自我挑战中收获着,或知识技能,或信心勇气。希望自己在今后的学习中可以更好的完善自我。

程序源代码

#include

#include

#include

#include

#include

struct per{

int father;

char name[20];

char brith[20];

char marry;

char address[20];

char live;

char dietime[20];

char parent[20];

int generation;

int child[10];

int numberchild;

per(){

for(int i=0;i<20;i++)

name[i]='\0';

for(i=0;i<20;i++)

brith[i]='\0';

for(i=0;i<20;i++)

address[i]='\0';

for(i=0;i<20;i++)

dietime[i]='\0';

for(i=0;i<10;i++)

child[i]=0;

for(i=0;i<20;i++)

parent[i]='\0';

live='\0';

marry='\0';

father=-10;

generation=0;

numberchild=0;

}

};

void setupinfo(per person[30]) //创建信息

{

int i,j,k;

char choose;

choose='y';

fstream fp("person.txt",ios::in|ios::out|ios::binary|ios::app);

i=0;

while(toupper(choose)=='Y')

{

cout<<" 姓名: ";

cin.getline(person[i].name,20);

cout<<" 生日(日期样式为1999.01.02) : ";

cin.getline(person[i].brith,20);

cout<<" 婚否y/n :";

cin>>person[i].marry;

while(toupper(person[i].marry)!='Y'&&toupper(person[i].marry)!='N')

{

cout<<" 你输入错误,请你重新输入!!"<

cout<<" 婚否y/n :";

cin>>person[i].marry;

}

cin.ignore();

cout<<" 地址: ";

cin.getline(person[i].address,20);

cout<<" 是否健在y/n :";

cin>>person[i].live; //是否死亡

while(toupper(person[i].live)!='Y'&&toupper(person[i].live)!='N')

{

cout<<" 你输入错误,请你重新输入!!"<

cout<<" 婚否y/n :";

cin>>person[i].live;

}

cin.ignore();

if(toupper(person[i].live)=='N')

{

cout<<" 死亡日期(日期样式为1999.01.02) :";

cin.getline(person[i].dietime,20);// 输入死亡日期

}

cout<<" 属于第几代: ";

cin>>person[i].generation;

cin.ignore();

if(person[i].generation!=1) //不是第一代

{

cout<<" 他的父亲: ";

cin.getline(person[i].parent,20);

}

cout<

cout<<"请问是否继续添加y/n"<

cin>>choose;

cin.ignore();

i++;

}

for(j=0;j

{

if(person[j].generation==1)

person[j].father=-1;

}

for(j=0;j

{

for(k=0;k

{

if(strcmp(person[j].parent,person[k].name)==0) //比较2个字符串是否相同,实质是找某个人的父亲

person[j].father=k;

}

}

for(j=0;j

{

for(k=0;k

{

if(strcmp(person[j].parent,person[k].name)==0)

{

person[k].child[person[k].numberchild]=j;

person[k].numberchild++; //找某个人的孩子

}

}

}

for(j=0;j

fp.write((char*)(person+j),sizeof(*person));

fp.close(); //关闭文件夹

cout<

}

void displayhome(per person[30],int &n2) //调用函数的参数传递的是一个参数地址{

int i,j,max;

char again;

cout<

if(n2==1)max=1;

else

for(i=0;i

{

max=person[i].generation;

for(j=i+1;j

{

if(person[i].generation

max=person[j].generation; //找出最大的代数

}

}

for(i=1;i<=max;i++)

{

cout<<" 第"<

for(j=0;j

{

if(person[j].generation==i)

cout<

}

cout<

}

cout<

cout<<" 你是否想继续查看?请输入y/n!"<

cin>>again;

if(toupper(again)=='Y') //就是判断输入得是否为y或Y

{

cout<

return;

}

if(toupper(again)=='N')

exit(0); //终止程序的执行

}

void displaylive(per person[30],int &n2)

{

int i;

cout<

cout<<"现今健在的成员:";

for(i=1;i<=n2;i++)

{

if(person[i].live!='N'&&person[i].live!='n')

cout<

}

cout<

return;

}

void displayinfo(per person[30],int &n2) //显示代数

{

int i,gen,j=0;

char again;

cout<

cout<<" 请你输入你要查询的代数: ";

cin>>gen;

cout<

for(i=0;i

{

if(person[i].generation!=gen)

j++;

}

if(j==n2) //判断是否找到

cout<<" 你要查的代数还没有!!!"<

for(i=0;i

{

if(person[i].generation==gen)

{

cout<<" 姓名: "<

<<" 出生日期: "<

<<" 婚否: "<

<<" 是否健在: "<

if(person[i].live=='N'||person[i].live=='n')

cout<<" 死亡日期: "<

cout<

}

}

cout<<" 你是否想继续查看?请输入y/n"<

cin>>again;

if(toupper(again)=='Y')

{

cout<

return;

}

if(toupper(again)=='N')

exit(0);

}

void namesearch(per person[30],int &n2)

{

int i,j=0,k;

char again,name[20];

cout<

cout<<" 请你输入你想要查询的人的姓名: ";

cin.getline(name,20);

for(i=0;i

{

if(strcmp(person[i].name,name)!=0)

j++;

}

cout<

if(j==n2)

cout<<" 你要查询的人没有!!!"<

for(i=0;i

{

if(strcmp(person[i].name,name)==0)

{

cout<<" 姓名: "<

<<" 出生日期: "<

<<" 婚否: "<

<<" 是否健在: "<

if(person[i].live=='N'||person[i].live=='n')

cout<<" 死亡日期: "<

cout<

if(person[i].generation==1)

cout<<" 他是这个家的根,没有父亲!!!!"<

else

{

cout<<" 他父亲的信息: "<

cout<<" 姓名: "<

<<" 出生日期: "<

<<" 第几代: "<

<<" 婚否: "<

<<" 地址:"<

<<" 是否健在: "<

if(person[person[i].father].live=='N'||person[person[i].father].live=='n')

cout<<" 死亡日期: "<

cout<

}

if(person[i].numberchild==0)

cout<<" 他没有孩子!!!"<

else

{

cout<<" 他有"<

for(k=0;k

{

cout<<" 姓名: "<

<<" 出生日期: "<

<<" 第几代: "<

<<" 婚否: "<

<<" 地址:"<

<<" 是否健在: "<

if(person[person[i].child[k]].live=='N'||person[person[i].child[k]].live==' n')

cout<<" 死亡日期: "<

cout<

}

}

}

}

cout<<" 你是否想继续查看?请输入y/n"<

cin>>again;

if(toupper(again)=='Y')

{

cout<

return;

}

if(toupper(again)=='N')

exit(0);

}

void birtfdaysearch(per person[30],int &n2)

{

char begbir[20],endbir[20],again;

int i,flag=0;

cout<

cout<<" 请你输入两个时间,格式为1999.01.02!"<

cout<<" 起始时间是: ";

cin.getline(begbir,20);

cout<<" 终止时间是: ";

cin.getline(endbir,20);

cout<

for(i=0;i

{

if(strcmp(person[i].brith,begbir)>=0&&strcmp(person[i].brith,endbir)<= 0)

{

cout<<" 姓名: "<

cout<<" 生日: "<

flag=1;

cout<

}

}

cout<

if(flag==0)

cout<<" 在这段时间内没有人生日!!!"<

cout<<" 你是否想继续查看?请输入y/n"<

cin>>again;

if(toupper(again)=='Y')

{

cout<

return;

}

if(toupper(again)=='N')

exit(0);

}

void addchild(per person[30],int &n2)

{

int i;

char again;

fstream file("person.txt",ios::in|ios::out|ios::binary|ios::app);

cout<

cout<<" 请输入孩子的信息!!!"<

cout<<" 姓名: ";

cin.getline(person[n2].name,20);

cout<<" 生日(日期样式为1999.01.02) : ";

cin.getline(person[n2].brith,20);

cout<<" 婚否y/n :";

cin>>person[n2].marry;

while(toupper(person[n2].marry)!='Y'&&toupper(person[n2].marry)!=' N')

{

cout<<" 你输入错误,请你重新输入!!"<

cout<<" 婚否y/n :";

cin>>person[n2].marry;

}

cin.ignore();

cout<<" 地址: ";

cin.getline(person[n2].address,20);

cout<<" 是否健在y/n :";

cin>>person[n2].live;

while(toupper(person[n2].live)!='Y'&&toupper(person[n2].live)!='N')

{

cout<<" 你输入错误,请你重新输入!!"<

cout<<" 婚否y/n :";

cin>>person[n2].live;

}

cin.ignore();

if(toupper(person[n2].live)=='N')

{

cout<<" 死亡日期(日期样式为1999.01.02) :";

cin.getline(person[n2].dietime,20);

}

cout<<" 属于第几代: ";

cin>>person[n2].generation;

cin.ignore();

if(person[n2].generation!=1)

{

cout<<" 他的父亲: ";

cin.getline(person[n2].parent,20);

}

for(i=0;i

{

if(strcmp(person[n2].parent,person[i].name)==0)

{

person[n2].father=i;

break;

}

}

//if(i==n2){cout<<"输入信息有误!!"<

cout<

for(i=0;i

{

if(strcmp(person[n2].parent,person[i].name)==0)

{

person[n2].father=i;

break;

}

}

file.write((char*)&person[n2],sizeof(person[n2]));

file.close();

file.open("person.txt",ios::in|ios::out|ios::binary);

file.seekp(i*sizeof(per),ios::beg);

person[i].child[person[i].numberchild]=n2;

person[i].numberchild++;

file.write((char*)&person[i],sizeof(per));

file.close();

n2++;

cout<<" 你是否想继续查看?请输入y/n"<

cin>>again;

if(toupper(again)=='Y')

{

cout<

return;

}

if(toupper(again)=='N')

exit(0);

}

void editmember(per person[30],int &n2)

{

int i,flag=0,choice;

char name[20],again;

fstream file("person.txt",ios::in|ios::out|ios::binary);

cout<

cout<<" 请你输入你想修改的成员的名字: ";

cin.getline(name,20);

cout<

for(i=0;i

{

if(strcmp(person[i].name,name)==0)

{

flag=1;

break;

}

}

if(flag==0)

cout<<" 家谱中没有这个人!!"<

if(flag==1)

{

cout<<"\t\t请你选择你要修改的项!!"<

cout<<" 1.姓名"<

cout<<" 2.地址"<

cout<<" 3.婚否"<

cout<<" 4.生日"<

cout<<" 5.是否死亡"<

cout<<" 6.死亡日期"<

cin>>choice;

while

(choice!=1&&choice!=2&&choice!=3&&choice!=4&&choice!=5&&choice!=6)

{

cout<<"you enter wrong!"<

cout<<"please enter again!"<

cin>>choice;

}

cin.ignore(1,'\n');

switch(choice)

{

case 1: cout<

cin.getline(person[i].name,20);

break;

case 2: cout<

cin.getline(person[i].address,20);

break;

case 3: cout<

cin>>person[i].marry;

break;

case 4: cout<

cin.getline(person[i].brith,20);

break;

case 5: cout<

cin>>person[i].live;

break;

case 6: cout<

cin.getline(person[i].dietime,20);

break;

}

for(int j=0;j

file.write((char*)&person[j],sizeof(per));

}

cout<

cout<<" 你是否想继续查看?请输入y/n"<

cin>>again;

if(toupper(again)=='Y')

{

cout<

return;

}

if(toupper(again)=='N')

exit(0);

}

void sortbirthday(per person[30],int &n2)

{

per person1;

int i,j;

char again;

cout<

for(i=0;i

for(j=i+1;j

{

if(strcmp(person[i].brith,person[j].brith)>=0)

{

person1=person[i];

person[i]=person[j];

person[j]=person1;

}

}

for(i=0;i

cout<<" 姓名: "<

cout<

cout<<" 你是否想继续查看?请输入y/n"<

cin>>again;

if(toupper(again)=='Y')

{

cout<

return;

}

if(toupper(again)=='N')

exit(0);

}

void clear(per person[30],int &n2){

fstream fp("person.txt",ios::out);

int k,j,l,h=0,i=n2;

char name[20],again;

cout<<" 请你输入你想删除的成员的名字: ";

cin.getline(name,20);

for(k=0;k

{

if(strcmp(name,person[k].name)==0)

break;

}

if(person[k].father==-1){

fp.write("",0);

}

else{

h=0;

for(l=0;l

if(person[person[k].father].child[l]==k)continue;

person[person[k].father].child[h]=person[person[k].father].child[l];

h++;

}

person[person[k].father].numberchild--;

person[person[k].father].child[h]=NULL;

}

家谱管理系统的源代码

#include #include #include #include struct per{ int data; char name[20]; char brith[20]; char marry; char address[20]; char live; char dietime[20]; char parent[20]; int generation; int child[10]; int numberchild; per(){ for(int i=0;i<20;i++) name[i]='\0'; for(i=0;i<20;i++)

brith[i]='\0'; for(i=0;i<20;i++) address[i]='\0'; for(i=0;i<20;i++) dietime[i]='\0'; for(i=0;i<10;i++) child[i]=0; for(i=0;i<20;i++) parent[i]='\0'; live='\0'; marry='\0'; data=-10; generation=0; numberchild=0; } }; void setupinfo(per person[]); void display(per person[],int&); void displayhome(per person[],int&); void displayinfo(per person[],int&); void namesearch(per person[],int&);

家谱管理实验报告

Project 3 家谱管理

一、题目 用树型结构实现家族成员信息管理,(如建立、删除、查询、统计、打印等) 二、数据结构与算法 1.定义树结点node { string name; node *left; node *right; string sex;//male or female int num;//结点编号 node() { name = ""; left = right = NULL; num = 0; sex = "male"; } }; 2.定义class tree{};实现不同对树的操作 其中,以static int count记录节点总数; 以static int height记录树高度; 以node* root作为头指针; 以node* arr[maxnode]将每个节点的指针记录在数组里。 3.对于该树的操作: a. 创建树: 首先此project中树由男性为根结点。男性的左孩子是其兄弟,右孩子是其第一任妻子,第一任妻子的右孩子是其第二任妻子,每个妻子的左孩子是其与这位妻子的孩子。如此递归生成家谱。 输入时,用0表示左孩子,1表示右孩子,以1010等的字符串输入结点位置来创造结点。创建后用函数cheak来检验创造的树是否正确,具体来说就是避免创建树时出现有结点没有父结点的情况。 b.删除结点:以结点的name成员搜索结点,删除结点及其子树。 c.查询结点:以结点的name成员搜索结点,打印该结点的父母兄弟、妻 子、男孩。 d.统计函数:统计家谱总数。本project中通过#define定义打印屏幕宽 度screen_width为96,最多结点maxnode为32,因此树高度不超过5层,总数count不超过32. (linux下测试,终端宽度可以任意,windows下的话只能是80) e.打印:采用广度优先搜索遍历来打印树。

数据结构家谱管理系统范本

数据结构家谱管理 系统

宁波大红鹰学院 信息工程学院 课 程 设 计 报 告 项目名 家谱查询系统 称: 白钰琦 项目组 长: 徐程凯、徐海域、项鸿伟 项目成 员: 10计科1班 班级名 称: 计算机科学与技术 专业名 称: 完成时间: 12月1日 信息工程学院制 目录 一、案例描述 ............................................................ 错误!未定义书签。 1、总体描述 ....................................................... 错误!未定义书签。 2、模块描述 ....................................................... 错误!未定义书签。

二、设计思路 ............................................................ 错误!未定义书签。 三、程序设计 ............................................................ 错误!未定义书签。 1、数据结构描述................................................ 错误!未定义书签。 2、主函数及其流程图........................................ 错误!未定义书签。 3、源程序 ........................................................... 错误!未定义书签。 四、调试与分析 ........................................................ 错误!未定义书签。 1、主菜单 ........................................................... 错误!未定义书签。 2、显示家谱信息................................................ 错误!未定义书签。 3、显示家谱中第n代人所有信息 .................... 错误!未定义书签。 4、按姓名查找某人并相应输出 ........................ 错误!未定义书签。 5、按出生日期查找家谱成员信息 .................... 错误!未定义书签。 6、为家谱中成员添加孩子信息 ........................ 错误!未定义书签。 7、为家谱中成员添加妻子信息 ........................ 错误!未定义书签。 8、删除家谱中成员及其后代信息 .................... 错误!未定义书签。 9、修改家谱中成员信息.................................... 错误!未定义书签。 10、确定家谱中两个成员关系 .......................... 错误!未定义书签。 11、按出生年月排序家谱 .................................. 错误!未定义书签。 五、设计总结 ............................................................ 错误!未定义书签。 1、完成情况 ....................................................... 错误!未定义书签。 2、心得体会 ....................................................... 错误!未定义书签。

家谱管理系统1(1)

《软件综合设计》 家谱管理系统 院系:计算机科学技术学院二系 班级:计11 – 2班 姓名:刘文秀(15) 合作者:姜雪(05) 、岳奉宜(33) 指导教师:薛曼玲 2013 年 12 月 01 日

《软件综合设计》任务书 一、题目:家谱管理系统 二、设计要求 (1)刘文秀(组长)、姜雪和岳奉宜组成课程设计小组。 (2)小组成员分工协作完成。要求每个成员有自己相对独立的模块,,同时要了解其他组员完成的内容。 (3)查阅相关资料,自学具体课题中涉及到的新知识。 (4)采用结构化、模块化程序设计方法设计,功能要完善,界面美观。 (5)所设计的系统应有菜单、动画和音乐。 (6)按要求写出课程设计报告,并于设计结束后1周内提交。其主要内容包括:封皮、课程设计任务书,指导教师评语与成绩、目录、概述、软件需求分析、总体设计、详细设计、程序的调试与测试、总结与体会、结束语、程序清单(带中文注释)、参考文献等。报告一律用A4纸打印,正文的中文字体为宋体,西文字体用Time New Roma,一律用小四号字,行距采用“固定值”18磅,首行缩进2字符。1级标题中文字体为黑体,西文字体为Time New Roma,采用三号字;段落为居中、段前18磅、段后12磅、行距采用“固定值”18磅,首行缩进:无,段中不分页,与下段同页。仅一级标题上目录。 三、课程设计工作量 由于是设计小组团结协作完成设计任务,一般每人的程序量在400行有效程序行以上,不得抄袭。 四、课程设计工作计划 2013年12月2日,指导教师讲课,学生根据题目准备资料,需求分析; 2013年12月3日,设计小组进行总体方案设计和任务分工; 2013年12月4日~2013年12月10日,每人完成自己承担的程序模块并通过独立编译; 2013年12月11日~12日,将各模块集成为一个完整的系统,并录入足够的数据进行调试运行; 2013年12月13日,验收、开始撰写课程设计报告; 2013年12月18日前,提交课程设计报告和软件。 指导教师签章: 教研室主任签章

数据结构树的实现实验报告

数据结构设计性实验报告 课程名称_____ ____ 题目名称 学生学院 专业班级 学号 学生姓名 指导教师 2010 年 7 月 6 日

抽象数据类型:树的实现 一.需求分析 树形结构是一类重要的非线性数据结构,其中以树和二叉树最为常用,直观来看,树是以分支关系定义的内部结构。树的结构在客观世界广泛存在,如人类社会的族谱和各种社会组织机构都可以用树来形象表示。树在计算机领域中也得广泛应用,如在编译程序中,可用树来表示源程序的语法结构,又如在数据库系统中,树形结构也是信息的重要组织形式之一。 二.实验目的 对某个具体的抽象数据类型,运用课程所学的知识和方法,设计合理的数据结构,并在此基础上实现该抽象数据类型的全部基本操作。通过本设计性实验,检验所学知识和能力,发现学习中存在的问题。进而达到熟练地运用本课程中的基础知识及技术的目的。 三.实验环境 1、硬件:PC机 2、软件:Microsoft Visual C++ 6.0 四.设计说明 本程序采用树的二叉链表(孩子指针-兄弟指针-双亲指针)存储表示,以下是树的结构定义和基本操作: ADT Tree{ 数据对象D:D是具有相同特性的数据元素的集合。 数据关系R: 若D为空集,则称为空树; 若D仅含有一个数据元素,则R为空集,否则R={H},H是如下二元关系: (1) 在D中存在唯一的称为根的数据元素root,它在关系H下无前驱; (2) 若D-{root}≠NULL,则存在D-{root}的一个划分D1,D2,D3, …,Dm(m>0),对于任意j ≠k(1≤j,k≤m)有Dj∩Dk=NULL,且对任意的i(1≤i≤m),唯一存在数据元素xi∈Di有∈H; (3) 对应于D-{root}的划分,H-{,…,}有唯一的一个划分H1,H2,…,Hm(m>0),对任意j≠k(1≤j,k≤m)有Hj∩Hk=NULL,且对任意i(1≤i≤m),Hi是Di 上的二元关系,(Di,{Hi})是一棵符合本定义的树,称为根root的子树。 基本操作P: InitTree(&T); 操作结果:构造空树T。 DestroyTree(&T); 初始条件:树T存在。 操作结果:销毁树T。 CreateTree(&T,definition); 初始条件:definition给出树T的定义。 操作结果:按definition构造树T。 ClearTree(&T);

关于姓氏的研究报告

关于姓氏的研究报告 研究报告的计划: 一?问题的提出 我们班同姓的同学不少.他们常开玩笑说:"我们五百年前是一家!" 有一次,我翻阅《百家姓》发现许多有关姓氏的故事.于是,我们小组的成员开始了这次姓氏之旅? 二.调查方法 1.查阅《百家姓》等记载着古人姓氏的书籍,阅读有关报刊,上网查找浏览,了解本小组成员的姓氏来源和历史上的名人. 2.走访有关部门,了解本小组成员姓氏的人口和分布情况. 3.通过便捷的途径,搜集本小组成员姓氏的名人,了解名人的故事. 三.调查情况和资料整理 信息渠道 涉及的方面 具体内容 书籍报刊 黄姓的来源 公元前648年,楚成王责备黄国不向楚国进贡,黄国国君错误地分析形势,既不理会楚国的责问,又不进行任何防备,结果于当年夏天被楚国灭掉.亡国后的黄国子孙,以国名为姓氏,就是黄氏.

关于黄姓的历史和现状的研究报告 书籍报刊教科书 历史上的黄姓名人 黄歇黄霸黄盖黄巢黄庭坚黄道婆黄宗羲黄遵宪宋代状元黄定 上网 黄姓人口数量 黄姓的人口约为2876万,为全国第八大姓,大约占全国人口的2.2% 爷爷的讲述 黄姓族谱 浙江杭州?武林黄氏宗谱:清光绪间礼耕堂钞本一册藏地:美国浙江余杭?黄氏宗谱四卷:清光绪二十七年(1901)木活字本藏地:浙江余杭县文化管理委员会 关于王姓的历史和现状的研究报告 信息渠道 涉及的方面 具体内容 书籍报刊 王姓的来源

周灵王太子姬晋,因直言进谏,使王上大怒,被废为庶民,迁居到琅琊(今山东省胶南一带),世代繁衍生息.因其本为王族,世人称其"王家", 就延用成姓. 书籍报刊教科书 历史上的王姓名人 王陵王昭君王政君王凤王莽王匡王霸王朗王祥王览王导王充王献 之王羲之 上网 王姓人口数量 根据公安部治安管理局对全国户籍人口的统计分析,王姓目前仍是我国的第一姓,有9288.1万人,占全国人口总数的7.25%?也就是说每13个人中就有一个人姓王,这相当于四川省的总人口,比德国的总人口还咼1000万人. 爷爷的讲述 王姓族谱 王姓家谱文献目录:《东沙王氏支谱?家规》《三槐堂王氏族谱》 《绮山东沙王氏支谱》 关于刘姓的历史和现状的研究报告 信息渠道 涉及的方面 具体内容

数据结构家谱管理系统

//////////////////////////////////////////////////////////// /////////////////// //题目:家谱资料管理 //要求:家谱用于记录某家族历代家族成员的情况与关系。现编制一个家谱资料管理软件, //实现对一个家族所有的资料进行收集整理。支持对家谱的增加,删除,更新,统计等。 //////////////////////////////////////////////////////////// /////////////////// #include #include #include int MATEFLAG=0; typedef struct TreeNode

int Num; //记录这个人拥有几个儿女 char Name[20]; //记录这个人的姓名 char Kind; //标示节点的种类有女G男B struct TreeNode * NextNode[20]; //记录这个人的儿女struct TreeNode * Parent; //记录这个节点的父节点 }TreeNode; void CreatTree(TreeNode *Tree); void OutPutAll(TreeNode *Tree); TreeNode * SearchTree(TreeNode *Tree,char name[],int length); void MainMenue(TreeNode *Tree); void SubMenue1(TreeNode * Tree); void SubMenue2(TreeNode *Tree); void Change(TreeNode * Tree); void AddNew(TreeNode * Tree);

数据结构家谱课程设计报告

家谱管理系统 姓名:田鑫磊 学号:1514020421 (1)功能部分: 本程序共实现了6个功能分别为: 1.读出家谱并显示 2.确定指定成员在家族中的辈份 3.输出指定辈的所有成员 4.在家谱中添加新成员,并追加到文件中 5.输出指定家庭的所有成员 6. 退出本系统 (2)各功能的算法思想: 1.读出家谱并显示 存储结构用栈,按照先显示双亲,然后显示其所有孩子的顺序显示所有的家庭成员。 2.确定指定成员在家族中的辈份 用求成员所在的二叉树中的层数(按层遍历二叉树)来确定,这里采用的是递归算法3.输出指定辈的所有成员 此处定义了一个新的结构体类型(增加存储节点所在的层数),定义如下: struct { BTNode *q; int loc; //存结点所在的层数 }qu[10]; 并用一个队列来比较显示同辈分的所有成员。 4.在家谱中添加新成员,并追加到文件中 首先,输入一个新成员的名字; 然后,输入其双亲; 之后,再添加到整个存储二叉链表中。 然后,再将新的存储结构写回到文件中。 二叉链表的结点类型为:typedef struct node { ElemType data[10]; //存放成员的名字 struct node *child; //其孩子指针 struct node *brother; //其兄弟指针 }BTNode; 5.输出指定家庭的所有成员 首先,设一个栈,并设一个标记位,先置1; 然后,找到输入的要待显示的成员,将标记位置0; 再次,显示其孩子和兄弟,依次下去直到显示完其所有的亲戚。 6.退出本系统 通过一个输入字符q来控制,每完成一个功能,系统提示是否要继续操作:

(完整word版)家谱管理系统

洛 阳 理 工 学 院 课 程 设 计 报 告 课程名称 ___________________________________ 设计题目 ___________________________________ 专 业 ___________________________________ 班 级 ___________________________________ 学 号 ___________________________________ 姓 名 ___________________________________ 完成日期 ___________________________________ 数据结构课程设计 家谱管理系统 计算机科学与技术 B150405 B15080822 宋士龙 2016年12月30日

课程设计任务书 设计题目:家谱管理系统 设计内容与要求: 【问题描述】:实现具有下列功能的家谱管理系统 1). 输入文件以存放最初家谱中各成员的信息,成员的信息中均应包含以下内容:姓名、出生日期、婚否、地址、健在否、死亡日期(若其已死亡),也可附加其它信息、但不是必需的。 2). 实现数据的存盘和读盘。 3). 显示家谱。 4). 按照出生日期查询成员名单。 5). 按照姓名查询,输出成员信息(包括其本人、父亲、孩子的信息)。 6). 修改某成员信息。 【基本要求】: 界面要求:有合理的提示,每个功能可以设立菜单,根据提示,可以完成相关的功能要求。 存储结构:学生自己根据系统功能要求自己设计,但是要求相关数据要存储在数据文件中。 测试数据:要求使用1、全部合法数据;2、局部非法数据。进行程序测试,以保证程序的稳定。 测试数据及测试结果请在上交的资料中写明。 指导教师:_______________ 年月日 课程设计评语 成绩: 指导教师:_______________ 年月日

家谱管理系统(含源代码)

家谱管理系统——C语言(数据结构) 目的和要求:树形结构是一种非常重要的非线性结构,它用于描述数据元素之间的层次关系,人类家谱是树形结构的典型体现,通过此项训练让学生掌握树形结构的知识;使学生重点掌握树与二叉树的转换,二叉树的存储和遍历,和二叉树相关的一些运算;要求完成家谱信息的录入和保存,任意成员的查找及某一成员祖先、子孙、兄弟、堂兄弟的查找。 排答疑和辅导。 完整代码: #include #include #include int MATEFLAG=0; //是否入赘或嫁入这家的,1表示为是,0表示否 typedef struct TreeNode//树节点定义 { int Num; //保存此人儿女个数 char Name[20]; //保存此人姓名 char Kind; //保存此人性别,男M,女F struct TreeNode * NextNode[20]; //保存此人的儿女,NextNode[0]里存放配偶的地址struct TreeNode * Parent; //保存此节点的父节点 }TreeNode; void CreatTree(TreeNode *Tree);//创建树 void OutPutAll(TreeNode *Tree);//输出树 TreeNode * SearchTree(TreeNode *Tree,char name[],int length); void MainMenu(TreeNode *Tree); void SubMenue1(TreeNode * Tree); void SubMenue2(TreeNode *Tree); void Change(TreeNode * Tree); void AddNew(TreeNode * Tree); void OutPutMessage(TreeNode * Tree,char name[],int length); //主函数 void main() { TreeNode *Tree;//产生根节点 Tree=(TreeNode *)malloc(sizeof(TreeNode)); Tree->Parent =NULL; strcpy(Tree->Name,"0"); MainMenu(Tree);//显示主菜单 } //添加新的成员 void AddNew(TreeNode * Tree) { SubMenue2(Tree);//添加新成员界面 } //显示添加家庭信息的界面

家谱管理系统设计报告样本

目录 第一章绪论............................................................... 错误!未定义书签。第二章需求分析........................................................... 错误!未定义书签。 2.1题目...................................................................... 错误!未定义书签。 2.2设计任务.............................................................. 错误!未定义书签。 2.3数据测试.............................................................. 错误!未定义书签。第三章概要设计....................................................... 错误!未定义书签。 3.1 设计思想 ........................................................ 错误!未定义书签。 3.2 实现方法 ........................................................ 错误!未定义书签。第四章详细设计....................................................... 错误!未定义书签。 4.1功能构想.............................................................. 错误!未定义书签。 4.2界面设计.............................................................. 错误!未定义书签。 4.3增加成员.............................................................. 错误!未定义书签。 4.3.1 添加子女 .................................................... 错误!未定义书签。 4.3.2 添加配偶 .................................................... 错误!未定义书签。 4.4修改成员.............................................................. 错误!未定义书签。 4.4.1修改个人信息............................................. 错误!未定义书签。 4.4.2修改父母信息............................................. 错误!未定义书签。 4.4.3修改兄弟姐妹的信息................................. 错误!未定义书签。 4.4.4修改子女的信息......................................... 错误!未定义书签。第五章调试分析....................................................... 错误!未定义书签。

数据结构家谱管理系统报告书

数据结构大作业说明文档 一、题目的选择 这次数据结构的大作业,我的选题是家谱管理系统的设计与实现。由于平时疏于编程——针对我得个人实际——我把主要的目标定位在完成家谱管理系统得基本要求。(基本要求大纲中有,就不浪费版面了) 二、设计的思路 接到这个题目,我的总体设计思路是先为程序搭建好一个结构框架,再跟据时间的宽裕程度和其它的要求逐步增强程序的性能。 关于IO的设计: 考虑到题目要求家谱信息以树形的形式一次读入内存,而个人的各种资料现在虽然条目不多,但随着程序的升级,以后可能变得越来越大。我把树形结构和个人信息记录的文档分为两个文件保存在外存中,一个文件串行化地记录家谱树的结构信息,保存少量个人信息作为识别标志;另一个文件保存完整的个人信息,所有的个人信息以线性记录的方式记录在其中。当程序运行要读入家谱结构时,只读入保存少量记录的文件并建立起树形结构。索引时,以树形中的少量信息为依据在另一个文件中找到全部的各人信息资料。 这样的好处主要有两点: 1. 由于树形结构是串行化记录于外存,一个节点记录多次,信息大量冗余,如果树形节点中保留全部信息,必将造成大量的空间浪费;只保存作为索引的少量信息在树形结构中,节约了空间。 2. 由于结构的精简,在家谱初始化时读入内存需要的时间相应减少,节约了装载时间。 这样做存在的问题: 每次执行修改,添加,删除,查询时都要直接访问外存来取得或写入数据。内外存访问上的巨大时间差的存在,使得进行这些操作相对来说并不显得很高效。 关于树形的结构: 在树形结构的选择上,根据实际中多子女的现象选择一般树,考虑到家谱中成员可能存在的不定成员数问题,抛弃了以数组为基础的一般树方案,决定用链表来实现。 树形结构的外存保存。为了提高效率,树形结构在程序初始化时由外存文件一次读入内存,此后不管插入还是修改,删除都不再对外存的树结构保存文件进行操作,只在内存中处理,程序退出时对外存树结构文件进行一次更新。也就是说,不管在程序运行中中对家谱结构进行多少种,多少次的操作,外存的树结构文件始终只会被程序访问两次。

大数据结构(二叉树)家谱管理系统

数学与计算机学院 课程设计说明书 课程名称: 数据结构与算法课程设计 课程代码: 题目: 二叉树生成家谱 年级/专业/班: 学生姓名: 学号: 开始时间:2015 年12 月09 日 完成时间:2015 年12 月29 日课程设计成绩:

指导教师签名:年月日 目录(小三黑体,居中) 1 需求分析 (8) 1.1任务与分析 (8) 1.2测试数据 (9) 2 概要设计 (9) 2.1 ADT描述 (9) 2.2程序模块结构 (10) 2.3各功能模块 (12) 3 详细设计 (14) 3.1结构体定义 (14) 3.2 初始化 (15) 3.3 插入操作 (18) 3.4 查询操作 (22) 4 调试分析 (25) 5 用户使用说明 (26)

6 测试结果 (26) 结论 (30) 附录 (32) 参考文献 (33)

摘要 随着计算机科学技术、计算机产业的迅速发展,计算机的应用普及也在以惊人的速度发展,计算机应用已经深入到人类社会的各个领域。计算机的应用早已不限于科学计算,而更多地应用在信息处理方面。计算机可以存储的数据对象不再是纯粹的数值,而扩展到了字符、声音、图像、表格等各种各样的信息。对于信息的处理也不再是单纯的计算,而是一些如信息存储、信息检索等非数值的计算。那么,现实世界的各种数据信息怎样才能够存储到计算机的存之中,对存入计算机的数据信息怎样进行科学处理,这涉及计算机科学的信息表示和算法设计问题。为解决现实世界中某个复杂问题,总是希望设计一个高效适用的程序。这就需要解决怎样合理地组织数据、建立合适的数据结构,怎样设计适用的算法,以提高程序执行的时间效率和空间效率。“数据结构”就是在此背景下逐步形成、发展起来的。 在各种高级语言程序设计的基本训练中,解决某一实际问题的步骤一般是:分析实际问题;确定数学模型;编写程序;反复调试程序直至得到正确结果。所谓数学模型一般指具体的数学公式、方程式等,如牛顿迭代法解方程,各种级数的计算等。这属于数值计算的一类问题。而现实生活中,更多的是非数值计算问题,如手机中的通讯录,人们对它的操作主要是查找、增加、删除或者修改记录。再如,人们经常在互联网上查阅各种新闻,或查阅电子地图,人们可以在某城区地图上查找自己所需的街道或店铺,其操作主要是搜索和查询。下面

家谱管理系统.doc

家谱管理系统 。洛阳科技学院课程设计报告数据结构课程设计课程名称_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _家谱管理系统设计主题_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _计算机科学与技术专业_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ b 150405班级_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ b 15080822学校编号_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _宋世龙的姓氏是_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ x XXX,2006年12月30日。完成日期_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ 家谱管理系统设计的内容和要求; [问题描述] 以下内容: 实现了具有以下功能的家谱树管理系统1)。输入一个文件,将每个成员的信息保存在原始家谱中,每个成员的信息应包括以下内容: 姓名、出生日期、婚姻状况、地址、生活状况和死亡日期(如果

家谱管理系统实验报告

《家谱管理系统》课程设计报告 学院:信息科学与工程学院 班级:计算机科学与技术08-4班 制作人:邢尚文 指导教师:陈黎静 山东科技大学 2011年9月1日

需求分析:本系统主要完成对家谱的相关操作和家谱人员信息的管理,包括打开家谱、新加家谱、保存家谱和家谱人员的姓名查找、某代信息查找、信息删除等。 系统的核心是利用对话框的连接和文本处理来存储和修改家谱管理系统的信息联系,其中的每一个动作都可能影响到其他的功能。 本系统实现以下功能: 1). 输入文件以存放最初家谱中各成员的信息。成员的信息中均应包含以下内容: 姓名、辈分、父辈姓名、电话。 2). 实现数据的存盘和读盘。 3). 以图形方式显示家谱。 4). 显示第n 代所有人的信息。 5). 按照姓名查询,输出成员信息 6). 删除某成员。 本系统的作用不是为了代替家谱,而是为了更好的建立家庭之间成员的联系,提供一个查询的平台,里面的族谱及文化介绍可以有效的介绍家族历史,让成员了解家族历史,向外界展示。

E-R图

程序界面与代码: using System; using System.Collections.Generic; using https://www.360docs.net/doc/2d15561815.html,ponentModel; using System.Data; using System.Drawing; using System.Linq; using System.Text; using System.Windows.Forms; namespace WindowsFormsApplication12 { public partial class Form1 : Form { public Form1() { InitializeComponent(); }

家谱管理系统样本

家谱管理系统 一、需求分析 本系统实现以下功能: 1). 输入文件以存放最初家谱中各成员的信息。成员的信息中均应包含以下内容: 姓名、出生日期、婚否、地址、健在否、死亡日期( 若其已死亡) 也 可附加其它信息、但不是必须的。 2). 实现数据的存盘和读盘。 3). 以图形方式显示家谱。 4). 显示第n 代所有人的信息。 5). 按照姓名查询, 输出成员信息( 包括其本人、父亲、孩子的信息) 。 6). 按照出生日期查询成员名单。 7). 输入两人姓名, 确定其关系。 8). 某成员添加孩子。 9). 删除某成员( 若其还有后代, 则一并删除) 。 10).修改某成员信息。 11).按出生日期对家谱中所有人排序。 12).打开一家谱时, 提示当天生日的健在成员。 测试要求: 1).建立至少30个成员的数据, 以较为直观的方式显示结果, 并提供文稿形式以便检查。 2).对界面的要求是: 有合理的提示, 每个功能能够设立菜单, 根据提示, 能够完成相关的功能要求。 二、设计概要 1、抽象数据类型兄弟孩子树的定义如下: ADT CSNode{

数据对象: person是兄弟孩子树中的每一个节点, T是整个树的统一体 数据关系: R1={<person i-1,person i >|<person i-1 ,person i >表示person i-1 和person i 之间有血缘关系} 基本操作: CSNode *CreatTree(fstream &outfile); 初始条件: 已经打开了文本文件PersonInfo.txt 操作结果: 创立一个兄弟孩子树T, 并把从文件中的数据送到树中, 关闭文件。 void CreatParent_step(CSNode *parent); 初始条件: 兄弟孩子树T已经存在 操作结果: 对所有的孩子节点添加指向父亲的指针 void InOrderTraverse(CSNode *T); 初始条件: 兄弟孩子树T已经存在 操作结果: 对T进行中序遍历。 bool Today_Brithday(CSNode *T); 初始条件: 兄弟孩子树T已经存在 操作结果: 根据计算机系统的时间判断几天是否有人过生日, 并显示她们的名字。 bool (int n,CSNode *T,LinkQueue &Q); 初始条件: 兄弟孩子树T已经存在, 队列Q也已经存在 操作结果: 用队列Q返回第N代人的所有信息 void Link_Info(LinkQueue Q); 初始条件: 队列Q中是第N代人的所有信息 操作结果: 显示队列中所有人的信息。 CSNode *DetectMember_Name(CSNode *T,char name[]); 初始条件: 兄弟孩子树T已经存在 操作结果: 根据输入的姓名进行查找, 如找到则返回该节点的指针。

数据结构课程设计之简易家谱 报告

编号:学号:201140410119 课程设计 教学院计算机学院 课程名称数据结构课程设计 题目简易家谱系统 专业计算机科学与技术 班级(1)班 姓名陈建辉 同组人员周海涛,石义沣,明廷柱 指导教师程细才 2013 年 1 月8 日

目录 一概述 (2) 1.课程设计的目的 (2) 2.课程设计的要求 (2) 二总体方案设计 (3) 1.简单家谱系统整体设计思路 (3) 2.简单家谱系统的主要特点及功能 (5) 三详细设计 (7) 1. 查询全部的家谱成员信息 (7) 2.确定指定成员在家族中的辈份 (7) 3.在家谱中添加新成员,并追加到文件中 (9) 四程序的调试与运行结果说明 (12) 1.实验结果截图: (12) 2.调试时遇到的问题 (12) 五课程设计总结 (13) 附录一:程序源代码 (16) 附录二:参考文献 (25)

一概述 1.课程设计的目的 1.理解和掌握该课程中的有关基本概念,程序设计思想和方法。 2.培养综合运用所学知识独立完成课题的能力。 3.培养勇于探索、严谨推理、实事求是、有错必改,用实践来检验理论,全方位考虑问题等科学技术人员应具有的素质。 4.掌握从资料文献、科学实验中获得知识的能力,提高学生从别人经验中找到解决问题的新途径的悟性,初步培养工程意识和创新能力。 2.课程设计的要求 设计要求:输入家族成员情况,建立树结构,统计家族成员人数,能查询家族成员辈份情况。 系统功能: 1. 输入、修改与删除家谱信息功能 2. 查询功能: 1)某家谱成员的所有子孙的集合 2)某家谱成员的所有祖先的集合 3)某家谱成员的所有同辈成员的集合 4)求某家谱成员的所有上一辈成员的集合 5)给出两个家谱成员,确定他们的关系

家谱管理系统 -数据结构大作业

/* 家谱管理系统 任务:实现具有下列功能的家谱管理系统 功能要求: 1). 输入文件以存放最初家谱中各成员的信息,成员的信息中均应包含以下内容: 姓名、出生日期、婚否、地址、健在否、死亡日期(若其已死亡),也可附加其它信息、但不是必需的。 2). 实现数据的存盘和读盘。 3). 以图形方式显示家谱。 4). 显示第n 代所有人的信息。 5). 按照姓名查询,输出成员信息(包括其本人、父亲、孩子的信息)。 6). 按照出生日期查询成员名单。 7). 输入两人姓名,确定其关系。 8). 某成员添加孩子。 9). 删除某成员(若其还有后代,则一并删除)。 10).修改某成员信息。 11).按出生日期对家谱中所有人排序。 12).打开一家谱时,提示当天生日的健在成员。 要求:建立至少30个成员的数据,以较为直观的方式显示结果,并提供文稿形式以便检查。界面要求:有合理的提示,每个功能可以设立菜单,根据提示,可以完成相关的功能要求。存储结构:学生自己根据系统功能要求自己设计,但是要求相关数据要存储在数据文件中。测试数据:要求使用1、全部合法数据;2、局部非法数据。进行程序测试,以保证程序的稳定。 测试数据及测试结果请在上交的资料中写明; */ #include #include #include #include #include"map.h" #define MAXN 100 #define MAXMEM 100 #define Elemtype char ============================== //树 typedef struct BiTNode { int mark;//标记 int level; char name[50];//姓名 char birthday[50];//生日 char address[MAXN];//住址

数据结构家谱课程设计报告

家谱(3-1) 一、题目要求 基本要求: 从文件中读入家庭成员建立家谱,以孩子兄弟表示法存储。基本功能: 家谱管理,如: (1)在家谱中添加新成员,并追加到文件中。 (2)输出指定家庭的所有成员。 (3)确定指定成员在家族中的辈份(第几代)。 等等。 二.概要设计 (1)功能部分: 本程序共实现了6个功能分别为: 1.读出家谱并显示 2.确定指定成员在家族中的辈份 3.输出指定辈的所有成员 4.在家谱中添加新成员,并追加到文件中 5.输出指定家庭的所有成员 6.退出本系统 (2)各功能的算法思想: 1.读出家谱并显示

存储结构用栈,按照先显示双亲,然后显示其所有孩子的顺序显示所有的家庭成员。 2.确定指定成员在家族中的辈份 用求成员所在的二叉树中的层数(按层遍历二叉树)来确定,这里采用的是递归算法 3.输出指定辈的所有成员 此处定义了一个新的结构体类型(增加存储节点所在的层数),定义如下: struct {BTNode *q; intloc;//存结点所在的层数 }qu[10]; 并用一个队列来比较显示同辈分的所有成员。 4.在家谱中添加新成员,并追加到文件中 首先,输入一个新成员的名字; 然后,输入其双亲; 之后,再添加到整个存储二叉链表中。 然后,再将新的存储结构写回到文件中。 二叉链表的结点类型为: typedefstruct node{ElemType data[10];//存放成员的名字 struct node *child;//其孩子指针 struct node *brother;//其兄弟指针

5.输出指定家庭的所有成员 首先,设一个栈,并设一个标记位,先置1; 然后,找到输入的要待显示的成员,将标记位置0; 再次,显示其孩子和兄弟,依次下去直到显示完其所有的亲戚。 6.退出本系统 通过一个输入字符q来控制,每完成一个功能,系统提示是否要继续操作: 当q为“Y”或者“y”时,显示菜单,程序继续执行; 当q为其他字符时,程序执行结束,退出本系统。 三、详细设计: 通过一个do-while语句来控制各个模块的选择和实现。 1.读出家谱并显示 void display(BTNode *b){BTNode *q[10]; //定义一个栈 int front,rear; int k; BTNode *p; p=b;k=0; front=-1;rear=0; q[rear]=p; //头结点先入栈 while(front

相关文档
最新文档